From 61ca7efbd1c9a044967c62221b4d8c803f8fb493 Mon Sep 17 00:00:00 2001 From: hughchen Date: Thu, 5 Mar 2020 16:45:39 +0800 Subject: [PATCH] Use device type to show corresponding icon and name - Use device type to show corresponding icon and name - Add test case Bug: 150834859 Test: make -j42 RunSettingsLibRoboTests Change-Id: Iea74f18c8e4b3de8cad8c196004b515ac26b8c82 --- .../res/drawable/ic_media_group_device.xml | 32 ++++++++++++ .../settingslib/media/InfoMediaDevice.java | 24 ++++++++- .../settingslib/media/PhoneMediaDevice.java | 37 +++++++++++++- .../media/InfoMediaDeviceTest.java | 19 +++++++ .../media/PhoneMediaDeviceTest.java | 51 ++++++++++++++++++- 5 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 packages/SettingsLib/res/drawable/ic_media_group_device.xml diff --git a/packages/SettingsLib/res/drawable/ic_media_group_device.xml b/packages/SettingsLib/res/drawable/ic_media_group_device.xml new file mode 100644 index 0000000000000..ba5e65119ead9 --- /dev/null +++ b/packages/SettingsLib/res/drawable/ic_media_group_device.xml @@ -0,0 +1,32 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java index b725ba5b8748f..85fa988a866e0 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java @@ -15,11 +15,17 @@ */ package com.android.settingslib.media; +import static android.media.MediaRoute2Info.TYPE_GROUP; +import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER; +import static android.media.MediaRoute2Info.TYPE_REMOTE_TV; + import android.content.Context; import android.graphics.drawable.Drawable; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; +import androidx.annotation.VisibleForTesting; + import com.android.settingslib.R; import com.android.settingslib.bluetooth.BluetoothUtils; @@ -51,7 +57,23 @@ public class InfoMediaDevice extends MediaDevice { public Drawable getIcon() { //TODO(b/120669861): Return remote device icon uri once api is ready. return BluetoothUtils.buildBtRainbowDrawable(mContext, - mContext.getDrawable(R.drawable.ic_media_device), getId().hashCode()); + mContext.getDrawable(getDrawableResId()), getId().hashCode()); + } + + @VisibleForTesting + int getDrawableResId() { + int resId; + switch (mRouteInfo.getType()) { + case TYPE_GROUP: + resId = R.drawable.ic_media_group_device; + break; + case TYPE_REMOTE_TV: + case TYPE_REMOTE_SPEAKER: + default: + resId = R.drawable.ic_media_device; + break; + } + return resId; } @Override diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java index 166fbaa2a337c..af88723c6249b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java @@ -15,11 +15,17 @@ */ package com.android.settingslib.media; +import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; +import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES; +import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET; + import android.content.Context; import android.graphics.drawable.Drawable; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; +import androidx.annotation.VisibleForTesting; + import com.android.settingslib.R; import com.android.settingslib.bluetooth.BluetoothUtils; @@ -43,7 +49,18 @@ public class PhoneMediaDevice extends MediaDevice { @Override public String getName() { - return mContext.getString(R.string.media_transfer_this_device_name); + CharSequence name; + switch (mRouteInfo.getType()) { + case TYPE_WIRED_HEADSET: + case TYPE_WIRED_HEADPHONES: + name = mRouteInfo.getName(); + break; + case TYPE_BUILTIN_SPEAKER: + default: + name = mContext.getString(R.string.media_transfer_this_device_name); + break; + } + return name.toString(); } @Override @@ -54,7 +71,23 @@ public class PhoneMediaDevice extends MediaDevice { @Override public Drawable getIcon() { return BluetoothUtils.buildBtRainbowDrawable(mContext, - mContext.getDrawable(R.drawable.ic_smartphone), getId().hashCode()); + mContext.getDrawable(getDrawableResId()), getId().hashCode()); + } + + @VisibleForTesting + int getDrawableResId() { + int resId; + switch (mRouteInfo.getType()) { + case TYPE_WIRED_HEADSET: + case TYPE_WIRED_HEADPHONES: + resId = com.android.internal.R.drawable.ic_bt_headphones_a2dp; + break; + case TYPE_BUILTIN_SPEAKER: + default: + resId = R.drawable.ic_smartphone; + break; + } + return resId; } @Override diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java index 77a67c2869894..685c834ff3281 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java @@ -16,6 +16,10 @@ package com.android.settingslib.media; +import static android.media.MediaRoute2Info.TYPE_GROUP; +import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER; +import static android.media.MediaRoute2Info.TYPE_REMOTE_TV; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; @@ -86,4 +90,19 @@ public class InfoMediaDeviceTest { assertThat(mInfoMediaDevice.getId()).isEqualTo(TEST_ID); } + + @Test + public void getDrawableResId_returnCorrectResId() { + when(mRouteInfo.getType()).thenReturn(TYPE_REMOTE_TV); + + assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_device); + + when(mRouteInfo.getType()).thenReturn(TYPE_REMOTE_SPEAKER); + + assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_device); + + when(mRouteInfo.getType()).thenReturn(TYPE_GROUP); + + assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_group_device); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java index db984fb8dc26c..4c5cd9682b0f5 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java @@ -16,15 +16,23 @@ package com.android.settingslib.media; +import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; +import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES; +import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET; + import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; + import android.content.Context; +import android.media.MediaRoute2Info; import com.android.settingslib.R; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -32,6 +40,9 @@ import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class PhoneMediaDeviceTest { + @Mock + private MediaRoute2Info mInfo; + private Context mContext; private PhoneMediaDevice mPhoneMediaDevice; @@ -41,7 +52,7 @@ public class PhoneMediaDeviceTest { mContext = RuntimeEnvironment.application; mPhoneMediaDevice = - new PhoneMediaDevice(mContext, null, null, null); + new PhoneMediaDevice(mContext, null, mInfo, null); } @Test @@ -58,4 +69,42 @@ public class PhoneMediaDeviceTest { assertThat(mPhoneMediaDevice.getSummary()).isEmpty(); } + + @Test + public void getDrawableResId_returnCorrectResId() { + when(mInfo.getType()).thenReturn(TYPE_WIRED_HEADPHONES); + + assertThat(mPhoneMediaDevice.getDrawableResId()) + .isEqualTo(com.android.internal.R.drawable.ic_bt_headphones_a2dp); + + when(mInfo.getType()).thenReturn(TYPE_WIRED_HEADSET); + + assertThat(mPhoneMediaDevice.getDrawableResId()) + .isEqualTo(com.android.internal.R.drawable.ic_bt_headphones_a2dp); + + when(mInfo.getType()).thenReturn(TYPE_BUILTIN_SPEAKER); + + assertThat(mPhoneMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_smartphone); + } + + @Test + public void getName_returnCorrectName() { + final String deviceName = "test_name"; + + when(mInfo.getType()).thenReturn(TYPE_WIRED_HEADPHONES); + when(mInfo.getName()).thenReturn(deviceName); + + assertThat(mPhoneMediaDevice.getName()) + .isEqualTo(deviceName); + + when(mInfo.getType()).thenReturn(TYPE_WIRED_HEADSET); + + assertThat(mPhoneMediaDevice.getName()) + .isEqualTo(deviceName); + + when(mInfo.getType()).thenReturn(TYPE_BUILTIN_SPEAKER); + + assertThat(mPhoneMediaDevice.getName()) + .isEqualTo(mContext.getString(R.string.media_transfer_this_device_name)); + } }