use progressive blur effect

close #1969
This commit is contained in:
MM20
2026-08-01 16:08:57 +02:00
parent 1b77f1299a
commit a92e10e827
2 changed files with 14 additions and 30 deletions

View File

@@ -2,14 +2,10 @@ 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
import de.mm20.launcher2.ktx.isAtLeastApiLevel
@Composable
@@ -19,22 +15,19 @@ fun WallpaperBlur(blurRadius: () -> Int) {
val density = LocalDensity.current
val radius = blurRadius()
val animatable = remember { Animatable(radius, Int.VectorConverter) }
LaunchedEffect(radius) {
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 {
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)
}
if (radius > 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(radius)
} else {
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)
}
}

View File

@@ -1143,17 +1143,8 @@ internal fun LauncherScaffold(
}
if (config.wallpaperBlurRadius > 0.dp) {
val wallpaperBlur by animateIntAsState(
if (state.currentProgress >= 0.5f && (state.currentComponent?.drawBackground
?: config.homeComponent.drawBackground)
|| state.currentProgress < 0.5f && config.homeComponent.drawBackground
) {
8.dp.toPixels().toInt()
} else {
0
}
)
WallpaperBlur { wallpaperBlur }
val maxRadius = config.wallpaperBlurRadius.toPixels()
WallpaperBlur { (maxRadius * state.currentProgress).toInt() }
}
if (!config.finishOnBack || state.currentProgress > 0) {