Add package add/remove handler for presets, optimize the app list loader for presets

This commit is contained in:
frknkrc44 2025-08-17 23:05:05 +03:00
commit 54a5be645e
No known key found for this signature in database
GPG key ID: 784AE1CC0DCFD34F
6 changed files with 47 additions and 4 deletions

View file

@ -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)

View file

@ -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)
}
}
}

View file

@ -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)
}

View file

@ -13,4 +13,6 @@ interface IHMAService {
String getLogs() = 4;
void clearLogs() = 5;
void handlePackageEvent(String eventType, String packageName) = 6;
}

View file

@ -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())

View file

@ -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)
}
}
}