mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
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:
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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? {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -2,4 +2,4 @@ package app.lawnchair.util
|
||||
|
||||
object Constants {
|
||||
const val LAWNICONS_PACKAGE_NAME = "app.lawnchair.lawnicons"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Submodule platform_frameworks_libs_systemui updated: a43bbb7976...1827de15c6
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user