diff options
| author | 2020-06-16 07:44:19 +0000 | |
|---|---|---|
| committer | 2020-06-16 07:44:19 +0000 | |
| commit | 1edb0edd95597c135a9caff3bbcefa62f6f34aeb (patch) | |
| tree | c9158a1eba1e06b6ec607612a0aa3ae2c51a9b41 | |
| parent | ed02b740c1c9cd1be42d0e370e3567d0fe4b2ca6 (diff) | |
| parent | ab199ee55be7773e664e70efbd702d47fb0e70ee (diff) | |
Merge "Send MANAGED_PROFILE_* broadcasts to apps with MODIFY_QUIET_MODE." into rvc-dev am: ab199ee55b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11838111
Change-Id: I71e873632a99eb565d4875016d9da230e3709feb
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 24 |
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}. */ |