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); } }