diff --git a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt index 0e48ae54..cf0dc946 100644 --- a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt +++ b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt @@ -114,5 +114,10 @@ fun createFactorySettings(context: Context): Settings { .setIconPack("") ) .setEasterEgg(false) + .setSystemBars( + Settings.SystemBarsSettings.newBuilder() + .setLightNavBar(false) + .setLightStatusBar(false) + ) .build() } \ No newline at end of file diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto index 729146a6..f0454a1c 100644 --- a/preferences/src/main/proto/settings.proto +++ b/preferences/src/main/proto/settings.proto @@ -159,4 +159,10 @@ message Settings { bool easter_egg = 22; + message SystemBarsSettings { + bool lightStatusBar = 1; + bool lightNavBar = 2; + } + SystemBarsSettings system_bars = 23; + } \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt index a173acb1..e2427588 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt @@ -57,6 +57,14 @@ class LauncherActivity : BaseActivity() { } } + val windowController = WindowInsetsControllerCompat(window, binding.rootView) + viewModel.lightStatusBar.observe(this) { + windowController.isAppearanceLightStatusBars = it + } + viewModel.lightNavBar.observe(this) { + windowController.isAppearanceLightNavigationBars = it + } + var editFavoritesDialog: MaterialDialog? = null viewModel.isEditFavoritesShown.observe(this) { if (it) { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivityVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivityVM.kt index 9e34af18..4b92ed52 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivityVM.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivityVM.kt @@ -18,11 +18,26 @@ class LauncherActivityVM : ViewModel(), KoinComponent { private var isDarkInMode = MutableStateFlow(false) - val dimBackground = combine( + private val dimBackgroundState = combine( dataStore.data.map { it.appearance.dimWallpaper }, isDarkInMode ) { dim, darkMode -> dim && darkMode + } + val dimBackground = dimBackgroundState.asLiveData() + + val lightStatusBar = combine( + dimBackgroundState, + dataStore.data.map { it.systemBars.lightStatusBar } + ) { dim, light -> + !dim && light + }.asLiveData() + + val lightNavBar = combine( + dimBackgroundState, + dataStore.data.map { it.systemBars.lightNavBar } + ) { dim, light -> + !dim && light }.asLiveData() fun setDarkMode(darkMode: Boolean) { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt index 50c33fa4..ea612e3c 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt @@ -173,6 +173,24 @@ fun AppearanceSettingsScreen() { } ) } + PreferenceCategory(stringResource(R.string.preference_category_system_bars)) { + val lightStatusBar by viewModel.lightStatusBar.observeAsState() + SwitchPreference( + title = stringResource(R.string.preference_light_status_bar), + value = lightStatusBar == true, + onValueChanged = { + viewModel.setLightStatusBar(it) + } + ) + val lightNavBar by viewModel.lightNavBar.observeAsState() + SwitchPreference( + title = stringResource(R.string.preference_light_nav_bar), + value = lightNavBar == true, + onValueChanged = { + viewModel.setLightNavBar(it) + } + ) + } } } } diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt index 6cbc329e..afa588dd 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt @@ -148,4 +148,32 @@ class AppearanceSettingsScreenVM : ViewModel(), KoinComponent { } } } + + val lightStatusBar = dataStore.data.map { it.systemBars.lightStatusBar }.asLiveData() + fun setLightStatusBar(lightStatusBar: Boolean) { + viewModelScope.launch { + dataStore.updateData { + it.toBuilder() + .setSystemBars( + it.systemBars.toBuilder() + .setLightStatusBar(lightStatusBar) + ) + .build() + } + } + } + + val lightNavBar = dataStore.data.map { it.systemBars.lightNavBar }.asLiveData() + fun setLightNavBar(lightNavBar: Boolean) { + viewModelScope.launch { + dataStore.updateData { + it.toBuilder() + .setSystemBars( + it.systemBars.toBuilder() + .setLightNavBar(lightNavBar) + ) + .build() + } + } + } } \ No newline at end of file