Loading packages/SystemUI/multivalentTests/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputComponentInteractorTest.kt +50 −1 Original line number Diff line number Diff line Loading @@ -21,11 +21,12 @@ import android.content.packageManager import android.content.pm.PackageManager.FEATURE_PC import android.graphics.drawable.TestStubDrawable import android.media.AudioManager import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.media.flags.Flags; import com.android.media.flags.Flags import com.android.settingslib.R import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue Loading Loading @@ -156,6 +157,33 @@ class MediaOutputComponentInteractorTest : SysuiTestCase() { } @Test @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) fun hasSession_stateIs_MediaSession_canOpenAudioSwitcherDuringAudioSharing() = with(kosmos) { testScope.runTest { audioSharingRepository.setInAudioSharing(true) localMediaRepository.updateCurrentConnectedDevice( TestMediaDevicesFactory.builtInMediaDevice() ) mediaControllerRepository.setActiveSessions(listOf(localMediaController)) val model by collectLastValue(underTest.mediaOutputModel.filterData()) runCurrent() with(model as MediaOutputComponentModel.MediaSession) { assertThat(session.appLabel).isEqualTo("local_media_controller_label") assertThat(session.packageName).isEqualTo("local.test.pkg") assertThat(session.canAdjustVolume).isTrue() assertThat(device) .isEqualTo(AudioOutputDevice.BuiltIn("built_in_media", testIcon)) assertThat(isInAudioSharing).isTrue() assertThat(canOpenAudioSwitcher).isTrue() } } } @Test @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) fun noMediaOrCall_stateIs_Idle() = with(kosmos) { testScope.runTest { Loading @@ -175,6 +203,27 @@ class MediaOutputComponentInteractorTest : SysuiTestCase() { } } @Test @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) fun noMediaOrCall_stateIs_Idle_canOpenAudioSwitcherDuringAudioSharing() = with(kosmos) { testScope.runTest { audioSharingRepository.setInAudioSharing(true) val model by collectLastValue(underTest.mediaOutputModel.filterData()) runCurrent() assertThat(model) .isEqualTo( MediaOutputComponentModel.Idle( device = AudioOutputDevice.BuiltIn("built_in_media", testIcon), isInAudioSharing = true, canOpenAudioSwitcher = true, ) ) } } private companion object { val testIcon = TestStubDrawable() } Loading packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputComponentInteractor.kt +7 −8 Original line number Diff line number Diff line Loading @@ -16,8 +16,9 @@ package com.android.systemui.volume.panel.component.mediaoutput.domain.interactor import com.android.settingslib.media.PhoneMediaDevice.inputRoutingEnabledAndIsDesktop import android.content.Context import com.android.media.flags.Flags.enableOutputSwitcherPersonalAudioSharing import com.android.settingslib.media.PhoneMediaDevice.inputRoutingEnabledAndIsDesktop import com.android.settingslib.volume.domain.interactor.AudioModeInteractor import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.volume.domain.interactor.AudioOutputInteractor Loading Loading @@ -69,11 +70,7 @@ constructor( } } .wrapInResult() .stateIn( coroutineScope, SharingStarted.Eagerly, Result.Loading(), ) .stateIn(coroutineScope, SharingStarted.Eagerly, Result.Loading()) private val currentAudioDevice: Flow<AudioOutputDevice> = audioOutputInteractor.currentAudioDevice.filter { it !is AudioOutputDevice.Unavailable } Loading @@ -98,13 +95,15 @@ constructor( ) ) } else { val canOpenAudioSwitcherForAudioSharing: Boolean = enableOutputSwitcherPersonalAudioSharing() || !isInAudioSharing sessionWithPlaybackState.filterData().map { sessionWithPlaybackState -> if (sessionWithPlaybackState == null) { MediaOutputComponentModel.Idle( device = currentAudioDevice, isInAudioSharing = isInAudioSharing, canOpenAudioSwitcher = !isInAudioSharing && canOpenAudioSwitcherForAudioSharing && currentAudioDevice !is AudioOutputDevice.Unknown, ) } else { Loading @@ -114,7 +113,7 @@ constructor( device = currentAudioDevice, isInAudioSharing = isInAudioSharing, canOpenAudioSwitcher = !isInAudioSharing && canOpenAudioSwitcherForAudioSharing && currentAudioDevice !is AudioOutputDevice.Unknown, ) } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputComponentInteractorTest.kt +50 −1 Original line number Diff line number Diff line Loading @@ -21,11 +21,12 @@ import android.content.packageManager import android.content.pm.PackageManager.FEATURE_PC import android.graphics.drawable.TestStubDrawable import android.media.AudioManager import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.media.flags.Flags; import com.android.media.flags.Flags import com.android.settingslib.R import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue Loading Loading @@ -156,6 +157,33 @@ class MediaOutputComponentInteractorTest : SysuiTestCase() { } @Test @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) fun hasSession_stateIs_MediaSession_canOpenAudioSwitcherDuringAudioSharing() = with(kosmos) { testScope.runTest { audioSharingRepository.setInAudioSharing(true) localMediaRepository.updateCurrentConnectedDevice( TestMediaDevicesFactory.builtInMediaDevice() ) mediaControllerRepository.setActiveSessions(listOf(localMediaController)) val model by collectLastValue(underTest.mediaOutputModel.filterData()) runCurrent() with(model as MediaOutputComponentModel.MediaSession) { assertThat(session.appLabel).isEqualTo("local_media_controller_label") assertThat(session.packageName).isEqualTo("local.test.pkg") assertThat(session.canAdjustVolume).isTrue() assertThat(device) .isEqualTo(AudioOutputDevice.BuiltIn("built_in_media", testIcon)) assertThat(isInAudioSharing).isTrue() assertThat(canOpenAudioSwitcher).isTrue() } } } @Test @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) fun noMediaOrCall_stateIs_Idle() = with(kosmos) { testScope.runTest { Loading @@ -175,6 +203,27 @@ class MediaOutputComponentInteractorTest : SysuiTestCase() { } } @Test @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) fun noMediaOrCall_stateIs_Idle_canOpenAudioSwitcherDuringAudioSharing() = with(kosmos) { testScope.runTest { audioSharingRepository.setInAudioSharing(true) val model by collectLastValue(underTest.mediaOutputModel.filterData()) runCurrent() assertThat(model) .isEqualTo( MediaOutputComponentModel.Idle( device = AudioOutputDevice.BuiltIn("built_in_media", testIcon), isInAudioSharing = true, canOpenAudioSwitcher = true, ) ) } } private companion object { val testIcon = TestStubDrawable() } Loading
packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputComponentInteractor.kt +7 −8 Original line number Diff line number Diff line Loading @@ -16,8 +16,9 @@ package com.android.systemui.volume.panel.component.mediaoutput.domain.interactor import com.android.settingslib.media.PhoneMediaDevice.inputRoutingEnabledAndIsDesktop import android.content.Context import com.android.media.flags.Flags.enableOutputSwitcherPersonalAudioSharing import com.android.settingslib.media.PhoneMediaDevice.inputRoutingEnabledAndIsDesktop import com.android.settingslib.volume.domain.interactor.AudioModeInteractor import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.volume.domain.interactor.AudioOutputInteractor Loading Loading @@ -69,11 +70,7 @@ constructor( } } .wrapInResult() .stateIn( coroutineScope, SharingStarted.Eagerly, Result.Loading(), ) .stateIn(coroutineScope, SharingStarted.Eagerly, Result.Loading()) private val currentAudioDevice: Flow<AudioOutputDevice> = audioOutputInteractor.currentAudioDevice.filter { it !is AudioOutputDevice.Unavailable } Loading @@ -98,13 +95,15 @@ constructor( ) ) } else { val canOpenAudioSwitcherForAudioSharing: Boolean = enableOutputSwitcherPersonalAudioSharing() || !isInAudioSharing sessionWithPlaybackState.filterData().map { sessionWithPlaybackState -> if (sessionWithPlaybackState == null) { MediaOutputComponentModel.Idle( device = currentAudioDevice, isInAudioSharing = isInAudioSharing, canOpenAudioSwitcher = !isInAudioSharing && canOpenAudioSwitcherForAudioSharing && currentAudioDevice !is AudioOutputDevice.Unknown, ) } else { Loading @@ -114,7 +113,7 @@ constructor( device = currentAudioDevice, isInAudioSharing = isInAudioSharing, canOpenAudioSwitcher = !isInAudioSharing && canOpenAudioSwitcherForAudioSharing && currentAudioDevice !is AudioOutputDevice.Unknown, ) } Loading