Fix background blur on Pixel 8

(and other devices (?))

Close #590
This commit is contained in:
MM20 2024-05-23 00:41:43 +02:00
parent 13d2f522e2
commit 6b36fe1963
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 20 additions and 7 deletions

View File

@ -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)
}
}
}
}

View File

@ -30,6 +30,7 @@
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="DialogTheme" parent="BaseTheme">