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

Commit b0f64560 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Implement `GestureContext` for gesture transitions #MotionMechanics #STL" into main

parents 90054fd7 d6ce3b46
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ android_library {
        "androidx.compose.material3_material3",

        "PlatformComposeCore",
        "mechanics",
    ],

    kotlincflags: ["-Xjvm-default=all"],
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.compose.animation.scene

import com.android.compose.animation.scene.content.state.TransitionState
import com.android.mechanics.GestureContext
import kotlinx.coroutines.CoroutineScope

/** Trigger a one-off transition to show or hide an overlay. */
@@ -118,6 +119,7 @@ private class OneOffShowOrHideOverlayTransition(

    override val isInitiatedByUserInput: Boolean = false
    override val isUserInputOngoing: Boolean = false
    override val gestureContext: GestureContext? = null

    override suspend fun run() {
        oneOffAnimation.run()
@@ -144,6 +146,7 @@ private class OneOffOverlayReplacingTransition(

    override val isInitiatedByUserInput: Boolean = false
    override val isUserInputOngoing: Boolean = false
    override val gestureContext: GestureContext? = null

    override suspend fun run() {
        oneOffAnimation.run()
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.compose.animation.scene

import com.android.compose.animation.scene.content.state.TransitionState
import com.android.mechanics.GestureContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job

@@ -193,6 +194,7 @@ private class OneOffSceneTransition(
        get() = oneOffAnimation.progressVelocity

    override val isUserInputOngoing: Boolean = false
    override val gestureContext: GestureContext? = null

    override suspend fun run() {
        oneOffAnimation.run()
+11 −1
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import com.android.compose.animation.scene.content.state.TransitionState.Compani
import com.android.compose.animation.scene.effect.GestureEffect
import com.android.compose.gesture.NestedDraggable
import com.android.compose.ui.util.SpaceVectorConverter
import com.android.mechanics.DistanceGestureContext
import com.android.mechanics.spec.InputDirection
import kotlin.math.absoluteValue
import kotlinx.coroutines.launch

@@ -114,7 +116,14 @@ internal class DraggableHandler(
                else -> error("Unknown result $result ($upOrLeftResult $downOrRightResult)")
            }

        return createSwipeAnimation(layoutImpl, result, isUpOrLeft, orientation)
        val gestureContext =
            DistanceGestureContext(
                initialDragOffset = 0f,
                initialDirection = if (isUpOrLeft) InputDirection.Min else InputDirection.Max,
                directionChangeSlop = layoutImpl.directionChangeSlop,
            )

        return createSwipeAnimation(layoutImpl, result, isUpOrLeft, orientation, gestureContext)
    }

    private fun resolveSwipeSource(startedPosition: Offset): SwipeSource.Resolved? {
@@ -316,6 +325,7 @@ private class DragControllerImpl(
                    // when the distance is defined.
                    delta
                }

                distance > 0f -> desiredOffset.fastCoerceIn(0f, distance)
                else -> desiredOffset.fastCoerceIn(distance, 0f)
            }
+4 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import com.android.compose.animation.scene.UserActionResult.HideOverlay
import com.android.compose.animation.scene.UserActionResult.ReplaceByOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay
import com.android.compose.animation.scene.transition.animateProgress
import com.android.mechanics.ProvidedGestureContext
import com.android.mechanics.spec.InputDirection
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
@@ -55,6 +57,8 @@ internal fun PredictiveBackHandler(
                // compute the distance. In our case the distance is always 1f.
                orientation = Orientation.Horizontal,
                distance = 1f,
                gestureContext =
                    ProvidedGestureContext(dragOffset = 0f, direction = InputDirection.Max),
            )

        animateProgress(
Loading