Add migration for custom color scheme

This commit is contained in:
MM20 2023-06-28 23:35:01 +02:00
parent b39d59e070
commit cb8dfb4873
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
5 changed files with 103 additions and 105 deletions

View File

@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.CustomColors
import de.mm20.launcher2.preferences.ktx.toSettingsColorsScheme
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
@ -144,46 +145,4 @@ class CustomColorSchemeSettingsScreenVM : ViewModel(), KoinComponent {
val scheme = Scheme.lightFromCorePalette(CorePalette(a1, a2, a3, n1, n2, error))
return scheme.toSettingsColorsScheme()
}
private fun Scheme.toSettingsColorsScheme(): CustomColors.Scheme {
val scheme = this
return CustomColors.Scheme.newBuilder()
.setPrimary(scheme.primary)
.setSurfaceTint(scheme.primary)
.setOnPrimary(scheme.onPrimary)
.setPrimaryContainer(scheme.primaryContainer)
.setOnPrimaryContainer(scheme.onPrimaryContainer)
.setSecondary(scheme.secondary)
.setOnSecondary(scheme.onSecondary)
.setSecondaryContainer(scheme.secondaryContainer)
.setOnSecondaryContainer(scheme.onSecondaryContainer)
.setTertiary(scheme.tertiary)
.setOnTertiary(scheme.onTertiary)
.setTertiaryContainer(scheme.tertiaryContainer)
.setOnTertiaryContainer(scheme.onTertiaryContainer)
.setError(scheme.error)
.setOnError(scheme.onError)
.setErrorContainer(scheme.errorContainer)
.setOnErrorContainer(scheme.onErrorContainer)
.setBackground(scheme.background)
.setOnBackground(scheme.onBackground)
.setSurface(scheme.surface)
.setOnSurface(scheme.onSurface)
.setSurfaceVariant(scheme.surfaceVariant)
.setOnSurfaceVariant(scheme.onSurfaceVariant)
.setOutline(scheme.outline)
.setOutlineVariant(scheme.outlineVariant)
.setInverseSurface(scheme.inverseSurface)
.setInverseOnSurface(scheme.inverseOnSurface)
.setInversePrimary(scheme.inversePrimary)
.setScrim(scheme.scrim)
.setSurfaceDim(scheme.surfaceDim)
.setSurfaceBright(scheme.surfaceBright)
.setSurfaceContainerLowest(scheme.surfaceContainerLowest)
.setSurfaceContainerLow(scheme.surfaceContainerLow)
.setSurfaceContainer(scheme.surfaceContainer)
.setSurfaceContainerHigh(scheme.surfaceContainerHigh)
.setSurfaceContainerHighest(scheme.surfaceContainerHighest)
.build()
}
}

View File

