From 7d2c599e96e4c875d16776773ee8989a6b0c3acb Mon Sep 17 00:00:00 2001 From: Nullptr Date: Sat, 14 Jan 2023 23:58:58 +0800 Subject: [PATCH] Implement block scope request --- .../main/java/org/lsposed/lspd/service/ConfigManager.java | 4 +++- .../java/org/lsposed/lspd/service/LSPModuleService.java | 8 ++++++-- .../java/org/lsposed/lspd/service/LSPosedService.java | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 5a12ae64..7268f5c7 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -274,7 +274,8 @@ public class ConfigManager { bool = config.get("enable_status_notification"); enableStatusNotification = bool == null || (boolean) bool; - scopeRequestBlocked = (HashSet) config.get("scope_request_blocked"); + var set = (Set) config.get("scope_request_blocked"); + scopeRequestBlocked = set == null ? new HashSet<>() : set; // Don't migrate to ConfigFileManager, as XSharedPreferences will be restored soon String string = (String) config.get("misc_path"); @@ -705,6 +706,7 @@ public class ConfigManager { for (Application obsoleteModule : obsoleteModules) { Log.d(TAG, "removing obsolete module: " + obsoleteModule.packageName + "/" + obsoleteModule.userId); removeModuleScopeWithoutCache(obsoleteModule); + removeBlockedScopeRequest(obsoleteModule.packageName); } } else { Log.w(TAG, "pm is dead while caching. invalidating..."); diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPModuleService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPModuleService.java index 02727bbb..0e575807 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPModuleService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPModuleService.java @@ -169,8 +169,12 @@ public class LSPModuleService extends IXposedService.Stub { @Override public void requestScope(String packageName, IXposedScopeCallback callback) throws RemoteException { var userId = ensureModule(); - LSPNotificationManager.requestModuleScope(loadedModule.packageName, userId, packageName, callback); - callback.onScopeRequestPrompted(packageName); + if (ConfigManager.getInstance().scopeRequestBlocked(loadedModule.packageName)) { + callback.onScopeRequestDenied(packageName); + } else { + LSPNotificationManager.requestModuleScope(loadedModule.packageName, userId, packageName, callback); + callback.onScopeRequestPrompted(packageName); + } } @Override diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java index 7d0efab8..aa61aa82 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPosedService.java @@ -273,7 +273,8 @@ public class LSPosedService extends ILSPosedService.Stub { iCallback.onScopeRequestTimeout(scopePackageName); break; case "block": - // TODO + ConfigManager.getInstance().blockScopeRequest(packageName); + iCallback.onScopeRequestDenied(scopePackageName); break; } Log.i(TAG, action + " scope " + scopePackageName + " for " + packageName + " in user " + userId);