Fix media output component appearance

The new media output component is always visible and displays the
current media output (either phone or a connected device)

Fixed icon colors to match MaterialTheme ones

Flag: aconfig new_volume_panel DISABLED
Test: atest MediaOutputAvailabilityCriteriaTest
Fixes: 325669613
Change-Id: Ia3039084a5b2562b9d3ae96777513882755c1bad
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/mediaoutput/ui/composable/MediaOutputComponent.kt b/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/mediaoutput/ui/composable/MediaOutputComponent.kt
index 8ad6fdf..d49fed5 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/mediaoutput/ui/composable/MediaOutputComponent.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/mediaoutput/ui/composable/MediaOutputComponent.kt
@@ -167,6 +167,7 @@
             ) {
                 Icon(
                     icon = it.icon,
+                    tint = it.iconColor.toColor(),
                     modifier = Modifier.padding(12.dp).fillMaxSize(),
                 )
             }
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteriaTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteriaTest.kt
index ec37925..ec55c75 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteriaTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteriaTest.kt
@@ -17,8 +17,6 @@
 package com.android.systemui.volume.panel.component.mediaoutput.domain
 
 import android.media.AudioManager
-import android.media.session.MediaSession
-import android.media.session.PlaybackState
 import android.testing.TestableLooper.RunWithLooper
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
@@ -26,14 +24,8 @@
 import com.android.systemui.coroutines.collectLastValue
 import com.android.systemui.kosmos.testScope
 import com.android.systemui.testKosmos
-import com.android.systemui.util.mockito.mock
-import com.android.systemui.util.mockito.whenever
 import com.android.systemui.volume.audioModeInteractor
 import com.android.systemui.volume.audioRepository
-import com.android.systemui.volume.localMediaRepository
-import com.android.systemui.volume.mediaController
-import com.android.systemui.volume.mediaControllerRepository
-import com.android.systemui.volume.mediaOutputInteractor
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.test.runCurrent
@@ -54,23 +46,14 @@
 
     @Before
     fun setup() {
-        with(kosmos) {
-            whenever(mediaController.packageName).thenReturn("test.pkg")
-            whenever(mediaController.sessionToken).thenReturn(MediaSession.Token(0, mock {}))
-            whenever(mediaController.playbackState).thenReturn(PlaybackState.Builder().build())
-
-            mediaControllerRepository.setActiveLocalMediaController(mediaController)
-
-            underTest = MediaOutputAvailabilityCriteria(mediaOutputInteractor, audioModeInteractor)
-        }
+        underTest = MediaOutputAvailabilityCriteria(kosmos.audioModeInteractor)
     }
 
     @Test
