From 9d9ef7cfb510df4d66cb1e124830ecbc537b2016 Mon Sep 17 00:00:00 2001 From: Vlad Popa Date: Thu, 7 Mar 2024 16:59:53 -0800 Subject: Only calls to AudioManager.setBluetoothAudioDeviceCategory() can reset audio type to unknown When connecting a new BT device and the BTHelper cannot find any metadata for that device we do not want to reset the category to unknown since the user could have set it before to a different value Test: manual w/o automaticBtDeviceType Bug: 328329062 Change-Id: Id9ec300a77efcc85cbc84fab66fb886d215fdabe --- .../android/server/audio/AudioDeviceInventory.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java index e0c24256f5b1..14428c41ef26 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java +++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java @@ -157,7 +157,7 @@ public class AudioDeviceInventory { * corresponding peers in case of BLE */ void addAudioDeviceInInventoryIfNeeded(int deviceType, String address, String peerAddress, - @AudioDeviceCategory int category) { + @AudioDeviceCategory int category, boolean userDefined) { if (!isBluetoothOutDevice(deviceType)) { return; } @@ -167,7 +167,11 @@ public class AudioDeviceInventory { ads = findBtDeviceStateForAddress(peerAddress, deviceType); } if (ads != null) { - if (ads.getAudioDeviceCategory() != category) { + // if category is user defined allow to change back to unknown otherwise + // do not reset the category back to unknown since it might have been set + // before by the user + if (ads.getAudioDeviceCategory() != category && (userDefined + || category != AUDIO_DEVICE_CATEGORY_UNKNOWN)) { ads.setAudioDeviceCategory(category); mDeviceBroker.postUpdatedAdiDeviceState(ads); mDeviceBroker.postPersistAudioDeviceSettings(); @@ -220,9 +224,9 @@ public class AudioDeviceInventory { void addAudioDeviceWithCategoryInInventoryIfNeeded(@NonNull String address, @AudioDeviceCategory int btAudioDeviceCategory) { addAudioDeviceInInventoryIfNeeded(DEVICE_OUT_BLE_HEADSET, - address, "", btAudioDeviceCategory); + address, "", btAudioDeviceCategory, /*userDefined=*/true); addAudioDeviceInInventoryIfNeeded(DEVICE_OUT_BLUETOOTH_A2DP, - address, "", btAudioDeviceCategory); + address, "", btAudioDeviceCategory, /*userDefined=*/true); } @AudioDeviceCategory @@ -1733,7 +1737,7 @@ public class AudioDeviceInventory { purgeDevicesRoles_l(); } else { addAudioDeviceInInventoryIfNeeded(device, address, "", - BtHelper.getBtDeviceCategory(address)); + BtHelper.getBtDeviceCategory(address), /*userDefined=*/false); } AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent( "SCO " + (AudioSystem.isInputDevice(device) ? "source" : "sink") @@ -2023,7 +2027,7 @@ public class AudioDeviceInventory { updateBluetoothPreferredModes_l(btInfo.mDevice /*connectedDevice*/); addAudioDeviceInInventoryIfNeeded(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address, "", - BtHelper.getBtDeviceCategory(address)); + BtHelper.getBtDeviceCategory(address), /*userDefined=*/false); } static final int[] CAPTURE_PRESETS = new int[] {AudioSource.MIC, AudioSource.CAMCORDER, @@ -2357,7 +2361,7 @@ public class AudioDeviceInventory { DEVICE_OUT_HEARING_AID, "makeHearingAidDeviceAvailable"); setCurrentAudioRouteNameIfPossible(name, false /*fromA2dp*/); addAudioDeviceInInventoryIfNeeded(DEVICE_OUT_HEARING_AID, address, "", - BtHelper.getBtDeviceCategory(address)); + BtHelper.getBtDeviceCategory(address), /*userDefined=*/false); new MediaMetrics.Item(mMetricsId + "makeHearingAidDeviceAvailable") .set(MediaMetrics.Property.ADDRESS, address != null ? address : "") .set(MediaMetrics.Property.DEVICE, @@ -2488,7 +2492,7 @@ public class AudioDeviceInventory { mDeviceBroker.postAccessoryPlugMediaUnmute(device); setCurrentAudioRouteNameIfPossible(name, /*fromA2dp=*/false); addAudioDeviceInInventoryIfNeeded(device, address, peerAddress, - BtHelper.getBtDeviceCategory(address)); + BtHelper.getBtDeviceCategory(address), /*userDefined=*/false); } if (streamType == AudioSystem.STREAM_DEFAULT) { -- cgit v1.2.3-59-g8ed1b