Theme preferences: move colors, add more preview examples

This commit is contained in:
MM20 2023-08-22 18:28:53 +02:00
parent 454aa6d832
commit c81cb4c801
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 178 additions and 43 deletions

View File

@ -5,9 +5,12 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.FlowRowScope import androidx.compose.foundation.layout.FlowRowScope
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.DarkMode import androidx.compose.material.icons.rounded.DarkMode
@ -34,7 +37,7 @@ fun ThemePreferenceCategory(
darkMode: Boolean, darkMode: Boolean,
onDarkModeChanged: (Boolean) -> Unit, onDarkModeChanged: (Boolean) -> Unit,
colorPreferences: @Composable () -> Unit = {}, colorPreferences: @Composable () -> Unit = {},
preview: @Composable FlowRowScope.() -> Unit preview: @Composable RowScope.() -> Unit
) { ) {
Column( Column(
modifier = Modifier.padding(top = 16.dp) modifier = Modifier.padding(top = 16.dp)
@ -80,11 +83,12 @@ fun ThemePreferenceCategory(
) )
) { ) {
FlowRow( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.horizontalScroll(rememberScrollState())
.padding(16.dp), .padding(16.dp),
verticalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically,
) { ) {
preview() preview()
} }

View File

@ -3,20 +3,28 @@ package de.mm20.launcher2.ui.settings.colorscheme
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Edit import androidx.compose.material.icons.rounded.Edit
import androidx.compose.material.icons.rounded.Lock
import androidx.compose.material.icons.rounded.OpenInNew
import androidx.compose.material.icons.rounded.PlayArrow import androidx.compose.material.icons.rounded.PlayArrow
import androidx.compose.material.icons.rounded.Search import androidx.compose.material.icons.rounded.Search
import androidx.compose.material.icons.rounded.StarBorder
import androidx.compose.material.icons.rounded.Tag import androidx.compose.material.icons.rounded.Tag
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ElevatedCard import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.FilledTonalIconButton import androidx.compose.material3.FilledTonalIconButton
import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChip
@ -24,11 +32,13 @@ import androidx.compose.material3.FilterChipDefaults
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedCard import androidx.compose.material3.OutlinedCard
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Snackbar import androidx.compose.material3.Snackbar
import androidx.compose.material3.Surface
import androidx.compose.material3.Switch import androidx.compose.material3.Switch
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
@ -54,6 +64,7 @@ import de.mm20.launcher2.themes.DefaultDarkColorScheme
import de.mm20.launcher2.themes.DefaultLightColorScheme import de.mm20.launcher2.themes.DefaultLightColorScheme
import de.mm20.launcher2.themes.merge import de.mm20.launcher2.themes.merge
import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.Banner
import de.mm20.launcher2.ui.component.ShapedLauncherIcon import de.mm20.launcher2.ui.component.ShapedLauncherIcon
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
import de.mm20.launcher2.ui.locals.LocalDarkTheme import de.mm20.launcher2.ui.locals.LocalDarkTheme
@ -723,31 +734,6 @@ fun ThemeSettingsScreen(themeId: UUID) {
defaultValue = selectedDefaultScheme.surfaceTint, defaultValue = selectedDefaultScheme.surfaceTint,
modifier = Modifier.padding(end = 12.dp), modifier = Modifier.padding(end = 12.dp),
) )
ThemeColorPreference(
title = "On Surface",
value = selectedColorScheme.onSurface,
corePalette = mergedCorePalette,
onValueChange = {
viewModel.updateTheme(
if (previewDarkTheme) {
theme!!.copy(
darkColorScheme = theme!!.darkColorScheme.copy(
onSurface = it
)
)
} else {
theme!!.copy(
lightColorScheme = theme!!.lightColorScheme.copy(
onSurface = it
)
)
}
)
},
defaultValue = selectedDefaultScheme.onSurface,
modifier = Modifier.padding(end = 12.dp),
)
}, },
) { ) {
ElevatedCard( ElevatedCard(
@ -932,6 +918,79 @@ fun ThemeSettingsScreen(themeId: UUID) {
defaultValue = selectedDefaultScheme.surfaceContainerHighest, defaultValue = selectedDefaultScheme.surfaceContainerHighest,
modifier = Modifier.padding(end = 12.dp), modifier = Modifier.padding(end = 12.dp),
) )
ThemeColorPreference(
title = "Surface Variant",
value = selectedColorScheme.surfaceVariant,
corePalette = mergedCorePalette,
onValueChange = {
viewModel.updateTheme(
if (previewDarkTheme) {
theme!!.copy(
darkColorScheme = theme!!.darkColorScheme.copy(
surfaceVariant = it
)
)
} else {
theme!!.copy(
lightColorScheme = theme!!.lightColorScheme.copy(
surfaceVariant = it
)
)
}
)
},
defaultValue = selectedDefaultScheme.surfaceVariant,
modifier = Modifier.padding(end = 12.dp),
)
},
) {
Banner(
modifier = Modifier.padding(end = 16.dp).align(Alignment.CenterVertically).width(240.dp),
text = "Banner",
icon = Icons.Rounded.Lock
)
Switch(
modifier = Modifier
.padding(end = 16.dp)
.align(Alignment.CenterVertically),
checked = false,
onCheckedChange = {}
)
}
}
item {
ThemePreferenceCategory(
title = "Content colors",
previewColorScheme = previewColorScheme,
darkMode = previewDarkTheme,
onDarkModeChanged = { previewDarkTheme = it },
colorPreferences = {
ThemeColorPreference(
title = "On Surface",
value = selectedColorScheme.onSurface,
corePalette = mergedCorePalette,
onValueChange = {
viewModel.updateTheme(
if (previewDarkTheme) {
theme!!.copy(
darkColorScheme = theme!!.darkColorScheme.copy(
onSurface = it
)
)
} else {
theme!!.copy(
lightColorScheme = theme!!.lightColorScheme.copy(
onSurface = it
)
)
}
)
},
defaultValue = selectedDefaultScheme.onSurface,
modifier = Modifier.padding(end = 12.dp),
)
ThemeColorPreference( ThemeColorPreference(
title = "On Surface Variant", title = "On Surface Variant",
value = selectedColorScheme.onSurfaceVariant, value = selectedColorScheme.onSurfaceVariant,
@ -958,7 +1017,74 @@ fun ThemeSettingsScreen(themeId: UUID) {
) )
}, },
) { ) {
ElevatedCard(
modifier = Modifier
.padding(end = 16.dp)
.size(64.dp),
elevation = CardDefaults.elevatedCardElevation(
defaultElevation = 0.dp
)
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Text(
"Text",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurface
)
}
}
ElevatedCard(
modifier = Modifier
.padding(end = 16.dp)
.size(64.dp),
elevation = CardDefaults.elevatedCardElevation(
defaultElevation = 1.dp
)
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Text(
"Text",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurface
)
}
}
IconButton(
onClick = { /*TODO*/ },
modifier = Modifier
.padding(end = 16.dp)
.align(Alignment.CenterVertically),
) {
Icon(Icons.Rounded.StarBorder, null)
}
Surface(
color = MaterialTheme.colorScheme.surface,
shape = MaterialTheme.shapes.extraSmall,
tonalElevation = 3.dp,
shadowElevation = 3.dp,
modifier = Modifier.wrapContentWidth()
) {
Column(
modifier = Modifier
.padding(vertical = 8.dp)
.width(IntrinsicSize.Max),
) {
DropdownMenuItem(
leadingIcon = {
Icon(Icons.Rounded.OpenInNew, null)
},
text = { Text("Menu") },
onClick = { })
}
}
} }
} }
item { item {
@ -1034,7 +1160,8 @@ fun ThemeSettingsScreen(themeId: UUID) {
onClick = {}, onClick = {},
) )
OutlinedButton( OutlinedButton(
modifier = Modifier.padding(end = 16.dp) modifier = Modifier
.padding(end = 16.dp)
.align(Alignment.CenterVertically), .align(Alignment.CenterVertically),
onClick = { }) { onClick = { }) {
Text("Button") Text("Button")
@ -1046,7 +1173,9 @@ fun ThemeSettingsScreen(themeId: UUID) {
.align(Alignment.CenterVertically) .align(Alignment.CenterVertically)
) {} ) {}
VerticalDivider( VerticalDivider(
modifier = Modifier.height(64.dp).padding(end = 16.dp), modifier = Modifier
.height(64.dp)
.padding(end = 16.dp),
) )
} }
} }
@ -1160,7 +1289,7 @@ fun ThemeSettingsScreen(themeId: UUID) {
onValueChange = {}, onValueChange = {},
isError = true, isError = true,
readOnly = true, readOnly = true,
label = {Text("Error")} label = { Text("Error") }
) )
} }
} }
@ -1245,18 +1374,20 @@ fun ThemeSettingsScreen(themeId: UUID) {
) )
}, },
) { ) {
Snackbar( Box(modifier = Modifier.width(240.dp)) {
action = { Snackbar(
TextButton( action = {
colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colorScheme.inversePrimary), TextButton(
onClick = { }, colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colorScheme.inversePrimary),
content = { Text("Action") } onClick = { },
) content = { Text("Action") }
}, )
content = { },
Text("Snackbar") content = {
} Text("Snackbar")
) }
)
}
} }
} }
} }