summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/media/MediaSessionRecord.java26
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java20
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) {