From 17dd8558c0de9f6ef6b6211c611c06cbb4f70fa1 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Wed, 13 Apr 2022 10:09:30 +0200 Subject: [PATCH] Add debug setting to enable Material You compat color scheme on API 31+ --- preferences/src/main/proto/settings.proto | 1 + .../colorscheme/ColorSchemeSettingsScreen.kt | 12 +++++++++--- .../de/mm20/launcher2/ui/theme/LauncherTheme.kt | 17 ++++++++--------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto index 6d7e52d0..0fde3f60 100644 --- a/preferences/src/main/proto/settings.proto +++ b/preferences/src/main/proto/settings.proto @@ -15,6 +15,7 @@ message Settings { enum ColorScheme { Default = 0; BlackAndWhite = 1; + DebugMaterialYouCompat = 2; } ColorScheme color_scheme = 6; bool dim_wallpaper = 7; diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSchemeSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSchemeSettingsScreen.kt index 5adfd3cc..7a01c823 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSchemeSettingsScreen.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSchemeSettingsScreen.kt @@ -15,7 +15,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel +import de.mm20.launcher2.ktx.isAtLeastApiLevel import de.mm20.launcher2.preferences.Settings.AppearanceSettings +import de.mm20.launcher2.ui.BuildConfig import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.component.preferences.Preference import de.mm20.launcher2.ui.component.preferences.PreferenceCategory @@ -32,14 +34,18 @@ fun ColorSchemeSettingsScreen() { val colorScheme by viewModel.colorScheme.observeAsState() val items = mutableListOf( - AppearanceSettings.ColorScheme.Default to R.string.preference_colors_default, - AppearanceSettings.ColorScheme.BlackAndWhite to R.string.preference_colors_bw, + AppearanceSettings.ColorScheme.Default to stringResource(R.string.preference_colors_default), + AppearanceSettings.ColorScheme.BlackAndWhite to stringResource(R.string.preference_colors_bw), ) + if (BuildConfig.DEBUG && isAtLeastApiLevel(27)) { + items.add(AppearanceSettings.ColorScheme.DebugMaterialYouCompat to "Material You Compat") + } + for (cs in items) { val scheme by colorSchemeAsState(cs.first) Preference( - title = stringResource(cs.second), + title = cs.second, icon = if (colorScheme == cs.first) Icons.Rounded.RadioButtonChecked else Icons.Rounded.RadioButtonUnchecked, onClick = { viewModel.setColorScheme(cs.first) }, controls = { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/theme/LauncherTheme.kt b/ui/src/main/java/de/mm20/launcher2/ui/theme/LauncherTheme.kt index 70d917b7..43e79d02 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/theme/LauncherTheme.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/theme/LauncherTheme.kt @@ -58,15 +58,7 @@ fun colorSchemeAsState(colorScheme: AppearanceSettings.ColorScheme): MutableStat } } else -> { - if (Build.VERSION.SDK_INT >= 31) { - return remember(darkTheme) { - mutableStateOf( - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - ) - } - } - - if (Build.VERSION.SDK_INT >= 27 && Build.VERSION.SDK_INT < 31) { + if (Build.VERSION.SDK_INT >= 27 && (Build.VERSION.SDK_INT < 31 || colorScheme == AppearanceSettings.ColorScheme.DebugMaterialYouCompat)) { val wallpaperColors by wallpaperColorsAsState() val state = remember(wallpaperColors, darkTheme) { mutableStateOf( @@ -76,6 +68,13 @@ fun colorSchemeAsState(colorScheme: AppearanceSettings.ColorScheme): MutableStat } return state } + if (Build.VERSION.SDK_INT >= 31) { + return remember(darkTheme) { + mutableStateOf( + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + ) + } + } return remember { mutableStateOf(if (darkTheme) DarkDefaultColorScheme else LightDefaultColorScheme) }