diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt index 292b0e291244c..fbfb919ede1e2 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 bf5a6e4086f39..bbeadf62ae0f0 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 ab3b20898b236..7dadbad8025f3 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