From 98d12d309f858faca79fd0d6712ce671cb87a039 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Tue, 25 Oct 2022 21:25:52 +0200 Subject: [PATCH] Fix crash on Android 8.0 --- .../launcher2/ui/theme/WallpaperColors.kt | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/ui/src/main/java/de/mm20/launcher2/ui/theme/WallpaperColors.kt b/ui/src/main/java/de/mm20/launcher2/ui/theme/WallpaperColors.kt index 41399b84..bf457e43 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/theme/WallpaperColors.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/theme/WallpaperColors.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import de.mm20.launcher2.ktx.isAtLeastApiLevel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -39,35 +40,36 @@ data class WallpaperColors( } } -@RequiresApi(Build.VERSION_CODES.O_MR1) @Composable fun wallpaperColorsAsState(): State { val scope = rememberCoroutineScope() val context = LocalContext.current val state = remember { mutableStateOf(WallpaperColors()) } - DisposableEffect(null) { - val wallpaperManager = WallpaperManager.getInstance(context) - val callback = callback@{ colors: android.app.WallpaperColors?, which: Int -> - if (which and WallpaperManager.FLAG_SYSTEM == 0) return@callback - if (colors != null) { - state.value = WallpaperColors.fromPlatformType(colors) - } else { - state.value = WallpaperColors() + if (isAtLeastApiLevel(27)) { + DisposableEffect(null) { + val wallpaperManager = WallpaperManager.getInstance(context) + val callback = callback@{ colors: android.app.WallpaperColors?, which: Int -> + if (which and WallpaperManager.FLAG_SYSTEM == 0) return@callback + if (colors != null) { + state.value = WallpaperColors.fromPlatformType(colors) + } else { + state.value = WallpaperColors() + } } - } - wallpaperManager.addOnColorsChangedListener( - callback, - Handler(Looper.getMainLooper()) - ) + wallpaperManager.addOnColorsChangedListener( + callback, + Handler(Looper.getMainLooper()) + ) - scope.launch { - val colors = withContext(Dispatchers.IO) { - wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM) - } ?: return@launch - state.value = WallpaperColors.fromPlatformType(colors) - } - onDispose { - wallpaperManager.removeOnColorsChangedListener(callback) + scope.launch { + val colors = withContext(Dispatchers.IO) { + wallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM) + } ?: return@launch + state.value = WallpaperColors.fromPlatformType(colors) + } + onDispose { + wallpaperManager.removeOnColorsChangedListener(callback) + } } } return state