diff options
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionRecord.java | 26 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/MediaSessionService.java | 20 |
2 files changed, 35 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 2c61d2c..1fba7bb 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -257,41 +257,59 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { if (mUseMasterVolume) { // If this device only uses master volume and playback is local // just adjust the master volume and return. + boolean isMasterMute = mAudioManager.isMasterMute(); if (isMute) { - mAudioManagerInternal.setMasterMuteForUid(!mAudioManager.isMasterMute(), + mAudioManagerInternal.setMasterMuteForUid(!isMasterMute, flags, packageName, mICallback, uid); } else { mAudioManagerInternal.adjustMasterVolumeForUid(direction, flags, packageName, uid); + if (isMasterMute) { + mAudioManagerInternal.setMasterMuteForUid(false, + flags, packageName, mICallback, uid); + } } return; } int stream = AudioAttributes.toLegacyStreamType(mAudioAttrs); + boolean isStreamMute = mAudioManager.isStreamMute(stream); if (useSuggested) { if (AudioSystem.isStreamActive(stream, 0)) { if (isMute) { - mAudioManager.setStreamMute(stream, !mAudioManager.isStreamMute(stream)); + mAudioManager.setStreamMute(stream, !isStreamMute); } else { mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(stream, direction, flags, packageName, uid); + if (isStreamMute) { + mAudioManager.setStreamMute(stream, false); + } } } else { flags |= previousFlagPlaySound; + isStreamMute = + mAudioManager.isStreamMute(AudioManager.USE_DEFAULT_STREAM_TYPE); if (isMute) { mAudioManager.setStreamMute(AudioManager.USE_DEFAULT_STREAM_TYPE, - !mAudioManager.isStreamMute(AudioManager.USE_DEFAULT_STREAM_TYPE)); + !isStreamMute); } else { mAudioManagerInternal.adjustSuggestedStreamVolumeForUid( AudioManager.USE_DEFAULT_STREAM_TYPE, direction, flags, packageName, uid); + if (isStreamMute) { + mAudioManager.setStreamMute(AudioManager.USE_DEFAULT_STREAM_TYPE, + false); + } } } } else { if (isMute) { - mAudioManager.setStreamMute(stream, !mAudioManager.isStreamMute(stream)); + mAudioManager.setStreamMute(stream, !isStreamMute); } else { mAudioManagerInternal.adjustStreamVolumeForUid(stream, direction, flags, packageName, uid); + if (isStreamMute) { + mAudioManager.setStreamMute(stream, false); + } } } } else { diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index b4ec607..82be1bb 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -829,21 +829,27 @@ public class MediaSessionService extends SystemService implements Monitor { return; } try { + String packageName = getContext().getOpPackageName(); if (mUseMasterVolume) { + boolean isMasterMute = mAudioService.isMasterMute(); if (direction == MediaSessionManager.DIRECTION_MUTE) { - mAudioService.setMasterMute(!mAudioService.isMasterMute(), flags, - getContext().getOpPackageName(), mICallback); + mAudioService.setMasterMute(!isMasterMute, flags, packageName, mICallback); } else { - mAudioService.adjustMasterVolume(direction, flags, - getContext().getOpPackageName()); + mAudioService.adjustMasterVolume(direction, flags, packageName); + if (isMasterMute) { + mAudioService.setMasterMute(false, flags, packageName, mICallback); + } } } else { + boolean isStreamMute = mAudioService.isStreamMute(suggestedStream); if (direction == MediaSessionManager.DIRECTION_MUTE) { - mAudioService.setStreamMute(suggestedStream, - !mAudioService.isStreamMute(suggestedStream), mICallback); + mAudioService.setStreamMute(suggestedStream, !isStreamMute, mICallback); } else { mAudioService.adjustSuggestedStreamVolume(direction, suggestedStream, - flags, getContext().getOpPackageName()); + flags, packageName); + if (isStreamMute) { + mAudioService.setStreamMute(suggestedStream, false, mICallback); + } } } } catch (RemoteException e) { |
