This commit is contained in:
vfsfitvnm 2022-10-16 14:36:37 +02:00
parent 1e6a6dc6de
commit 8bd4e0e715
2 changed files with 27 additions and 29 deletions

View file

@ -4,45 +4,43 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.saveable.SaverScope
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.unit.dp
import androidx.core.graphics.ColorUtils
data class Appearance(
val colorPalette: ColorPalette,
val typography: Typography = typographyOf(colorPalette.text),
val typography: Typography,
val thumbnailShape: Shape
) {
companion object : Saver<Appearance, List<Any>> {
override fun restore(value: List<Any>) = Appearance(
colorPalette = ColorPalette(
background0 = Color((value[0] as Long).toULong()),
background1 = Color((value[1] as Long).toULong()),
background2 = Color((value[2] as Long).toULong()),
accent = Color((value[3] as Long).toULong()),
onAccent = Color((value[4] as Long).toULong()),
red = Color((value[5] as Long).toULong()),
blue = Color((value[6] as Long).toULong()),
text = Color((value[7] as Long).toULong()),
textSecondary = Color((value[8] as Long).toULong()),
textDisabled = Color((value[9] as Long).toULong()),
isDark = value[10] as Boolean
),
thumbnailShape = RoundedCornerShape((value[11] as Int).dp)
)
override fun restore(value: List<Any>): Appearance {
val colorPalette = when (val accent = value[0] as Int) {
0 -> DefaultDarkColorPalette
1 -> DefaultLightColorPalette
2 -> PureBlackColorPalette
else -> dynamicColorPaletteOf(
FloatArray(3).apply { ColorUtils.colorToHSL(accent, this) },
value[1] as Boolean
)
}
return Appearance(
colorPalette = colorPalette,
typography = typographyOf(colorPalette.text),
thumbnailShape = RoundedCornerShape((value[2] as Int).dp)
)
}
override fun SaverScope.save(value: Appearance) =
listOf(
value.colorPalette.background0.value.toLong(),
value.colorPalette.background1.value.toLong(),
value.colorPalette.background2.value.toLong(),
value.colorPalette.accent.value.toLong(),
value.colorPalette.onAccent.value.toLong(),
value.colorPalette.red.value.toLong(),
value.colorPalette.blue.value.toLong(),
value.colorPalette.text.value.toLong(),
value.colorPalette.textSecondary.value.toLong(),
value.colorPalette.textDisabled.value.toLong(),
when {
value.colorPalette === DefaultDarkColorPalette -> 0
value.colorPalette === DefaultLightColorPalette -> 1
value.colorPalette === PureBlackColorPalette -> 2
else -> value.colorPalette.accent.toArgb()
},
value.colorPalette.isDark,
when (value.thumbnailShape) {
RoundedCornerShape(2.dp) -> 2

View file

@ -100,7 +100,7 @@ fun dynamicColorPaletteOf(bitmap: Bitmap, isDark: Boolean): ColorPalette? {
}
}
private fun dynamicColorPaletteOf(hsl: FloatArray, isDark: Boolean): ColorPalette {
fun dynamicColorPaletteOf(hsl: FloatArray, isDark: Boolean): ColorPalette {
return colorPaletteOf(ColorPaletteName.Dynamic, if (isDark) ColorPaletteMode.Dark else ColorPaletteMode.Light, false).copy(
background0 = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.1f), if (isDark) 0.10f else 0.925f),
background1 = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.3f), if (isDark) 0.15f else 0.90f),