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

Commit c189b909 authored by Hyundo Moon's avatar Hyundo Moon
Browse files

Set LE audio volume when audio mode is changed

Bug: 230643532
Test: Checked the volume is changed when entering call mode
Change-Id: Iae20b03e998a8a6064a85d6e7cf4858c85448618
Merged-In: Iae20b03e998a8a6064a85d6e7cf4858c85448618
parent 3c7368d8
Loading
Loading
Loading
Loading
+36 −6
Original line number Diff line number Diff line
@@ -3934,14 +3934,12 @@ public class AudioService extends IAudioService.Stub
            case AudioSystem.MODE_IN_COMMUNICATION:
            case AudioSystem.MODE_IN_CALL:
            case AudioSystem.MODE_NORMAL:
            case AudioSystem.MODE_CALL_SCREENING:
            case AudioSystem.MODE_CALL_REDIRECT:
            case AudioSystem.MODE_COMMUNICATION_REDIRECT:
                break;
            case AudioSystem.MODE_RINGTONE:
                // not changing anything for ringtone
                return;
            case AudioSystem.MODE_CURRENT:
            case AudioSystem.MODE_INVALID:
            default:
                // don't know what to do in this case, better bail
                // no-op is enough for all other values
                return;
        }
@@ -3964,6 +3962,34 @@ public class AudioService extends IAudioService.Stub
        }
    }
    private void setLeAudioVolumeOnModeUpdate(int mode) {
        switch (mode) {
            case AudioSystem.MODE_IN_COMMUNICATION:
            case AudioSystem.MODE_IN_CALL:
            case AudioSystem.MODE_NORMAL:
            case AudioSystem.MODE_CALL_SCREENING:
            case AudioSystem.MODE_CALL_REDIRECT:
            case AudioSystem.MODE_COMMUNICATION_REDIRECT:
                break;
            default:
                // no-op is enough for all other values
                return;
        }
        int streamType = getBluetoothContextualVolumeStream(mode);
        // 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();
        if (DEBUG_VOL) {
            Log.d(TAG, "setLeAudioVolumeOnModeUpdate postSetLeAudioVolumeIndex index="
                    + index + " maxIndex=" + maxIndex + " streamType=" + streamType);
        }
        mDeviceBroker.postSetLeAudioVolumeIndex(index, maxIndex, streamType);
    }
    private void setStreamVolume(int streamType, int index, int flags,
            @Nullable AudioDeviceAttributes ada,
            String callingPackage, String caller, String attributionTag, int uid,
@@ -5340,6 +5366,10 @@ 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);
                // 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.postSetModeOwnerPid(pid, mode);