Merge "Fix ConcurrentModificationException" into rvc-dev am: 724e880e55 am: f245329157
Change-Id: I1bdfbf3159c003a6a2ce81078f617b3894a76fca
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user