From d466f7f1a685378d632b38893396070e66a7662f Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Fri, 7 Oct 2022 16:10:27 +0200 Subject: [PATCH] Make Appearance saveable --- .../it/vfsfitvnm/vimusic/MainActivity.kt | 6 +-- .../vimusic/ui/styling/Appearance.kt | 49 ++++++++++++++++++- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt index 0efa01d..0bce699 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt @@ -38,6 +38,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.runtime.staticCompositionLocalOf @@ -127,12 +128,11 @@ class MainActivity : ComponentActivity() { val coroutineScope = rememberCoroutineScope() val isSystemInDarkTheme = isSystemInDarkTheme() - var appearance by remember(isSystemInDarkTheme) { + var appearance by rememberSaveable(isSystemInDarkTheme, stateSaver = Appearance.Companion) { with(preferences) { val colorPaletteName = getEnum(colorPaletteNameKey, ColorPaletteName.Dynamic) val colorPaletteMode = getEnum(colorPaletteModeKey, ColorPaletteMode.System) - val thumbnailRoundness = - getEnum(thumbnailRoundnessKey, ThumbnailRoundness.Light) + val thumbnailRoundness = getEnum(thumbnailRoundnessKey, ThumbnailRoundness.Light) val colorPalette = colorPaletteOf(colorPaletteName, colorPaletteMode, isSystemInDarkTheme) 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 051ae54..2e696ab 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 @@ -1,12 +1,57 @@ package it.vfsfitvnm.vimusic.ui.styling +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.unit.dp data class Appearance( val colorPalette: ColorPalette, - val typography: Typography, + val typography: Typography = typographyOf(colorPalette.text), 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 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(), + value.colorPalette.isDark, + when (value.thumbnailShape) { + RoundedCornerShape(2.dp) -> 2 + RoundedCornerShape(4.dp) -> 4 + RoundedCornerShape(8.dp) -> 8 + else -> 0 + } + ) + } +} val LocalAppearance = staticCompositionLocalOf { TODO() }