summaryrefslogtreecommitdiff
path: root/services/devicepolicy
diff options
context:
space:
mode:
authorPierre Barbier de Reuille <pbdr@google.com>2020-06-08 16:16:32 +0100
committerPierre Barbier de Reuille <pbdr@google.com>2020-06-12 22:44:26 +0000
commit9f52188a624d8f5b0007aecdeb57ded5027b99b0 (patch)
tree034a561c5fff5350927956f9a5861dddf13a4814 /services/devicepolicy
parent38694c298c94f8b5d1e9dbbea36371acfdaf28ea (diff)
Send MANAGED_PROFILE_* broadcasts to apps with MODIFY_QUIET_MODE.
Allow apps with MODIFY_QUIET_MODE permission to register broadcast receivers for MANAGED_PROFILE_* in their manifest. Fixes: 158870146 Test: atest 'com.android.cts.devicepolicy.QuietModeHostsideTest#testBroadcastManagedProfileAvailable_withCrossProfileAppsOp' Test: atest 'com.android.cts.devicepolicy.QuietModeHostsideTest#testBroadcastManagedProfileAvailable_withoutCrossProfileAppsOp' Change-Id: I39746c5b3ff3c49f8a903fc52091fcb8d3607c84 (cherry picked from commit cc8b51873bbdd5c1815e58f1c95b478ff7310a88)
Diffstat (limited to 'services/devicepolicy')
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 7b624cae8141..401649a2e522 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -12712,7 +12712,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
for (ResolveInfo receiver : receivers) {
final String packageName = receiver.getComponentInfo().packageName;
if (checkCrossProfilePackagePermissions(packageName, userId,
- requiresPermission)) {
+ requiresPermission)
+ || checkModifyQuietModePermission(packageName, userId)) {
Slog.i(LOG_TAG,
String.format("Sending %s broadcast to %s.", intent.getAction(),
packageName));
@@ -12730,6 +12731,27 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
/**
+ * Checks whether the package {@code packageName} has the {@code MODIFY_QUIET_MODE}
+ * permission granted for the user {@code userId}.
+ */
+ private boolean checkModifyQuietModePermission(String packageName, @UserIdInt int userId) {
+ try {
+ final int uid = Objects.requireNonNull(
+ mInjector.getPackageManager().getApplicationInfoAsUser(
+ Objects.requireNonNull(packageName), /* flags= */ 0, userId)).uid;
+ return PackageManager.PERMISSION_GRANTED
+ == ActivityManager.checkComponentPermission(
+ android.Manifest.permission.MODIFY_QUIET_MODE, uid, /* owningUid= */
+ -1, /* exported= */ true);
+ } catch (NameNotFoundException ex) {
+ Slog.w(LOG_TAG,
+ String.format("Cannot find the package %s to check for permissions.",
+ packageName));
+ return false;
+ }
+ }
+
+ /**
* Checks whether the package {@code packageName} has the required permissions to receive
* cross-profile broadcasts on behalf of the user {@code userId}.
*/