@ -22,7 +22,7 @@ internal val Context.dataStore: LauncherDataStore by dataStore(
}
)
internal const val SchemaVersion = 15
internal const val SchemaVersion = 16
internal fun getMigrations(context: Context): List<DataMigration<Settings>> {
return listOf(
@ -41,5 +41,6 @@ internal fun getMigrations(context: Context): List<DataMigration<Settings>> {
Migration_12_13(),
Migration_13_14(),
Migration_14_15(),
Migration_15_16(),
)
}

View File

@ -3,6 +3,7 @@ package de.mm20.launcher2.preferences
import android.content.Context
import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
import de.mm20.launcher2.preferences.ktx.toSettingsColorsScheme
import scheme.Scheme
fun createFactorySettings(context: Context): Settings {
@ -209,71 +210,11 @@ internal val DefaultCustomColorsBase: Settings.AppearanceSettings.CustomColors.B
internal val DefaultLightCustomColorScheme: Settings.AppearanceSettings.CustomColors.Scheme
get() {
val scheme = Scheme.light(0xFFACE330.toInt())
return Settings.AppearanceSettings.CustomColors.Scheme.newBuilder()
.setPrimary(scheme.primary)
.setOnPrimary(scheme.onPrimary)
.setPrimaryContainer(scheme.primaryContainer)
.setOnPrimaryContainer(scheme.onPrimaryContainer)
.setSecondary(scheme.secondary)
.setOnSecondary(scheme.onSecondary)
.setSecondaryContainer(scheme.secondaryContainer)
.setOnSecondaryContainer(scheme.onSecondaryContainer)
.setTertiary(scheme.tertiary)
.setOnTertiary(scheme.onTertiary)
.setTertiaryContainer(scheme.tertiaryContainer)
.setOnTertiaryContainer(scheme.onTertiaryContainer)
.setBackground(scheme.background)
.setOnBackground(scheme.onBackground)
.setSurface(scheme.surface)
.setOnSurface(scheme.onSurface)
.setSurfaceVariant(scheme.surfaceVariant)
.setOnSurfaceVariant(scheme.onSurfaceVariant)
.setError(scheme.error)
.setOnError(scheme.onError)
.setErrorContainer(scheme.errorContainer)
.setOnErrorContainer(scheme.onErrorContainer)
.setInverseSurface(scheme.inverseSurface)
.setInverseOnSurface(scheme.inverseOnSurface)
.setInversePrimary(scheme.inversePrimary)
.setOutline(scheme.outline)
.setScrim(scheme.scrim)
.setOutlineVariant(scheme.outlineVariant)
.setSurfaceTint(scheme.primary)
.build()
return scheme.toSettingsColorsScheme()
}
internal val DefaultDarkCustomColorScheme: Settings.AppearanceSettings.CustomColors.Scheme
get() {
val scheme = Scheme.dark(0xFFACE330.toInt())
return Settings.AppearanceSettings.CustomColors.Scheme.newBuilder()
.setPrimary(scheme.primary)
.setOnPrimary(scheme.onPrimary)
.setPrimaryContainer(scheme.primaryContainer)
.setOnPrimaryContainer(scheme.onPrimaryContainer)
.setSecondary(scheme.secondary)
.setOnSecondary(scheme.onSecondary)
.setSecondaryContainer(scheme.secondaryContainer)
.setOnSecondaryContainer(scheme.onSecondaryContainer)
.setTertiary(scheme.tertiary)
.setOnTertiary(scheme.onTertiary)
.setTertiaryContainer(scheme.tertiaryContainer)
.setOnTertiaryContainer(scheme.onTertiaryContainer)
.setBackground(scheme.background)
.setOnBackground(scheme.onBackground)
.setSurface(scheme.surface)
.setOnSurface(scheme.onSurface)
.setSurfaceVariant(scheme.surfaceVariant)
.setOnSurfaceVariant(scheme.onSurfaceVariant)
.setError(scheme.error)
.setOnError(scheme.onError)
.setErrorContainer(scheme.errorContainer)
.setOnErrorContainer(scheme.onErrorContainer)
.setInverseSurface(scheme.inverseSurface)
.setInverseOnSurface(scheme.inverseOnSurface)
.setInversePrimary(scheme.inversePrimary)
.setOutline(scheme.outline)
.setScrim(scheme.scrim)
.setOutlineVariant(scheme.outlineVariant)
.setSurfaceTint(scheme.primary)
.build()
return scheme.toSettingsColorsScheme()
}

View File

@ -0,0 +1,46 @@
package de.mm20.launcher2.preferences.ktx
import de.mm20.launcher2.preferences.Settings
import scheme.Scheme
fun Scheme.toSettingsColorsScheme(): Settings.AppearanceSettings.CustomColors.Scheme {
val scheme = this
return Settings.AppearanceSettings.CustomColors.Scheme.newBuilder()
.setPrimary(scheme.primary)
.setSurfaceTint(scheme.primary)
.setOnPrimary(scheme.onPrimary)
.setPrimaryContainer(scheme.primaryContainer)
.setOnPrimaryContainer(scheme.onPrimaryContainer)
.setSecondary(scheme.secondary)
.setOnSecondary(scheme.onSecondary)
.setSecondaryContainer(scheme.secondaryContainer)
.setOnSecondaryContainer(scheme.onSecondaryContainer)
.setTertiary(scheme.tertiary)
.setOnTertiary(scheme.onTertiary)
.setTertiaryContainer(scheme.tertiaryContainer)
.setOnTertiaryContainer(scheme.onTertiaryContainer)
.setError(scheme.error)
.setOnError(scheme.onError)
.setErrorContainer(scheme.errorContainer)
.setOnErrorContainer(scheme.onErrorContainer)
.setBackground(scheme.background)
.setOnBackground(scheme.onBackground)
.setSurface(scheme.surface)
.setOnSurface(scheme.onSurface)
.setSurfaceVariant(scheme.surfaceVariant)
.setOnSurfaceVariant(scheme.onSurfaceVariant)
.setOutline(scheme.outline)
.setOutlineVariant(scheme.outlineVariant)
.setInverseSurface(scheme.inverseSurface)
.setInverseOnSurface(scheme.inverseOnSurface)
.setInversePrimary(scheme.inversePrimary)
.setScrim(scheme.scrim)
.setSurfaceDim(scheme.surfaceDim)
.setSurfaceBright(scheme.surfaceBright)
.setSurfaceContainerLowest(scheme.surfaceContainerLowest)
.setSurfaceContainerLow(scheme.surfaceContainerLow)
.setSurfaceContainer(scheme.surfaceContainer)
.setSurfaceContainerHigh(scheme.surfaceContainerHigh)
.setSurfaceContainerHighest(scheme.surfaceContainerHighest)
.build()
}

View File

@ -0,0 +1,51 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.CustomColors.Scheme
import palettes.TonalPalette
class Migration_15_16 : VersionedMigration(15, 16) {
override suspend fun applyMigrations(builder: Settings.Builder): Settings.Builder {
return builder.setAppearance(
builder.appearance.toBuilder()
.setCustomColors(
builder.appearance.customColors.toBuilder()
.setLightScheme(
migrateColorScheme(
builder.appearance.customColors.lightScheme,
false,
builder.appearance.customColors.advancedMode
)
)
.setDarkScheme(
migrateColorScheme(
builder.appearance.customColors.darkScheme,
true,
builder.appearance.customColors.advancedMode
)
)
)
)
}
fun migrateColorScheme(colorScheme: Scheme, dark: Boolean, advancedMode: Boolean): Scheme {
val oldSurface = colorScheme.surface
val oldSurfaceVariant = colorScheme.surfaceVariant
val neutralPalette = TonalPalette.fromInt(oldSurface)
val neutralVariantPalette = TonalPalette.fromInt(oldSurfaceVariant)
return colorScheme.toBuilder().apply {
if (!advancedMode) {
surface = neutralPalette.tone(if (dark) 6 else 98)
}
surfaceDim = neutralPalette.tone(if (dark) 6 else 87)
surfaceBright = neutralPalette.tone(if (dark) 24 else 98)
surfaceContainerLowest = neutralVariantPalette.tone(if (dark) 4 else 100)
surfaceContainerLow = neutralVariantPalette.tone(if (dark) 10 else 96)
surfaceContainer = neutralVariantPalette.tone(if (dark) 12 else 94)
surfaceContainerHigh = neutralVariantPalette.tone(if (dark) 17 else 92)
surfaceContainerHighest = neutralVariantPalette.tone(if (dark) 22 else 90)
}.build()
}
}