parent
13d2f522e2
commit
6b36fe1963
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -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">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user