Merge "Wellbeing app can enable QUIET_MODE"

This commit is contained in:
TreeHugger Robot
2019-10-29 09:53:47 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 5 deletions

View File

@@ -4511,9 +4511,9 @@
android:protectionLevel="signature" />
<!-- @SystemApi Allows an application to turn on / off quiet mode.
@hide <p>Not for use by third-party applications. -->
@hide -->
<permission android:name="android.permission.MODIFY_QUIET_MODE"
android:protectionLevel="signature|privileged" />
android:protectionLevel="signature|privileged|wellbeing" />
<!-- Allows internal management of the camera framework
@hide -->

View File

@@ -871,7 +871,7 @@ public class UserManagerService extends IUserManager.Stub {
"target should only be specified when we are disabling quiet mode.");
}
ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), target != null);
ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), userId, target != null);
final long identity = Binder.clearCallingIdentity();
try {
boolean result = false;
@@ -903,13 +903,15 @@ public class UserManagerService extends IUserManager.Stub {
* <li>Has system UID or root UID</li>
* <li>Has {@link Manifest.permission#MODIFY_QUIET_MODE}</li>
* <li>Has {@link Manifest.permission#MANAGE_USERS}</li>
* <li>Is the foreground default launcher app</li>
* </ul>
* <p>
* If caller wants to start an intent after disabling the quiet mode, it must has
* If caller wants to start an intent after disabling the quiet mode, or if it is targeting a
* user in a different profile group from the caller, it must have
* {@link Manifest.permission#MANAGE_USERS}.
*/
private void ensureCanModifyQuietMode(String callingPackage, int callingUid,
boolean startIntent) {
@UserIdInt int targetUserId, boolean startIntent) {
if (hasManageUsersPermission()) {
return;
}
@@ -917,6 +919,10 @@ public class UserManagerService extends IUserManager.Stub {
throw new SecurityException("MANAGE_USERS permission is required to start intent "
+ "after disabling quiet mode.");
}
if (!isSameProfileGroupNoChecks(UserHandle.getUserId(callingUid), targetUserId)) {
throw new SecurityException("MANAGE_USERS permission is required to modify quiet mode "
+ "for a different profile group.");
}
final boolean hasModifyQuietModePermission = hasPermissionGranted(
Manifest.permission.MODIFY_QUIET_MODE, callingUid);
if (hasModifyQuietModePermission) {