MediaSession: unmute stream when adjusting volume

Bug: 18482488.

Change-Id: I3411f78551cba31aa7f91b5223e015f0b8c1bbb2
This commit is contained in:
Eric Laurent
2014-12-19 10:07:03 -08:00
parent 8a0399c442
commit 2b5208c358
2 changed files with 35 additions and 11 deletions

View File

@@ -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 {

View File

@@ -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) {