diff --git a/src/com/android/settings/media/MediaDeviceUpdateWorker.java b/src/com/android/settings/media/MediaDeviceUpdateWorker.java index 3b67886e31e..e7aab177b09 100644 --- a/src/com/android/settings/media/MediaDeviceUpdateWorker.java +++ b/src/com/android/settings/media/MediaDeviceUpdateWorker.java @@ -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 mMediaDevices = new ArrayList<>(); + private final Collection mMediaDevices = new CopyOnWriteArrayList<>(); private final DevicesChangedBroadcastReceiver mReceiver; private final String mPackageName; @@ -110,8 +112,8 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker notifySliceChange(); } - public List getMediaDevices() { - return new ArrayList<>(mMediaDevices); + public Collection 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() { diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java index 3bb9ec85a03..47a5d7a8816 100644 --- a/src/com/android/settings/media/MediaOutputSlice.java +++ b/src/com/android/settings/media/MediaOutputSlice.java @@ -40,7 +40,7 @@ import com.android.settings.slices.SliceBackgroundWorker; import com.android.settings.slices.SliceBroadcastReceiver; import com.android.settingslib.media.MediaDevice; -import java.util.List; +import java.util.Collection; /** * Show the Media device that can be transfer the media. @@ -78,7 +78,7 @@ public class MediaOutputSlice implements CustomSliceable { return listBuilder.build(); } - final List devices = getMediaDevices(); + final Collection devices = getMediaDevices(); final MediaDeviceUpdateWorker worker = getWorker(); final MediaDevice connectedDevice = worker.getCurrentConnectedMediaDevice(); final boolean isTouched = worker.getIsTouched(); @@ -136,8 +136,8 @@ public class MediaOutputSlice implements CustomSliceable { return mWorker; } - private List getMediaDevices() { - final List devices = getWorker().getMediaDevices(); + private Collection getMediaDevices() { + final Collection devices = getWorker().getMediaDevices(); return devices; } diff --git a/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java index 0b2850b94d0..f92b012a9ae 100644 --- a/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java @@ -116,7 +116,8 @@ public class MediaDeviceUpdateWorkerTest { newDevices.add(mMediaDevice2); mMediaDeviceUpdateWorker.onDeviceListUpdate(newDevices); - final List devices = mMediaDeviceUpdateWorker.getMediaDevices(); + final List devices = + new ArrayList<>(mMediaDeviceUpdateWorker.getMediaDevices()); assertThat(devices.get(0).getId()).isEqualTo(newDevices.get(0).getId()); assertThat(devices.get(1).getId()).isEqualTo(newDevices.get(1).getId()); @@ -134,7 +135,8 @@ public class MediaDeviceUpdateWorkerTest { newDevices.add(device3); mMediaDeviceUpdateWorker.onDeviceListUpdate(newDevices); - final List devices = mMediaDeviceUpdateWorker.getMediaDevices(); + final List devices = + new ArrayList<>(mMediaDeviceUpdateWorker.getMediaDevices()); assertThat(devices.size()).isEqualTo(newDevices.size()); } @@ -147,7 +149,8 @@ public class MediaDeviceUpdateWorkerTest { newDevices.add(mMediaDevice1); mMediaDeviceUpdateWorker.onDeviceListUpdate(newDevices); - final List devices = mMediaDeviceUpdateWorker.getMediaDevices(); + final List devices = + new ArrayList<>(mMediaDeviceUpdateWorker.getMediaDevices()); assertThat(devices.size()).isEqualTo(newDevices.size()); }