From 440de09d47822341d23ed4b96546d04e043da932 Mon Sep 17 00:00:00 2001 From: Ze Li Date: Tue, 31 Dec 2024 16:17:12 +0800 Subject: [PATCH] [Temp bonding] Hide temp bond devices from existing lists The metadata change listener will be added in later changes. Test: atest: com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdaterTest Bug: 362859132 Flag: com.android.settingslib.flags.enable_temporary_bond_devices_ui Change-Id: I3ba5a978ce66e748fc1a7666fa4f6e84144c2c54 --- .../AvailableMediaBluetoothDeviceUpdater.java | 9 +++++++++ .../ConnectedBluetoothDeviceUpdater.java | 8 ++++++++ .../AudioSharingBluetoothDeviceUpdater.java | 9 +++++++++ .../ConnectedBluetoothDeviceUpdaterTest.java | 19 +++++++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java index bd160e17527..d97e93be094 100644 --- a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java @@ -26,6 +26,7 @@ import com.android.settings.connecteddevice.DevicePreferenceCallback; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.settingslib.flags.Flags; import com.android.settingslib.utils.ThreadUtils; /** Controller to maintain available media Bluetooth devices */ @@ -60,6 +61,14 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater @Override public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { + // If the device is temporary bond, it shouldn't be shown here. + if (Flags.enableTemporaryBondDevicesUi() + && BluetoothUtils.isTemporaryBondDevice(cachedDevice.getDevice())) { + Log.d(TAG, + "isFilterMatched() Filter out temporary bond device " + cachedDevice.getName()); + return false; + } + final int currentAudioProfile; if (mAudioMode == AudioManager.MODE_RINGTONE diff --git a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java index 7cc874caba9..03473cf1e1d 100644 --- a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java @@ -57,6 +57,14 @@ public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater { @Override public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { + // If the device is temporary bond, it shouldn't be shown here. + if (Flags.enableTemporaryBondDevicesUi() + && BluetoothUtils.isTemporaryBondDevice(cachedDevice.getDevice())) { + Log.d(TAG, + "isFilterMatched() Filter out temporary bond device " + cachedDevice.getName()); + return false; + } + final int currentAudioProfile; if (mAudioMode == AudioManager.MODE_RINGTONE diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java index e5b984d707c..e57e53e524a 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdater.java @@ -29,6 +29,7 @@ import com.android.settings.connecteddevice.DevicePreferenceCallback; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.settingslib.flags.Flags; import com.android.settingslib.utils.ThreadUtils; public class AudioSharingBluetoothDeviceUpdater extends BluetoothDeviceUpdater @@ -51,6 +52,14 @@ public class AudioSharingBluetoothDeviceUpdater extends BluetoothDeviceUpdater @Override public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) { + // If the device is temporary bond, it shouldn't be shown here. + if (Flags.enableTemporaryBondDevicesUi() + && BluetoothUtils.isTemporaryBondDevice(cachedDevice.getDevice())) { + Log.d(TAG, + "isFilterMatched() Filter out temporary bond device " + cachedDevice.getName()); + return false; + } + boolean isFilterMatched = false; if (isDeviceConnected(cachedDevice) && isDeviceInCachedDevicesList(cachedDevice)) { // If device is LE audio device and has a broadcast source, diff --git a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java index f68a8d4cf6a..ad155ffd743 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java @@ -68,6 +68,9 @@ public class ConnectedBluetoothDeviceUpdaterTest { private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C"; private static final String TEST_EXCLUSIVE_MANAGER = "com.test.manager"; + private static final String TEMP_BOND_METADATA = + "le_audio_sharing"; + private static final int METADATA_FAST_PAIR_CUSTOMIZED_FIELDS = 25; @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @@ -405,6 +408,22 @@ public class ConnectedBluetoothDeviceUpdaterTest { verify(mBluetoothDeviceUpdater, never()).addPreference(mCachedBluetoothDevice); } + @Test + @RequiresFlagsEnabled(Flags.FLAG_ENABLE_TEMPORARY_BOND_DEVICES_UI) + public void update_temporaryBondDevice_removePreference() { + setUpDeviceUpdaterWithAudioMode(AudioManager.MODE_NORMAL); + when(mBluetoothDeviceUpdater + .isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true); + when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true); + when(mBluetoothDevice.getMetadata(METADATA_FAST_PAIR_CUSTOMIZED_FIELDS)) + .thenReturn(TEMP_BOND_METADATA.getBytes()); + + mBluetoothDeviceUpdater.update(mCachedBluetoothDevice); + + verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice); + verify(mBluetoothDeviceUpdater, never()).addPreference(mCachedBluetoothDevice); + } + private void setUpDeviceUpdaterWithAudioMode(int audioMode) { mAudioManager.setMode(audioMode); mBluetoothDeviceUpdater = spy(new ConnectedBluetoothDeviceUpdater(mContext,