diff options
| author | 2020-02-10 20:02:45 +0800 | |
|---|---|---|
| committer | 2020-02-10 20:04:10 +0800 | |
| commit | f61e260ca7e980d15adb0e1ce935b5dcca1cc12a (patch) | |
| tree | c46fe04656c4661eaba79bc5547f0ef026edb4a9 | |
| parent | 32d078ac0ad0e61634090b974059afa9a92149e4 (diff) | |
Fix ConcurrentModificationException on CachedBluetoothDevice
This CL use CopyOnWriteArrayList to avoid
ConcurrentModificationException.
Bug: 148115479
Test: manually
Change-Id: I1944b8ffb14bf2f3f6613d2b5ab6a5fbc9552d57
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 3aa35cb48c38..5d1e4cbf8b72 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -41,7 +41,6 @@ import com.android.settingslib.Utils; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -71,10 +70,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> short mRssi; // mProfiles and mRemovedProfiles does not do swap() between main and sub device. It is // because current sub device is only for HearingAid and its profile is the same. - private final List<LocalBluetoothProfile> mProfiles = new ArrayList<>(); + private final Collection<LocalBluetoothProfile> mProfiles = new CopyOnWriteArrayList<>(); // List of profiles that were previously in mProfiles, but have been removed - private final List<LocalBluetoothProfile> mRemovedProfiles = new ArrayList<>(); + private final Collection<LocalBluetoothProfile> mRemovedProfiles = new CopyOnWriteArrayList<>(); // Device supports PANU but not NAP: remove PanProfile after device disconnects from NAP private boolean mLocalNapRoleConnected; @@ -717,7 +716,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> } public List<LocalBluetoothProfile> getProfiles() { - return Collections.unmodifiableList(mProfiles); + return new ArrayList<>(mProfiles); } public List<LocalBluetoothProfile> getConnectableProfiles() { @@ -734,7 +733,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> } public List<LocalBluetoothProfile> getRemovedProfiles() { - return mRemovedProfiles; + return new ArrayList<>(mRemovedProfiles); } public void registerCallback(Callback callback) { |