-    fun notInCallAndHasDevices_isAvailable_true() {
+    fun notInCall_isAvailable_true() {
         with(kosmos) {
             testScope.runTest {
                 audioRepository.setMode(AudioManager.MODE_NORMAL)
-                localMediaRepository.updateMediaDevices(listOf(mock {}))
 
                 val isAvailable by collectLastValue(underTest.isAvailable())
                 runCurrent()
@@ -79,27 +62,12 @@
             }
         }
     }
+
     @Test
-    fun inCallAndHasDevices_isAvailable_false() {
+    fun inCall_isAvailable_false() {
         with(kosmos) {
             testScope.runTest {
                 audioRepository.setMode(AudioManager.MODE_IN_CALL)
-                localMediaRepository.updateMediaDevices(listOf(mock {}))
-
-                val isAvailable by collectLastValue(underTest.isAvailable())
-                runCurrent()
-
-                assertThat(isAvailable).isFalse()
-            }
-        }
-    }
-
-    @Test
-    fun notInCallAndHasDevices_isAvailable_false() {
-        with(kosmos) {
-            testScope.runTest {
-                audioRepository.setMode(AudioManager.MODE_NORMAL)
-                localMediaRepository.updateMediaDevices(emptyList())
 
                 val isAvailable by collectLastValue(underTest.isAvailable())
                 runCurrent()
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index f1d4d71..0054994d 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -953,8 +953,11 @@
         <item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item>
     </style>
 
-    <style name="Theme.VolumePanelActivity"
-        parent="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen">
+    <style name="Theme.VolumePanelActivity" parent="@android:style/Theme.DeviceDefault.DayNight">
+        <item name="android:windowFullscreen">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowActionBar">false</item>
+        <item name="android:windowNoTitle">true</item>
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:backgroundDimEnabled">true</item>
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteria.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteria.kt
index 020ec64..bac7d15 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteria.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/MediaOutputAvailabilityCriteria.kt
@@ -17,27 +17,19 @@
 package com.android.systemui.volume.panel.component.mediaoutput.domain
 
 import com.android.settingslib.volume.domain.interactor.AudioModeInteractor
-import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputInteractor
 import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope
 import com.android.systemui.volume.panel.domain.ComponentAvailabilityCriteria
 import javax.inject.Inject
 import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.map
 
 /** Determines if the Media Output Volume Panel component is available. */
 @VolumePanelScope
 class MediaOutputAvailabilityCriteria
 @Inject
 constructor(
-    private val mediaOutputInteractor: MediaOutputInteractor,
     private val audioModeInteractor: AudioModeInteractor,
 ) : ComponentAvailabilityCriteria {
 
-    override fun isAvailable(): Flow<Boolean> {
-        return combine(mediaOutputInteractor.mediaDevices, audioModeInteractor.isOngoingCall) {
-            devices,
-            isOngoingCall ->
-            !isOngoingCall && devices.isNotEmpty()
-        }
-    }
+    override fun isAvailable(): Flow<Boolean> = audioModeInteractor.isOngoingCall.map { !it }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt
index 24cc29d..0f53437 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt
@@ -95,10 +95,6 @@
     val currentConnectedDevice: Flow<MediaDevice?> =
         localMediaRepository.flatMapLatest { it.currentConnectedDevice }
 
-    /** A list of available [MediaDevice]s. */
-    val mediaDevices: Flow<Collection<MediaDevice>> =
-        localMediaRepository.flatMapLatest { it.mediaDevices }
-
     private suspend fun getApplicationLabel(packageName: String): CharSequence? {
         return try {
             withContext(backgroundCoroutineContext) {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/DeviceIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/DeviceIconViewModel.kt
index e0718ac..e518ed0 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/DeviceIconViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/DeviceIconViewModel.kt
@@ -23,15 +23,18 @@
 sealed interface DeviceIconViewModel {
 
     val icon: Icon
+    val iconColor: Color
     val backgroundColor: Color
 
     class IsPlaying(
         override val icon: Icon,
+        override val iconColor: Color,
         override val backgroundColor: Color,
     ) : DeviceIconViewModel
 
     class IsNotPlaying(
         override val icon: Icon,
+        override val iconColor: Color,
         override val backgroundColor: Color,
     ) : DeviceIconViewModel
 }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt
index d148992..85d6c9e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt
@@ -86,13 +86,21 @@
                                 null
                             )
                     DeviceIconViewModel.IsPlaying(
-                        icon,
-                        Color.Attribute(com.android.internal.R.attr.materialColorSecondary),
+                        icon = icon,
+                        iconColor =
+                            Color.Attribute(com.android.internal.R.attr.materialColorSurface),
+                        backgroundColor =
+                            Color.Attribute(com.android.internal.R.attr.materialColorSecondary),
                     )
                 } else {
                     DeviceIconViewModel.IsNotPlaying(
-                        Icon.Resource(R.drawable.ic_media_home_devices, null),
-                        Color.Attribute(com.android.internal.R.attr.materialColorSurface),
+                        icon = Icon.Resource(R.drawable.ic_media_home_devices, null),
+                        iconColor =
+                            Color.Attribute(
+                                com.android.internal.R.attr.materialColorOnSurfaceVariant
+                            ),
+                        backgroundColor =
+                            Color.Attribute(com.android.internal.R.attr.materialColorSurface),
                     )
                 }
             }