AudioService: prevent unmute on vol raise when muted by ringer/zen

Handle raising volume from muted when the stream is muted by
the ringer or zend mode, just like unmute commands, and
prevent the unmute.
This fixes an issue where in silent/vibrate mode where
STREAM_NOTIFICATION is muted, pressing the volume up button
while a notification is silently playing, would cause
notifications to become unmuted.

Bug: 284257295
Test: atest CtsMediaAudioTestCases:android.media.audio.cts.AudioManagerTest
Change-Id: I0ebc15c6b4430db0737b8dcbeba9346211ddcf0d
This commit is contained in:
Jean-Michel Trivi
2023-06-04 12:36:42 -07:00
parent 79d9f58d95
commit be657aa975

View File

@@ -3277,6 +3277,7 @@ public class AudioService extends IAudioService.Stub
if (mUserSelectedVolumeControlStream) { // implies mVolumeControlStream != -1
streamType = mVolumeControlStream;
} else {
// TODO discard activity on a muted stream?
final int maybeActiveStreamType = getActiveStreamType(suggestedStreamType);
final boolean activeForReal;
if (maybeActiveStreamType == AudioSystem.STREAM_RING
@@ -3480,9 +3481,10 @@ public class AudioService extends IAudioService.Stub
}
} else if (isStreamMutedByRingerOrZenMode(streamTypeAlias) && streamState.mIsMuted) {
// if the stream is currently muted streams by ringer/zen mode
// then it cannot be unmuted (without FLAG_ALLOW_RINGER_MODES)
// then it cannot be unmuted (without FLAG_ALLOW_RINGER_MODES) with an unmute or raise
if (direction == AudioManager.ADJUST_TOGGLE_MUTE
|| direction == AudioManager.ADJUST_UNMUTE) {
|| direction == AudioManager.ADJUST_UNMUTE
|| direction == AudioManager.ADJUST_RAISE) {
adjustVolume = false;
}
}