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;
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user