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

Commit 8b9e2d68 authored by Ze Li's avatar Ze Li
Browse files

Fix the issue of removing member device when iterating.

Test: com.android.settingslib.bluetooth.CachedBluetoothDeviceManagerTest
Bug: 396352434
Flag: EXEMPT simple bugfix
Change-Id: I253d03053eb2f5d0dbf66a394fefdd4bef388b5b
parent 6b07fd6d
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -298,13 +298,8 @@ public class CachedBluetoothDeviceManager {
            CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
            Set<CachedBluetoothDevice> memberDevices = cachedDevice.getMemberDevice();
            if (!memberDevices.isEmpty()) {
                for (Object it : memberDevices.toArray()) {
                    CachedBluetoothDevice memberDevice = (CachedBluetoothDevice) it;
                    // Member device exists and it is not bonded
                    if (memberDevice.getDevice().getBondState() == BluetoothDevice.BOND_NONE) {
                        cachedDevice.removeMemberDevice(memberDevice);
                    }
                }
                memberDevices.removeIf(memberDevice ->
                        memberDevice.getDevice().getBondState() == BluetoothDevice.BOND_NONE);
                return;
            }
            CachedBluetoothDevice subDevice = cachedDevice.getSubDevice();
@@ -346,11 +341,8 @@ public class CachedBluetoothDeviceManager {
                CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
                final Set<CachedBluetoothDevice> memberDevices = cachedDevice.getMemberDevice();
                if (!memberDevices.isEmpty()) {
                    for (CachedBluetoothDevice memberDevice : memberDevices) {
                        if (memberDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
                            cachedDevice.removeMemberDevice(memberDevice);
                        }
                    }
                    memberDevices.removeIf(memberDevice ->
                            memberDevice.getDevice().getBondState() != BluetoothDevice.BOND_BONDED);
                } else {
                    CachedBluetoothDevice subDevice = cachedDevice.getSubDevice();
                    if (subDevice != null) {