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

Commit 8f60a618 authored by Mike Schneider's avatar Mike Schneider
Browse files

Implement verticalContainerReveal to spec

- Extracted the motion to a mechanics behavior.

Bug: 392534646
Test: ContentRevealTest
Flag: com.android.systemui.scene_container
Change-Id: Id6d84aa5141ab7bb7b737a7b12e20d73aff563e7
parent a51ef79f
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.systemui.scene.shared.model.SceneDataSourceDelegator
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.view.SceneJankMonitor
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
import com.android.systemui.shade.ui.composable.OverlayShade
import com.android.systemui.shade.ui.composable.isFullWidthShade
import javax.inject.Provider

@@ -100,9 +101,13 @@ fun SceneContainer(
        rememberActivated(traceName = "sceneJankMonitor") { sceneJankMonitorFactory.create() }

    val hapticFeedback = LocalHapticFeedback.current
    val shadeExpansionMotion = OverlayShade.rememberShadeExpansionMotion()
    val sceneTransitions =
        remember(hapticFeedback) {
            transitionsBuilder.build(viewModel.hapticsViewModel.getRevealHaptics(hapticFeedback))
        remember(hapticFeedback, shadeExpansionMotion) {
            transitionsBuilder.build(
                shadeExpansionMotion,
                viewModel.hapticsViewModel.getRevealHaptics(hapticFeedback),
            )
        }

    val state =
+33 −7
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import com.android.compose.animation.scene.TransitionKey
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
import com.android.compose.animation.scene.transitions
import com.android.internal.jank.Cuj
import com.android.mechanics.behavior.EdgeContainerExpansionSpec
import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
@@ -48,7 +49,10 @@ import com.android.systemui.shade.ui.composable.Shade
 * Please keep the list sorted alphabetically.
 */
class SceneContainerTransitions : SceneContainerTransitionsBuilder {
    override fun build(revealHaptics: ContainerRevealHaptics): SceneTransitions {
    override fun build(
        shadeExpansionMotion: EdgeContainerExpansionSpec,
        revealHaptics: ContainerRevealHaptics,
    ): SceneTransitions {
        return transitions {
            interruptionHandler = DefaultInterruptionHandler

@@ -201,13 +205,19 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                Overlays.NotificationsShade,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toNotificationsShadeTransition(revealHaptics = revealHaptics)
                toNotificationsShadeTransition(
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            to(
                Overlays.QuickSettingsShade,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toQuickSettingsShadeTransition(revealHaptics = revealHaptics)
                toQuickSettingsShadeTransition(
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Gone,
@@ -215,7 +225,11 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toNotificationsShadeTransition(durationScale = 0.9, revealHaptics = revealHaptics)
                toNotificationsShadeTransition(
                    durationScale = 0.9,
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Gone,
@@ -223,7 +237,11 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toQuickSettingsShadeTransition(durationScale = 0.9, revealHaptics = revealHaptics)
                toQuickSettingsShadeTransition(
                    durationScale = 0.9,
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Lockscreen,
@@ -231,7 +249,11 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toNotificationsShadeTransition(durationScale = 0.9, revealHaptics = revealHaptics)
                toNotificationsShadeTransition(
                    durationScale = 0.9,
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Lockscreen,
@@ -239,7 +261,11 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toQuickSettingsShadeTransition(durationScale = 0.9, revealHaptics = revealHaptics)
                toQuickSettingsShadeTransition(
                    durationScale = 0.9,
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
        }
    }
+9 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.scene.ui.composable
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.EdgeContainerExpansionSpec

/**
 * Builder of the comprehensive definition of all transitions between scenes and overlays in the
@@ -27,7 +28,10 @@ import com.android.compose.animation.scene.transitions
interface SceneContainerTransitionsBuilder {

    /** Build the [SceneContainer] transitions spec. */
    fun build(revealHaptics: ContainerRevealHaptics): SceneTransitions
    fun build(
        shadeExpansionMotion: EdgeContainerExpansionSpec,
        revealHaptics: ContainerRevealHaptics,
    ): SceneTransitions
}

/**
@@ -37,5 +41,8 @@ interface SceneContainerTransitionsBuilder {
class ConstantSceneContainerTransitionsBuilder(
    private val transitions: SceneTransitions = transitions { /* No transitions */ }
) : SceneContainerTransitionsBuilder {
    override fun build(revealHaptics: ContainerRevealHaptics): SceneTransitions = transitions
    override fun build(
        shadeExpansionMotion: EdgeContainerExpansionSpec,
        revealHaptics: ContainerRevealHaptics,
    ): SceneTransitions = transitions
}
+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
import com.android.compose.animation.scene.reveal.verticalContainerReveal
import com.android.mechanics.behavior.EdgeContainerExpansionSpec
import com.android.systemui.keyguard.ui.composable.blueprint.ClockElementKeys
import com.android.systemui.notifications.ui.composable.NotificationsShade
import com.android.systemui.scene.shared.model.Overlays
@@ -28,6 +29,7 @@ import kotlin.time.Duration.Companion.milliseconds

fun TransitionBuilder.toNotificationsShadeTransition(
    durationScale: Double = 1.0,
    shadeExpansionMotion: EdgeContainerExpansionSpec,
    revealHaptics: ContainerRevealHaptics,
) {
    spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
@@ -38,7 +40,7 @@ fun TransitionBuilder.toNotificationsShadeTransition(
        elevateInContent = Overlays.NotificationsShade,
    )

    verticalContainerReveal(NotificationsShade.Elements.Panel, revealHaptics)
    verticalContainerReveal(NotificationsShade.Elements.Panel, shadeExpansionMotion, revealHaptics)

    fractionRange(end = .5f) { fade(OverlayShade.Elements.Scrim) }
    fractionRange(start = .5f) { fade(NotificationsShade.Elements.StatusBar) }
+3 −1
Original line number Diff line number Diff line
@@ -20,17 +20,19 @@ import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
import com.android.compose.animation.scene.reveal.verticalContainerReveal
import com.android.mechanics.behavior.EdgeContainerExpansionSpec
import com.android.systemui.qs.ui.composable.QuickSettingsShade
import com.android.systemui.shade.ui.composable.OverlayShade
import kotlin.time.Duration.Companion.milliseconds

fun TransitionBuilder.toQuickSettingsShadeTransition(
    durationScale: Double = 1.0,
    shadeExpansionMotion: EdgeContainerExpansionSpec,
    revealHaptics: ContainerRevealHaptics,
) {
    spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())

    verticalContainerReveal(QuickSettingsShade.Elements.Panel, revealHaptics)
    verticalContainerReveal(QuickSettingsShade.Elements.Panel, shadeExpansionMotion, revealHaptics)

    fractionRange(end = .5f) { fade(OverlayShade.Elements.Scrim) }
    fractionRange(start = .5f) { fade(QuickSettingsShade.Elements.StatusBar) }
Loading