Ignore ASHA hisyncId grouping if the device supports CSIP

If a device is added as another device's sub device, it'll be removed
from the cached device list. This makes the device can't be correctly
grouped as a CSIP set when CSIP is connected.

We should ignore ASHA hisyncId grouping and leave it to be handled as a
member of CSIP set.

Bug: 288284097
Test: atest CachedBluetoothDeviceTest
Test: atest HearingAidDeviceManagerTest
Change-Id: Ibf10198521d3186186e87f96b13475185e51e856
This commit is contained in:
Angela Wang
2023-07-12 07:27:10 +00:00
parent f7077d90fa
commit ec6e7c971a
2 changed files with 17 additions and 1 deletions

View File

@@ -1522,10 +1522,15 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
* list.
*/
public void switchMemberDeviceContent(CachedBluetoothDevice newMainDevice) {
// Backup from main device
// Remove the sub device from mMemberDevices first to prevent hash mismatch problem due
// to mDevice switch
removeMemberDevice(newMainDevice);
// Backup from current main device
final BluetoothDevice tmpDevice = mDevice;
final short tmpRssi = mRssi;
final boolean tmpJustDiscovered = mJustDiscovered;
// Set main device from sub device
release();
mDevice = newMainDevice.mDevice;
@@ -1539,6 +1544,9 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
newMainDevice.mRssi = tmpRssi;
newMainDevice.mJustDiscovered = tmpJustDiscovered;
newMainDevice.fillData();
// Add the sub device back into mMemberDevices with correct hash
addMemberDevice(newMainDevice);
}
/**

View File

@@ -167,6 +167,14 @@ public class HearingAidDeviceManager {
if (cachedDevice.getHiSyncId() != hiSyncId) {
continue;
}
// The remote device supports CSIP, the other ear should be processed as a member
// device. Ignore hiSyncId grouping from ASHA here.
if (cachedDevice.getProfiles().stream().anyMatch(
profile -> profile instanceof CsipSetCoordinatorProfile)) {
continue;
}
if (firstMatchedIndex == -1) {
// Found the first one
firstMatchedIndex = i;