Added flag to use Material You Compat on Android 12+

Signed-off-by: Guillermo Villafuerte <gvillafu@comunidad.unam.mx>
This commit is contained in:
Guillermo Villafuerte
2023-12-28 19:23:09 -06:00
parent f984f68b34
commit 706bd38731
8 changed files with 54 additions and 3 deletions
@@ -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),
@@ -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)
@@ -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<Int> {
val context = LocalContext.current
if (Build.VERSION.SDK_INT >= 31) {
val dataStore: DataStore<Settings> 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),