From 8ae3d74512939da39f781259dda6fe401bcc6f64 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Tue, 4 Apr 2023 22:23:43 +0200 Subject: [PATCH] Include unthemed icon variant in icon picker for icon packs that support themed icons --- .../data/customattrs/CustomAttribute.kt | 8 +++- .../de/mm20/launcher2/icons/IconRepository.kt | 42 ++++++++++++++----- .../providers/CustomIconPackIconProvider.kt | 1 + 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/data/customattrs/src/main/java/de/mm20/launcher2/data/customattrs/CustomAttribute.kt b/data/customattrs/src/main/java/de/mm20/launcher2/data/customattrs/CustomAttribute.kt index 6bb317aa..6f7bf48e 100644 --- a/data/customattrs/src/main/java/de/mm20/launcher2/data/customattrs/CustomAttribute.kt +++ b/data/customattrs/src/main/java/de/mm20/launcher2/data/customattrs/CustomAttribute.kt @@ -82,13 +82,15 @@ sealed class CustomIcon : CustomAttribute { CustomIconPackIcon( iconPackageName = legacyComponentName.packageName, iconActivityName = legacyComponentName.className, - iconPackPackage = payload.getString("icon_pack") + iconPackPackage = payload.getString("icon_pack"), + allowThemed = payload.optBoolean("allow_themed", true), ) } else { CustomIconPackIcon( iconPackageName = payload.optString("package").takeIf { it.isNotEmpty() } ?: return null, iconActivityName = payload.optString("activity").takeIf { it.isNotEmpty() }, - iconPackPackage = payload.getString("icon_pack") + iconPackPackage = payload.getString("icon_pack"), + allowThemed = payload.optBoolean("allow_themed", true), ) } } @@ -118,6 +120,7 @@ data class CustomIconPackIcon( val iconPackPackage: String, val iconPackageName: String, val iconActivityName: String?, + val allowThemed: Boolean = true, ) : CustomIcon() { override fun toDatabaseValue(): String { return jsonObjectOf( @@ -125,6 +128,7 @@ data class CustomIconPackIcon( "package" to iconPackageName, "activity" to iconActivityName, "icon_pack" to iconPackPackage, + "allow_themed" to allowThemed, ).toString() } } diff --git a/services/icons/src/main/java/de/mm20/launcher2/icons/IconRepository.kt b/services/icons/src/main/java/de/mm20/launcher2/icons/IconRepository.kt index bd257d0d..f97223ea 100644 --- a/services/icons/src/main/java/de/mm20/launcher2/icons/IconRepository.kt +++ b/services/icons/src/main/java/de/mm20/launcher2/icons/IconRepository.kt @@ -359,16 +359,38 @@ class IconRepository( suspend fun searchCustomIcons(query: String, iconPack: IconPack?): List { val transformations = this.transformations.first() - val iconPackIcons = iconPackManager.searchIconPackIcon(query, iconPack).mapNotNull { - CustomIconWithPreview( - customIcon = CustomIconPackIcon( - iconPackPackage = it.iconPack, - iconActivityName = it.activityName, - iconPackageName = it.packageName, - ), - preview = iconPackManager.getIcon(it.iconPack, it.packageName, it.activityName) - ?.transform(transformations) ?: return@mapNotNull null - ) + val iconPackIcons = iconPackManager.searchIconPackIcon(query, iconPack).flatMap { + val unthemedIcon = if (it.themed) { + iconPackManager.getIcon(it.iconPack, it.packageName, it.activityName, false) + ?.transform(transformations) + } else null + val icon = iconPackManager.getIcon(it.iconPack, it.packageName, it.activityName, true) + ?.transform(transformations) + + buildList { + if (icon != null) { + add(CustomIconWithPreview( + customIcon = CustomIconPackIcon( + iconPackPackage = it.iconPack, + iconActivityName = it.activityName, + iconPackageName = it.packageName, + allowThemed = true + ), + preview = icon + )) + } + if (unthemedIcon != null) { + add(CustomIconWithPreview( + customIcon = CustomIconPackIcon( + iconPackPackage = it.iconPack, + iconActivityName = it.activityName, + iconPackageName = it.packageName, + allowThemed = false + ), + preview = unthemedIcon + )) + } + } } return iconPackIcons diff --git a/services/icons/src/main/java/de/mm20/launcher2/icons/providers/CustomIconPackIconProvider.kt b/services/icons/src/main/java/de/mm20/launcher2/icons/providers/CustomIconPackIconProvider.kt index d1f0d2c6..dfd0661e 100644 --- a/services/icons/src/main/java/de/mm20/launcher2/icons/providers/CustomIconPackIconProvider.kt +++ b/services/icons/src/main/java/de/mm20/launcher2/icons/providers/CustomIconPackIconProvider.kt @@ -15,6 +15,7 @@ class CustomIconPackIconProvider( customIcon.iconPackPackage, customIcon.iconPackageName, customIcon.iconActivityName, + customIcon.allowThemed, ) } } \ No newline at end of file