Merge "Persist master volume mute across reboot" into nyc-mr1-dev

This commit is contained in:
Tony Mak
2016-07-25 10:31:00 +00:00
committed by Android (Google) Code Review
4 changed files with 25 additions and 17 deletions

View File

@@ -579,6 +579,16 @@ public class UserManager {
*/ */
public static final String DISALLOW_CAMERA = "no_camera"; 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 * 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>. * device owners. The default value is <code>false</code>.

View File

@@ -1130,8 +1130,11 @@ public class AudioService extends IAudioService.Stub {
final int currentUser = getCurrentUserId(); final int currentUser = getCurrentUserId();
// Check the current user restriction. // Check the current user restriction.
boolean masterMute = mUserManagerInternal.getUserRestriction( boolean masterMute =
currentUser, UserManager.DISALLOW_ADJUST_VOLUME); mUserManagerInternal.getUserRestriction(currentUser,
UserManager.DISALLLOW_UNMUTE_DEVICE)
|| mUserManagerInternal.getUserRestriction(currentUser,
UserManager.DISALLOW_ADJUST_VOLUME);
if (mUseFixedVolume) { if (mUseFixedVolume) {
masterMute = false; masterMute = false;
AudioSystem.setMasterVolume(1.0f); AudioSystem.setMasterVolume(1.0f);
@@ -5380,9 +5383,11 @@ public class AudioService extends IAudioService.Stub {
// Update speaker mute state. // Update speaker mute state.
{ {
final boolean wasRestricted = final boolean wasRestricted =
prevRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME); prevRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)
|| prevRestrictions.getBoolean(UserManager.DISALLLOW_UNMUTE_DEVICE);
final boolean isRestricted = final boolean isRestricted =
newRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME); newRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)
|| newRestrictions.getBoolean(UserManager.DISALLLOW_UNMUTE_DEVICE);
if (wasRestricted != isRestricted) { if (wasRestricted != isRestricted) {
setMasterMuteInternalNoCallerCheck(isRestricted, /* flags =*/ 0, userId); setMasterMuteInternalNoCallerCheck(isRestricted, /* flags =*/ 0, userId);
} }

View File

@@ -105,7 +105,8 @@ public class UserRestrictionsUtils {
UserManager.DISALLOW_DATA_ROAMING, UserManager.DISALLOW_DATA_ROAMING,
UserManager.DISALLOW_SET_USER_ICON, UserManager.DISALLOW_SET_USER_ICON,
UserManager.DISALLOW_SET_WALLPAPER, 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( private static final Set<String> GLOBAL_RESTRICTIONS = Sets.newArraySet(
UserManager.DISALLOW_ADJUST_VOLUME, UserManager.DISALLOW_ADJUST_VOLUME,
UserManager.DISALLOW_RUN_IN_BACKGROUND, 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); manager.setOemUnlockEnabled(false);
} }
} }
break;
} }
} finally { } finally {
Binder.restoreCallingIdentity(id); Binder.restoreCallingIdentity(id);

View File

@@ -7930,17 +7930,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
Preconditions.checkNotNull(who, "ComponentName is null"); Preconditions.checkNotNull(who, "ComponentName is null");
synchronized (this) { synchronized (this) {
getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
int userId = UserHandle.getCallingUserId(); setUserRestriction(who, UserManager.DISALLLOW_UNMUTE_DEVICE, on);
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);
}
} }
} }