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

Commit 68d94e66 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Fix media in landscape in ShadeScene

Fixes the measure policy to properly put QS and media side by side
(before we had a hack because qs lived inside an AndroidView).

This also refactors AnimateQsTilesViewModel and how it's used in
SceneContainer to make it an activatable.

Also, set `usingMediaInCompose` as true in kosmos (but is a var). Most
tests don't actually care or in most cases, media is enabled

Test: manual, open media in landscape in single shade
Test: manual, go from ShadeScene without media to QuickSettingsScene
with media in landscape
Test: atest AnimateQsTilesViewModelTest
Fixes: 436825648
Flag: com.android.systemui.scene_container

Change-Id: I049290d3fb8d85bcf6606267c1b8c6a5a2f6193f
parent fce2b2a2
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -65,7 +65,6 @@ import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.media.controls.ui.composable.isLandscape
import com.android.systemui.media.remedia.ui.compose.Media
import com.android.systemui.media.remedia.ui.compose.MediaPresentationStyle
import com.android.systemui.notifications.ui.composable.HeadsUpNotificationSpace
@@ -200,8 +199,7 @@ private fun ContentScope.QuickSettingsScene(
            WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding()

        // ############# Media ###############
        val isMediaVisible = viewModel.qsContainerViewModel.showMedia
        val mediaInRow = isMediaVisible && isLandscape()
        val mediaInRow = viewModel.qsContainerViewModel.showMediaInRow

        ShadePanelScrim(viewModel.isTransparencyEnabled)
        Column(
+6 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.compose.gesture.effect.rememberOffsetOverscrollEffectFactory
import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn
import com.android.systemui.keyguard.ui.composable.modifier.burnInAware
import com.android.systemui.lifecycle.rememberActivated
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.qs.ui.adapter.QSSceneAdapter
import com.android.systemui.qs.ui.composable.QuickSettingsTheme
import com.android.systemui.ribbon.ui.composable.BottomRightCornerRibbon
@@ -106,11 +107,16 @@ fun SceneContainer(

    val hapticFeedback = LocalHapticFeedback.current
    val shadeExpansionMotion = OverlayShade.rememberShadeExpansionMotion(isFullWidthShade())
    val animateQsTilesViewModel =
        rememberViewModel(traceName = "SceneContainer.animateQsTilesViewModel") {
            viewModel.animateQsTilesViewModelFactory.create()
        }
    val sceneTransitions =
        remember(hapticFeedback, shadeExpansionMotion) {
            transitionsBuilder.build(
                shadeExpansionMotion,
                viewModel.hapticsViewModel.getRevealHaptics(hapticFeedback),
                animateQsTilesViewModel,
            )
        }

+9 −9
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import com.android.compose.animation.scene.transitions
import com.android.internal.jank.Cuj
import com.android.mechanics.behavior.VerticalExpandContainerSpec
import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.panels.ui.viewmodel.AnimateQsTilesViewModel
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.TransitionKeys.SlightlyFasterShadeCollapse
@@ -49,16 +50,11 @@ import com.android.systemui.shade.ui.composable.Shade
 *
 * Please keep the list sorted alphabetically.
 */
class SceneContainerTransitions(
    /**
     * Pass to transitions that animate QS tiles to disable the shared element animation (e.g.
     * QuickSettings to Shade when QuickSettings is on the second page).
     */
    private val animateQsTilesAsShared: () -> Boolean = { true }
) : SceneContainerTransitionsBuilder {
class SceneContainerTransitions : SceneContainerTransitionsBuilder {
    override fun build(
        shadeExpansionMotion: VerticalExpandContainerSpec,
        revealHaptics: ContainerRevealHaptics,
        animateQsTilesViewModel: AnimateQsTilesViewModel,
    ): SceneTransitions {
        return transitions {
            interruptionHandler = DefaultInterruptionHandler
@@ -153,7 +149,9 @@ class SceneContainerTransitions(
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                reversed {
                    shadeToQuickSettingsTransition(animateQsTilesAsShared = animateQsTilesAsShared)
                    shadeToQuickSettingsTransition(
                        animateQsTilesAsShared = { animateQsTilesViewModel.animateQsTiles }
                    )
                }
                sharedElement(
                    Notifications.Elements.HeadsUpNotificationPlaceholder,
@@ -165,7 +163,9 @@ class SceneContainerTransitions(
                to = Scenes.QuickSettings,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                shadeToQuickSettingsTransition(animateQsTilesAsShared = animateQsTilesAsShared)
                shadeToQuickSettingsTransition(
                    animateQsTilesAsShared = { animateQsTilesViewModel.animateQsTiles }
                )
            }
            from(
                Scenes.Shade,
+3 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import com.android.compose.animation.scene.SceneTransitions
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
import com.android.compose.animation.scene.transitions
import com.android.mechanics.behavior.VerticalExpandContainerSpec
import com.android.systemui.qs.panels.ui.viewmodel.AnimateQsTilesViewModel

/**
 * Builder of the comprehensive definition of all transitions between scenes and overlays in the
@@ -31,6 +32,7 @@ interface SceneContainerTransitionsBuilder {
    fun build(
        shadeExpansionMotion: VerticalExpandContainerSpec,
        revealHaptics: ContainerRevealHaptics,
        animateQsTilesViewModel: AnimateQsTilesViewModel,
    ): SceneTransitions
}

@@ -44,5 +46,6 @@ class ConstantSceneContainerTransitionsBuilder(
    override fun build(
        shadeExpansionMotion: VerticalExpandContainerSpec,
        revealHaptics: ContainerRevealHaptics,
        animateQsTilesViewModel: AnimateQsTilesViewModel,
    ): SceneTransitions = transitions
}
+2 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.ElementMatcher
import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.UserActionDistance
import com.android.systemui.media.remedia.ui.compose.Media.Elements.mediaCarousel
import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.shared.ui.ElementKeys
import com.android.systemui.qs.ui.composable.QuickSettings
@@ -42,6 +43,7 @@ fun TransitionBuilder.shadeToQuickSettingsTransition(
    // overlap.
    fractionRange(end = 0.5f) { fade(QqsTileElementMatcher) }
    anchoredTranslate(QqsTileElementMatcher, ElementKeys.GridAnchor)
    fade(mediaCarousel)

    val translationY = ShadeHeader.Dimensions.CollapsedHeightForTransitions
    translate(ShadeHeader.Elements.CollapsedContentStart, y = translationY)
Loading