diff options
| author | 2021-03-19 16:43:50 -0700 | |
|---|---|---|
| committer | 2021-03-19 16:48:17 -0700 | |
| commit | 34519d4dcd26fffed7df2b58e4a6037e5f6f36b8 (patch) | |
| tree | 30f26f7afc3af6b96f0dcdfd2b46932c25d86a35 | |
| parent | 6d65ee195a57838762ce16a2d43e94eb7b95fbce (diff) | |
Call ActivityTaskManagerService's version of hasSystemAlertWindowPermission().
Which checks both AppOps and PackageManager for SYSTEM_ALERT_WINDOW
permission.
Bug: 182491885.
Test: atest cts/tests/app/src/android/app/cts/ActivityManagerFgsBgStartTest.java
Change-Id: I05c19e089bb2d5daa4c8819f009eca2aa0d44c2f
3 files changed, 17 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 3c445ae4b667..643aa71524cf 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -5623,8 +5623,8 @@ public final class ActiveServices { } if (ret == REASON_DENIED) { - if (mAm.checkPermission(SYSTEM_ALERT_WINDOW, callingPid, - callingUid) == PERMISSION_GRANTED) { + if (mAm.mAtmInternal.hasSystemAlertWindowPermission(callingUid, callingPid, + callingPackage)) { ret = REASON_SYSTEM_ALERT_WINDOW_PERMISSION; } } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index e858fe1034b1..77cc0aeb4f27 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -606,4 +606,10 @@ public abstract class ActivityTaskManagerInternal { */ void commit() throws RemoteException; } + + /** + * A utility method to check AppOps and PackageManager for SYSTEM_ALERT_WINDOW permission. + */ + public abstract boolean hasSystemAlertWindowPermission(int callingUid, int callingPid, + String callingPackage); } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 52d110c95e36..5f877d01c022 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -932,7 +932,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { return getUserManager().hasUserRestriction(restriction, userId); } - boolean hasSystemAlertWindowPermission(int callingUid, int callingPid, String callingPackage) { + boolean hasSystemAlertWindowPermission(int callingUid, int callingPid, + String callingPackage) { final int mode = getAppOpsManager().noteOpNoThrow(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, callingUid, callingPackage, /* featureId */ null, ""); if (mode == AppOpsManager.MODE_DEFAULT) { @@ -6369,6 +6370,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { return new PackageConfigurationUpdaterImpl(Binder.getCallingPid()); } } + + @Override + public boolean hasSystemAlertWindowPermission(int callingUid, int callingPid, + String callingPackage) { + return ActivityTaskManagerService.this.hasSystemAlertWindowPermission(callingUid, + callingPid, callingPackage); + } } final class PackageConfigurationUpdaterImpl implements |