Add package add/remove handler for presets, optimize the app list loader for presets
This commit is contained in:
parent
e9ecd86816
commit
54a5be645e
6 changed files with 47 additions and 4 deletions
|
|
@ -1,6 +1,4 @@
|
|||
import com.android.build.gradle.internal.api.BaseVariantOutputImpl
|
||||
import org.gradle.kotlin.dsl.register
|
||||
import java.util.*
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.agp.app)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.util.Log
|
||||
import icu.nullptr.hidemyapplist.service.ServiceClient
|
||||
import icu.nullptr.hidemyapplist.util.PackageHelper
|
||||
|
||||
class AppChangeReceiver : BroadcastReceiver() {
|
||||
|
|
@ -31,6 +32,7 @@ class AppChangeReceiver : BroadcastReceiver() {
|
|||
if (intent.action in actions) {
|
||||
Log.i(TAG, "Received intent: $intent")
|
||||
PackageHelper.invalidateCache()
|
||||
ServiceClient.handlePackageEvent(intent.action, intent.data?.encodedSchemeSpecificPart)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,6 +85,10 @@ object ServiceClient : IHMAService, DeathRecipient {
|
|||
getServiceLegacy()?.clearLogs()
|
||||
}
|
||||
|
||||
override fun handlePackageEvent(eventType: String?, packageName: String?) {
|
||||
getServiceLegacy()?.handlePackageEvent(eventType, packageName)
|
||||
}
|
||||
|
||||
override fun syncConfig(json: String) {
|
||||
getServiceLegacy()?.syncConfig(json)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,4 +13,6 @@ interface IHMAService {
|
|||
String getLogs() = 4;
|
||||
|
||||
void clearLogs() = 5;
|
||||
|
||||
void handlePackageEvent(String eventType, String packageName) = 6;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
package icu.nullptr.hidemyapplist.common
|
||||
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.pm.IPackageManager
|
||||
import android.content.pm.PackageManager
|
||||
import icu.nullptr.hidemyapplist.common.Utils.getInstalledApplicationsCompat
|
||||
import icu.nullptr.hidemyapplist.common.Utils.getPackageInfoCompat
|
||||
import icu.nullptr.hidemyapplist.common.presets.BasePreset
|
||||
import icu.nullptr.hidemyapplist.common.presets.CustomROMPreset
|
||||
import icu.nullptr.hidemyapplist.common.presets.RootAppsPreset
|
||||
|
|
@ -31,11 +32,17 @@ class Presets private constructor() {
|
|||
fun getPresetByName(name: String) = presetList.firstOrNull { it.name == name }
|
||||
|
||||
fun reloadPresetsIfEmpty(pms: IPackageManager) {
|
||||
var appsList: List<ApplicationInfo>? = null
|
||||
|
||||
presetList.forEach {
|
||||
if (it.packageNames.isEmpty()) {
|
||||
it.onAddExactPackages()
|
||||
|
||||
for (appInfo in getInstalledApplicationsCompat(pms, PackageManager.GET_META_DATA.toLong(), 0)) {
|
||||
if (appsList == null) {
|
||||
appsList = getInstalledApplicationsCompat(pms, 0, 0)
|
||||
}
|
||||
|
||||
for (appInfo in appsList) {
|
||||
runCatching {
|
||||
it.onReloadPreset(appInfo)
|
||||
}.onFailure { fail ->
|
||||
|
|
@ -48,6 +55,26 @@ class Presets private constructor() {
|
|||
}
|
||||
}
|
||||
|
||||
fun handlePackageAdded(pms: IPackageManager, packageName: String) {
|
||||
val appInfo = getPackageInfoCompat(pms, packageName, 0, 0).applicationInfo ?: return
|
||||
|
||||
presetList.forEach {
|
||||
runCatching {
|
||||
it.onReloadPreset(appInfo)
|
||||
}.onFailure { fail ->
|
||||
loggerFunction?.invoke(fail.toString())
|
||||
}
|
||||
}
|
||||
|
||||
loggerFunction?.invoke("Package add event handled for $packageName!")
|
||||
}
|
||||
|
||||
fun handlePackageRemoved(packageName: String) {
|
||||
presetList.forEach { it.packageNames.remove(packageName) }
|
||||
|
||||
loggerFunction?.invoke("Package remove event handled for $packageName!")
|
||||
}
|
||||
|
||||
init {
|
||||
presetList.add(CustomROMPreset())
|
||||
presetList.add(RootAppsPreset())
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package icu.nullptr.hidemyapplist.xposed
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.pm.IPackageManager
|
||||
import android.os.Build
|
||||
|
|
@ -234,4 +235,13 @@ class HMAService(val pms: IPackageManager) : IHMAService.Stub() {
|
|||
logFile.createNewFile()
|
||||
}
|
||||
}
|
||||
|
||||
override fun handlePackageEvent(eventType: String?, packageName: String?) {
|
||||
if (packageName == null) return
|
||||
|
||||
when (eventType) {
|
||||
Intent.ACTION_PACKAGE_ADDED -> Presets.instance.handlePackageAdded(pms, packageName)
|
||||
Intent.ACTION_PACKAGE_REMOVED -> Presets.instance.handlePackageRemoved(packageName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue