[Output Switcher] Adjust check for advanced icon
Since advanced icon should be only applied on untethered device, add new
method for check this. isAdvancedDetailsHeader will also return true if
device type is watch or default, which should not use advanced icon.
Bug: 246235835
Test: make RunSettingsLibRoboTests -j40
Change-Id: Ic7d52e78dc790b016a090f8e26c8444152294aed
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
index fea7475..5c796af 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
@@ -237,14 +237,10 @@
* @return true if it supports advanced metadata, false otherwise.
*/
public static boolean isAdvancedDetailsHeader(@NonNull BluetoothDevice bluetoothDevice) {
- if (!DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI, BT_ADVANCED_HEADER_ENABLED,
- true)) {
- Log.d(TAG, "isAdvancedDetailsHeader: advancedEnabled is false");
+ if (!isAdvancedHeaderEnabled()) {
return false;
}
- // The metadata is for Android R
- if (getBooleanMetaData(bluetoothDevice, BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)) {
- Log.d(TAG, "isAdvancedDetailsHeader: untetheredHeadset is true");
+ if (isUntetheredHeadset(bluetoothDevice)) {
return true;
}
// The metadata is for Android S
@@ -260,6 +256,47 @@
}
/**
+ * Check if the Bluetooth device is supports advanced metadata and an untethered headset
+ *
+ * @param bluetoothDevice the BluetoothDevice to get metadata
+ * @return true if it supports advanced metadata and an untethered headset, false otherwise.
+ */
+ public static boolean isAdvancedUntetheredDevice(@NonNull BluetoothDevice bluetoothDevice) {
+ if (!isAdvancedHeaderEnabled()) {
+ return false;
+ }
+ if (isUntetheredHeadset(bluetoothDevice)) {
+ return true;
+ }
+ // The metadata is for Android S
+ String deviceType = getStringMetaData(bluetoothDevice,
+ BluetoothDevice.METADATA_DEVICE_TYPE);
+ if (TextUtils.equals(deviceType, BluetoothDevice.DEVICE_TYPE_UNTETHERED_HEADSET)) {
+ Log.d(TAG, "isAdvancedUntetheredDevice: is untethered device ");
+ return true;
+ }
+ return false;
+ }
+
+ private static boolean isAdvancedHeaderEnabled() {
+ if (!DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI, BT_ADVANCED_HEADER_ENABLED,
+ true)) {
+ Log.d(TAG, "isAdvancedDetailsHeader: advancedEnabled is false");
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean isUntetheredHeadset(@NonNull BluetoothDevice bluetoothDevice) {
+ // The metadata is for Android R
+ if (getBooleanMetaData(bluetoothDevice, BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)) {
+ Log.d(TAG, "isAdvancedDetailsHeader: untetheredHeadset is true");
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Create an Icon pointing to a drawable.
*/
public static IconCompat createIconWithDrawable(Drawable drawable) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
index 1be9d76..3903404 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
@@ -59,14 +59,14 @@
@Override
public Drawable getIcon() {
- return BluetoothUtils.isAdvancedDetailsHeader(mCachedDevice.getDevice())
+ return BluetoothUtils.isAdvancedUntetheredDevice(mCachedDevice.getDevice())
? mContext.getDrawable(R.drawable.ic_earbuds_advanced)
: BluetoothUtils.getBtClassDrawableWithDescription(mContext, mCachedDevice).first;
}
@Override
public Drawable getIconWithoutBackground() {
- return BluetoothUtils.isAdvancedDetailsHeader(mCachedDevice.getDevice())
+ return BluetoothUtils.isAdvancedUntetheredDevice(mCachedDevice.getDevice())
? mContext.getDrawable(R.drawable.ic_earbuds_advanced)
: BluetoothUtils.getBtClassDrawableWithDescription(mContext, mCachedDevice).first;
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
index 1c0ea1a..ca14573 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
@@ -205,4 +205,45 @@
public void isAdvancedDetailsHeader_noMetadata_returnFalse() {
assertThat(BluetoothUtils.isAdvancedDetailsHeader(mBluetoothDevice)).isEqualTo(false);
}
+
+ @Test
+ public void isAdvancedUntetheredDevice_untetheredHeadset_returnTrue() {
+ when(mBluetoothDevice.getMetadata(
+ BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)).thenReturn(
+ BOOL_METADATA.getBytes());
+
+ assertThat(BluetoothUtils.isAdvancedUntetheredDevice(mBluetoothDevice)).isEqualTo(true);
+ }
+
+ @Test
+ public void isAdvancedUntetheredDevice_deviceTypeUntetheredHeadset_returnTrue() {
+ when(mBluetoothDevice.getMetadata(
+ BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
+ BluetoothDevice.DEVICE_TYPE_UNTETHERED_HEADSET.getBytes());
+
+ assertThat(BluetoothUtils.isAdvancedUntetheredDevice(mBluetoothDevice)).isEqualTo(true);
+ }
+
+ @Test
+ public void isAdvancedUntetheredDevice_deviceTypeWatch_returnFalse() {
+ when(mBluetoothDevice.getMetadata(
+ BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
+ BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
+
+ assertThat(BluetoothUtils.isAdvancedUntetheredDevice(mBluetoothDevice)).isEqualTo(false);
+ }
+
+ @Test
+ public void isAdvancedUntetheredDevice_deviceTypeDefault_returnFalse() {
+ when(mBluetoothDevice.getMetadata(
+ BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
+ BluetoothDevice.DEVICE_TYPE_DEFAULT.getBytes());
+
+ assertThat(BluetoothUtils.isAdvancedUntetheredDevice(mBluetoothDevice)).isEqualTo(false);
+ }
+
+ @Test
+ public void isAdvancedUntetheredDevice_noMetadata_returnFalse() {
+ assertThat(BluetoothUtils.isAdvancedUntetheredDevice(mBluetoothDevice)).isEqualTo(false);
+ }
}