From 2b5208c3583b5fd82564523bfd9e85b4bf44afa0 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 19 Dec 2014 10:07:03 -0800 Subject: [PATCH] MediaSession: unmute stream when adjusting volume Bug: 18482488. Change-Id: I3411f78551cba31aa7f91b5223e015f0b8c1bbb2 --- .../server/media/MediaSessionRecord.java | 26 ++++++++++++++++--- .../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 2c61d2cf5baff..1fba7bbd8f526 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 b4ec607cc5ff6..82be1bbb158f9 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) {