diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 59073546fbcc1..56925a35d5fcf 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -3510,11 +3510,12 @@ public class AudioService extends IAudioService.Stub synchronized (VolumeStreamState.class) { List streamsToMute = new ArrayList<>(); for (int stream = 0; stream < mStreamStates.length; stream++) { - if (streamAlias == mStreamVolumeAlias[stream]) { + VolumeStreamState vss = mStreamStates[stream]; + if (streamAlias == mStreamVolumeAlias[stream] && vss.isMutable()) { if (!(readCameraSoundForced() - && (mStreamStates[stream].getStreamType() + && (vss.getStreamType() == AudioSystem.STREAM_SYSTEM_ENFORCED))) { - boolean changed = mStreamStates[stream].mute(state, /* apply= */ false); + boolean changed = vss.mute(state, /* apply= */ false); if (changed) { streamsToMute.add(stream); } @@ -8391,7 +8392,7 @@ public class AudioService extends IAudioService.Stub } mVolumeGroupState.updateVolumeIndex(groupIndex, device); // Only propage mute of stream when applicable - if (mIndexMin == 0 || isCallStream(mStreamType)) { + if (isMutable()) { // For call stream, align mute only when muted, not when index is set to 0 mVolumeGroupState.mute(forceMuteState ? mIsMuted : groupIndex == 0); } @@ -8442,6 +8443,12 @@ public class AudioService extends IAudioService.Stub return mIsMuted || mIsMutedInternally; } + + private boolean isMutable() { + return isStreamAffectedByMute(mStreamType) + && (mIndexMin == 0 || isCallStream(mStreamType)); + } + /** * Mute/unmute the stream * @param state the new mute state