Reload icons when updating Lawnicons

This commit is contained in:
Suphon Thanakornpakapong
2021-11-02 10:08:13 +07:00
parent c6b8e65bfb
commit 5649cdc97e
2 changed files with 44 additions and 2 deletions
@@ -15,6 +15,7 @@ import android.util.Log
import androidx.core.content.getSystemService
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.util.MultiSafeCloseable
import app.lawnchair.util.getPackageVersionCode
import app.lawnchair.util.isPackageInstalled
import com.android.launcher3.icons.IconProvider
import com.android.launcher3.icons.ThemedIconDrawable
@@ -31,6 +32,7 @@ class LawnchairIconProvider @JvmOverloads constructor(
private val iconPackPref = prefs.iconPackPackage
private val iconPackProvider = IconPackProvider.INSTANCE.get(context)
private val iconPack get() = iconPackProvider.getIconPack(iconPackPref.get())?.apply { loadBlocking() }
private var lawniconsVersion = context.packageManager.getPackageVersionCode(LAWNICONS_PACKAGE_NAME)
override fun getIconWithOverrides(
packageName: String,
@@ -87,7 +89,7 @@ class LawnchairIconProvider @JvmOverloads constructor(
}
override fun getSystemIconState(): String {
return super.getSystemIconState() + ",pack:${iconPackPref.get()}"
return super.getSystemIconState() + ",pack:${iconPackPref.get()},lawnicons:${lawniconsVersion}"
}
override fun registerIconChangeListener(
@@ -97,6 +99,7 @@ class LawnchairIconProvider @JvmOverloads constructor(
return MultiSafeCloseable().apply {
add(super.registerIconChangeListener(callback, handler))
add(IconPackChangeReceiver(context, handler, callback))
add(LawniconsChangeReceiver(context, handler, callback))
}
}
@@ -176,6 +179,33 @@ class LawnchairIconProvider @JvmOverloads constructor(
}
}
private inner class LawniconsChangeReceiver(
private val context: Context, handler: Handler,
private val callback: IconChangeListener
) : BroadcastReceiver(), SafeCloseable {
init {
val filter = IntentFilter(ACTION_PACKAGE_ADDED)
filter.addAction(ACTION_PACKAGE_CHANGED)
filter.addAction(ACTION_PACKAGE_REMOVED)
filter.addDataScheme("package")
filter.addDataSchemeSpecificPart(LAWNICONS_PACKAGE_NAME, 0)
context.registerReceiver(this, filter, null, handler)
}
override fun onReceive(context: Context, intent: Intent) {
if (themedIconMap.isNotEmpty()) {
lawniconsVersion = context.packageManager.getPackageVersionCode(LAWNICONS_PACKAGE_NAME)
mThemedIconMap = null
callback.onSystemIconStateChanged(systemIconState)
}
}
override fun close() {
context.unregisterReceiver(this)
}
}
override fun getThemedIconMap(): MutableMap<String, ThemedIconDrawable.ThemeData> {
if (mThemedIconMap != null) return mThemedIconMap
val map = ArrayMap<String, ThemedIconDrawable.ThemeData>()
@@ -1,6 +1,7 @@
package app.lawnchair.util
import android.content.pm.PackageManager
import com.android.launcher3.Utilities
fun PackageManager.isPackageInstalled(packageName: String) =
try {
@@ -8,4 +9,15 @@ fun PackageManager.isPackageInstalled(packageName: String) =
true
} catch (e: PackageManager.NameNotFoundException) {
false
}
}
fun PackageManager.getPackageVersionCode(packageName: String) =
try {
val info = getPackageInfo(packageName, 0)
when {
Utilities.ATLEAST_P -> info.longVersionCode
else -> info.versionCode.toLong()
}
} catch (e: PackageManager.NameNotFoundException) {
-1L
}