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