Fix ConcurrentModificationException

Use CopyOnWriteArrayList instead of Arraylist to
avoid ConcurrentModificationException.

Bug: 147334979
Test: make -j42 RunSettingsRoboTests

Change-Id: I669f379d3eba6a086c6bd97cde2b78d92fb5c481
This commit is contained in:
hughchen
2020-01-09 17:58:00 +08:00
parent c770c9133a
commit 1045823b3c
3 changed files with 16 additions and 11 deletions

View File

@@ -37,7 +37,9 @@ import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.utils.ThreadUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* SliceBackgroundWorker for get MediaDevice list and handle MediaDevice state change event.
@@ -46,7 +48,7 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
implements LocalMediaManager.DeviceCallback {
private final Context mContext;
private final List<MediaDevice> mMediaDevices = new ArrayList<>();
private final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
private final DevicesChangedBroadcastReceiver mReceiver;
private final String mPackageName;
@@ -110,8 +112,8 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
notifySliceChange();
}
public List<MediaDevice> getMediaDevices() {
return new ArrayList<>(mMediaDevices);
public Collection<MediaDevice> getMediaDevices() {
return mMediaDevices;
}
public void connectDevice(MediaDevice device) {
@@ -121,7 +123,7 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
}
public MediaDevice getMediaDeviceById(String id) {
return mLocalMediaManager.getMediaDeviceById(mMediaDevices, id);
return mLocalMediaManager.getMediaDeviceById(new ArrayList<>(mMediaDevices), id);
}
public MediaDevice getCurrentConnectedMediaDevice() {