From d1371b224d64f384b5f2da4da8105e79417b9df6 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sat, 26 Aug 2023 23:04:47 +0200 Subject: [PATCH] Add preference to disable charging animation Close #456 --- .../launcher2/ui/launcher/LauncherScaffoldVM.kt | 3 +++ .../ui/launcher/SharedLauncherActivity.kt | 6 +++++- .../homescreen/HomescreenSettingsScreen.kt | 13 +++++++++++++ .../homescreen/HomescreenSettingsScreenVM.kt | 15 +++++++++++++++ core/i18n/src/main/res/values/strings.xml | 3 +++ .../de/mm20/launcher2/preferences/Defaults.kt | 4 ++++ .../preferences/migrations/Migration_16_17.kt | 4 ++++ core/preferences/src/main/proto/settings.proto | 5 +++++ 8 files changed, 52 insertions(+), 1 deletion(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt index a733f291..c86f281d 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt @@ -53,6 +53,9 @@ class LauncherScaffoldVM : ViewModel(), KoinComponent { val navBarColor = dataStore.data.map { it.systemBars.statusBarColor } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) + val chargingAnimation = dataStore.data.map { it.animations.charging } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) + val hideNavBar = dataStore.data.map { it.systemBars.hideNavBar } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false) val hideStatusBar = dataStore.data.map { it.systemBars.hideStatusBar } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt index 917f8f5b..12ff6a59 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt @@ -105,6 +105,8 @@ abstract class SharedLauncherActivity( val statusBarColor by viewModel.statusBarColor.collectAsState() val navBarColor by viewModel.navBarColor.collectAsState() + val chargingAnimation by viewModel.chargingAnimation.collectAsState() + val lightStatus = !dimBackground && (statusBarColor == SystemBarColors.Dark || statusBarColor == SystemBarColors.Auto && wallpaperColors.supportsDarkText) val lightNav = @@ -164,7 +166,9 @@ abstract class SharedLauncherActivity( .background(if (dimBackground) Color.Black.copy(alpha = 0.30f) else Color.Transparent), contentAlignment = Alignment.BottomCenter ) { - NavBarEffects(modifier = Modifier.fillMaxSize()) + if (chargingAnimation == true) { + NavBarEffects(modifier = Modifier.fillMaxSize()) + } if (mode == LauncherActivityMode.Assistant) { key(bottomSearchBar, reverseSearchResults) { AssistantScaffold( diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt index 817b78da..59efe033 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt @@ -60,6 +60,7 @@ fun HomescreenSettingsScreen() { val lightNavBar by viewModel.navBarIcons.collectAsStateWithLifecycle(null) val hideStatusBar by viewModel.hideStatusBar.collectAsStateWithLifecycle(null) val hideNavBar by viewModel.hideNavBar.collectAsStateWithLifecycle(null) + val chargingAnimation by viewModel.chargingAnimation.collectAsStateWithLifecycle(null) PreferenceScreen(title = stringResource(id = R.string.preference_screen_homescreen)) { item { @@ -173,6 +174,18 @@ fun HomescreenSettingsScreen() { ) } } + item { + PreferenceCategory(stringResource(R.string.preference_category_animations)) { + SwitchPreference( + title = stringResource(R.string.preference_charging_animation), + summary = stringResource(R.string.preference_charging_animation_summary), + value = chargingAnimation == true, + onValueChanged = { + viewModel.setChargingAnimation(it) + } + ) + } + } item { PreferenceCategory(stringResource(R.string.preference_category_system_bars)) { diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt index 19b1113e..b2d44275 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt @@ -202,6 +202,21 @@ class HomescreenSettingsScreenVM( } } + val chargingAnimation = dataStore.data.map { it.animations.charging } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) + + fun setChargingAnimation(chargingAnimation: Boolean) { + viewModelScope.launch { + dataStore.updateData { + it.toBuilder() + .setAnimations( + it.animations.toBuilder() + .setCharging(chargingAnimation) + ) + .build() + } + } + } companion object : KoinComponent { val Factory = viewModelFactory { diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index a7c96cef..41fff3ac 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -508,6 +508,9 @@ No icon packs installed Dynamic colors + Animations + Charging + Play a bubble animation while the device is charging System bars Status bar icons Navigation bar icons 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 036e8563..61a52548 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 @@ -185,6 +185,10 @@ fun createFactorySettings(context: Context): Settings { .setOrdering(Settings.SearchResultOrderingSettings.Ordering.Weighted) .setWeightFactor(Settings.SearchResultOrderingSettings.WeightFactor.Default) ) + .setAnimations( + Settings.AnimationSettings.newBuilder() + .setCharging(true) + ) .build() } diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_16_17.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_16_17.kt index cd4fa76c..a76a18b6 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_16_17.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_16_17.kt @@ -15,5 +15,9 @@ class Migration_16_17: VersionedMigration(16, 17) { }.toString() ) ) + .setAnimations( + builder.animations.toBuilder() + .setCharging(true) + ) } } \ 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 bd7ec589..23c4cc4e 100644 --- a/core/preferences/src/main/proto/settings.proto +++ b/core/preferences/src/main/proto/settings.proto @@ -367,4 +367,9 @@ message Settings { bool widget_tags_multiline = 2; } UiState ui = 30; + + message AnimationSettings { + bool charging = 1; + } + AnimationSettings animations = 31; } \ No newline at end of file