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();