diff options
author | Kenny Guy <kennyguy@google.com> | 2015-06-30 19:18:28 +0100 |
---|---|---|
committer | Kenny Guy <kennyguy@google.com> | 2015-07-08 19:33:13 +0100 |
commit | 70e0c58c2269cd29dfd6420d690da13dc03fd457 (patch) | |
tree | c1e8c5954be896d9c7332f144cf01147259576cd /services/devicepolicy | |
parent | 7fe86c4753e88058a7f1a1bf8d0302df9a64bd2e (diff) | |
download | frameworks_base-70e0c58c2269cd29dfd6420d690da13dc03fd457.zip frameworks_base-70e0c58c2269cd29dfd6420d690da13dc03fd457.tar.gz frameworks_base-70e0c58c2269cd29dfd6420d690da13dc03fd457.tar.bz2 |
Mute correct user from device policy manager.
Add per user versions of mute methods so
device policy manager can mute the correct
user.
Just persist change if the calling user
isn't the current user.
Treat calls to audio manager coming from uid
1000 as if they were coming from current user
rather than user 0 so that the correct user's
user restriction is checked.
Bug: 21782066
Bug: 21778905
Change-Id: I51469b741096d8a2ffdc520eaf5b3fd754f2c819
Diffstat (limited to 'services/devicepolicy')
-rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 5040bd0..ed4fe24 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -4407,15 +4407,25 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { private void clearUserRestrictions(UserHandle userHandle) { - AudioManager audioManager = - (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); Bundle userRestrictions = mUserManager.getUserRestrictions(); mUserManager.setUserRestrictions(new Bundle(), userHandle); + IAudioService iAudioService = IAudioService.Stub.asInterface( + ServiceManager.getService(Context.AUDIO_SERVICE)); if (userRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)) { - audioManager.setMasterMute(false, 0); + try { + iAudioService.setMasterMute(true, 0, mContext.getPackageName(), + userHandle.getIdentifier()); + } catch (RemoteException e) { + // Not much we can do here. + } } if (userRestrictions.getBoolean(UserManager.DISALLOW_UNMUTE_MICROPHONE)) { - audioManager.setMicrophoneMute(false); + try { + iAudioService.setMicrophoneMute(true, mContext.getPackageName(), + userHandle.getIdentifier()); + } catch (RemoteException e) { + // Not much we can do here. + } } } @@ -5426,9 +5436,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { try { if (enabled && !alreadyRestricted) { if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) { - iAudioService.setMicrophoneMute(true, mContext.getPackageName()); + iAudioService.setMicrophoneMute(true, mContext.getPackageName(), + userHandle); } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) { - iAudioService.setMasterMute(true, 0, mContext.getPackageName()); + iAudioService.setMasterMute(true, 0, mContext.getPackageName(), + userHandle); } if (UserManager.DISALLOW_CONFIG_WIFI.equals(key)) { Settings.Secure.putIntForUser(mContext.getContentResolver(), @@ -5480,9 +5492,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } if (!enabled && alreadyRestricted) { if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) { - iAudioService.setMicrophoneMute(false, mContext.getPackageName()); + iAudioService.setMicrophoneMute(false, mContext.getPackageName(), + userHandle); } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) { - iAudioService.setMasterMute(false, 0, mContext.getPackageName()); + iAudioService.setMasterMute(false, 0, mContext.getPackageName(), + userHandle); } } } catch (RemoteException re) { @@ -6031,13 +6045,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { Preconditions.checkNotNull(who, "ComponentName is null"); synchronized (this) { getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); - - IAudioService iAudioService = IAudioService.Stub.asInterface( - ServiceManager.getService(Context.AUDIO_SERVICE)); + int userId = UserHandle.getCallingUserId(); + long identity = Binder.clearCallingIdentity(); try { - iAudioService.setMasterMute(on, 0, who.getPackageName()); + 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 { + Binder.restoreCallingIdentity(identity); } } } |