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

Commit 9d6d954f authored by Michael Mikhail's avatar Michael Mikhail Committed by Android (Google) Code Review
Browse files

Merge "Connect flexiglass to the new architecture" into main

parents 55f19502 9a561a88
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
@@ -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,
+5 −2
Original line number Diff line number Diff line
@@ -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) ||
@@ -274,7 +275,7 @@ private fun SceneScope.SingleShade(
                            }

                            MediaCarousel(
                                isVisible = viewModel::isMediaVisible,
                                isVisible = isMediaVisible,
                                mediaHost = mediaHost,
                                modifier = Modifier.fillMaxWidth(),
                                carouselController = mediaCarouselController,
@@ -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(
@@ -455,7 +458,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