diff --git a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/AccessibilityHook.kt b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/AccessibilityHook.kt index e59877f..a3e1360 100644 --- a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/AccessibilityHook.kt +++ b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/AccessibilityHook.kt @@ -39,6 +39,7 @@ class AccessibilityHook(private val service: HMAService) : IFrameworkHook { for (caller in callingApps) { if (service.getEnabledSettingsPresets(caller).contains(AccessibilityPreset.NAME)) { param.result = 0L + service.filterCount++ break } } @@ -53,6 +54,7 @@ class AccessibilityHook(private val service: HMAService) : IFrameworkHook { for (caller in callingApps) { if (service.getEnabledSettingsPresets(caller).contains(AccessibilityPreset.NAME)) { param.result = java.util.ArrayList() + service.filterCount++ break } } @@ -62,7 +64,7 @@ class AccessibilityHook(private val service: HMAService) : IFrameworkHook { } override fun unload() { - hookList.forEach { it.unhook() } + hookList.forEach(XC_MethodHook.Unhook::unhook) hookList.clear() } } \ No newline at end of file diff --git a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ActivityHook.kt b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ActivityHook.kt index fbf7e1c..5386be4 100644 --- a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ActivityHook.kt +++ b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ActivityHook.kt @@ -47,6 +47,7 @@ class ActivityHook(private val service: HMAService) : IFrameworkHook { "@executeRequest: insecure query from $caller, target: ${intent?.component}" ) param.result = fakeReturnCode + service.filterCount++ } }.onFailure { logE(TAG, "Fatal error occurred, ignore hook\n", it) diff --git a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ContentProviderHook.kt b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ContentProviderHook.kt index 5cb0307..883c803 100644 --- a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ContentProviderHook.kt +++ b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/ContentProviderHook.kt @@ -32,7 +32,7 @@ class ContentProviderHook(private val service: HMAService): IFrameworkHook { val name = param.args[3] as String? for (caller in callingApps) { - logD(TAG, "@call caller: $caller, method: $method, name: $name") + // logD(TAG, "@call caller: $caller, method: $method, name: $name") when (method) { "GET_global", "GET_secure", "GET_system" -> { @@ -43,6 +43,7 @@ class ContentProviderHook(private val service: HMAService): IFrameworkHook { putString(Settings.NameValueTable.VALUE, replacement.value) putInt("_generation_index", -1) } + service.filterCount++ } } } diff --git a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/PmsHookTarget34.kt b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/PmsHookTarget34.kt index 3070c02..b2155f2 100644 --- a/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/PmsHookTarget34.kt +++ b/xposed/src/main/java/icu/nullptr/hidemyapplist/xposed/hook/PmsHookTarget34.kt @@ -29,14 +29,13 @@ class PmsHookTarget34(private val service: HMAService) : IFrameworkHook { } } - private var hook: XC_MethodHook.Unhook? = null - private var exphook: XC_MethodHook.Unhook? = null + private val hookList = mutableSetOf() private var lastFilteredApp: AtomicReference = AtomicReference(null) @Suppress("UNCHECKED_CAST") override fun load() { logI(TAG, "Load hook") - hook = findMethod("com.android.server.pm.AppsFilterImpl", findSuper = true) { + hookList += findMethod("com.android.server.pm.AppsFilterImpl", findSuper = true) { name == "shouldFilterApplication" }.hookBefore { param -> runCatching { @@ -64,7 +63,7 @@ class PmsHookTarget34(private val service: HMAService) : IFrameworkHook { } // AOSP exploit - https://github.com/aosp-mirror/platform_frameworks_base/commit/5bc482bd99ea18fe0b4064d486b29d5ae2d65139 // Only 14 QPR2+ has this method - exphook = findMethodOrNull("com.android.server.pm.PackageManagerService", findSuper = true) { + findMethodOrNull("com.android.server.pm.PackageManagerService", findSuper = true) { name == "getArchivedPackageInternal" }?.hookBefore { param -> runCatching { @@ -88,13 +87,13 @@ class PmsHookTarget34(private val service: HMAService) : IFrameworkHook { logE(TAG, "Fatal error occurred, disable hooks", it) unload() } + }?.let { + hookList.add(it) } } override fun unload() { - hook?.unhook() - hook = null - exphook?.unhook() - exphook = null + hookList.forEach(XC_MethodHook.Unhook::unhook) + hookList.clear() } }