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 androidx.lifecycle.viewModelScope
|
||||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||||
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.CustomColors
|
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.CustomColors
|
||||||
|
import de.mm20.launcher2.preferences.ktx.toSettingsColorsScheme
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@ -144,46 +145,4 @@ class CustomColorSchemeSettingsScreenVM : ViewModel(), KoinComponent {
|
|||||||
val scheme = Scheme.lightFromCorePalette(CorePalette(a1, a2, a3, n1, n2, error))
|
val scheme = Scheme.lightFromCorePalette(CorePalette(a1, a2, a3, n1, n2, error))
|
||||||
return scheme.toSettingsColorsScheme()
|
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>> {
|
internal fun getMigrations(context: Context): List<DataMigration<Settings>> {
|
||||||
return listOf(
|
return listOf(
|
||||||
@ -41,5 +41,6 @@ internal fun getMigrations(context: Context): List<DataMigration<Settings>> {
|
|||||||
Migration_12_13(),
|
Migration_12_13(),
|
||||||
Migration_13_14(),
|
Migration_13_14(),
|
||||||
Migration_14_15(),
|
Migration_14_15(),
|
||||||
|
Migration_15_16(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -3,6 +3,7 @@ package de.mm20.launcher2.preferences
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import de.mm20.launcher2.ktx.isAtLeastApiLevel
|
import de.mm20.launcher2.ktx.isAtLeastApiLevel
|
||||||
import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
|
import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
|
||||||
|
import de.mm20.launcher2.preferences.ktx.toSettingsColorsScheme
|
||||||
import scheme.Scheme
|
import scheme.Scheme
|
||||||
|
|
||||||
fun createFactorySettings(context: Context): Settings {
|
fun createFactorySettings(context: Context): Settings {
|
||||||
@ -209,71 +210,11 @@ internal val DefaultCustomColorsBase: Settings.AppearanceSettings.CustomColors.B
|
|||||||
internal val DefaultLightCustomColorScheme: Settings.AppearanceSettings.CustomColors.Scheme
|
internal val DefaultLightCustomColorScheme: Settings.AppearanceSettings.CustomColors.Scheme
|
||||||
get() {
|
get() {
|
||||||
val scheme = Scheme.light(0xFFACE330.toInt())
|
val scheme = Scheme.light(0xFFACE330.toInt())
|
||||||
return Settings.AppearanceSettings.CustomColors.Scheme.newBuilder()
|
return scheme.toSettingsColorsScheme()
|
||||||
.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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val DefaultDarkCustomColorScheme: Settings.AppearanceSettings.CustomColors.Scheme
|
internal val DefaultDarkCustomColorScheme: Settings.AppearanceSettings.CustomColors.Scheme
|
||||||
get() {
|
get() {
|
||||||
val scheme = Scheme.dark(0xFFACE330.toInt())
|
val scheme = Scheme.dark(0xFFACE330.toInt())
|
||||||
return Settings.AppearanceSettings.CustomColors.Scheme.newBuilder()
|
return scheme.toSettingsColorsScheme()
|
||||||
.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()
|
|
||||||
}
|
}
|
||||||
@ -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