Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/MediaCarouselSection.kt +7 −10 Original line number Diff line number Diff line Loading @@ -18,9 +18,11 @@ package com.android.systemui.keyguard.ui.composable.section import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.systemui.keyguard.ui.viewmodel.MediaCarouselViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardMediaViewModel import com.android.systemui.media.controls.ui.composable.MediaCarousel import com.android.systemui.media.controls.ui.controller.MediaCarouselController import com.android.systemui.media.controls.ui.view.MediaHost Loading @@ -33,20 +35,15 @@ class MediaCarouselSection constructor( private val mediaCarouselController: MediaCarouselController, @param:Named(MediaModule.KEYGUARD) private val mediaHost: MediaHost, private val mediaCarouselViewModel: MediaCarouselViewModel, private val keyguardMediaViewModel: KeyguardMediaViewModel, ) { private fun isVisible(): Boolean { if (mediaCarouselController.mediaFrame == null) { return false } return mediaCarouselViewModel.isMediaVisible } @Composable fun SceneScope.KeyguardMediaCarousel() { val isMediaVisible by keyguardMediaViewModel.isMediaVisible.collectAsState() MediaCarousel( isVisible = ::isVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -42,12 +42,12 @@ private object MediaCarousel { @Composable fun SceneScope.MediaCarousel( isVisible: () -> Boolean, isVisible: Boolean, mediaHost: MediaHost, modifier: Modifier = Modifier, carouselController: MediaCarouselController, ) { if (!isVisible()) { if (!isVisible) { return } Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +3 −1 Original line number Diff line number Diff line Loading @@ -340,8 +340,10 @@ private fun SceneScope.QuickSettingsScene( modifier = Modifier.sysuiResTag("quick_settings_panel") ) val isMediaVisible by viewModel.isMediaVisible.collectAsState() MediaCarousel( isVisible = viewModel::isMediaVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +5 −2 Original line number Diff line number Diff line Loading @@ -221,6 +221,7 @@ private fun SceneScope.SingleShade( canOverflow = false ) val isClickable by viewModel.isClickable.collectAsState() val isMediaVisible by viewModel.isMediaVisible.collectAsState() val shouldPunchHoleBehindScrim = layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade) || Loading Loading @@ -274,7 +275,7 @@ private fun SceneScope.SingleShade( } MediaCarousel( isVisible = viewModel::isMediaVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading Loading @@ -381,6 +382,8 @@ private fun SceneScope.SplitShade( viewModel.notifications.setAlphaForBrightnessMirror(contentAlpha) DisposableEffect(Unit) { onDispose { viewModel.notifications.setAlphaForBrightnessMirror(1f) } } val isMediaVisible by viewModel.isMediaVisible.collectAsState() val brightnessMirrorShowingModifier = Modifier.graphicsLayer { alpha = contentAlpha } Box( Loading Loading @@ -455,7 +458,7 @@ private fun SceneScope.SplitShade( } MediaCarousel( isVisible = viewModel::isMediaVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +26 −9 Original line number Diff line number Diff line Loading @@ -35,7 +35,10 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.data.repository.mediaFilterRepository import com.android.systemui.media.controls.domain.pipeline.MediaDataManager import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter Loading Loading @@ -100,7 +103,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { footerActionsViewModelFactory = footerActionsViewModelFactory, footerActionsController = footerActionsController, sceneBackInteractor = sceneBackInteractor, mediaDataManager = mediaDataManager, mediaCarouselInteractor = kosmos.mediaCarouselInteractor, ) } Loading Loading @@ -236,20 +239,34 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test fun hasMedia_mediaVisible() { fun addAndRemoveMedia_mediaVisibilityIsUpdated() = testScope.runTest { whenever(mediaDataManager.hasAnyMediaOrRecommendation()).thenReturn(true) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val isMediaVisible by collectLastValue(underTest.isMediaVisible) val userMedia = MediaData(active = true) assertThat(underTest.isMediaVisible()).isTrue() } assertThat(isMediaVisible).isFalse() kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) assertThat(isMediaVisible).isTrue() kosmos.mediaFilterRepository.removeSelectedUserMediaEntry(userMedia.instanceId) assertThat(isMediaVisible).isFalse() } @Test fun doesNotHaveMedia_mediaNotVisible() { fun addInactiveMedia_mediaVisibilityIsUpdated() = testScope.runTest { whenever(mediaDataManager.hasAnyMediaOrRecommendation()).thenReturn(false) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val isMediaVisible by collectLastValue(underTest.isMediaVisible) val userMedia = MediaData(active = false) assertThat(underTest.isMediaVisible()).isFalse() } assertThat(isMediaVisible).isFalse() kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) assertThat(isMediaVisible).isTrue() } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/MediaCarouselSection.kt +7 −10 Original line number Diff line number Diff line Loading @@ -18,9 +18,11 @@ package com.android.systemui.keyguard.ui.composable.section import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.systemui.keyguard.ui.viewmodel.MediaCarouselViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardMediaViewModel import com.android.systemui.media.controls.ui.composable.MediaCarousel import com.android.systemui.media.controls.ui.controller.MediaCarouselController import com.android.systemui.media.controls.ui.view.MediaHost Loading @@ -33,20 +35,15 @@ class MediaCarouselSection constructor( private val mediaCarouselController: MediaCarouselController, @param:Named(MediaModule.KEYGUARD) private val mediaHost: MediaHost, private val mediaCarouselViewModel: MediaCarouselViewModel, private val keyguardMediaViewModel: KeyguardMediaViewModel, ) { private fun isVisible(): Boolean { if (mediaCarouselController.mediaFrame == null) { return false } return mediaCarouselViewModel.isMediaVisible } @Composable fun SceneScope.KeyguardMediaCarousel() { val isMediaVisible by keyguardMediaViewModel.isMediaVisible.collectAsState() MediaCarousel( isVisible = ::isVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading
packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -42,12 +42,12 @@ private object MediaCarousel { @Composable fun SceneScope.MediaCarousel( isVisible: () -> Boolean, isVisible: Boolean, mediaHost: MediaHost, modifier: Modifier = Modifier, carouselController: MediaCarouselController, ) { if (!isVisible()) { if (!isVisible) { return } Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +3 −1 Original line number Diff line number Diff line Loading @@ -340,8 +340,10 @@ private fun SceneScope.QuickSettingsScene( modifier = Modifier.sysuiResTag("quick_settings_panel") ) val isMediaVisible by viewModel.isMediaVisible.collectAsState() MediaCarousel( isVisible = viewModel::isMediaVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +5 −2 Original line number Diff line number Diff line Loading @@ -221,6 +221,7 @@ private fun SceneScope.SingleShade( canOverflow = false ) val isClickable by viewModel.isClickable.collectAsState() val isMediaVisible by viewModel.isMediaVisible.collectAsState() val shouldPunchHoleBehindScrim = layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade) || Loading Loading @@ -274,7 +275,7 @@ private fun SceneScope.SingleShade( } MediaCarousel( isVisible = viewModel::isMediaVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading Loading @@ -381,6 +382,8 @@ private fun SceneScope.SplitShade( viewModel.notifications.setAlphaForBrightnessMirror(contentAlpha) DisposableEffect(Unit) { onDispose { viewModel.notifications.setAlphaForBrightnessMirror(1f) } } val isMediaVisible by viewModel.isMediaVisible.collectAsState() val brightnessMirrorShowingModifier = Modifier.graphicsLayer { alpha = contentAlpha } Box( Loading Loading @@ -455,7 +458,7 @@ private fun SceneScope.SplitShade( } MediaCarousel( isVisible = viewModel::isMediaVisible, isVisible = isMediaVisible, mediaHost = mediaHost, modifier = Modifier.fillMaxWidth(), carouselController = mediaCarouselController, Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +26 −9 Original line number Diff line number Diff line Loading @@ -35,7 +35,10 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.data.repository.mediaFilterRepository import com.android.systemui.media.controls.domain.pipeline.MediaDataManager import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter Loading Loading @@ -100,7 +103,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { footerActionsViewModelFactory = footerActionsViewModelFactory, footerActionsController = footerActionsController, sceneBackInteractor = sceneBackInteractor, mediaDataManager = mediaDataManager, mediaCarouselInteractor = kosmos.mediaCarouselInteractor, ) } Loading Loading @@ -236,20 +239,34 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test fun hasMedia_mediaVisible() { fun addAndRemoveMedia_mediaVisibilityIsUpdated() = testScope.runTest { whenever(mediaDataManager.hasAnyMediaOrRecommendation()).thenReturn(true) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val isMediaVisible by collectLastValue(underTest.isMediaVisible) val userMedia = MediaData(active = true) assertThat(underTest.isMediaVisible()).isTrue() } assertThat(isMediaVisible).isFalse() kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) assertThat(isMediaVisible).isTrue() kosmos.mediaFilterRepository.removeSelectedUserMediaEntry(userMedia.instanceId) assertThat(isMediaVisible).isFalse() } @Test fun doesNotHaveMedia_mediaNotVisible() { fun addInactiveMedia_mediaVisibilityIsUpdated() = testScope.runTest { whenever(mediaDataManager.hasAnyMediaOrRecommendation()).thenReturn(false) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val isMediaVisible by collectLastValue(underTest.isMediaVisible) val userMedia = MediaData(active = false) assertThat(underTest.isMediaVisible()).isFalse() } assertThat(isMediaVisible).isFalse() kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia) assertThat(isMediaVisible).isTrue() } }