Merge "Fix ConcurrentModificationException" into rvc-dev am: 724e880e55 am: f245329157

Change-Id: I1bdfbf3159c003a6a2ce81078f617b3894a76fca
This commit is contained in:
TreeHugger Robot
2020-03-27 04:19:41 +00:00
committed by Automerger Merge Worker

View File

@@ -69,9 +69,9 @@ public class LocalMediaManager implements BluetoothCallback {
private MediaDevice mOnTransferBluetoothDevice;
@VisibleForTesting
List<MediaDevice> mMediaDevices = new ArrayList<>();
List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
@VisibleForTesting
List<MediaDevice> mDisconnectedMediaDevices = new ArrayList<>();
List<MediaDevice> mDisconnectedMediaDevices = new CopyOnWriteArrayList<>();
@VisibleForTesting
MediaDevice mPhoneDevice;
@VisibleForTesting
@@ -207,6 +207,7 @@ public class LocalMediaManager implements BluetoothCallback {
public void stopScan() {
mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
mInfoMediaManager.stopScan();
unRegisterDeviceAttributeChangeCallback();
}
/**
@@ -397,32 +398,34 @@ public class LocalMediaManager implements BluetoothCallback {
}
private List<MediaDevice> buildDisconnectedBluetoothDevice() {
for (MediaDevice device : mDisconnectedMediaDevices) {
((BluetoothMediaDevice) device).getCachedDevice()
.unregisterCallback(mDeviceAttributeChangeCallback);
}
mDisconnectedMediaDevices.clear();
final List<BluetoothDevice> bluetoothDevices =
mBluetoothAdapter.getMostRecentlyConnectedDevices();
final CachedBluetoothDeviceManager cachedDeviceManager =
mLocalBluetoothManager.getCachedDeviceManager();
final List<CachedBluetoothDevice> cachedBluetoothDeviceList = new ArrayList<>();
for (BluetoothDevice device : bluetoothDevices) {
final CachedBluetoothDevice cachedDevice =
cachedDeviceManager.findDevice(device);
if (cachedDevice != null) {
if (cachedDevice.getBondState() == BluetoothDevice.BOND_BONDED
&& !cachedDevice.isConnected()) {
final MediaDevice mediaDevice = new BluetoothMediaDevice(mContext,
cachedDevice,
null, null, mPackageName);
if (!mMediaDevices.contains(mediaDevice)) {
cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
mDisconnectedMediaDevices.add(mediaDevice);
}
cachedBluetoothDeviceList.add(cachedDevice);
}
}
}
unRegisterDeviceAttributeChangeCallback();
mDisconnectedMediaDevices.clear();
for (CachedBluetoothDevice cachedDevice : cachedBluetoothDeviceList) {
final MediaDevice mediaDevice = new BluetoothMediaDevice(mContext,
cachedDevice,
null, null, mPackageName);
if (!mMediaDevices.contains(mediaDevice)) {
cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
mDisconnectedMediaDevices.add(mediaDevice);
}
}
return new ArrayList<>(mDisconnectedMediaDevices);
}
@@ -473,6 +476,12 @@ public class LocalMediaManager implements BluetoothCallback {
}
}
private void unRegisterDeviceAttributeChangeCallback() {
for (MediaDevice device : mDisconnectedMediaDevices) {
((BluetoothMediaDevice) device).getCachedDevice()
.unregisterCallback(mDeviceAttributeChangeCallback);
}
}
/**
* Callback for notifying device information updating