Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a561a88 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Connect flexiglass to the new architecture

Flag: ACONFIG com.android.systemui.media_controls_refactor DEVELOPMENT
Bug: 328207006
Test: atest SystemUiRoboTests:ShadeSceneViewModelTest
Test: atest SystemUiRoboTests:QuickSettingsSceneViewModelTest
Test: atest SystemUiRoboTests:SceneFrameworkIntegrationTest
Change-Id: I298b04a5285063875e1f086ba0dd4b5481a7af99
parent 6b158b32
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -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
@@ -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,
+2 −2
Original line number Diff line number Diff line
@@ -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
    }

+3 −1
Original line number Diff line number Diff line
@@ -332,8 +332,10 @@ private fun SceneScope.QuickSettingsScene(
                        modifier = Modifier.sysuiResTag("expanded_qs_scroll_view")
                    )

                    val isMediaVisible by viewModel.isMediaVisible.collectAsState()

                    MediaCarousel(
                        isVisible = viewModel::isMediaVisible,
                        isVisible = isMediaVisible,
                        mediaHost = mediaHost,
                        modifier = Modifier.fillMaxWidth(),
                        carouselController = mediaCarouselController,
+5 −2
Original line number Diff line number Diff line
@@ -214,6 +214,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) ||
@@ -265,7 +266,7 @@ private fun SceneScope.SingleShade(
                            }

                            MediaCarousel(
                                isVisible = viewModel::isMediaVisible,
                                isVisible = isMediaVisible,
                                mediaHost = mediaHost,
                                modifier = Modifier.fillMaxWidth(),
                                carouselController = mediaCarouselController,
@@ -366,6 +367,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(
@@ -441,7 +444,7 @@ private fun SceneScope.SplitShade(
                            }

                            MediaCarousel(
                                isVisible = viewModel::isMediaVisible,
                                isVisible = isMediaVisible,
                                mediaHost = mediaHost,
                                modifier = Modifier.fillMaxWidth(),
                                carouselController = mediaCarouselController,
+26 −9
Original line number Diff line number Diff line
@@ -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
@@ -100,7 +103,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
                footerActionsViewModelFactory = footerActionsViewModelFactory,
                footerActionsController = footerActionsController,
                sceneBackInteractor = sceneBackInteractor,
                mediaDataManager = mediaDataManager,
                mediaCarouselInteractor = kosmos.mediaCarouselInteractor,
            )
    }

@@ -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