From ed4d230821c9b3669fd8b0b48c852363e5a3736b Mon Sep 17 00:00:00 2001 From: Howard Wu <40033067+Howard20181@users.noreply.github.com> Date: Mon, 29 Nov 2021 19:08:03 +0800 Subject: [PATCH] [core] Fix broadcast on Android 12 (#1456) --- .../org/lsposed/lspd/service/ActivityManagerService.java | 6 +++++- .../main/java/org/lsposed/lspd/service/ConfigManager.java | 5 +++-- .../src/main/java/android/app/IActivityManager.java | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java b/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java index 22e1eec4..8b16d316 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java @@ -78,7 +78,11 @@ public class ActivityManagerService { int appOp, Bundle options, boolean serialized, boolean sticky, int userId) throws RemoteException { IActivityManager am = getActivityManager(); if (am == null || thread == null) return -1; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return am.broadcastIntentWithFeature(thread, callingFeatureId, intent, resolvedType, resultTo, + resultCode, resultData, null, requiredPermissions, null, appOp, null, + serialized, sticky, userId); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { return am.broadcastIntentWithFeature(thread, callingFeatureId, intent, resolvedType, resultTo, resultCode, resultData, map, requiredPermissions, appOp, options, serialized, sticky, userId); } else { return am.broadcastIntent(thread, intent, resolvedType, resultTo, resultCode, resultData, map, requiredPermissions, appOp, options, serialized, sticky, userId); diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 546e9b13..3fbf2c19 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -719,12 +719,13 @@ public class ConfigManager { self.packageName = packageName; self.userId = 0; scopes.add(self); + int finalMid = mid; executeInTransaction(() -> { - db.delete("scope", "mid = ?", new String[]{String.valueOf(mid)}); + db.delete("scope", "mid = ?", new String[]{String.valueOf(finalMid)}); for (Application app : scopes) { if (app.packageName.equals("android") && app.userId != 0) continue; ContentValues values = new ContentValues(); - values.put("mid", mid); + values.put("mid", finalMid); values.put("app_pkg_name", app.packageName); values.put("user_id", app.userId); db.insertWithOnConflict("scope", null, values, SQLiteDatabase.CONFLICT_IGNORE); diff --git a/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java b/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java index 1b5d417c..8bf427e1 100644 --- a/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java +++ b/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java @@ -33,6 +33,13 @@ import android.os.RemoteException; import androidx.annotation.RequiresApi; public interface IActivityManager extends IInterface { + @RequiresApi(31) + int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, + Intent intent, String resolvedType, IIntentReceiver resultTo, + int resultCode, String resultData, Bundle resultExtras, + String[] requiredPermissions, String[] excludedPermissions, int appOp, Bundle bOptions, + boolean serialized, boolean sticky, int userId) throws RemoteException; + @RequiresApi(30) int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode,