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

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

Merge "Add overscrollDisabled DSL in SceneTransitionsBuilder [1/2]" into main

parents 0bb9bd3d 923c3ee0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ val sceneTransitions = transitions {
    }
    // Disable horizontal overscroll. If the scene is overscrolled too soon after showing, this
    // can lead to inconsistent KeyguardState changes.
    overscroll(CommunalScenes.Communal, Orientation.Horizontal) {}
    overscrollDisabled(CommunalScenes.Communal, Orientation.Horizontal)
}

/**
+1 −1
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ val SceneContainerTransitions = transitions {

    // Scene overscroll

    overscroll(Scenes.Gone, Orientation.Vertical) {}
    overscrollDisabled(Scenes.Gone, Orientation.Vertical)
    overscroll(Scenes.Bouncer, Orientation.Vertical) {
        translate(Bouncer.Elements.Content, y = { absoluteDistance })
    }
+7 −1
Original line number Diff line number Diff line
@@ -104,8 +104,14 @@ interface SceneTransitionsBuilder {
    fun overscroll(
        scene: SceneKey,
        orientation: Orientation,
        builder: OverscrollBuilder.() -> Unit = {},
        builder: OverscrollBuilder.() -> Unit,
    ): OverscrollSpec

    /**
     * Prevents overscroll the [scene] in the given [orientation], allowing ancestors to eventually
     * consume the remaining gesture.
     */
    fun overscrollDisabled(scene: SceneKey, orientation: Orientation): OverscrollSpec
}

interface BaseTransitionBuilder : PropertyTransformationBuilder {
+17 −1
Original line number Diff line number Diff line
@@ -86,6 +86,22 @@ private class SceneTransitionsBuilderImpl : SceneTransitionsBuilder {
        builder: OverscrollBuilder.() -> Unit
    ): OverscrollSpec {
        val impl = OverscrollBuilderImpl().apply(builder)
        check(impl.transformations.isNotEmpty()) {
            "This method does not allow empty transformations. " +
                "Use overscrollDisabled($scene, $orientation) instead."
        }
        return overscrollSpec(scene, orientation, impl)
    }

    override fun overscrollDisabled(scene: SceneKey, orientation: Orientation): OverscrollSpec {
        return overscrollSpec(scene, orientation, OverscrollBuilderImpl())
    }

    private fun overscrollSpec(
        scene: SceneKey,
        orientation: Orientation,
        impl: OverscrollBuilderImpl,
    ): OverscrollSpec {
        val spec =
            OverscrollSpecImpl(
                scene = scene,
@@ -97,7 +113,7 @@ private class SceneTransitionsBuilderImpl : SceneTransitionsBuilder {
                        distance = impl.distance,
                        transformations = impl.transformations,
                    ),
                progressConverter = impl.progressConverter
                progressConverter = impl.progressConverter,
            )
        transitionOverscrollSpecs.add(spec)
        return spec
+1 −1
Original line number Diff line number Diff line
@@ -453,7 +453,7 @@ class AnimatedSharedAsStateTest {
            rule.runOnUiThread {
                MutableSceneTransitionLayoutStateImpl(
                    SceneA,
                    transitions { overscroll(SceneB, Orientation.Horizontal) }
                    transitions { overscrollDisabled(SceneB, Orientation.Horizontal) }
                )
            }

Loading