Fix pixel buds icon is empty in output switcher

MediaDevice will set a color filter in the bluetooth device icon if
the bluetooth device is not a fist pair device. But if apps didn't
have permission to get a first pair device icon, MediaDevice will
return a default bluetooth icon. In this case MediaDevice will not
set the color filter in the icon then it causes the icon to become empty.

This CL will use the drawable type to set the color filter instead of
checking whether it is a first pair device.

Bug: 174279607
Bug: 155822415
Test: make -j42 RunSettingsRoboTests
Change-Id: Ic5c348900db3e79e669173ec4ceeaec4d6500e5f
Merged-In: Ic5c348900db3e79e669173ec4ceeaec4d6500e5f
(cherry picked from commit b4603fd3ffa0710fc9441dd69a97bebe94c12151)
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
index 00f94f5..9d4669a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
@@ -18,6 +18,7 @@
 import android.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.media.MediaRoute2Info;
 import android.media.MediaRouter2Manager;
@@ -56,8 +57,9 @@
 
     @Override
     public Drawable getIcon() {
-        final Drawable drawable = getIconWithoutBackground();
-        if (!isFastPairDevice()) {
+        final Drawable drawable =
+                BluetoothUtils.getBtDrawableWithDescription(mContext, mCachedDevice).first;
+        if (!(drawable instanceof BitmapDrawable)) {
             setColorFilter(drawable);
         }
         return BluetoothUtils.buildAdvancedDrawable(mContext, drawable);
@@ -65,9 +67,7 @@
 
     @Override
     public Drawable getIconWithoutBackground() {
-        return isFastPairDevice()
-                ? BluetoothUtils.getBtDrawableWithDescription(mContext, mCachedDevice).first
-                : mContext.getDrawable(R.drawable.ic_headphone);
+        return BluetoothUtils.getBtClassDrawableWithDescription(mContext, mCachedDevice).first;
     }
 
     @Override
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
index 8973d11..e887c45 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
@@ -24,6 +24,7 @@
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
+import android.graphics.drawable.BitmapDrawable;
 
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 
@@ -96,4 +97,17 @@
 
         assertThat(mBluetoothMediaDevice.isFastPairDevice()).isFalse();
     }
+
+    @Test
+    public void getIcon_isNotFastPairDevice_drawableTypeIsNotBitmapDrawable() {
+        final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
+        when(mDevice.getDevice()).thenReturn(bluetoothDevice);
+
+        final String value = "False";
+        final byte[] bytes = value.getBytes();
+        when(bluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+                .thenReturn(bytes);
+
+        assertThat(mBluetoothMediaDevice.getIcon() instanceof BitmapDrawable).isFalse();
+    }
 }