Merge "Set LE audio volume when audio mode is changed" am: b731a366a0 am: cc1d0701c1 am: 6e5e2c1ee3 am: 93e5af71fe

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

Change-Id: I58ea67ec2e415271024a36b3b01e023890fe29ef
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:57:37 +00:00
committed by Automerger Merge Worker

View File

@@ -3900,6 +3900,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,
String caller, String attributionTag, int uid,
boolean hasModifyAudioSettings) {
@@ -5272,6 +5302,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);