Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4c2d213 authored by Vlad Popa's avatar Vlad Popa
Browse files

Report new abs vol stream on contextual vol update

Also make sure to enable/disable the abs device based on the avrcp support.

Test: manual
Flag: EXEMPT bugfix
Bug: 353846039
Change-Id: I3bc43670c7692f882e5cdc790e272ecdd3e685e5
parent 85be9f7c
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -2031,8 +2031,11 @@ public class AudioService extends IAudioService.Stub
        synchronized (mCachedAbsVolDrivingStreamsLock) {
            mCachedAbsVolDrivingStreams.forEach((dev, stream) -> {
                mAudioSystem.setDeviceAbsoluteVolumeEnabled(dev, /*address=*/"", /*enabled=*/true,
                        stream);
                boolean enabled = true;
                if (dev == AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP) {
                    enabled = mAvrcpAbsVolSupported;
                }
                mAudioSystem.setDeviceAbsoluteVolumeEnabled(dev, /*address=*/"", enabled, stream);
            });
        }
@@ -4828,6 +4831,20 @@ public class AudioService extends IAudioService.Stub
    private void onUpdateContextualVolumes() {
        final int streamType = getBluetoothContextualVolumeStream();
        synchronized (mCachedAbsVolDrivingStreamsLock) {
            mCachedAbsVolDrivingStreams.replaceAll((absDev, stream) -> {
                boolean enabled = true;
                if (absDev == AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP) {
                    enabled = mAvrcpAbsVolSupported;
                }
                if (stream != streamType) {
                    mAudioSystem.setDeviceAbsoluteVolumeEnabled(absDev, /*address=*/"",
                            enabled, streamType);
                }
                return streamType;
            });
        }
        final Set<Integer> deviceTypes = getDeviceSetForStreamDirect(streamType);
        final Set<Integer> absVolumeMultiModeCaseDevices =
                AudioSystem.intersectionAudioDeviceTypes(
@@ -6447,17 +6464,6 @@ public class AudioService extends IAudioService.Stub
                // change of mode may require volume to be re-applied on some devices
                onUpdateContextualVolumes();
                synchronized (mCachedAbsVolDrivingStreamsLock) {
                    mCachedAbsVolDrivingStreams.replaceAll((absDev, stream) -> {
                        int streamToDriveAbs = getBluetoothContextualVolumeStream();
                        if (stream != streamToDriveAbs) {
                            mAudioSystem.setDeviceAbsoluteVolumeEnabled(absDev, /*address=*/
                                    "", /*enabled*/true, streamToDriveAbs);
                        }
                        return streamToDriveAbs;
                    });
                }
                // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all SCO
                // connections not started by the application changing the mode when pid changes
                mDeviceBroker.postSetModeOwner(mode, pid, uid);