Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java +13 −29 Original line number Diff line number Diff line package com.android.settingslib.bluetooth; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; import android.graphics.drawable.Drawable; Loading @@ -10,7 +9,6 @@ import android.util.Pair; import androidx.annotation.DrawableRes; import com.android.settingslib.R; import com.android.settingslib.graph.BluetoothDeviceLayerDrawable; import java.util.List; Loading Loading @@ -51,38 +49,29 @@ public class BluetoothUtils { public static Pair<Drawable, String> getBtClassDrawableWithDescription(Context context, CachedBluetoothDevice cachedDevice) { return getBtClassDrawableWithDescription(context, cachedDevice, 1 /* iconScale */); } public static Pair<Drawable, String> getBtClassDrawableWithDescription(Context context, CachedBluetoothDevice cachedDevice, float iconScale) { BluetoothClass btClass = cachedDevice.getBtClass(); final int level = cachedDevice.getBatteryLevel(); if (btClass != null) { switch (btClass.getMajorDeviceClass()) { case BluetoothClass.Device.Major.COMPUTER: return new Pair<>(getBluetoothDrawable(context, com.android.internal.R.drawable.ic_bt_laptop, level, iconScale), com.android.internal.R.drawable.ic_bt_laptop), context.getString(R.string.bluetooth_talkback_computer)); case BluetoothClass.Device.Major.PHONE: return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_phone, level, iconScale), com.android.internal.R.drawable.ic_phone), context.getString(R.string.bluetooth_talkback_phone)); case BluetoothClass.Device.Major.PERIPHERAL: return new Pair<>( getBluetoothDrawable(context, HidProfile.getHidClassDrawable(btClass), level, iconScale), getBluetoothDrawable(context, HidProfile.getHidClassDrawable(btClass)), context.getString(R.string.bluetooth_talkback_input_peripheral)); case BluetoothClass.Device.Major.IMAGING: return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_settings_print, level, iconScale), com.android.internal.R.drawable.ic_settings_print), context.getString(R.string.bluetooth_talkback_imaging)); default: Loading @@ -94,38 +83,33 @@ public class BluetoothUtils { for (LocalBluetoothProfile profile : profiles) { int resId = profile.getDrawableResource(btClass); if (resId != 0) { return new Pair<>(getBluetoothDrawable(context, resId, level, iconScale), null); return new Pair<>(getBluetoothDrawable(context, resId), null); } } if (btClass != null) { if (btClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET)) { return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_bt_headset_hfp, level, iconScale), com.android.internal.R.drawable.ic_bt_headset_hfp), context.getString(R.string.bluetooth_talkback_headset)); } if (btClass.doesClassMatch(BluetoothClass.PROFILE_A2DP)) { return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_bt_headphones_a2dp, level, iconScale), com.android.internal.R.drawable.ic_bt_headphones_a2dp), context.getString(R.string.bluetooth_talkback_headphone)); } } return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_settings_bluetooth, level, iconScale), com.android.internal.R.drawable.ic_settings_bluetooth), context.getString(R.string.bluetooth_talkback_bluetooth)); } public static Drawable getBluetoothDrawable(Context context, @DrawableRes int resId, int batteryLevel, float iconScale) { if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) { return BluetoothDeviceLayerDrawable.createLayerDrawable(context, resId, batteryLevel, iconScale); } else { /** * Get bluetooth drawable by {@code resId} */ public static Drawable getBluetoothDrawable(Context context, @DrawableRes int resId) { return context.getDrawable(resId); } } } packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java +34 −15 Original line number Diff line number Diff line Loading @@ -15,36 +15,55 @@ */ package com.android.settingslib.bluetooth; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothClass; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.Pair; import com.android.settingslib.graph.BluetoothDeviceLayerDrawable; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class BluetoothUtilsTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private CachedBluetoothDevice mCachedBluetoothDevice; private Context mContext; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); } @Test public void testGetBluetoothDrawable_noBatteryLevel_returnSimpleDrawable() { final Drawable drawable = BluetoothUtils.getBluetoothDrawable( RuntimeEnvironment.application, com.android.internal.R.drawable.ic_bt_laptop, BluetoothDevice.BATTERY_LEVEL_UNKNOWN, 1 /* iconScale */); public void getBtClassDrawableWithDescription_typePhone_returnPhoneDrawable() { when(mCachedBluetoothDevice.getBtClass().getMajorDeviceClass()).thenReturn( BluetoothClass.Device.Major.PHONE); final Pair<Drawable, String> pair = BluetoothUtils.getBtClassDrawableWithDescription( mContext, mCachedBluetoothDevice); assertThat(drawable).isNotInstanceOf(BluetoothDeviceLayerDrawable.class); verify(mContext).getDrawable(com.android.internal.R.drawable.ic_phone); } @Test public void testGetBluetoothDrawable_hasBatteryLevel_returnLayerDrawable() { final Drawable drawable = BluetoothUtils.getBluetoothDrawable( RuntimeEnvironment.application, com.android.internal.R.drawable.ic_bt_laptop, 10 /* batteryLevel */, 1 /* iconScale */); public void getBtClassDrawableWithDescription_typeComputer_returnComputerDrawable() { when(mCachedBluetoothDevice.getBtClass().getMajorDeviceClass()).thenReturn( BluetoothClass.Device.Major.COMPUTER); final Pair<Drawable, String> pair = BluetoothUtils.getBtClassDrawableWithDescription( mContext, mCachedBluetoothDevice); assertThat(drawable).isInstanceOf(BluetoothDeviceLayerDrawable.class); verify(mContext).getDrawable(com.android.internal.R.drawable.ic_bt_laptop); } } No newline at end of file Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java +13 −29 Original line number Diff line number Diff line package com.android.settingslib.bluetooth; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; import android.graphics.drawable.Drawable; Loading @@ -10,7 +9,6 @@ import android.util.Pair; import androidx.annotation.DrawableRes; import com.android.settingslib.R; import com.android.settingslib.graph.BluetoothDeviceLayerDrawable; import java.util.List; Loading Loading @@ -51,38 +49,29 @@ public class BluetoothUtils { public static Pair<Drawable, String> getBtClassDrawableWithDescription(Context context, CachedBluetoothDevice cachedDevice) { return getBtClassDrawableWithDescription(context, cachedDevice, 1 /* iconScale */); } public static Pair<Drawable, String> getBtClassDrawableWithDescription(Context context, CachedBluetoothDevice cachedDevice, float iconScale) { BluetoothClass btClass = cachedDevice.getBtClass(); final int level = cachedDevice.getBatteryLevel(); if (btClass != null) { switch (btClass.getMajorDeviceClass()) { case BluetoothClass.Device.Major.COMPUTER: return new Pair<>(getBluetoothDrawable(context, com.android.internal.R.drawable.ic_bt_laptop, level, iconScale), com.android.internal.R.drawable.ic_bt_laptop), context.getString(R.string.bluetooth_talkback_computer)); case BluetoothClass.Device.Major.PHONE: return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_phone, level, iconScale), com.android.internal.R.drawable.ic_phone), context.getString(R.string.bluetooth_talkback_phone)); case BluetoothClass.Device.Major.PERIPHERAL: return new Pair<>( getBluetoothDrawable(context, HidProfile.getHidClassDrawable(btClass), level, iconScale), getBluetoothDrawable(context, HidProfile.getHidClassDrawable(btClass)), context.getString(R.string.bluetooth_talkback_input_peripheral)); case BluetoothClass.Device.Major.IMAGING: return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_settings_print, level, iconScale), com.android.internal.R.drawable.ic_settings_print), context.getString(R.string.bluetooth_talkback_imaging)); default: Loading @@ -94,38 +83,33 @@ public class BluetoothUtils { for (LocalBluetoothProfile profile : profiles) { int resId = profile.getDrawableResource(btClass); if (resId != 0) { return new Pair<>(getBluetoothDrawable(context, resId, level, iconScale), null); return new Pair<>(getBluetoothDrawable(context, resId), null); } } if (btClass != null) { if (btClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET)) { return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_bt_headset_hfp, level, iconScale), com.android.internal.R.drawable.ic_bt_headset_hfp), context.getString(R.string.bluetooth_talkback_headset)); } if (btClass.doesClassMatch(BluetoothClass.PROFILE_A2DP)) { return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_bt_headphones_a2dp, level, iconScale), com.android.internal.R.drawable.ic_bt_headphones_a2dp), context.getString(R.string.bluetooth_talkback_headphone)); } } return new Pair<>( getBluetoothDrawable(context, com.android.internal.R.drawable.ic_settings_bluetooth, level, iconScale), com.android.internal.R.drawable.ic_settings_bluetooth), context.getString(R.string.bluetooth_talkback_bluetooth)); } public static Drawable getBluetoothDrawable(Context context, @DrawableRes int resId, int batteryLevel, float iconScale) { if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) { return BluetoothDeviceLayerDrawable.createLayerDrawable(context, resId, batteryLevel, iconScale); } else { /** * Get bluetooth drawable by {@code resId} */ public static Drawable getBluetoothDrawable(Context context, @DrawableRes int resId) { return context.getDrawable(resId); } } }
packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java +34 −15 Original line number Diff line number Diff line Loading @@ -15,36 +15,55 @@ */ package com.android.settingslib.bluetooth; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothClass; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.Pair; import com.android.settingslib.graph.BluetoothDeviceLayerDrawable; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class BluetoothUtilsTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private CachedBluetoothDevice mCachedBluetoothDevice; private Context mContext; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); } @Test public void testGetBluetoothDrawable_noBatteryLevel_returnSimpleDrawable() { final Drawable drawable = BluetoothUtils.getBluetoothDrawable( RuntimeEnvironment.application, com.android.internal.R.drawable.ic_bt_laptop, BluetoothDevice.BATTERY_LEVEL_UNKNOWN, 1 /* iconScale */); public void getBtClassDrawableWithDescription_typePhone_returnPhoneDrawable() { when(mCachedBluetoothDevice.getBtClass().getMajorDeviceClass()).thenReturn( BluetoothClass.Device.Major.PHONE); final Pair<Drawable, String> pair = BluetoothUtils.getBtClassDrawableWithDescription( mContext, mCachedBluetoothDevice); assertThat(drawable).isNotInstanceOf(BluetoothDeviceLayerDrawable.class); verify(mContext).getDrawable(com.android.internal.R.drawable.ic_phone); } @Test public void testGetBluetoothDrawable_hasBatteryLevel_returnLayerDrawable() { final Drawable drawable = BluetoothUtils.getBluetoothDrawable( RuntimeEnvironment.application, com.android.internal.R.drawable.ic_bt_laptop, 10 /* batteryLevel */, 1 /* iconScale */); public void getBtClassDrawableWithDescription_typeComputer_returnComputerDrawable() { when(mCachedBluetoothDevice.getBtClass().getMajorDeviceClass()).thenReturn( BluetoothClass.Device.Major.COMPUTER); final Pair<Drawable, String> pair = BluetoothUtils.getBtClassDrawableWithDescription( mContext, mCachedBluetoothDevice); assertThat(drawable).isInstanceOf(BluetoothDeviceLayerDrawable.class); verify(mContext).getDrawable(com.android.internal.R.drawable.ic_bt_laptop); } } No newline at end of file