Merge "Use route name for output switcher chip" into sc-v2-dev am: db4082c251 am: f191dbd7d8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16202436

Change-Id: I91554b3a7e2da1874fed3390152e443d6d9c036f
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt
index 292b0e2..fbfb919 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 @@
     }
 
     @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 @@
             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 @@
 
         @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 bf5a6e4..bbeadf6 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 @@
 
     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 ab3b208..7dadbad 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 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 <T> eq(value: T): T = Mockito.eq(value) ?: value
@@ -195,8 +196,6 @@
         // THEN the device should be disabled
         val data = captureDeviceData(KEY)
         assertThat(data.enabled).isFalse()
-        assertThat(data.name).isNull()
-        assertThat(data.icon).isNull()
     }
 
     @Test
@@ -263,6 +262,20 @@
     }
 
     @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
         whenever(mr2.getRoutingSessionForMediaController(any())).thenReturn(null)
@@ -273,8 +286,6 @@
         // 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 @@
         // 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 @@
         // THEN the device is disabled
         val data = captureDeviceData(KEY)
         assertThat(data.enabled).isFalse()
-        assertThat(data.name).isNull()
-        assertThat(data.icon).isNull()
     }
 
     @Test