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
Test: make -j42 RunSettingsRoboTests
Change-Id: Ic5c348900db3e79e669173ec4ceeaec4d6500e5f
This commit is contained in:
Hugh Chen
2020-11-30 16:13:58 +08:00
parent a2402d954c
commit b4603fd3ff
2 changed files with 19 additions and 5 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settingslib.media;
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 @@ public class BluetoothMediaDevice extends MediaDevice {
@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 @@ public class BluetoothMediaDevice extends MediaDevice {
@Override
public Drawable getIconWithoutBackground() {
return isFastPairDevice()
? BluetoothUtils.getBtDrawableWithDescription(mContext, mCachedDevice).first
: mContext.getDrawable(R.drawable.ic_headphone);
return BluetoothUtils.getBtClassDrawableWithDescription(mContext, mCachedDevice).first;
}
@Override

View File

@@ -24,6 +24,7 @@ import static org.mockito.Mockito.when;
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 @@ public class BluetoothMediaDeviceTest {
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();
}
}