diff --git a/lawnchair/res/values/config.xml b/lawnchair/res/values/config.xml
index 69ecb61dca..c6e3288197 100644
--- a/lawnchair/res/values/config.xml
+++ b/lawnchair/res/values/config.xml
@@ -32,6 +32,12 @@
- org.withouthat.acalendar
- ws.xsoh.etar
+
+
+ - com.lawnchair.lawnicons
+ - com.donnnno.arcticons
+ - com.whicons.iconpack
+
com.google.android.deskclock/com.android.deskclock.DeskClock
app.lawnchair.LauncherActivityCachingLogic
app.lawnchair.LawnchairProcessInitializer
diff --git a/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt b/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt
index 7c379a3501..1fe75b106d 100644
--- a/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt
+++ b/lawnchair/src/app/lawnchair/icons/IconPackProvider.kt
@@ -1,5 +1,6 @@
package app.lawnchair.icons
+import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
@@ -8,11 +9,22 @@ 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
+
+
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
@@ -41,6 +53,24 @@ class IconPackProvider(private val context: Context) {
val iconPack = getIconPackOrSystem(iconEntry.packPackageName) ?: return null
iconPack.loadBlocking()
val drawable = iconPack.getIcon(iconEntry, iconDpi) ?: return null
+ if (
+ context.isThemedIconsEnabled() && iconEntry.packPackageName in themedIconPacks
+ ) {
+ val themedColors: IntArray = ThemedIconDrawable.getThemedColors(context)
+ val res = context.packageManager.getResourcesForApplication(iconEntry.packPackageName)
+ @SuppressLint("DiscouragedApi")
+ val resId = res.getIdentifier(iconEntry.name, "drawable", iconEntry.packPackageName)
+ val bg: Drawable = ColorDrawable(themedColors[0])
+ val td = ThemedIconDrawable.ThemeData(res, iconEntry.packPackageName, resId)
+ val fg = td.wrapDrawable(drawable, 0)
+ return if (fg is AdaptiveIconDrawable) {
+ val foregroundDr = fg.foreground.apply { setTint(themedColors[1]) }
+ CustomAdaptiveIconDrawable(bg, foregroundDr)
+ } else {
+ val iconFromPack = InsetDrawable(drawable, .3f).apply { setTint(themedColors[1]) }
+ td.wrapDrawable(CustomAdaptiveIconDrawable(bg, iconFromPack), 0)
+ }
+ }
val clockMetadata = if (user == Process.myUserHandle()) iconPack.getClock(iconEntry) else null
if (clockMetadata != null) {
val clockDrawable = ClockDrawableWrapper.forMeta(Build.VERSION.SDK_INT, clockMetadata) {
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt
index d9fef6aea3..8e2a356812 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt
@@ -56,7 +56,6 @@ 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.Constants
import app.lawnchair.util.isPackageInstalled
import com.android.launcher3.R
import com.google.accompanist.drawablepainter.rememberDrawablePainter
@@ -134,8 +133,9 @@ fun IconPackPreferences() {
modifier = Modifier.padding(bottom = 8.dp),
)
PreferenceGroup {
- val themedIconsAvailable = LocalContext.current.packageManager
- .isPackageInstalled(Constants.LAWNICONS_PACKAGE_NAME)
+ val themedIconsAvailable = LocalContext.current.resources
+ .getStringArray(R.array.themed_icon_packs)
+ .any { LocalContext.current.packageManager.isPackageInstalled(it) }
ListPreference(
enabled = themedIconsAvailable,
label = stringResource(id = R.string.themed_icon_title),
diff --git a/platform_frameworks_libs_systemui b/platform_frameworks_libs_systemui
index d33c15f94b..34742ba4c9 160000
--- a/platform_frameworks_libs_systemui
+++ b/platform_frameworks_libs_systemui
@@ -1 +1 @@
-Subproject commit d33c15f94b7a974827b608584a0525efafab5c1c
+Subproject commit 34742ba4c94c9d962668c6732428aaa8c84581cd