AudioService: fix volumegroup mute sync

When aligning the mute state of streams and volume groups, make sure
the volume group is not unmuted if the stream is muted.

Bug: 266211560
Test: repro steps in bug
Change-Id: I073b89a84d160e47511ee77ff486681ffa41ea3f
This commit is contained in:
Eric Laurent
2023-02-02 16:33:54 +01:00
parent 498f1e905c
commit 1aee644977

View File

@@ -5202,7 +5202,8 @@ public class AudioService extends IAudioService.Stub
if (!shouldMute) {
// unmute
// ring and notifications volume should never be 0 when not silenced
if (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_RING) {
if (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_RING
|| mStreamVolumeAlias[streamType] == AudioSystem.STREAM_NOTIFICATION) {
synchronized (VolumeStreamState.class) {
final VolumeStreamState vss = mStreamStates[streamType];
for (int i = 0; i < vss.mIndexMap.size(); i++) {
@@ -5927,6 +5928,8 @@ public class AudioService extends IAudioService.Stub
}
}
readVolumeGroupsSettings(userSwitch);
// apply new ringer mode before checking volume for alias streams so that streams
// muted by ringer mode have the correct volume
setRingerModeInt(getRingerModeInternal(), false);
@@ -5944,8 +5947,6 @@ public class AudioService extends IAudioService.Stub
}
}
readVolumeGroupsSettings(userSwitch);
if (DEBUG_VOL) {
Log.d(TAG, "Restoring device volume behavior");
}
@@ -8387,7 +8388,8 @@ public class AudioService extends IAudioService.Stub
// Only propage mute of stream when applicable
if (isMutable()) {
// For call stream, align mute only when muted, not when index is set to 0
mVolumeGroupState.mute(forceMuteState ? mIsMuted : groupIndex == 0);
mVolumeGroupState.mute(
forceMuteState ? mIsMuted : groupIndex == 0 || mIsMuted);
}
}
}