mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
Support themed icons for 3rd party icon packs (#3091)
Co-authored-by: Goooler <wangzongler@gmail.com>
This commit is contained in:
@@ -32,6 +32,12 @@
|
||||
<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>com.lawnchair.lawnicons</item>
|
||||
<item>com.donnnno.arcticons</item>
|
||||
<item>com.whicons.iconpack</item>
|
||||
</string-array>
|
||||
<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>
|
||||
|
||||
@@ -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<String, IconPack?>()
|
||||
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) {
|
||||
|
||||
@@ -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),
|
||||
|
||||
Submodule platform_frameworks_libs_systemui updated: d33c15f94b...34742ba4c9
Reference in New Issue
Block a user