Fixed ConcurrentModificationException with HearingAids profile
Prevent ConcurrentModificationException crash when traversing the mCachedDevices list by removing entries outside of the loop. Bug: 78357837 Test: Runs ROBOTEST_FILTER=CachedBluetoothDeviceManagerTest make -j40 RunSettingsLibRoboTests Change-Id: I27db2dc94a7d0108e9b848d187d4e5bc9f5b567c
This commit is contained in:
@@ -27,8 +27,10 @@ import com.android.internal.annotations.VisibleForTesting;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -191,6 +193,7 @@ public class CachedBluetoothDeviceManager {
|
||||
log("updateHearingAidsDevices: getHearingAidProfile() is null");
|
||||
return;
|
||||
}
|
||||
final Set<Long> syncIdChangedSet = new HashSet<Long>();
|
||||
for (CachedBluetoothDevice cachedDevice : mCachedDevices) {
|
||||
if (cachedDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
|
||||
continue;
|
||||
@@ -200,9 +203,12 @@ public class CachedBluetoothDeviceManager {
|
||||
|
||||
if (newHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
|
||||
cachedDevice.setHiSyncId(newHiSyncId);
|
||||
onHiSyncIdChanged(newHiSyncId);
|
||||
syncIdChangedSet.add(newHiSyncId);
|
||||
}
|
||||
}
|
||||
for (Long syncId : syncIdChangedSet) {
|
||||
onHiSyncIdChanged(syncId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -486,11 +486,14 @@ public class CachedBluetoothDeviceManagerTest {
|
||||
doAnswer((invocation) -> mHearingAidProfile).when(mLocalProfileManager)
|
||||
.getHearingAidProfile();
|
||||
doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice1);
|
||||
doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice2);
|
||||
mCachedDeviceManager.mCachedDevices.add(mCachedDevice1);
|
||||
mCachedDeviceManager.mCachedDevices.add(mCachedDevice2);
|
||||
mCachedDeviceManager.updateHearingAidsDevices(mLocalProfileManager);
|
||||
|
||||
// Assert that the mCachedDevice1 has an updated HiSyncId.
|
||||
// Assert that the mCachedDevice1 and mCachedDevice2 have an updated HiSyncId.
|
||||
assertThat(mCachedDevice1.getHiSyncId()).isEqualTo(HISYNCID1);
|
||||
assertThat(mCachedDevice2.getHiSyncId()).isEqualTo(HISYNCID1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user