From 5a821eaabe7b92208f65f349fea829186ab73453 Mon Sep 17 00:00:00 2001
From: MM20 <15646950+MM2-0@users.noreply.github.com>
Date: Sat, 30 Sep 2023 14:49:35 +0200
Subject: [PATCH] Add preference to adjust wallpaper blur radius
---
.../launcher2/ui/assistant/AssistantScaffold.kt | 4 ----
.../launcher2/ui/launcher/LauncherScaffoldVM.kt | 4 ++++
.../de/mm20/launcher2/ui/launcher/PagerScaffold.kt | 3 ++-
.../mm20/launcher2/ui/launcher/PullDownScaffold.kt | 3 ++-
.../launcher2/ui/launcher/helper/WallpaperBlur.kt | 10 +++++-----
.../homescreen/HomescreenSettingsScreen.kt | 14 ++++++++++++++
.../homescreen/HomescreenSettingsScreenVM.kt | 14 ++++++++++++++
core/i18n/src/main/res/values/strings.xml | 1 +
.../de/mm20/launcher2/preferences/DataStore.kt | 3 ++-
.../java/de/mm20/launcher2/preferences/Defaults.kt | 1 +
.../preferences/migrations/Migration_17_18.kt | 12 ++++++++++++
core/preferences/src/main/proto/settings.proto | 1 +
12 files changed, 58 insertions(+), 12 deletions(-)
create mode 100644 core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_17_18.kt
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/assistant/AssistantScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/assistant/AssistantScaffold.kt
index 17637bd8..b433fcef 100644
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/assistant/AssistantScaffold.kt
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/assistant/AssistantScaffold.kt
@@ -121,10 +121,6 @@ fun AssistantScaffold(
}
}
- WallpaperBlur {
- true
- }
-
LaunchedEffect(darkNavBarIcons, showNavBarScrim) {
if (showNavBarScrim) {
systemUiController.setNavigationBarColor(
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 c86f281d..7e1b864f 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
@@ -122,6 +122,10 @@ class LauncherScaffoldVM : ViewModel(), KoinComponent {
val wallpaperBlur = dataStore.data.map { it.appearance.blurWallpaper }
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), true)
+ val wallpaperBlurRadius = dataStore.data.map { it.appearance.blurWallpaperRadius }
+ .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), 32)
+
+
val fillClockHeight = dataStore.data.map { it.clockWidget.fillHeight }
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), true)
val searchBarColor = dataStore.data.map { it.searchBar.color }
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt
index d5fb2265..0e38bfd0 100644
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt
@@ -217,6 +217,7 @@ fun PagerScaffold(
}
val blurEnabled by viewModel.wallpaperBlur.collectAsState()
+ val blurRadius by viewModel.wallpaperBlurRadius.collectAsState()
val blurWallpaper by remember {
derivedStateOf {
@@ -225,7 +226,7 @@ fun PagerScaffold(
}
WallpaperBlur {
- blurWallpaper
+ if (blurWallpaper) blurRadius else 0
}
val currentPage = pagerState.currentPage
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt
index 6e3268f5..c6f027b5 100644
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt
@@ -211,6 +211,7 @@ fun PullDownScaffold(
val maxSearchBarOffset = with(density) { 128.dp.toPx() }
val blurEnabled by viewModel.wallpaperBlur.collectAsState()
+ val blurRadius by viewModel.wallpaperBlurRadius.collectAsState()
val blurWallpaper by remember {
derivedStateOf {
@@ -219,7 +220,7 @@ fun PullDownScaffold(
}
WallpaperBlur {
- blurWallpaper
+ if (blurWallpaper) blurRadius else 0
}
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/helper/WallpaperBlur.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/helper/WallpaperBlur.kt
index 0a736eb2..11ce62b9 100644
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/helper/WallpaperBlur.kt
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/helper/WallpaperBlur.kt
@@ -10,15 +10,15 @@ import androidx.compose.ui.unit.dp
import de.mm20.launcher2.ktx.isAtLeastApiLevel
@Composable
-fun WallpaperBlur(blur: () -> Boolean) {
+fun WallpaperBlur(blurRadius: () -> Int) {
val context = LocalContext.current
val density = LocalDensity.current
- val blurWallpaper = blur()
- LaunchedEffect(blurWallpaper) {
+ val radius = blurRadius()
+ LaunchedEffect(radius) {
if (!isAtLeastApiLevel(31)) return@LaunchedEffect
(context as Activity).window.attributes = context.window.attributes.also {
- if (blurWallpaper) {
- it.blurBehindRadius = with(density) { 32.dp.toPx().toInt() }
+ if (radius > 0) {
+ it.blurBehindRadius = with(density) { radius.dp.toPx().toInt() }
it.flags = it.flags or WindowManager.LayoutParams.FLAG_BLUR_BEHIND
} else {
it.blurBehindRadius = 0
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 59efe033..775b73eb 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
@@ -34,6 +34,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.SliderPreference
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
import de.mm20.launcher2.ui.locals.LocalNavController
import kotlinx.coroutines.delay
@@ -57,6 +58,7 @@ fun HomescreenSettingsScreen() {
val lightStatusBar by viewModel.statusBarIcons.collectAsStateWithLifecycle(null)
val dimWallpaper by viewModel.dimWallpaper.collectAsStateWithLifecycle()
val blurWallpaper by viewModel.blurWallpaper.collectAsStateWithLifecycle()
+ val blurWallpaperRadius by viewModel.blurWallpaperRadius.collectAsStateWithLifecycle()
val lightNavBar by viewModel.navBarIcons.collectAsStateWithLifecycle(null)
val hideStatusBar by viewModel.hideStatusBar.collectAsStateWithLifecycle(null)
val hideNavBar by viewModel.hideNavBar.collectAsStateWithLifecycle(null)
@@ -172,6 +174,18 @@ fun HomescreenSettingsScreen() {
},
enabled = isBlurSupported
)
+ AnimatedVisibility(blurWallpaper && isBlurSupported) {
+ SliderPreference(
+ title = stringResource(R.string.preference_blur_wallpaper_radius),
+ value = blurWallpaperRadius,
+ onValueChanged = {
+ viewModel.setBlurWallpaperRadius(it)
+ },
+ min = 4,
+ max = 64,
+ step = 4,
+ )
+ }
}
}
item {
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 b2d44275..e0593647 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
@@ -52,6 +52,20 @@ class HomescreenSettingsScreenVM(
}
}
+ val blurWallpaperRadius = dataStore.data.map { it.appearance.blurWallpaperRadius }
+ .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), 32)
+ fun setBlurWallpaperRadius(blurWallpaperRadius: Int) {
+ viewModelScope.launch {
+ dataStore.updateData {
+ it.toBuilder()
+ .setAppearance(
+ it.appearance.toBuilder()
+ .setBlurWallpaperRadius(blurWallpaperRadius)
+ ).build()
+ }
+ }
+ }
+
fun openWallpaperChooser(context: AppCompatActivity) {
context.startActivity(Intent.createChooser(Intent(Intent.ACTION_SET_WALLPAPER), null))
}
diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml
index 4b493a47..0d176c46 100644
--- a/core/i18n/src/main/res/values/strings.xml
+++ b/core/i18n/src/main/res/values/strings.xml
@@ -532,6 +532,7 @@
Blur wallpaper
Use a blur effect on the wallpaper
Not supported on this device
+ Blur radius
Choose a wallpaper
Badges
Configure icon badges
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 309d05c7..e1608ccb 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 = 17
+internal const val SchemaVersion = 18
internal fun getMigrations(context: Context): List> {
return listOf(
@@ -43,5 +43,6 @@ internal fun getMigrations(context: Context): List> {
Migration_14_15(),
Migration_15_16(),
Migration_16_17(),
+ Migration_17_18(),
)
}
\ 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 61a52548..bf63dc8a 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
@@ -15,6 +15,7 @@ fun createFactorySettings(context: Context): Settings {
.setTheme(Settings.AppearanceSettings.Theme.System)
.setDimWallpaper(false)
.setBlurWallpaper(true)
+ .setBlurWallpaperRadius(32)
.setThemeId(UUID(0L, 0L).toString())
.setFont(Settings.AppearanceSettings.Font.Outfit)
.build()
diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_17_18.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_17_18.kt
new file mode 100644
index 00000000..94330910
--- /dev/null
+++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/Migration_17_18.kt
@@ -0,0 +1,12 @@
+package de.mm20.launcher2.preferences.migrations
+
+import de.mm20.launcher2.preferences.Settings
+
+class Migration_17_18 : VersionedMigration(17, 18) {
+ override suspend fun applyMigrations(builder: Settings.Builder): Settings.Builder {
+ return builder
+ .setAppearance(builder.appearance.toBuilder()
+ .setBlurWallpaperRadius(32)
+ )
+ }
+}
\ 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 23c4cc4e..35f18a24 100644
--- a/core/preferences/src/main/proto/settings.proto
+++ b/core/preferences/src/main/proto/settings.proto
@@ -89,6 +89,7 @@ message Settings {
bool blur_wallpaper = 11;
// UUID of the selected theme
string theme_id = 12;
+ uint32 blur_wallpaper_radius = 13;
}
AppearanceSettings appearance = 2;