From 8bd4e0e715b5526074901acb7183f0e3ae14092d Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Sun, 16 Oct 2022 14:36:37 +0200 Subject: [PATCH] Fix #447 --- .../vimusic/ui/styling/Appearance.kt | 54 +++++++++---------- .../vimusic/ui/styling/ColorPalette.kt | 2 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt index 2e696ab..6c4c468 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt @@ -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> { - override fun restore(value: List) = 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): 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 diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt index 4135ea5..f2b31dc 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt @@ -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),