From 8fd17b75761f00d7fe8ed4280a46c0d42e79c111 Mon Sep 17 00:00:00 2001 From: Beth Thibodeau Date: Fri, 5 Nov 2021 18:24:05 -0400 Subject: Use route name for output switcher chip The media router 2 library can include device group names when casting to a group. So if the route name is available, use that instead of the LMM device name. If the route name is not available, we fall back to the LMM device name. The output switcher will still show as disabled (chip is not clickable and reads "Other device") if either the device or route is null. Test: manual, using sample app Test: atest MediaDeviceManagerTest MediaControlPanelTest Fixes: 196923854 Fixes: 199951690 Change-Id: I07afbab3f62e6bc7855e0d5623c577231eb3500b --- .../android/systemui/media/MediaDeviceManager.kt | 24 +++++++++------------- .../systemui/media/MediaControlPanelTest.kt | 2 +- .../systemui/media/MediaDeviceManagerTest.kt | 23 +++++++++++++-------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt index 292b0e291244..fbfb919ede1e 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt @@ -109,11 +109,9 @@ class MediaDeviceManager @Inject constructor( } @MainThread - private fun processDevice(key: String, oldKey: String?, device: MediaDevice?) { - val enabled = device != null - val data = MediaDeviceData(enabled, device?.iconWithoutBackground, device?.name) + private fun processDevice(key: String, oldKey: String?, device: MediaDeviceData?) { listeners.forEach { - it.onMediaDeviceChanged(key, oldKey, data) + it.onMediaDeviceChanged(key, oldKey, device) } } @@ -135,7 +133,7 @@ class MediaDeviceManager @Inject constructor( get() = controller?.sessionToken private var started = false private var playbackType = PLAYBACK_TYPE_UNKNOWN - private var current: MediaDevice? = null + private var current: MediaDeviceData? = null set(value) { if (!started || value != field) { field = value @@ -201,15 +199,13 @@ class MediaDeviceManager @Inject constructor( @WorkerThread private fun updateCurrent() { - val device = localMediaManager.getCurrentConnectedDevice() - controller?.let { - val route = mr2manager.getRoutingSessionForMediaController(it) - // If we get a null route, then don't trust the device. Just set to null to disable the - // output switcher chip. - current = if (route != null) device else null - } ?: run { - current = device - } + val device = localMediaManager.currentConnectedDevice + val route = controller?.let { mr2manager.getRoutingSessionForMediaController(it)} + + // If we have a controller but get a null route, then don't trust the device + val enabled = device != null && (controller == null || route != null) + val name = route?.name?.toString() ?: device?.name + current = MediaDeviceData(enabled, device?.iconWithoutBackground, name) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt index bf5a6e4086f3..bbeadf62ae0f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt @@ -122,7 +122,7 @@ public class MediaControlPanelTest : SysuiTestCase() { private lateinit var session: MediaSession private val device = MediaDeviceData(true, null, DEVICE_NAME) - private val disabledDevice = MediaDeviceData(false, null, null) + private val disabledDevice = MediaDeviceData(false, null, "Disabled Device") @JvmField @Rule val mockito = MockitoJUnit.rule() diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt index ab3b20898b23..7dadbad8025f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt @@ -56,6 +56,7 @@ private const val PACKAGE = "PKG" private const val SESSION_KEY = "SESSION_KEY" private const val SESSION_TITLE = "SESSION_TITLE" private const val DEVICE_NAME = "DEVICE_NAME" +private const val REMOTE_DEVICE_NAME = "REMOTE_DEVICE_NAME" private const val USER_ID = 0 private fun eq(value: T): T = Mockito.eq(value) ?: value @@ -195,8 +196,6 @@ public class MediaDeviceManagerTest : SysuiTestCase() { // THEN the device should be disabled val data = captureDeviceData(KEY) assertThat(data.enabled).isFalse() - assertThat(data.name).isNull() - assertThat(data.icon).isNull() } @Test @@ -262,6 +261,20 @@ public class MediaDeviceManagerTest : SysuiTestCase() { verify(listener).onKeyRemoved(eq(KEY)) } + @Test + fun deviceNameFromMR2RouteInfo() { + // GIVEN that MR2Manager returns a valid routing session + whenever(route.name).thenReturn(REMOTE_DEVICE_NAME) + // WHEN a notification is added + manager.onMediaDataLoaded(KEY, null, mediaData) + fakeBgExecutor.runAllReady() + fakeFgExecutor.runAllReady() + // THEN it uses the route name (instead of device name) + val data = captureDeviceData(KEY) + assertThat(data.enabled).isTrue() + assertThat(data.name).isEqualTo(REMOTE_DEVICE_NAME) + } + @Test fun deviceDisabledWhenMR2ReturnsNullRouteInfo() { // GIVEN that MR2Manager returns null for routing session @@ -273,8 +286,6 @@ public class MediaDeviceManagerTest : SysuiTestCase() { // THEN the device is disabled val data = captureDeviceData(KEY) assertThat(data.enabled).isFalse() - assertThat(data.name).isNull() - assertThat(data.icon).isNull() } @Test @@ -294,8 +305,6 @@ public class MediaDeviceManagerTest : SysuiTestCase() { // THEN the device is disabled val data = captureDeviceData(KEY) assertThat(data.enabled).isFalse() - assertThat(data.name).isNull() - assertThat(data.icon).isNull() } @Test @@ -315,8 +324,6 @@ public class MediaDeviceManagerTest : SysuiTestCase() { // THEN the device is disabled val data = captureDeviceData(KEY) assertThat(data.enabled).isFalse() - assertThat(data.name).isNull() - assertThat(data.icon).isNull() } @Test -- cgit v1.2.3-59-g8ed1b