From a303703d9e3a52db0cd0ecc0fc1145d57685a34a Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sun, 19 Jun 2022 19:39:35 +0200 Subject: [PATCH] Fix crash if adaptive icon foreground or background is null --- .../mm20/launcher2/search/data/LauncherApp.kt | 20 +++++++++------ .../mm20/launcher2/search/data/AppShortcut.kt | 20 +++++++++------ .../mm20/launcher2/search/data/LocalFile.kt | 25 ++++++++++--------- .../launcher2/icons/DynamicCalendarIcon.kt | 22 +++++++++------- .../icons/providers/IconPackIconProvider.kt | 22 +++++++++------- 5 files changed, 63 insertions(+), 46 deletions(-) diff --git a/applications/src/main/java/de/mm20/launcher2/search/data/LauncherApp.kt b/applications/src/main/java/de/mm20/launcher2/search/data/LauncherApp.kt index f030206b..97c5217e 100644 --- a/applications/src/main/java/de/mm20/launcher2/search/data/LauncherApp.kt +++ b/applications/src/main/java/de/mm20/launcher2/search/data/LauncherApp.kt @@ -53,14 +53,18 @@ class LauncherApp( } ?: return null if (icon is AdaptiveIconDrawable) { return StaticLauncherIcon( - foregroundLayer = StaticIconLayer( - icon = icon.foreground, - scale = 1.5f, - ), - backgroundLayer = StaticIconLayer( - icon = icon.background, - scale = 1.5f, - ) + foregroundLayer = icon.foreground?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, + backgroundLayer = icon.background?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, ) } else { return StaticLauncherIcon( diff --git a/appshortcuts/src/main/java/de/mm20/launcher2/search/data/AppShortcut.kt b/appshortcuts/src/main/java/de/mm20/launcher2/search/data/AppShortcut.kt index 0810e061..46017ad8 100644 --- a/appshortcuts/src/main/java/de/mm20/launcher2/search/data/AppShortcut.kt +++ b/appshortcuts/src/main/java/de/mm20/launcher2/search/data/AppShortcut.kt @@ -75,14 +75,18 @@ class AppShortcut( } ?: return null if (icon is AdaptiveIconDrawable) { return StaticLauncherIcon( - foregroundLayer = StaticIconLayer( - icon = icon.foreground, - scale = 1.5f, - ), - backgroundLayer = StaticIconLayer( - icon = icon.background, - scale = 1.5f, - ) + foregroundLayer = icon.foreground?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, + backgroundLayer = icon.background?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, ) } return StaticLauncherIcon( diff --git a/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt b/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt index be19685f..00396f82 100644 --- a/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt +++ b/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt @@ -15,10 +15,7 @@ import android.util.Size import androidx.core.content.FileProvider import androidx.exifinterface.media.ExifInterface import de.mm20.launcher2.files.R -import de.mm20.launcher2.icons.ColorLayer -import de.mm20.launcher2.icons.LauncherIcon -import de.mm20.launcher2.icons.StaticIconLayer -import de.mm20.launcher2.icons.StaticLauncherIcon +import de.mm20.launcher2.icons.* import de.mm20.launcher2.ktx.formatToString import de.mm20.launcher2.media.ThumbnailUtilsCompat import kotlinx.coroutines.Dispatchers @@ -120,14 +117,18 @@ open class LocalFile( when { icon is AdaptiveIconDrawable -> { return StaticLauncherIcon( - foregroundLayer = StaticIconLayer( - icon = icon.foreground, - scale = 1.5f, - ), - backgroundLayer = StaticIconLayer( - icon = icon.background, - scale = 1.5f, - ) + foregroundLayer = icon.foreground?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, + backgroundLayer = icon.background?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, ) } else -> { diff --git a/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt b/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt index d7f19806..915670ee 100644 --- a/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt +++ b/icons/src/main/java/de/mm20/launcher2/icons/DynamicCalendarIcon.kt @@ -40,15 +40,19 @@ internal class DynamicCalendarIcon( backgroundLayer = ColorLayer() ) } else if (drawable is AdaptiveIconDrawable) { - StaticLauncherIcon( - foregroundLayer = StaticIconLayer( - icon = drawable.foreground, - scale = 1.5f - ), - backgroundLayer = StaticIconLayer( - icon = drawable.background, - scale = 1.5f - ) + return StaticLauncherIcon( + foregroundLayer = drawable.foreground?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, + backgroundLayer = drawable.background?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, ) } else StaticLauncherIcon( foregroundLayer = StaticIconLayer( diff --git a/icons/src/main/java/de/mm20/launcher2/icons/providers/IconPackIconProvider.kt b/icons/src/main/java/de/mm20/launcher2/icons/providers/IconPackIconProvider.kt index 35b3b713..34acf5a1 100644 --- a/icons/src/main/java/de/mm20/launcher2/icons/providers/IconPackIconProvider.kt +++ b/icons/src/main/java/de/mm20/launcher2/icons/providers/IconPackIconProvider.kt @@ -46,15 +46,19 @@ class IconPackIconProvider( val drawable = ResourcesCompat.getDrawable(res, resId, context.theme) ?: return null return when { drawable is AdaptiveIconDrawable -> { - StaticLauncherIcon( - foregroundLayer = StaticIconLayer( - icon = drawable.foreground, - scale = 1.5f - ), - backgroundLayer = StaticIconLayer( - icon = drawable.background, - scale = 1.5f - ) + return StaticLauncherIcon( + foregroundLayer = drawable.foreground?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, + backgroundLayer = drawable.background?.let { + StaticIconLayer( + icon = it, + scale = 1.5f, + ) + } ?: TransparentLayer, ) } else -> {