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

Commit a157a72e authored by Anton Potapov's avatar Anton Potapov
Browse files

Fix Media Carousel lockscreen <-> splitshade transition

Flag: com.android.systemui.scene_container
Bug: 352052894
Test: manual on the tablet
Change-Id: Ic24516c36f9d344fd111d1bd111711bef7869bfa
parent d53cd9eb
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.media.controls.ui.composable
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.ElementScenePicker
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.SceneTransitionLayoutState
import com.android.compose.animation.scene.TransitionState
import com.android.systemui.scene.shared.model.Scenes

@@ -45,6 +46,9 @@ object MediaScenePicker : ElementScenePicker {
            shouldElevateMedia(transition) -> {
                Scenes.Shade
            }
            transition.isTransitioningBetween(Scenes.Lockscreen, Scenes.Communal) -> {
                Scenes.Lockscreen
            }

            // TODO: 345467290 - update with the actual scene picking
            transition.isTransitioningBetween(Scenes.QuickSettings, Scenes.Shade) -> {
@@ -57,10 +61,11 @@ object MediaScenePicker : ElementScenePicker {
    }

    /** Returns true when the media should be laid on top of the rest for the given [transition]. */
    fun shouldElevateMedia(transition: TransitionState.Transition?): Boolean {
        if (transition == null) {
            return false
        }
    fun shouldElevateMedia(transition: TransitionState.Transition): Boolean {
        return transition.isTransitioningBetween(Scenes.Lockscreen, Scenes.Shade)
    }
}

fun MediaScenePicker.shouldElevateMedia(layoutState: SceneTransitionLayoutState): Boolean {
    return layoutState.currentTransition?.let { shouldElevateMedia(it) } ?: false
}
+23 −14
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.LowestZIndexScenePicker
@@ -81,6 +82,7 @@ import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.controls.ui.composable.MediaCarousel
import com.android.systemui.media.controls.ui.composable.MediaScenePicker
import com.android.systemui.media.controls.ui.composable.shouldElevateMedia
import com.android.systemui.media.controls.ui.controller.MediaCarouselController
import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
import com.android.systemui.media.controls.ui.view.MediaHost
@@ -362,7 +364,7 @@ private fun SceneScope.SingleShade(

            layout(constraints.maxWidth, constraints.maxHeight) {
                val qsZIndex =
                    if (MediaScenePicker.shouldElevateMedia(layoutState.currentTransition)) {
                    if (MediaScenePicker.shouldElevateMedia(layoutState)) {
                        1f
                    } else {
                        0f
@@ -471,6 +473,7 @@ private fun SceneScope.SplitShade(

    val brightnessMirrorShowingModifier = Modifier.graphicsLayer { alpha = contentAlpha }

    Box {
        Box(
            modifier =
                modifier
@@ -479,9 +482,11 @@ private fun SceneScope.SplitShade(
                    // Cannot set the alpha of the whole element to 0, because the mirror should be
                    // in the QS column.
                    .background(
                    colorResource(R.color.shade_scrim_background_dark).copy(alpha = contentAlpha)
                        colorResource(R.color.shade_scrim_background_dark)
                            .copy(alpha = contentAlpha)
                    )
    ) {
        )

        Column(
            modifier = Modifier.fillMaxSize(),
        ) {
@@ -541,11 +546,15 @@ private fun SceneScope.SplitShade(
                                    squishiness = { tileSquishiness },
                                )
                            }

                            MediaCarousel(
                                isVisible = isMediaVisible,
                                mediaHost = mediaHost,
                                modifier = Modifier.fillMaxWidth(),
                                modifier =
                                    Modifier.fillMaxWidth().thenIf(
                                        MediaScenePicker.shouldElevateMedia(layoutState)
                                    ) {
                                        Modifier.zIndex(1f)
                                    },
                                carouselController = mediaCarouselController,
                            )
                        }