Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 724e880e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix ConcurrentModificationException" into rvc-dev

parents b944db72 37282f0f
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
@@ -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,22 +398,26 @@ 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()) {
                        cachedBluetoothDeviceList.add(cachedDevice);
                    }
                }
            }

            unRegisterDeviceAttributeChangeCallback();
            mDisconnectedMediaDevices.clear();
            for (CachedBluetoothDevice cachedDevice : cachedBluetoothDeviceList) {
                final MediaDevice mediaDevice = new BluetoothMediaDevice(mContext,
                        cachedDevice,
                        null, null, mPackageName);
@@ -421,8 +426,6 @@ public class LocalMediaManager implements BluetoothCallback {
                    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