From 0be0ffc86db4919519a0a070e447cc9e9c9f6938 Mon Sep 17 00:00:00 2001 From: Jakub Tyszkowski Date: Wed, 21 Sep 2022 22:13:15 +0000 Subject: [PATCH] BleAudioVolume: Fix calculation for the activated device Fixes the following: - invalid volume level value set for the newly activated BLE device (additional patch for Bluetooth is also provided) - audio FW not being notified about the new volume level when switching to phone call mode Bug: 243334827 Bug: 241501978 Tag: #feature Test: tested manually Change-Id: I46b2004d205ecdec470b84d1403cbd99af734626 --- .../com/android/server/audio/AudioDeviceInventory.java | 3 ++- .../core/java/com/android/server/audio/AudioService.java | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java index c1f496905dbaa..dd0c583f4e12b 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java +++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java @@ -376,7 +376,8 @@ public class AudioDeviceInventory { makeLeAudioDeviceUnavailable(address, btInfo.mAudioSystemDevice); } else if (switchToAvailable) { makeLeAudioDeviceAvailable(address, BtHelper.getName(btInfo.mDevice), - streamType, btInfo.mVolume, btInfo.mAudioSystemDevice, + streamType, btInfo.mVolume == -1 ? -1 : btInfo.mVolume * 10, + btInfo.mAudioSystemDevice, "onSetBtActiveDevice"); } break; diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 56874f74afb11..a43e480382c52 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -3841,7 +3841,7 @@ public class AudioService extends IAudioService.Stub } } - private void setLeAudioVolumeOnModeUpdate(int mode) { + private void setLeAudioVolumeOnModeUpdate(int mode, int streamType, int device) { switch (mode) { case AudioSystem.MODE_IN_COMMUNICATION: case AudioSystem.MODE_IN_CALL: @@ -3857,8 +3857,6 @@ public class AudioService extends IAudioService.Stub 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); @@ -3869,6 +3867,7 @@ public class AudioService extends IAudioService.Stub + index + " maxIndex=" + maxIndex + " streamType=" + streamType); } mDeviceBroker.postSetLeAudioVolumeIndex(index, maxIndex, streamType); + mDeviceBroker.postApplyVolumeOnDevice(streamType, device, "setLeAudioVolumeOnModeUpdate"); } private void setStreamVolume(int streamType, int index, int flags, String callingPackage, @@ -5244,7 +5243,7 @@ public class AudioService extends IAudioService.Stub // 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); + setLeAudioVolumeOnModeUpdate(mode, streamType, 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