diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9cee6b9..591e587 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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) diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/receiver/AppChangeReceiver.kt b/app/src/main/java/icu/nullptr/hidemyapplist/receiver/AppChangeReceiver.kt index 5788cfb..cd11a71 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/receiver/AppChangeReceiver.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/receiver/AppChangeReceiver.kt @@ -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) } } } diff --git a/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt b/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt index a5309d0..adb70f8 100644 --- a/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt +++ b/app/src/main/java/icu/nullptr/hidemyapplist/service/ServiceClient.kt @@ -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) } diff --git a/common/src/main/aidl/icu/nullptr/hidemyapplist/common/IHMAService.aidl b/common/src/main/aidl/icu/nullptr/hidemyapplist/common/IHMAService.aidl index 5a1b986..42a8607 100644 --- a/common/src/main/aidl/icu/nullptr/hidemyapplist/common/IHMAService.aidl +++ b/common/src/main/aidl/icu/nullptr/hidemyapplist/common/IHMAService.aidl @@ -13,4 +13,6 @@ interface IHMAService { String getLogs() = 4; void clearLogs() = 5; + + void handlePackageEvent(String eventType, String packageName) = 6; } diff --git a/common/src/main/java/icu/nullptr/hidemyapplist/common/Presets.kt b/common/src/main/java/icu/nullptr/hidemyapplist/common/Presets.kt index c4445ca..d5053c4 100644 --- a/common/src/main/java/icu/nullptr/hidemyapplist/common/Presets.kt +++ b/common/src/main/java/icu/nullptr/hidemyapplist/common/Presets.kt @@ -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? = 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()) diff --git a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/HMAService.kt b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/HMAService.kt index 1371e5c..29fe9a7 100644 --- a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/HMAService.kt +++ b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/HMAService.kt @@ -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) + } + } }