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