Listed order on "previously connected" depend on recently connected devices

This CL use Bluetooth api "getMostRecentlyConnectedDevices()" to get
recently connected devices list. Let "previously connected" will list
most recently connected device on the top.

Bug: 130984590
Test: make -j42 RunSettingsRoboTests
Change-Id: I8d425b6da6cb9fe9fd1417937b4cb9a052cd1660
This commit is contained in:
hughchen
2020-02-03 13:59:06 +08:00
parent 07c1cdb77e
commit 043e43f059
3 changed files with 35 additions and 2 deletions

View File

@@ -60,10 +60,12 @@ public final class BluetoothDevicePreference extends GearPreference implements
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({SortType.TYPE_DEFAULT, @IntDef({SortType.TYPE_DEFAULT,
SortType.TYPE_FIFO}) SortType.TYPE_FIFO,
SortType.TYPE_NO_SORT})
public @interface SortType { public @interface SortType {
int TYPE_DEFAULT = 1; int TYPE_DEFAULT = 1;
int TYPE_FIFO = 2; int TYPE_FIFO = 2;
int TYPE_NO_SORT = 3;
} }
private final CachedBluetoothDevice mCachedDevice; private final CachedBluetoothDevice mCachedDevice;

View File

@@ -232,12 +232,21 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
* Add the {@link Preference} that represents the {@code cachedDevice} * Add the {@link Preference} that represents the {@code cachedDevice}
*/ */
protected void addPreference(CachedBluetoothDevice cachedDevice) { protected void addPreference(CachedBluetoothDevice cachedDevice) {
addPreference(cachedDevice, BluetoothDevicePreference.SortType.TYPE_DEFAULT);
}
/**
* Add the {@link Preference} with {@link BluetoothDevicePreference.SortType} that
* represents the {@code cachedDevice}
*/
protected void addPreference(CachedBluetoothDevice cachedDevice,
@BluetoothDevicePreference.SortType int type) {
final BluetoothDevice device = cachedDevice.getDevice(); final BluetoothDevice device = cachedDevice.getDevice();
if (!mPreferenceMap.containsKey(device)) { if (!mPreferenceMap.containsKey(device)) {
BluetoothDevicePreference btPreference = BluetoothDevicePreference btPreference =
new BluetoothDevicePreference(mPrefContext, cachedDevice, new BluetoothDevicePreference(mPrefContext, cachedDevice,
true /* showDeviceWithoutNames */, true /* showDeviceWithoutNames */,
BluetoothDevicePreference.SortType.TYPE_DEFAULT); type);
btPreference.setKey(getPreferenceKey()); btPreference.setKey(getPreferenceKey());
btPreference.setOnGearClickListener(mDeviceProfilesListener); btPreference.setOnGearClickListener(mDeviceProfilesListener);
if (this instanceof Preference.OnPreferenceClickListener) { if (this instanceof Preference.OnPreferenceClickListener) {

View File

@@ -15,6 +15,7 @@
*/ */
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
@@ -24,6 +25,7 @@ import androidx.preference.Preference;
import com.android.settings.connecteddevice.DevicePreferenceCallback; import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
/** /**
* Maintain and update saved bluetooth devices(bonded but not connected) * Maintain and update saved bluetooth devices(bonded but not connected)
@@ -41,6 +43,26 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
super(context, fragment, devicePreferenceCallback); super(context, fragment, devicePreferenceCallback);
} }
@Override
public void forceUpdate() {
if (BluetoothAdapter.getDefaultAdapter().isEnabled()) {
final CachedBluetoothDeviceManager cachedManager =
mLocalManager.getCachedDeviceManager();
for (BluetoothDevice device
: BluetoothAdapter.getDefaultAdapter().getMostRecentlyConnectedDevices()) {
final CachedBluetoothDevice cachedDevice = cachedManager.findDevice(device);
if (isFilterMatched(cachedDevice)) {
// Add the preference if it is new one
addPreference(cachedDevice, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
} else {
removePreference(cachedDevice);
}
}
} else {
removeAllDevicesFromPreference();
}
}
@Override @Override
public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) {
final BluetoothDevice device = cachedDevice.getDevice(); final BluetoothDevice device = cachedDevice.getDevice();