Enable remove duplicate device in CachedBluetoothDevice.
Bug: 319197962
Test: manual
Change-Id: I910ec38e8e74b7e9fbdc0a35028a5a1009c04fab
diff --git a/packages/SettingsLib/aconfig/settingslib.aconfig b/packages/SettingsLib/aconfig/settingslib.aconfig
index fd2f9bd..bab6781 100644
--- a/packages/SettingsLib/aconfig/settingslib.aconfig
+++ b/packages/SettingsLib/aconfig/settingslib.aconfig
@@ -7,3 +7,13 @@
bug: "314812750"
}
+flag {
+ name: "enable_cached_bluetooth_device_dedup"
+ namespace: "bluetooth"
+ description: "Enable dedup in CachedBluetoothDevice"
+ bug: "319197962"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
index c97445f..647fcb9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
@@ -16,6 +16,8 @@
package com.android.settingslib.bluetooth;
+import static com.android.settingslib.flags.Flags.enableCachedBluetoothDeviceDedup;
+
import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothCsipSetCoordinator;
@@ -377,6 +379,10 @@
cachedDevice = mDeviceManager.addDevice(device);
}
+ if (enableCachedBluetoothDeviceDedup() && bondState == BluetoothDevice.BOND_BONDED) {
+ mDeviceManager.removeDuplicateInstanceForIdentityAddress(device);
+ }
+
for (BluetoothCallback callback : mCallbacks) {
callback.onDeviceBondStateChanged(cachedDevice, bondState);
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
index 89fe268..32eec7e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
@@ -340,6 +340,20 @@
}
}
+ synchronized void removeDuplicateInstanceForIdentityAddress(BluetoothDevice device) {
+ String identityAddress = device.getIdentityAddress();
+ if (identityAddress == null || identityAddress.equals(device.getAddress())) {
+ return;
+ }
+ mCachedDevices.removeIf(d -> {
+ boolean shouldRemove = d.getDevice().getAddress().equals(identityAddress);
+ if (shouldRemove) {
+ Log.d(TAG, "Remove instance for identity address " + d);
+ }
+ return shouldRemove;
+ });
+ }
+
public synchronized boolean onProfileConnectionStateChangedIfProcessed(CachedBluetoothDevice
cachedDevice, int state, int profileId) {
if (profileId == BluetoothProfile.HEARING_AID) {