Identify theme supported icon pack by intent (#3116)

* Remove hardcoded Icon pack that supports Themed Icons

* Cleanup

* Trim space

* Moved intent value to xml

Moved

* Build ThemedMap from old lawnicon packs

* fix wrong condition

* resync platform module

Co-authored-by: Goooler <wangzongler@gmail.com>
This commit is contained in:
Naveen
2022-11-20 19:17:52 +05:30
committed by GitHub
parent 52659111fc
commit e61e43952e
9 changed files with 38 additions and 20 deletions

View File

@@ -32,12 +32,7 @@
<item>org.withouthat.acalendar</item>
<item>ws.xsoh.etar</item>
</string-array>
<string-array name="themed_icon_packs" translatable="false">
<!-- The package will working when lawnicons fully converted as iconpack-->
<item>app.lawnchair.lawnicons</item>
<item>com.donnnno.arcticons</item>
<item>com.whicons.iconpack</item>
</string-array>
<string name="icon_packs_intent_name" translatable="false">app.lawnchair.icons.THEMED_ICON</string>
<string name="clock_component_name" translatable="false">com.google.android.deskclock/com.android.deskclock.DeskClock</string>
<string name="launcher_activity_logic_class" translatable="false">app.lawnchair.LauncherActivityCachingLogic</string>
<string name="main_process_initializer_class" translatable="false">app.lawnchair.LawnchairProcessInitializer</string>

View File

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

View File

@@ -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<String, IconPack?>()
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])

View File

@@ -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? {

View File

@@ -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,

View File

@@ -2,4 +2,4 @@ package app.lawnchair.util
object Constants {
const val LAWNICONS_PACKAGE_NAME = "app.lawnchair.lawnicons"
}
}

View File

@@ -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<String> =
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()
}

View File

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