summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-06-16 07:44:19 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-06-16 07:44:19 +0000
commit1edb0edd95597c135a9caff3bbcefa62f6f34aeb (patch)
treec9158a1eba1e06b6ec607612a0aa3ae2c51a9b41
parented02b740c1c9cd1be42d0e370e3567d0fe4b2ca6 (diff)
parentab199ee55be7773e664e70efbd702d47fb0e70ee (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.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}.
*/