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

Commit 3f856904 authored by hughchen's avatar hughchen
Browse files

Fix that Bluetooth device should not duplicate in the list

This CL before, if someone call addDevice() twice to add
same device and previous addDevice() call is synchronized,
it will cause list have duplicate device.
Because addDevice() will add device directly without check
whether device already in the list.

This CL is add duplicate check in addDevice().

Bug: 139516941
Test:  make -j42 RunSettingsLibRoboTests
Change-Id: I859067048c71be95b0a3b2ff0317ea93f49cea7d
parent 620c61dc
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -97,16 +97,19 @@ public class CachedBluetoothDeviceManager {
     * @return the newly created CachedBluetoothDevice object
     */
    public CachedBluetoothDevice addDevice(BluetoothDevice device) {
        LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager();
        CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, profileManager,
                device);
        mHearingAidDeviceManager.initHearingAidDeviceIfNeeded(newDevice);
        CachedBluetoothDevice newDevice;
        final LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager();
        synchronized (this) {
            newDevice = findDevice(device);
            if (newDevice == null) {
                newDevice = new CachedBluetoothDevice(mContext, profileManager, device);
                mHearingAidDeviceManager.initHearingAidDeviceIfNeeded(newDevice);
                if (!mHearingAidDeviceManager.setSubDeviceIfNeeded(newDevice)) {
                    mCachedDevices.add(newDevice);
                    mBtManager.getEventManager().dispatchDeviceAdded(newDevice);
                }
            }
        }

        return newDevice;
    }
+19 −0
Original line number Diff line number Diff line
@@ -190,6 +190,25 @@ public class CachedBluetoothDeviceManagerTest {
        assertThat(devices).contains(cachedDevice2);
    }

    /**
     * Test to verify addDevice(), the duplicated device should not added.
     */
    @Test
    public void addDevice_addDuplicatedDevice_duplicateDeviceShouldNotAdded() {
        final CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1);
        assertThat(cachedDevice1).isNotNull();
        final CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2);
        assertThat(cachedDevice2).isNotNull();
        final CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mDevice2);
        assertThat(cachedDevice3).isNotNull();
        final CachedBluetoothDevice cachedDevice4 = mCachedDeviceManager.addDevice(mDevice2);
        assertThat(cachedDevice4).isNotNull();

        final Collection<CachedBluetoothDevice> devices =
                mCachedDeviceManager.getCachedDevicesCopy();
        assertThat(devices.size()).isEqualTo(2);
    }

    /**
     * Test to verify findDevice(), new device has the same HiSyncId.
     */