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 11ce62b9..39473e3c 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
@@ -2,8 +2,11 @@ package de.mm20.launcher2.ui.launcher.helper
import android.app.Activity
import android.view.WindowManager
+import androidx.compose.animation.core.Animatable
+import androidx.compose.animation.core.VectorConverter
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
@@ -11,19 +14,28 @@ import de.mm20.launcher2.ktx.isAtLeastApiLevel
@Composable
fun WallpaperBlur(blurRadius: () -> Int) {
+ if (!isAtLeastApiLevel(31)) return
val context = LocalContext.current
val density = LocalDensity.current
+
val radius = blurRadius()
+ val animatable = remember { Animatable(radius, Int.VectorConverter) }
LaunchedEffect(radius) {
- if (!isAtLeastApiLevel(31)) return@LaunchedEffect
- (context as Activity).window.attributes = context.window.attributes.also {
- if (radius > 0) {
- it.blurBehindRadius = with(density) { radius.dp.toPx().toInt() }
- it.flags = it.flags or WindowManager.LayoutParams.FLAG_BLUR_BEHIND
+ animatable.animateTo(with(density) { radius.dp.toPx().toInt() }) {
+ if (value > 0) {
+ val windowAttributes = (context as Activity).window.attributes
+ windowAttributes.flags =
+ windowAttributes.flags or WindowManager.LayoutParams.FLAG_BLUR_BEHIND
+ context.window.attributes = windowAttributes
+ context.window.setBackgroundBlurRadius(value)
} else {
- it.blurBehindRadius = 0
- it.flags = it.flags and WindowManager.LayoutParams.FLAG_BLUR_BEHIND.inv()
+ val windowAttributes = (context as Activity).window.attributes
+ windowAttributes.flags =
+ windowAttributes.flags and WindowManager.LayoutParams.FLAG_BLUR_BEHIND.inv()
+ context.window.attributes = windowAttributes
+ context.window.setBackgroundBlurRadius(0)
}
}
+
}
}
\ No newline at end of file
diff --git a/core/base/src/main/res/values/themes.xml b/core/base/src/main/res/values/themes.xml
index 8ce9a76f..6bfe2a17 100644
--- a/core/base/src/main/res/values/themes.xml
+++ b/core/base/src/main/res/values/themes.xml
@@ -30,6 +30,7 @@
- false
- true
- shortEdges
+ - true