From 34519d4dcd26fffed7df2b58e4a6037e5f6f36b8 Mon Sep 17 00:00:00 2001 From: Hui Yu Date: Fri, 19 Mar 2021 16:43:50 -0700 Subject: 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 --- services/core/java/com/android/server/am/ActiveServices.java | 4 ++-- .../com/android/server/wm/ActivityTaskManagerInternal.java | 6 ++++++ .../java/com/android/server/wm/ActivityTaskManagerService.java | 10 +++++++++- 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 -- cgit v1.2.3-59-g8ed1b