diff --git a/lawnchair/res/values/config.xml b/lawnchair/res/values/config.xml
index d7be9695aa..791cbf08e1 100644
--- a/lawnchair/res/values/config.xml
+++ b/lawnchair/res/values/config.xml
@@ -32,12 +32,7 @@
- org.withouthat.acalendar
- ws.xsoh.etar
-
-
- - app.lawnchair.lawnicons
- - com.donnnno.arcticons
- - com.whicons.iconpack
-
+ app.lawnchair.icons.THEMED_ICON
com.google.android.deskclock/com.android.deskclock.DeskClock
app.lawnchair.LauncherActivityCachingLogic
app.lawnchair.LawnchairProcessInitializer
diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
index c8f1889fc0..9933123e42 100644
--- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
+++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
@@ -51,7 +51,7 @@ import app.lawnchair.root.RootNotAvailableException
import app.lawnchair.search.LawnchairSearchAdapterProvider
import app.lawnchair.theme.ThemeProvider
import app.lawnchair.ui.popup.LawnchairShortcut
-import app.lawnchair.util.isPackageInstalled
+import app.lawnchair.util.getThemedIconPacksInstalled
import com.android.launcher3.*
import com.android.launcher3.R
import com.android.launcher3.allapps.AllAppsContainerView
@@ -226,7 +226,7 @@ class LawnchairLauncher : QuickstepLauncher(), LifecycleOwner,
// Handle update from version 12 Alpha 4 to version 12 Alpha 5.
if (
prefs.themedIcons.get() &&
- !resources.getStringArray(R.array.themed_icon_packs).any { packageManager.isPackageInstalled(it) }
+ packageManager.getThemedIconPacksInstalled(this).isEmpty()
) {
prefs.themedIcons.set(newValue = false)
}
diff --git a/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt b/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt
index 1fe75b106d..295fe8e569 100644
--- a/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt
+++ b/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt
@@ -9,14 +9,12 @@ import android.os.Process
import android.os.UserHandle
import com.android.launcher3.icons.ClockDrawableWrapper
import com.android.launcher3.util.MainThreadInitializedObject
-import com.android.launcher3.icons.R
import android.graphics.drawable.InsetDrawable
import android.graphics.drawable.AdaptiveIconDrawable
-import app.lawnchair.icons.CustomAdaptiveIconDrawable
import com.android.launcher3.icons.ThemedIconDrawable
import android.graphics.drawable.ColorDrawable
import app.lawnchair.icons.*
-import app.lawnchair.util.Constants.LAWNICONS_PACKAGE_NAME
+import app.lawnchair.util.getThemedIconPacksInstalled
@@ -24,7 +22,6 @@ class IconPackProvider(private val context: Context) {
private val systemIconPack = SystemIconPack(context)
private val iconPacks = mutableMapOf()
- private val themedIconPacks = context.resources.getStringArray(R.array.themed_icon_packs)
fun getIconPackOrSystem(packageName: String): IconPack? {
if (packageName.isEmpty()) return systemIconPack
@@ -52,12 +49,14 @@ class IconPackProvider(private val context: Context) {
fun getDrawable(iconEntry: IconEntry, iconDpi: Int, user: UserHandle): Drawable? {
val iconPack = getIconPackOrSystem(iconEntry.packPackageName) ?: return null
iconPack.loadBlocking()
+ val packageManager = context.packageManager
val drawable = iconPack.getIcon(iconEntry, iconDpi) ?: return null
+ val themedIconPacks = packageManager.getThemedIconPacksInstalled(context)
if (
context.isThemedIconsEnabled() && iconEntry.packPackageName in themedIconPacks
) {
val themedColors: IntArray = ThemedIconDrawable.getThemedColors(context)
- val res = context.packageManager.getResourcesForApplication(iconEntry.packPackageName)
+ val res = packageManager.getResourcesForApplication(iconEntry.packPackageName)
@SuppressLint("DiscouragedApi")
val resId = res.getIdentifier(iconEntry.name, "drawable", iconEntry.packPackageName)
val bg: Drawable = ColorDrawable(themedColors[0])
diff --git a/lawnchair/src/app/lawnchair/icons/LawnchairIconProvider.kt b/lawnchair/src/app/lawnchair/icons/LawnchairIconProvider.kt
index 10bba7909e..a63ab5b3f9 100644
--- a/lawnchair/src/app/lawnchair/icons/LawnchairIconProvider.kt
+++ b/lawnchair/src/app/lawnchair/icons/LawnchairIconProvider.kt
@@ -58,7 +58,7 @@ class LawnchairIconProvider @JvmOverloads constructor(
lawniconsVersion =
if (isSupported) context.packageManager.getPackageVersionCode(LAWNICONS_PACKAGE_NAME)
else 0L
- _themeMap = if (isSupported) null else DISABLED_MAP
+ _themeMap = if (isSupported && lawniconsVersion in 1..3) null else DISABLED_MAP
}
private fun resolveIconEntry(componentName: ComponentName, user: UserHandle): IconEntry? {
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt
index 8e2a356812..fef2bbc57a 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt
@@ -56,6 +56,7 @@ import app.lawnchair.preferences.PreferenceAdapter
import app.lawnchair.preferences.getAdapter
import app.lawnchair.preferences.preferenceManager
import app.lawnchair.ui.preferences.components.*
+import app.lawnchair.util.getThemedIconPacksInstalled
import app.lawnchair.util.isPackageInstalled
import com.android.launcher3.R
import com.google.accompanist.drawablepainter.rememberDrawablePainter
@@ -133,8 +134,8 @@ fun IconPackPreferences() {
modifier = Modifier.padding(bottom = 8.dp),
)
PreferenceGroup {
- val themedIconsAvailable = LocalContext.current.resources
- .getStringArray(R.array.themed_icon_packs)
+ val themedIconsAvailable = LocalContext.current.packageManager
+ .getThemedIconPacksInstalled(LocalContext.current)
.any { LocalContext.current.packageManager.isPackageInstalled(it) }
ListPreference(
enabled = themedIconsAvailable,
diff --git a/lawnchair/src/app/lawnchair/util/Constants.kt b/lawnchair/src/app/lawnchair/util/Constants.kt
index ddb5d67b78..d519822770 100644
--- a/lawnchair/src/app/lawnchair/util/Constants.kt
+++ b/lawnchair/src/app/lawnchair/util/Constants.kt
@@ -2,4 +2,4 @@ package app.lawnchair.util
object Constants {
const val LAWNICONS_PACKAGE_NAME = "app.lawnchair.lawnicons"
-}
\ No newline at end of file
+}
diff --git a/lawnchair/src/app/lawnchair/util/PackageManagerExtensions.kt b/lawnchair/src/app/lawnchair/util/PackageManagerExtensions.kt
index be7c2d2410..9c17929abe 100644
--- a/lawnchair/src/app/lawnchair/util/PackageManagerExtensions.kt
+++ b/lawnchair/src/app/lawnchair/util/PackageManagerExtensions.kt
@@ -2,6 +2,11 @@ package app.lawnchair.util
import android.content.pm.PackageManager
import com.android.launcher3.Utilities
+import android.content.Intent
+import android.content.pm.ApplicationInfo
+import android.content.ComponentName
+import android.content.Context
+import com.android.launcher3.icons.R
fun PackageManager.isPackageInstalled(packageName: String): Boolean =
try {
@@ -27,3 +32,15 @@ fun PackageManager.isPackageInstalledAndEnabled(packageName: String) = try {
} catch (_: PackageManager.NameNotFoundException) {
false
}
+
+fun PackageManager.getThemedIconPacksInstalled(context: Context): List =
+ try {
+ queryIntentActivityOptions(
+ ComponentName(context.applicationInfo.packageName, context.applicationInfo.className),
+ null,
+ Intent(context.resources.getString(R.string.icon_packs_intent_name)),
+ PackageManager.GET_RESOLVED_FILTER
+ ).map { it.activityInfo.packageName }
+ } catch (_: PackageManager.NameNotFoundException) {
+ emptyList()
+ }
diff --git a/platform_frameworks_libs_systemui b/platform_frameworks_libs_systemui
index a43bbb7976..1827de15c6 160000
--- a/platform_frameworks_libs_systemui
+++ b/platform_frameworks_libs_systemui
@@ -1 +1 @@
-Subproject commit a43bbb79763fcfacb80f0949b6199fbcf2b1f494
+Subproject commit 1827de15c65f4ebcaab798b5e1a0a2569851e4a4
diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java
index 0f0ac715ec..23eab13b6c 100644
--- a/src/com/android/launcher3/model/PackageUpdatedTask.java
+++ b/src/com/android/launcher3/model/PackageUpdatedTask.java
@@ -152,8 +152,14 @@ public class PackageUpdatedTask extends BaseModelUpdateTask {
if (packages[i].equals(pm.getIconPackPackage().get())) {
pm.getIconPackPackage().set("");
};
- if (Arrays.stream(context.getResources().getStringArray(R.array.themed_icon_packs))
- .noneMatch(it -> packageManagerHelper.isAppInstalled(it, mUser))) {
+ final boolean isThemedIconsAvailable = context.getPackageManager()
+ .queryIntentActivityOptions(
+ new ComponentName(context.getApplicationInfo().packageName, context.getApplicationInfo().className),
+ null,
+ new Intent(context.getResources().getString(R.string.icon_packs_intent_name)),
+ PackageManager.GET_RESOLVED_FILTER).stream().map(it -> it.activityInfo.packageName)
+ .noneMatch(it -> packageManagerHelper.isAppInstalled(it, mUser));
+ if (isThemedIconsAvailable) {
pm.getThemedIcons().set(false);
}
}