diff options
| author | 2021-10-14 02:51:22 +0000 | |
|---|---|---|
| committer | 2021-10-14 02:51:22 +0000 | |
| commit | 2417a8a4460a83474d76dbfb111764dbd75092fc (patch) | |
| tree | 322a1602d186474454f0bb6500a78ebecd703253 | |
| parent | 6dc43a11fa55551566cf7c610766c1dc68513dc9 (diff) | |
| parent | 1e6a9681266986e1d8ceba55646199c02223c7b8 (diff) | |
Merge "Update the BroadcastQueue logic for runtime permissions"
| -rw-r--r-- | services/core/java/com/android/server/am/BroadcastQueue.java | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index ed70d2b92ecc..8638c7da4da2 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -1588,17 +1588,23 @@ public final class BroadcastQueue { perm = PackageManager.PERMISSION_DENIED; } - if (perm == PackageManager.PERMISSION_GRANTED) { - skip = true; - break; - } - int appOp = AppOpsManager.permissionToOpCode(excludedPermission); if (appOp != AppOpsManager.OP_NONE) { - if (mService.getAppOpsManager().checkOpNoThrow(appOp, + // When there is an app op associated with the permission, + // skip when both the permission and the app op are + // granted. + if ((perm == PackageManager.PERMISSION_GRANTED) && ( + mService.getAppOpsManager().checkOpNoThrow(appOp, info.activityInfo.applicationInfo.uid, info.activityInfo.packageName) - == AppOpsManager.MODE_ALLOWED) { + == AppOpsManager.MODE_ALLOWED)) { + skip = true; + break; + } + } else { + // When there is no app op associated with the permission, + // skip when permission is granted. + if (perm == PackageManager.PERMISSION_GRANTED) { skip = true; break; } |