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

Commit 86806df3 authored by Jakub Tyszkowski's avatar Jakub Tyszkowski
Browse files

AudioService: Use proper stream context for Le Audio stream volume

When volume level is restored after mode change from incoming call back
to normal mode (media playback) invalid contextual stream was used to
calculate volume level. Should use getBluetoothContextualVolumeStream()
instead.
Additonally, the workaround for some cases where we don't get the proper
LE Audio device was moved into the 'setLeAudioVolumeOnModeUpdate()'.

Bug: 241501978
Tag: #feature
Test: verified manually, missed and placed call scenario, check restored volume value
Change-Id: Ibc1b92c8ea053ccab3cf4c66afce6e6e9c5c9e53
parent b49f8e2e
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -3841,7 +3841,7 @@ public class AudioService extends IAudioService.Stub
        }
    }

    private void setLeAudioVolumeOnModeUpdate(int mode, int streamType, int device) {
    private void setLeAudioVolumeOnModeUpdate(int mode, int device) {
        switch (mode) {
            case AudioSystem.MODE_IN_COMMUNICATION:
            case AudioSystem.MODE_IN_CALL:
@@ -3857,10 +3857,16 @@ public class AudioService extends IAudioService.Stub
                return;
        }

        // Currently, DEVICE_OUT_BLE_HEADSET is the only output type for LE_AUDIO profile.
        // (See AudioDeviceBroker#createBtDeviceInfo())
        int index = mStreamStates[streamType].getIndex(AudioSystem.DEVICE_OUT_BLE_HEADSET);
        int maxIndex = mStreamStates[streamType].getMaxIndex();
        // Forcefully set LE audio volume as a workaround, since in some cases
        // (like the outgoing call) the value of 'device' is not DEVICE_OUT_BLE_*
        // even when BLE is connected.
        if (!AudioSystem.isLeAudioDeviceType(device)) {
            device = AudioSystem.DEVICE_OUT_BLE_HEADSET;
        }

        final int streamType = getBluetoothContextualVolumeStream(mode);
        final int index = mStreamStates[streamType].getIndex(device);
        final int maxIndex = mStreamStates[streamType].getMaxIndex();

        if (DEBUG_VOL) {
            Log.d(TAG, "setLeAudioVolumeOnModeUpdate postSetLeAudioVolumeIndex index="
@@ -5242,9 +5248,7 @@ public class AudioService extends IAudioService.Stub
                // change of mode may require volume to be re-applied on some devices
                updateAbsVolumeMultiModeDevices(previousMode, mode);

                // Forcefully set LE audio volume as a workaround, since the value of 'device'
                // is not DEVICE_OUT_BLE_* even when BLE is connected.
                setLeAudioVolumeOnModeUpdate(mode, streamType, device);
                setLeAudioVolumeOnModeUpdate(mode, device);

                // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all SCO
                // connections not started by the application changing the mode when pid changes