Merge "Set LE audio volume when audio mode is changed" am: b731a366a0 am: cc1d0701c1

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2160736

Change-Id: Ia6abacf358f92564363ca0bdcadcaf3efc8f703e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Hyundo Moon
2022-07-28 02:07:42 +00:00
committed by Automerger Merge Worker

View File

@@ -3835,6 +3835,36 @@ 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:
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
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, String callingPackage, private void setStreamVolume(int streamType, int index, int flags, String callingPackage,
String caller, String attributionTag, int uid, String caller, String attributionTag, int uid,
boolean hasModifyAudioSettings) { boolean hasModifyAudioSettings) {
@@ -5207,6 +5237,10 @@ public class AudioService extends IAudioService.Stub
// change of mode may require volume to be re-applied on some devices // change of mode may require volume to be re-applied on some devices
updateAbsVolumeMultiModeDevices(previousMode, mode); 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 // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all SCO
// connections not started by the application changing the mode when pid changes // connections not started by the application changing the mode when pid changes
mDeviceBroker.postSetModeOwnerPid(pid, mode); mDeviceBroker.postSetModeOwnerPid(pid, mode);