summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/UserManager.java10
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java13
-rw-r--r--services/core/java/com/android/server/pm/UserRestrictionsUtils.java7
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java12
4 files changed, 25 insertions, 17 deletions
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index feb8b2be3c58..1dae0f8e3543 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -580,6 +580,16 @@ public class UserManager {
public static final String DISALLOW_CAMERA = "no_camera";
/**
+ * Specifies if a user is not allowed to unmute the device's master volume.
+ *
+ * @see DevicePolicyManager#setMasterVolumeMuted(ComponentName, boolean)
+ * @see DevicePolicyManager#clearUserRestriction(ComponentName, String)
+ * @see #getUserRestrictions()
+ * @hide
+ */
+ public static final String DISALLLOW_UNMUTE_DEVICE = "disallow_unmute_device";
+
+ /**
* Specifies if a user is not allowed to use cellular data when roaming. This can only be set by
* device owners. The default value is <code>false</code>.
*
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 7777ae23ff29..275870e3d4b0 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -1130,8 +1130,11 @@ public class AudioService extends IAudioService.Stub {
final int currentUser = getCurrentUserId();
// Check the current user restriction.
- boolean masterMute = mUserManagerInternal.getUserRestriction(
- currentUser, UserManager.DISALLOW_ADJUST_VOLUME);
+ boolean masterMute =
+ mUserManagerInternal.getUserRestriction(currentUser,
+ UserManager.DISALLLOW_UNMUTE_DEVICE)
+ || mUserManagerInternal.getUserRestriction(currentUser,
+ UserManager.DISALLOW_ADJUST_VOLUME);
if (mUseFixedVolume) {
masterMute = false;
AudioSystem.setMasterVolume(1.0f);
@@ -5380,9 +5383,11 @@ public class AudioService extends IAudioService.Stub {
// Update speaker mute state.
{
final boolean wasRestricted =
- prevRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME);
+ prevRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)
+ || prevRestrictions.getBoolean(UserManager.DISALLLOW_UNMUTE_DEVICE);
final boolean isRestricted =
- newRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME);
+ newRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)
+ || newRestrictions.getBoolean(UserManager.DISALLLOW_UNMUTE_DEVICE);
if (wasRestricted != isRestricted) {
setMasterMuteInternalNoCallerCheck(isRestricted, /* flags =*/ 0, userId);
}
diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
index 18bc27795494..772c64ea2171 100644
--- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
+++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
@@ -105,7 +105,8 @@ public class UserRestrictionsUtils {
UserManager.DISALLOW_DATA_ROAMING,
UserManager.DISALLOW_SET_USER_ICON,
UserManager.DISALLOW_SET_WALLPAPER,
- UserManager.DISALLOW_OEM_UNLOCK
+ UserManager.DISALLOW_OEM_UNLOCK,
+ UserManager.DISALLLOW_UNMUTE_DEVICE,
});
/**
@@ -150,7 +151,8 @@ public class UserRestrictionsUtils {
private static final Set<String> GLOBAL_RESTRICTIONS = Sets.newArraySet(
UserManager.DISALLOW_ADJUST_VOLUME,
UserManager.DISALLOW_RUN_IN_BACKGROUND,
- UserManager.DISALLOW_UNMUTE_MICROPHONE
+ UserManager.DISALLOW_UNMUTE_MICROPHONE,
+ UserManager.DISALLLOW_UNMUTE_DEVICE
);
/**
@@ -439,6 +441,7 @@ public class UserRestrictionsUtils {
manager.setOemUnlockEnabled(false);
}
}
+ break;
}
} finally {
Binder.restoreCallingIdentity(id);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 159ec4c2c535..feeed8b922da 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -7930,17 +7930,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
Preconditions.checkNotNull(who, "ComponentName is null");
synchronized (this) {
getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
- int userId = UserHandle.getCallingUserId();
- long identity = mInjector.binderClearCallingIdentity();
- try {
- IAudioService iAudioService = IAudioService.Stub.asInterface(
- ServiceManager.getService(Context.AUDIO_SERVICE));
- iAudioService.setMasterMute(on, 0, mContext.getPackageName(), userId);
- } catch (RemoteException re) {
- Slog.e(LOG_TAG, "Failed to setMasterMute", re);
- } finally {
- mInjector.binderRestoreCallingIdentity(identity);
- }
+ setUserRestriction(who, UserManager.DISALLLOW_UNMUTE_DEVICE, on);
}
}