From c1205111a92b52283078f1a2e86c8d32c5928b92 Mon Sep 17 00:00:00 2001 From: Tony Mak Date: Fri, 22 Jul 2016 16:02:59 +0100 Subject: [PATCH] Persist master volume mute across reboot Fix: 30133263 Change-Id: I53450a504e40e55516acc88550f369a74a244eaf --- core/java/android/os/UserManager.java | 10 ++++++++++ .../core/java/com/android/server/audio/AudioService.java | 13 +++++++++---- .../java/com/android/server/pm/UserRestrictionsUtils.java | 7 +++++-- .../server/devicepolicy/DevicePolicyManagerService.java | 12 +----------- 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 false. * 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 04997570b89e..ae6276b376b5 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 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 ); /** @@ -436,6 +438,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); } } -- 2.11.0