Merge "Fix incorrect UI issue of "previously connected devices""

This commit is contained in:
TreeHugger Robot
2020-02-11 06:43:02 +00:00
committed by Android (Google) Code Review
2 changed files with 46 additions and 1 deletions

View File

@@ -28,6 +28,9 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import java.util.ArrayList;
import java.util.List;
/**
* Maintain and update saved bluetooth devices(bonded but not connected)
*/
@@ -54,7 +57,10 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
if (mBluetoothAdapter.isEnabled()) {
final CachedBluetoothDeviceManager cachedManager =
mLocalManager.getCachedDeviceManager();
for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
final List<BluetoothDevice> bluetoothDevices =
mBluetoothAdapter.getMostRecentlyConnectedDevices();
removePreferenceIfNecessary(bluetoothDevices, cachedManager);
for (BluetoothDevice device : bluetoothDevices) {
final CachedBluetoothDevice cachedDevice = cachedManager.findDevice(device);
if (cachedDevice != null) {
update(cachedDevice);
@@ -65,6 +71,18 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
}
}
private void removePreferenceIfNecessary(List<BluetoothDevice> bluetoothDevices,
CachedBluetoothDeviceManager cachedManager) {
for (BluetoothDevice device : new ArrayList<>(mPreferenceMap.keySet())) {
if (!bluetoothDevices.contains(device)) {
final CachedBluetoothDevice cachedDevice = cachedManager.findDevice(device);
if (cachedDevice != null) {
removePreference(cachedDevice);
}
}
}
}
@Override
public void update(CachedBluetoothDevice cachedDevice) {
if (isFilterMatched(cachedDevice)) {

View File

@@ -18,6 +18,7 @@ package com.android.settings.bluetooth;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -208,4 +209,30 @@ public class SavedBluetoothDeviceUpdaterTest {
verify(mBluetoothDeviceUpdater).removeAllDevicesFromPreference();
}
@Test
public void forceUpdate_deviceNotContain_removePreference() {
final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
bluetoothDevices.add(mBluetoothDevice);
final BluetoothDevice device2 = mock(BluetoothDevice.class);
final CachedBluetoothDevice cachedDevice2 = mock(CachedBluetoothDevice.class);
mBluetoothDeviceUpdater.mPreferenceMap.put(device2, mPreference);
when(cachedDevice2.getDevice()).thenReturn(device2);
when(cachedDevice2.getAddress()).thenReturn("04:52:C7:0B:D8:3S");
when(mDeviceManager.findDevice(device2)).thenReturn(cachedDevice2);
when(mBluetoothAdapter.isEnabled()).thenReturn(true);
when(mBluetoothAdapter.getMostRecentlyConnectedDevices()).thenReturn(bluetoothDevices);
when(mBluetoothManager.getCachedDeviceManager()).thenReturn(mDeviceManager);
when(mDeviceManager.findDevice(mBluetoothDevice)).thenReturn(mCachedBluetoothDevice);
when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mBluetoothDevice.isConnected()).thenReturn(false);
mBluetoothDeviceUpdater.forceUpdate();
verify(mBluetoothDeviceUpdater).removePreference(cachedDevice2);
verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice,
BluetoothDevicePreference.SortType.TYPE_NO_SORT);
}
}