From 706bd387310f0dd00b863b630c75f695b557330c Mon Sep 17 00:00:00 2001 From: Guillermo Villafuerte Date: Thu, 28 Dec 2023 19:23:09 -0600 Subject: [PATCH 1/3] Added flag to use Material You Compat on Android 12+ Signed-off-by: Guillermo Villafuerte --- .../appearance/AppearanceSettingsScreen.kt | 10 ++++++++++ .../appearance/AppearanceSettingsScreenVM.kt | 13 +++++++++++++ .../mm20/launcher2/ui/theme/colorscheme/Custom.kt | 14 ++++++++++++-- core/i18n/src/main/res/values/strings.xml | 2 ++ .../de/mm20/launcher2/preferences/DataStore.kt | 3 ++- .../java/de/mm20/launcher2/preferences/Defaults.kt | 1 + .../preferences/migrations/Migration_18_19.kt | 12 ++++++++++++ core/preferences/src/main/proto/settings.proto | 2 ++ 8 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_18_19.kt diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt index 20700f08..c295bcda 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt @@ -17,6 +17,7 @@ import de.mm20.launcher2.ui.component.preferences.ListPreference import de.mm20.launcher2.ui.component.preferences.Preference import de.mm20.launcher2.ui.component.preferences.PreferenceCategory import de.mm20.launcher2.ui.component.preferences.PreferenceScreen +import de.mm20.launcher2.ui.component.preferences.SwitchPreference import de.mm20.launcher2.ui.component.preferences.value import de.mm20.launcher2.ui.locals.LocalNavController import de.mm20.launcher2.ui.theme.getTypography @@ -51,6 +52,15 @@ fun AppearanceSettingsScreen() { navController?.navigate("settings/appearance/themes") } ) + val compatMode by viewModel.compatMode.collectAsState() + SwitchPreference( + title = stringResource(id = R.string.preference_force_compat_system_colors), + summary = stringResource(id = R.string.preference_force_compat_system_colors_summary), + value = compatMode, + onValueChanged = { + viewModel.setCompatMode(it) + } + ) val font by viewModel.font.collectAsState() ListPreference( title = stringResource(R.string.preference_font), diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt index c300bb35..2db0d820 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt @@ -47,6 +47,19 @@ class AppearanceSettingsScreenVM : ViewModel(), KoinComponent { } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) + val compatMode = dataStore.data.map { + it.appearance.forceCompatModeSystemColors + }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false) + + fun setCompatMode(enabled: Boolean) { + viewModelScope.launch { + dataStore.updateData { + it.toBuilder() + .setAppearance(it.appearance.toBuilder().setForceCompatModeSystemColors(enabled)) + .build() + } + } + } val font = dataStore.data.map { it.appearance.font } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/theme/colorscheme/Custom.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/theme/colorscheme/Custom.kt index 0de0bbb1..43e49635 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/theme/colorscheme/Custom.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/theme/colorscheme/Custom.kt @@ -3,11 +3,14 @@ package de.mm20.launcher2.ui.theme.colorscheme import android.os.Build import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.core.content.ContextCompat +import androidx.datastore.core.DataStore import de.mm20.launcher2.preferences.Settings import de.mm20.launcher2.themes.CorePalette import de.mm20.launcher2.themes.DefaultDarkColorScheme @@ -18,6 +21,8 @@ import de.mm20.launcher2.themes.Theme import de.mm20.launcher2.themes.get import de.mm20.launcher2.themes.merge import de.mm20.launcher2.ui.locals.LocalWallpaperColors +import kotlinx.coroutines.flow.map +import org.koin.androidx.compose.inject @Composable fun lightColorSchemeOf(theme: Theme): ColorScheme { @@ -77,8 +82,13 @@ fun colorSchemeOf(colorScheme: FullColorScheme, corePalette: PartialCorePalette) @Composable fun systemCorePalette(): CorePalette { - val context = LocalContext.current - if (Build.VERSION.SDK_INT >= 31) { + val dataStore: DataStore by inject() + val compatMode by remember { + dataStore.data.map { it.appearance.forceCompatModeSystemColors } + }.collectAsState(false) + + if (Build.VERSION.SDK_INT >= 31 && !compatMode) { + val context = LocalContext.current return CorePalette( primary = ContextCompat.getColor(context, android.R.color.system_accent1_500), secondary = ContextCompat.getColor(context, android.R.color.system_accent2_500), diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 42c4e299..9cd8e541 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -447,6 +447,8 @@ Generate from primary color Light color scheme Dark color scheme + Ignore system colors + Request color scheme via Material You Compat, if available Font System default About diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt index e1608ccb..bec00d01 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt @@ -22,7 +22,7 @@ internal val Context.dataStore: LauncherDataStore by dataStore( } ) -internal const val SchemaVersion = 18 +internal const val SchemaVersion = 19 internal fun getMigrations(context: Context): List> { return listOf( @@ -44,5 +44,6 @@ internal fun getMigrations(context: Context): List> { Migration_15_16(), Migration_16_17(), Migration_17_18(), + Migration_18_19(), ) } \ No newline at end of file diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt index 2ba95c97..550a002a 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt @@ -18,6 +18,7 @@ fun createFactorySettings(context: Context): Settings { .setBlurWallpaperRadius(32) .setThemeId(UUID(0L, 0L).toString()) .setFont(Settings.AppearanceSettings.Font.Outfit) + .setForceCompatModeSystemColors(false) .build() ) .setWeather( diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_18_19.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_18_19.kt new file mode 100644 index 00000000..b05cd163 --- /dev/null +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_18_19.kt @@ -0,0 +1,12 @@ +package de.mm20.launcher2.preferences.migrations + +import de.mm20.launcher2.preferences.Settings + +class Migration_18_19 : VersionedMigration(18, 19) { + override suspend fun applyMigrations(builder: Settings.Builder): Settings.Builder { + return builder + .setAppearance(builder.appearance.toBuilder() + .setForceCompatModeSystemColors(false) + ) + } +} \ No newline at end of file diff --git a/core/preferences/src/main/proto/settings.proto b/core/preferences/src/main/proto/settings.proto index f57fc567..72e7f97b 100644 --- a/core/preferences/src/main/proto/settings.proto +++ b/core/preferences/src/main/proto/settings.proto @@ -90,6 +90,8 @@ message Settings { // UUID of the selected theme string theme_id = 12; uint32 blur_wallpaper_radius = 13; + + bool force_compat_mode_system_colors = 14; } AppearanceSettings appearance = 2; From 01fe899c0c2d4c56dc9da6b97c6f2243c4350380 Mon Sep 17 00:00:00 2001 From: Guillermo Villafuerte Date: Sat, 6 Jan 2024 15:47:01 -0600 Subject: [PATCH 2/3] FIX: The flag for ignore system colors appeared on API versions below 31 Signed-off-by: Guillermo Villafuerte --- .../appearance/AppearanceSettingsScreen.kt | 21 +++++++++++-------- core/i18n/src/main/res/values/strings.xml | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt index c295bcda..ebc31cd7 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt @@ -9,6 +9,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel +import de.mm20.launcher2.ktx.isAtLeastApiLevel import de.mm20.launcher2.preferences.Settings.AppearanceSettings import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme @@ -52,15 +53,17 @@ fun AppearanceSettingsScreen() { navController?.navigate("settings/appearance/themes") } ) - val compatMode by viewModel.compatMode.collectAsState() - SwitchPreference( - title = stringResource(id = R.string.preference_force_compat_system_colors), - summary = stringResource(id = R.string.preference_force_compat_system_colors_summary), - value = compatMode, - onValueChanged = { - viewModel.setCompatMode(it) - } - ) + if (isAtLeastApiLevel(31)) { + val compatMode by viewModel.compatMode.collectAsState() + SwitchPreference( + title = stringResource(id = R.string.preference_force_compat_system_colors), + summary = stringResource(id = R.string.preference_force_compat_system_colors_summary), + value = compatMode, + onValueChanged = { + viewModel.setCompatMode(it) + } + ) + } val font by viewModel.font.collectAsState() ListPreference( title = stringResource(R.string.preference_font), diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 9cd8e541..15d7dafd 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -448,7 +448,7 @@ Light color scheme Dark color scheme Ignore system colors - Request color scheme via Material You Compat, if available + Request color scheme via Material You Compat Font System default About From 905786f6efdcc85b47b2c02c337a5eb5d81c61c6 Mon Sep 17 00:00:00 2001 From: Guillermo Villafuerte Date: Fri, 19 Jan 2024 19:11:50 -0600 Subject: [PATCH 3/3] FIX: Empty file created by mistake on merge resolution. Signed-off-by: Guillermo Villafuerte --- .../src/main/java/de/mm20/launcher2/preferences/DataStore.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt deleted file mode 100644 index e69de29b..00000000