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