refactor: 优化颜色模式和主题色版的性能与样式
This commit is contained in:
parent
84c49542c0
commit
a7311bfddf
4 changed files with 47 additions and 52 deletions
|
|
@ -63,12 +63,12 @@ fun SettingsAppearance(
|
||||||
)
|
)
|
||||||
|
|
||||||
DarkModePicker(
|
DarkModePicker(
|
||||||
currentDarkMode = DarkMode.fromId(darkMode),
|
currentDarkMode = { DarkMode.fromId(darkMode) },
|
||||||
onDarkModeChange = { scope.launch { DataStoreManager.setDarkMode(it.id) } }
|
onDarkModeChange = { scope.launch { DataStoreManager.setDarkMode(it.id) } }
|
||||||
)
|
)
|
||||||
|
|
||||||
PalettePicker(
|
PalettePicker(
|
||||||
currentPalette = PaletteStyle.fromId(paletteStyle),
|
currentPalette = { PaletteStyle.fromId(paletteStyle) },
|
||||||
onPaletteChange = { scope.launch { DataStoreManager.setPaletteStyle(it.id) } },
|
onPaletteChange = { scope.launch { DataStoreManager.setPaletteStyle(it.id) } },
|
||||||
isDynamicColor = dynamicColor,
|
isDynamicColor = dynamicColor,
|
||||||
isDarkMode = DarkMode.fromId(darkMode),
|
isDarkMode = DarkMode.fromId(darkMode),
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,11 @@ package cn.super12138.todo.ui.pages.settings.components.appearance.darkmode
|
||||||
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.derivedStateOf
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
|
@ -14,12 +18,15 @@ import cn.super12138.todo.ui.theme.DarkMode
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DarkModePicker(
|
fun DarkModePicker(
|
||||||
currentDarkMode: DarkMode,
|
currentDarkMode: () -> DarkMode,
|
||||||
onDarkModeChange: (darkMode: DarkMode) -> Unit,
|
onDarkModeChange: (darkMode: DarkMode) -> Unit,
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val isInDarkTheme = isSystemInDarkTheme()
|
val isInDarkTheme = isSystemInDarkTheme()
|
||||||
|
|
||||||
|
val darkModeList = remember { DarkMode.entries.toList() }
|
||||||
|
|
||||||
LazyRowSettingsItem(
|
LazyRowSettingsItem(
|
||||||
title = stringResource(R.string.pref_dark_mode),
|
title = stringResource(R.string.pref_dark_mode),
|
||||||
description = stringResource(R.string.pref_dark_mode_desc),
|
description = stringResource(R.string.pref_dark_mode_desc),
|
||||||
|
|
@ -27,37 +34,22 @@ fun DarkModePicker(
|
||||||
fadedEdgeWidth = 8.dp,
|
fadedEdgeWidth = 8.dp,
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
item {
|
items(items = darkModeList, key = { it.id }) {
|
||||||
DarkModeItem(
|
val (contentColor, containerColor) = when (it) {
|
||||||
icon = DarkMode.FollowSystem.icon,
|
DarkMode.FollowSystem -> if (isInDarkTheme) Color.White to Color.Black else Color.Black to Color.White
|
||||||
name = DarkMode.FollowSystem.getDisplayName(context),
|
DarkMode.Light -> Color.Black to Color.White
|
||||||
contentColor = if (isInDarkTheme) Color.White else Color.Black,
|
DarkMode.Dark -> Color.White to Color.Black
|
||||||
containerColor = if (isInDarkTheme) Color.Black else Color.White,
|
}
|
||||||
selected = currentDarkMode == DarkMode.FollowSystem,
|
|
||||||
onSelect = { onDarkModeChange(DarkMode.FollowSystem) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
val isSelected by remember { derivedStateOf { currentDarkMode() == it } }
|
||||||
DarkModeItem(
|
|
||||||
icon = DarkMode.Light.icon,
|
|
||||||
name = DarkMode.Light.getDisplayName(context),
|
|
||||||
contentColor = Color.Black,
|
|
||||||
containerColor = Color.White,
|
|
||||||
selected = currentDarkMode == DarkMode.Light,
|
|
||||||
onSelect = { onDarkModeChange(DarkMode.Light) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
DarkModeItem(
|
DarkModeItem(
|
||||||
icon = DarkMode.Dark.icon,
|
icon = it.icon,
|
||||||
name = DarkMode.Dark.getDisplayName(context),
|
name = it.getDisplayName(context),
|
||||||
contentColor = Color.White,
|
contentColor = contentColor,
|
||||||
containerColor = Color.Black,
|
containerColor = containerColor,
|
||||||
selected = currentDarkMode == DarkMode.Dark,
|
selected = isSelected,
|
||||||
onSelect = { onDarkModeChange(DarkMode.Dark) }
|
onSelect = { onDarkModeChange(it) })
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -108,7 +108,10 @@ fun PaletteItem(
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = paletteStyle.getDisplayName(context),
|
text = paletteStyle.getDisplayName(context),
|
||||||
style = MaterialTheme.typography.bodyMedium
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = if (selected) {
|
||||||
|
MaterialTheme.colorScheme.primary
|
||||||
|
} else MaterialTheme.colorScheme.onSurface
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2,7 +2,10 @@ package cn.super12138.todo.ui.pages.settings.components.appearance.palette
|
||||||
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.derivedStateOf
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
|
|
@ -15,17 +18,14 @@ import cn.super12138.todo.ui.theme.PaletteStyle
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun PalettePicker(
|
fun PalettePicker(
|
||||||
currentPalette: PaletteStyle,
|
currentPalette: () -> PaletteStyle,
|
||||||
onPaletteChange: (paletteStyle: PaletteStyle) -> Unit,
|
onPaletteChange: (paletteStyle: PaletteStyle) -> Unit,
|
||||||
isDynamicColor: Boolean,
|
isDynamicColor: Boolean,
|
||||||
isDarkMode: DarkMode,
|
isDarkMode: DarkMode,
|
||||||
contrastLevel: ContrastLevel,
|
contrastLevel: ContrastLevel,
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
) {
|
) {
|
||||||
|
val paletteOptions = remember { PaletteStyle.entries.toList() }
|
||||||
val paletteOptions = remember {
|
|
||||||
PaletteStyle.entries.toList()
|
|
||||||
}
|
|
||||||
|
|
||||||
LazyRowSettingsItem(
|
LazyRowSettingsItem(
|
||||||
title = stringResource(R.string.pref_palette_style),
|
title = stringResource(R.string.pref_palette_style),
|
||||||
|
|
@ -34,21 +34,21 @@ fun PalettePicker(
|
||||||
fadedEdgeWidth = 8.dp,
|
fadedEdgeWidth = 8.dp,
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
paletteOptions.forEach { paletteStyle ->
|
items(items = paletteOptions, key = { it.id }) {
|
||||||
item {
|
val isSelected by remember { derivedStateOf { currentPalette() == it } }
|
||||||
PaletteItem(
|
|
||||||
isDynamicColor = isDynamicColor,
|
PaletteItem(
|
||||||
isDark = when (isDarkMode) {
|
isDynamicColor = isDynamicColor,
|
||||||
DarkMode.FollowSystem -> isSystemInDarkTheme()
|
isDark = when (isDarkMode) {
|
||||||
DarkMode.Light -> false
|
DarkMode.FollowSystem -> isSystemInDarkTheme()
|
||||||
DarkMode.Dark -> true
|
DarkMode.Light -> false
|
||||||
},
|
DarkMode.Dark -> true
|
||||||
paletteStyle = paletteStyle,
|
},
|
||||||
selected = currentPalette == paletteStyle,
|
paletteStyle = it,
|
||||||
contrastLevel = contrastLevel,
|
selected = isSelected,
|
||||||
onSelect = { onPaletteChange(paletteStyle) }
|
contrastLevel = contrastLevel,
|
||||||
)
|
onSelect = { onPaletteChange(it) }
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue