From 043e43f05932121176bd0435ba7a0ecbfb9b088d Mon Sep 17 00:00:00 2001 From: hughchen Date: Mon, 3 Feb 2020 13:59:06 +0800 Subject: [PATCH] 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 --- .../bluetooth/BluetoothDevicePreference.java | 4 +++- .../bluetooth/BluetoothDeviceUpdater.java | 11 +++++++++- .../SavedBluetoothDeviceUpdater.java | 22 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java index 42267205d81..86b72ec3f94 100644 --- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java +++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java @@ -60,10 +60,12 @@ public final class BluetoothDevicePreference extends GearPreference implements @Retention(RetentionPolicy.SOURCE) @IntDef({SortType.TYPE_DEFAULT, - SortType.TYPE_FIFO}) + SortType.TYPE_FIFO, + SortType.TYPE_NO_SORT}) public @interface SortType { int TYPE_DEFAULT = 1; int TYPE_FIFO = 2; + int TYPE_NO_SORT = 3; } private final CachedBluetoothDevice mCachedDevice; diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java index e2715d304e3..37788621e38 100644 --- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java @@ -232,12 +232,21 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback, * Add the {@link Preference} that represents the {@code 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(); if (!mPreferenceMap.containsKey(device)) { BluetoothDevicePreference btPreference = new BluetoothDevicePreference(mPrefContext, cachedDevice, true /* showDeviceWithoutNames */, - BluetoothDevicePreference.SortType.TYPE_DEFAULT); + type); btPreference.setKey(getPreferenceKey()); btPreference.setOnGearClickListener(mDeviceProfilesListener); if (this instanceof Preference.OnPreferenceClickListener) { diff --git a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java index fdd7a1e853a..6893c259c8b 100644 --- a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java @@ -15,6 +15,7 @@ */ package com.android.settings.bluetooth; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.util.Log; @@ -24,6 +25,7 @@ import androidx.preference.Preference; import com.android.settings.connecteddevice.DevicePreferenceCallback; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.bluetooth.CachedBluetoothDevice; +import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; /** * Maintain and update saved bluetooth devices(bonded but not connected) @@ -41,6 +43,26 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater 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 public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { final BluetoothDevice device = cachedDevice.getDevice();