diff options
11 files changed, 207 insertions, 58 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizerTest.kt index 40c3f221e2df..29e9ba752b36 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizerTest.kt @@ -61,6 +61,26 @@ class BackGestureRecognizerTest : SysuiTestCase() { } @Test + fun triggersProgressRelativeToDistance() { + assertProgressWhileMovingFingers(deltaX = -SWIPE_DISTANCE / 2, expectedProgress = 0.5f) + assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE / 2, expectedProgress = 0.5f) + assertProgressWhileMovingFingers(deltaX = -SWIPE_DISTANCE, expectedProgress = 1f) + assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE, expectedProgress = 1f) + } + + private fun assertProgressWhileMovingFingers(deltaX: Float, expectedProgress: Float) { + assertStateAfterEvents( + events = ThreeFingerGesture.eventsForGestureInProgress { move(deltaX = deltaX) }, + expectedState = InProgress(progress = expectedProgress), + ) + } + + @Test + fun triggeredProgressIsNoBiggerThanOne() { + assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE * 2, expectedProgress = 1f) + } + + @Test fun doesntTriggerGestureFinished_onGestureDistanceTooShort() { assertStateAfterEvents( events = ThreeFingerGesture.swipeLeft(distancePx = SWIPE_DISTANCE / 2), diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/EasterEggGestureTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/EasterEggGestureTest.kt index 8406d3b99bac..ff0cec5e06e9 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/EasterEggGestureTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/EasterEggGestureTest.kt @@ -104,7 +104,8 @@ class EasterEggGestureTest : SysuiTestCase() { } private fun assertStateAfterTwoFingerGesture(gesturePath: List<Point>, wasTriggered: Boolean) { - val events = TwoFingerGesture.createEvents { gesturePath.forEach { (x, y) -> move(x, y) } } + val events = + TwoFingerGesture.eventsForFullGesture { gesturePath.forEach { (x, y) -> move(x, y) } } assertStateAfterEvents(events = events, wasTriggered = wasTriggered) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizerTest.kt index 043b77577978..7d3ed92cecc6 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizerTest.kt @@ -56,6 +56,27 @@ class HomeGestureRecognizerTest : SysuiTestCase() { } @Test + fun triggersProgressRelativeToDistance() { + assertProgressWhileMovingFingers(deltaY = -SWIPE_DISTANCE / 2, expectedProgress = 0.5f) + assertProgressWhileMovingFingers(deltaY = -SWIPE_DISTANCE, expectedProgress = 1f) + } + + private fun assertProgressWhileMovingFingers(deltaY: Float, expectedProgress: Float) { + assertStateAfterEvents( + events = ThreeFingerGesture.eventsForGestureInProgress { move(deltaY = deltaY) }, + expectedState = InProgress(progress = expectedProgress), + ) + } + + @Test + fun triggeredProgressIsBetweenZeroAndOne() { + // going in the wrong direction + assertProgressWhileMovingFingers(deltaY = SWIPE_DISTANCE / 2, expectedProgress = 0f) + // going further than required distance + assertProgressWhileMovingFingers(deltaY = -SWIPE_DISTANCE * 2, expectedProgress = 1f) + } + + @Test fun doesntTriggerGestureFinished_onGestureDistanceTooShort() { assertStateAfterEvents( events = ThreeFingerGesture.swipeUp(distancePx = SWIPE_DISTANCE / 2), diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizerTest.kt index 7095a91a4e5d..c5c0d59ea48b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizerTest.kt @@ -77,11 +77,32 @@ class RecentAppsGestureRecognizerTest : SysuiTestCase() { fun triggersGestureProgressForThreeFingerGestureStarted() { assertStateAfterEvents( events = ThreeFingerGesture.startEvents(x = 0f, y = 0f), - expectedState = InProgress(), + expectedState = InProgress(progress = 0f), ) } @Test + fun triggersProgressRelativeToDistance() { + assertProgressWhileMovingFingers(deltaY = -SWIPE_DISTANCE / 2, expectedProgress = 0.5f) + assertProgressWhileMovingFingers(deltaY = -SWIPE_DISTANCE, expectedProgress = 1f) + } + + private fun assertProgressWhileMovingFingers(deltaY: Float, expectedProgress: Float) { + assertStateAfterEvents( + events = ThreeFingerGesture.eventsForGestureInProgress { move(deltaY = deltaY) }, + expectedState = InProgress(progress = expectedProgress), + ) + } + + @Test + fun triggeredProgressIsBetweenZeroAndOne() { + // going in the wrong direction + assertProgressWhileMovingFingers(deltaY = SWIPE_DISTANCE / 2, expectedProgress = 0f) + // going further than required distance + assertProgressWhileMovingFingers(deltaY = -SWIPE_DISTANCE * 2, expectedProgress = 1f) + } + + @Test fun doesntTriggerGestureFinished_onGestureDistanceTooShort() { assertStateAfterEvents( events = ThreeFingerGesture.swipeUp(distancePx = SWIPE_DISTANCE / 2), diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilder.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilder.kt index 296d4dce8ce4..42fe1e5d6bec 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilder.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilder.kt @@ -25,11 +25,23 @@ import android.view.MotionEvent.ACTION_UP import com.android.systemui.touchpad.tutorial.ui.gesture.MultiFingerGesture.Companion.DEFAULT_X import com.android.systemui.touchpad.tutorial.ui.gesture.MultiFingerGesture.Companion.DEFAULT_Y -/** - * Interface for gesture builders which support creating list of [MotionEvent] for common swipe - * gestures. For simple usage see swipe* methods or use [createEvents] for more specific scenarios. - */ -interface MultiFingerGesture { +/** Given gesture move events can build list of [MotionEvent]s included in that gesture */ +interface GestureEventsBuilder { + /** + * Creates full gesture including provided move events. This means returned events include DOWN, + * MOVE and UP. Note that move event's x and y is always relative to the starting one. + */ + fun eventsForFullGesture(moveEvents: MoveEventsBuilder.() -> Unit): List<MotionEvent> + + /** + * Creates partial gesture including provided move events. This means returned events include + * DOWN and MOVE. Note that move event's x and y is always relative to the starting one. + */ + fun eventsForGestureInProgress(moveEvents: MoveEventsBuilder.() -> Unit): List<MotionEvent> +} + +/** Support creating list of [MotionEvent] for common swipe gestures. */ +interface MultiFingerGesture : GestureEventsBuilder { companion object { const val SWIPE_DISTANCE = 100f @@ -37,27 +49,41 @@ interface MultiFingerGesture { const val DEFAULT_Y = 500f } - fun swipeUp(distancePx: Float = SWIPE_DISTANCE) = createEvents { move(deltaY = -distancePx) } - - fun swipeDown(distancePx: Float = SWIPE_DISTANCE) = createEvents { move(deltaY = distancePx) } + fun swipeUp(distancePx: Float = SWIPE_DISTANCE) = eventsForFullGesture { + move(deltaY = -distancePx) + } - fun swipeRight(distancePx: Float = SWIPE_DISTANCE) = createEvents { move(deltaX = distancePx) } + fun swipeDown(distancePx: Float = SWIPE_DISTANCE) = eventsForFullGesture { + move(deltaY = distancePx) + } - fun swipeLeft(distancePx: Float = SWIPE_DISTANCE) = createEvents { move(deltaX = -distancePx) } + fun swipeRight(distancePx: Float = SWIPE_DISTANCE) = eventsForFullGesture { + move(deltaX = distancePx) + } - /** - * Creates gesture with provided move events. Note that move event's x and y is always relative - * to the starting one - */ - fun createEvents(moveEvents: GestureBuilder.() -> Unit): List<MotionEvent> + fun swipeLeft(distancePx: Float = SWIPE_DISTANCE) = eventsForFullGesture { + move(deltaX = -distancePx) + } } object ThreeFingerGesture : MultiFingerGesture { - override fun createEvents(moveEvents: GestureBuilder.() -> Unit): List<MotionEvent> { - return touchpadGesture( + + private val moveEventsBuilder = MoveEventsBuilder(::threeFingerEvent) + + override fun eventsForFullGesture(moveEvents: MoveEventsBuilder.() -> Unit): List<MotionEvent> { + return buildGesture( + startEvents = { x, y -> startEvents(x, y) }, + moveEvents = moveEventsBuilder.getEvents(moveEvents), + endEvents = { x, y -> endEvents(x, y) }, + ) + } + + override fun eventsForGestureInProgress( + moveEvents: MoveEventsBuilder.() -> Unit + ): List<MotionEvent> { + return buildGesture( startEvents = { x, y -> startEvents(x, y) }, - moveEvents = GestureBuilder(::threeFingerEvent).apply { moveEvents() }.events, - endEvents = { x, y -> endEvents(x, y) } + moveEvents = moveEventsBuilder.getEvents(moveEvents), ) } @@ -65,7 +91,7 @@ object ThreeFingerGesture : MultiFingerGesture { return listOf( threeFingerEvent(ACTION_DOWN, x, y), threeFingerEvent(ACTION_POINTER_DOWN, x, y), - threeFingerEvent(ACTION_POINTER_DOWN, x, y) + threeFingerEvent(ACTION_POINTER_DOWN, x, y), ) } @@ -73,32 +99,43 @@ object ThreeFingerGesture : MultiFingerGesture { return listOf( threeFingerEvent(ACTION_POINTER_UP, x, y), threeFingerEvent(ACTION_POINTER_UP, x, y), - threeFingerEvent(ACTION_UP, x, y) + threeFingerEvent(ACTION_UP, x, y), ) } private fun threeFingerEvent( action: Int, x: Float = DEFAULT_X, - y: Float = DEFAULT_Y + y: Float = DEFAULT_Y, ): MotionEvent { return touchpadEvent( action = action, x = x, y = y, classification = MotionEvent.CLASSIFICATION_MULTI_FINGER_SWIPE, - axisValues = mapOf(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT to 3f) + axisValues = mapOf(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT to 3f), ) } } object FourFingerGesture : MultiFingerGesture { - override fun createEvents(moveEvents: GestureBuilder.() -> Unit): List<MotionEvent> { - return touchpadGesture( + private val moveEventsBuilder = MoveEventsBuilder(::fourFingerEvent) + + override fun eventsForFullGesture(moveEvents: MoveEventsBuilder.() -> Unit): List<MotionEvent> { + return buildGesture( + startEvents = { x, y -> startEvents(x, y) }, + moveEvents = moveEventsBuilder.getEvents(moveEvents), + endEvents = { x, y -> endEvents(x, y) }, + ) + } + + override fun eventsForGestureInProgress( + moveEvents: MoveEventsBuilder.() -> Unit + ): List<MotionEvent> { + return buildGesture( startEvents = { x, y -> startEvents(x, y) }, - moveEvents = GestureBuilder(::fourFingerEvent).apply { moveEvents() }.events, - endEvents = { x, y -> endEvents(x, y) } + moveEvents = moveEventsBuilder.getEvents(moveEvents), ) } @@ -107,7 +144,7 @@ object FourFingerGesture : MultiFingerGesture { fourFingerEvent(ACTION_DOWN, x, y), fourFingerEvent(ACTION_POINTER_DOWN, x, y), fourFingerEvent(ACTION_POINTER_DOWN, x, y), - fourFingerEvent(ACTION_POINTER_DOWN, x, y) + fourFingerEvent(ACTION_POINTER_DOWN, x, y), ) } @@ -116,61 +153,74 @@ object FourFingerGesture : MultiFingerGesture { fourFingerEvent(ACTION_POINTER_UP, x, y), fourFingerEvent(ACTION_POINTER_UP, x, y), fourFingerEvent(ACTION_POINTER_UP, x, y), - fourFingerEvent(ACTION_UP, x, y) + fourFingerEvent(ACTION_UP, x, y), ) } private fun fourFingerEvent( action: Int, x: Float = DEFAULT_X, - y: Float = DEFAULT_Y + y: Float = DEFAULT_Y, ): MotionEvent { return touchpadEvent( action = action, x = x, y = y, classification = MotionEvent.CLASSIFICATION_MULTI_FINGER_SWIPE, - axisValues = mapOf(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT to 4f) + axisValues = mapOf(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT to 4f), ) } } object TwoFingerGesture : MultiFingerGesture { - override fun createEvents(moveEvents: GestureBuilder.() -> Unit): List<MotionEvent> { - return touchpadGesture( - startEvents = { x, y -> listOf(twoFingerEvent(ACTION_DOWN, x, y)) }, - moveEvents = GestureBuilder(::twoFingerEvent).apply { moveEvents() }.events, - endEvents = { x, y -> listOf(twoFingerEvent(ACTION_UP, x, y)) } + private val moveEventsBuilder = MoveEventsBuilder(::twoFingerEvent) + + override fun eventsForFullGesture(moveEvents: MoveEventsBuilder.() -> Unit): List<MotionEvent> { + return buildGesture( + startEvents = { x, y -> startEvents(x, y) }, + moveEvents = moveEventsBuilder.getEvents(moveEvents), + endEvents = { x, y -> listOf(twoFingerEvent(ACTION_UP, x, y)) }, + ) + } + + override fun eventsForGestureInProgress( + moveEvents: MoveEventsBuilder.() -> Unit + ): List<MotionEvent> { + return buildGesture( + startEvents = { x, y -> startEvents(x, y) }, + moveEvents = moveEventsBuilder.getEvents(moveEvents), ) } + private fun startEvents(x: Float, y: Float) = listOf(twoFingerEvent(ACTION_DOWN, x, y)) + private fun twoFingerEvent( action: Int, x: Float = DEFAULT_X, - y: Float = DEFAULT_Y + y: Float = DEFAULT_Y, ): MotionEvent { return touchpadEvent( action = action, x = x, y = y, classification = MotionEvent.CLASSIFICATION_TWO_FINGER_SWIPE, - axisValues = mapOf(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT to 2f) + axisValues = mapOf(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT to 2f), ) } } -private fun touchpadGesture( +private fun buildGesture( startEvents: (Float, Float) -> List<MotionEvent>, moveEvents: List<MotionEvent>, - endEvents: (Float, Float) -> List<MotionEvent> + endEvents: (Float, Float) -> List<MotionEvent> = { _, _ -> emptyList() }, ): List<MotionEvent> { val lastX = moveEvents.last().x val lastY = moveEvents.last().y return startEvents(DEFAULT_X, DEFAULT_Y) + moveEvents + endEvents(lastX, lastY) } -class GestureBuilder internal constructor(val eventBuilder: (Int, Float, Float) -> MotionEvent) { +class MoveEventsBuilder internal constructor(val eventBuilder: (Int, Float, Float) -> MotionEvent) { val events = mutableListOf<MotionEvent>() @@ -178,3 +228,11 @@ class GestureBuilder internal constructor(val eventBuilder: (Int, Float, Float) events.add(eventBuilder(ACTION_MOVE, DEFAULT_X + deltaX, DEFAULT_Y + deltaY)) } } + +private fun MoveEventsBuilder.getEvents( + moveEvents: MoveEventsBuilder.() -> Unit +): List<MotionEvent> { + events.clear() + this.moveEvents() + return events +} diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilderTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilderTest.kt index 13ebb42531b8..64136775b4eb 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilderTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureBuilderTest.kt @@ -54,7 +54,28 @@ class TouchpadGestureBuilderTest : SysuiTestCase() { ACTION_MOVE, ACTION_POINTER_UP, ACTION_POINTER_UP, - ACTION_UP + ACTION_UP, + ) + .inOrder() + } + + @Test + fun threeFingerGestureInProgressProducesCorrectEvents() { + val events = + ThreeFingerGesture.eventsForGestureInProgress { + move(deltaX = 10f) + move(deltaX = 20f) + } + + val actions = events.map { it.actionMasked } + assertWithMessage("Events have expected action type") + .that(actions) + .containsExactly( + ACTION_DOWN, + ACTION_POINTER_DOWN, + ACTION_POINTER_DOWN, + ACTION_MOVE, + ACTION_MOVE, ) .inOrder() } @@ -80,7 +101,7 @@ class TouchpadGestureBuilderTest : SysuiTestCase() { ACTION_POINTER_UP, ACTION_POINTER_UP, ACTION_POINTER_UP, - ACTION_UP + ACTION_UP, ) .inOrder() } @@ -109,7 +130,7 @@ class TouchpadGestureBuilderTest : SysuiTestCase() { @Test fun gestureBuilderProducesCorrectEventCoordinates() { val events = - ThreeFingerGesture.createEvents { + ThreeFingerGesture.eventsForFullGesture { move(deltaX = 50f) move(deltaX = 100f) } @@ -127,7 +148,7 @@ class TouchpadGestureBuilderTest : SysuiTestCase() { // up events DEFAULT_X + 100f to DEFAULT_Y, DEFAULT_X + 100f to DEFAULT_Y, - DEFAULT_X + 100f to DEFAULT_Y + DEFAULT_X + 100f to DEFAULT_Y, ) .inOrder() } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt index a867eb38b44c..c302b40fc4d7 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt @@ -85,7 +85,7 @@ class TouchpadGestureHandlerTest : SysuiTestCase() { } private fun backGestureEvents(): List<MotionEvent> { - return ThreeFingerGesture.createEvents { + return ThreeFingerGesture.eventsForFullGesture { move(deltaX = SWIPE_DISTANCE / 4) move(deltaX = SWIPE_DISTANCE / 2) move(deltaX = SWIPE_DISTANCE) diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt index 75c66f234bdc..90c005139c56 100644 --- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt +++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt @@ -67,7 +67,7 @@ class DistanceBasedGestureRecognizerProvider( val distanceThresholdPx = resources.getDimensionPixelSize( com.android.internal.R.dimen.system_gestures_distance_threshold - ) + ) * 5 return remember(distanceThresholdPx) { recognizerFactory(distanceThresholdPx, gestureStateChangedCallback) } @@ -77,7 +77,8 @@ class DistanceBasedGestureRecognizerProvider( fun GestureState.toTutorialActionState(): TutorialActionState { return when (this) { NotStarted -> TutorialActionState.NotStarted - is InProgress -> TutorialActionState.InProgress(progress) + // progress is disabled for now as views are not ready to handle varying progress + is InProgress -> TutorialActionState.InProgress(0f) Finished -> TutorialActionState.Finished } } diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizer.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizer.kt index 56e97a357d67..80f800390852 100644 --- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizer.kt +++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizer.kt @@ -16,10 +16,14 @@ package com.android.systemui.touchpad.tutorial.ui.gesture +import android.util.MathUtils import android.view.MotionEvent import kotlin.math.abs -/** Recognizes touchpad back gesture, that is three fingers swiping left or right */ +/** + * Recognizes touchpad back gesture, that is - using three fingers on touchpad - swiping left or + * right. + */ class BackGestureRecognizer(private val gestureDistanceThresholdPx: Int) : GestureRecognizer { private val distanceTracker = DistanceTracker() @@ -36,7 +40,7 @@ class BackGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu gestureStateChangedCallback, gestureState, isFinished = { abs(it.deltaX) >= gestureDistanceThresholdPx }, - progress = { 0f }, + progress = { MathUtils.saturate(abs(it.deltaX / gestureDistanceThresholdPx)) }, ) } } diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizer.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizer.kt index 3db9d7ccc8f7..2b84a4c50613 100644 --- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizer.kt +++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizer.kt @@ -16,9 +16,10 @@ package com.android.systemui.touchpad.tutorial.ui.gesture +import android.util.MathUtils import android.view.MotionEvent -/** Recognizes touchpad home gesture, that is three fingers swiping up */ +/** Recognizes touchpad home gesture, that is - using three fingers on touchpad - swiping up. */ class HomeGestureRecognizer(private val gestureDistanceThresholdPx: Int) : GestureRecognizer { private val distanceTracker = DistanceTracker() @@ -35,7 +36,7 @@ class HomeGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu gestureStateChangedCallback, gestureState, isFinished = { -it.deltaY >= gestureDistanceThresholdPx }, - progress = { 0f }, + progress = { MathUtils.saturate(-it.deltaY / gestureDistanceThresholdPx) }, ) } } diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizer.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizer.kt index a194ad6a8016..69b7c5edd750 100644 --- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizer.kt +++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureRecognizer.kt @@ -16,13 +16,14 @@ package com.android.systemui.touchpad.tutorial.ui.gesture +import android.util.MathUtils import android.view.MotionEvent import kotlin.math.abs /** - * Recognizes apps gesture completion. That is - using three fingers on touchpad - swipe up over - * some distance threshold and then slow down gesture before fingers are lifted. Implementation is - * based on [com.android.quickstep.util.TriggerSwipeUpTouchTracker] + * Recognizes recent apps gesture, that is - using three fingers on touchpad - swipe up over some + * distance threshold and then slow down gesture before fingers are lifted. Implementation is based + * on [com.android.quickstep.util.TriggerSwipeUpTouchTracker] */ class RecentAppsGestureRecognizer( private val gestureDistanceThresholdPx: Int, @@ -49,7 +50,7 @@ class RecentAppsGestureRecognizer( -state.deltaY >= gestureDistanceThresholdPx && abs(velocityTracker.calculateVelocity().value) <= velocityThresholdPxPerMs }, - progress = { 0f }, + progress = { MathUtils.saturate(-it.deltaY / gestureDistanceThresholdPx) }, ) } } |