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

Commit e4e20e2d authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Change transitions involving notification scrim distance to 1:1" into main

parents c5d2f444 0fa02acc
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ import com.android.systemui.scene.ui.composable.transitions.lockscreenToGoneTran
import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeTransition
import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition
import com.android.systemui.shade.ui.composable.Shade

/**
 * Comprehensive definition of all transitions between scenes in [SceneContainer].
@@ -73,10 +74,14 @@ val SceneContainerTransitions = transitions {

    // Scene overscroll

    overscroll(Scenes.Gone, Orientation.Vertical) {}
    overscroll(Scenes.Bouncer, Orientation.Vertical) {
        translate(Bouncer.Elements.Content, y = { absoluteDistance })
    }
    overscroll(Scenes.Shade, Orientation.Vertical) {
        translate(Notifications.Elements.NotificationScrim, y = { absoluteDistance })
        translate(
            Notifications.Elements.NotificationScrim,
            y = { Shade.Dimensions.ScrimOverscrollLimit }
        )
    }
}
+17 −0
Original line number Diff line number Diff line
package com.android.systemui.scene.ui.composable.transitions

import androidx.compose.animation.core.tween
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.ui.unit.IntSize
import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.UserActionDistance
import com.android.compose.animation.scene.UserActionDistanceScope
import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ui.composable.ShadeHeader
import kotlin.time.Duration.Companion.milliseconds

@@ -12,6 +17,18 @@ fun TransitionBuilder.shadeToQuickSettingsTransition(
    durationScale: Double = 1.0,
) {
    spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
    distance =
        object : UserActionDistance {
            override fun UserActionDistanceScope.absoluteDistance(
                fromSceneSize: IntSize,
                orientation: Orientation,
            ): Float {
                val distance =
                    Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y
                        ?: return 0f
                return fromSceneSize.height - distance
            }
        }

    translate(Notifications.Elements.NotificationScrim, Edge.Bottom)
    timestampRange(endMillis = 83) { fade(QuickSettings.Elements.FooterActions) }
+22 −0
Original line number Diff line number Diff line
@@ -16,11 +16,19 @@

package com.android.systemui.scene.ui.composable.transitions

import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.ui.unit.IntSize
import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.UserActionDistance
import com.android.compose.animation.scene.UserActionDistanceScope
import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ui.composable.Shade
import com.android.systemui.shade.ui.composable.ShadeHeader
import kotlin.time.Duration.Companion.milliseconds

@@ -28,6 +36,20 @@ fun TransitionBuilder.toShadeTransition(
    durationScale: Double = 1.0,
) {
    spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
    swipeSpec =
        spring(
            stiffness = Spring.StiffnessMediumLow,
            visibilityThreshold = Shade.Dimensions.ScrimVisibilityThreshold,
        )
    distance =
        object : UserActionDistance {
            override fun UserActionDistanceScope.absoluteDistance(
                fromSceneSize: IntSize,
                orientation: Orientation,
            ): Float {
                return Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y ?: 0f
            }
        }

    fractionRange(start = .58f) {
        fade(ShadeHeader.Elements.Clock)
+8 −5
Original line number Diff line number Diff line
@@ -98,6 +98,8 @@ object Shade {
    object Dimensions {
        val ScrimCornerSize = 32.dp
        val HorizontalPadding = 16.dp
        const val ScrimOverscrollLimit = 100f
        const val ScrimVisibilityThreshold = 5f
    }

    object Shapes {
@@ -195,7 +197,11 @@ private fun SceneScope.SingleShade(
) {
    val maxNotifScrimTop = remember { mutableStateOf(0f) }
    val tileSquishiness by
        animateSceneFloatAsState(value = 1f, key = QuickSettings.SharedValues.TilesSquishiness)
        animateSceneFloatAsState(
            value = 1f,
            key = QuickSettings.SharedValues.TilesSquishiness,
            canOverflow = false
        )
    val isClickable by viewModel.isClickable.collectAsState()

    // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this scene
@@ -231,10 +237,7 @@ private fun SceneScope.SingleShade(
                            Box(Modifier.element(QuickSettings.Elements.QuickQuickSettings)) {
                                QuickSettings(
                                    viewModel.qsSceneAdapter,
                                    {
                                        (viewModel.qsSceneAdapter.qqsHeight * tileSquishiness)
                                            .roundToInt()
                                    },
                                    { viewModel.qsSceneAdapter.qqsHeight },
                                    isSplitShade = false,
                                    squishiness = tileSquishiness,
                                )
+1 −1
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ constructor(
        launch { viewModel.stackBottom.collect { view.setStackBottom(it) } }
        launch { viewModel.scrolledToTop.collect { view.setScrolledToTop(it) } }
        launch { viewModel.headsUpTop.collect { view.setHeadsUpTop(it) } }
        launch { viewModel.expandFraction.collect { view.setExpandFraction(it) } }
        launch { viewModel.expandFraction.collect { view.setExpandFraction(it.coerceIn(0f, 1f)) } }
        launch { viewModel.isScrollable.collect { view.setScrollingEnabled(it) } }
        launch { viewModel.isDozing.collect { isDozing -> view.setDozing(isDozing) } }