Include unthemed icon variant in icon picker for icon packs that support themed icons

This commit is contained in:
MM20 2023-04-04 22:23:43 +02:00
parent 6353b38a70
commit 8ae3d74512
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 39 additions and 12 deletions

View File

@ -82,13 +82,15 @@ sealed class CustomIcon : CustomAttribute {
CustomIconPackIcon( CustomIconPackIcon(
iconPackageName = legacyComponentName.packageName, iconPackageName = legacyComponentName.packageName,
iconActivityName = legacyComponentName.className, iconActivityName = legacyComponentName.className,
iconPackPackage = payload.getString("icon_pack") iconPackPackage = payload.getString("icon_pack"),
allowThemed = payload.optBoolean("allow_themed", true),
) )
} else { } else {
CustomIconPackIcon( CustomIconPackIcon(
iconPackageName = payload.optString("package").takeIf { it.isNotEmpty() } ?: return null, iconPackageName = payload.optString("package").takeIf { it.isNotEmpty() } ?: return null,
iconActivityName = payload.optString("activity").takeIf { it.isNotEmpty() }, 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 iconPackPackage: String,
val iconPackageName: String, val iconPackageName: String,
val iconActivityName: String?, val iconActivityName: String?,
val allowThemed: Boolean = true,
) : CustomIcon() { ) : CustomIcon() {
override fun toDatabaseValue(): String { override fun toDatabaseValue(): String {
return jsonObjectOf( return jsonObjectOf(
@ -125,6 +128,7 @@ data class CustomIconPackIcon(
"package" to iconPackageName, "package" to iconPackageName,
"activity" to iconActivityName, "activity" to iconActivityName,
"icon_pack" to iconPackPackage, "icon_pack" to iconPackPackage,
"allow_themed" to allowThemed,
).toString() ).toString()
} }
} }

View File

@ -359,16 +359,38 @@ class IconRepository(
suspend fun searchCustomIcons(query: String, iconPack: IconPack?): List<CustomIconWithPreview> { suspend fun searchCustomIcons(query: String, iconPack: IconPack?): List<CustomIconWithPreview> {
val transformations = this.transformations.first() val transformations = this.transformations.first()
val iconPackIcons = iconPackManager.searchIconPackIcon(query, iconPack).mapNotNull { val iconPackIcons = iconPackManager.searchIconPackIcon(query, iconPack).flatMap {
CustomIconWithPreview( val unthemedIcon = if (it.themed) {
customIcon = CustomIconPackIcon( iconPackManager.getIcon(it.iconPack, it.packageName, it.activityName, false)
iconPackPackage = it.iconPack, ?.transform(transformations)
iconActivityName = it.activityName, } else null
iconPackageName = it.packageName, val icon = iconPackManager.getIcon(it.iconPack, it.packageName, it.activityName, true)
), ?.transform(transformations)
preview = iconPackManager.getIcon(it.iconPack, it.packageName, it.activityName)
?.transform(transformations) ?: return@mapNotNull null buildList<CustomIconWithPreview> {
) 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 return iconPackIcons

View File

@ -15,6 +15,7 @@ class CustomIconPackIconProvider(
customIcon.iconPackPackage, customIcon.iconPackPackage,
customIcon.iconPackageName, customIcon.iconPackageName,
customIcon.iconActivityName, customIcon.iconActivityName,
customIcon.allowThemed,
) )
} }
} }