Add migration for custom color scheme
This commit is contained in:
parent
b39d59e070
commit
cb8dfb4873
@ -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()
|
||||
}
|
||||
}
|
||||
@ -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(),
|
||||
)
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user