diff options
6 files changed, 58 insertions, 9 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerGestureRecognizerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerGestureRecognizerTest.kt index 533665eaa626..8972f3ec71af 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerGestureRecognizerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerGestureRecognizerTest.kt @@ -83,13 +83,40 @@ class ThreeFingerGestureRecognizerTest( } @Test - fun doesntTriggerGestureFinished_onTwoFingersSwipe() { - assertStateAfterEvents(events = TwoFingerGesture.swipeRight(), expectedState = NotStarted) + fun triggersGestureError_onTwoFingersSwipe() { + assertStateAfterEvents(events = TwoFingerGesture.swipeRight(), expectedState = Error) } @Test - fun doesntTriggerGestureFinished_onFourFingersSwipe() { - assertStateAfterEvents(events = FourFingerGesture.swipeRight(), expectedState = NotStarted) + fun doesntTriggerGestureError_TwoFingerSwipeInProgress() { + assertStateAfterEvents( + events = TwoFingerGesture.eventsForGestureInProgress { move(deltaX = SWIPE_DISTANCE) }, + expectedState = NotStarted, + ) + } + + @Test + fun triggersGestureError_onFourFingersSwipe() { + assertStateAfterEvents(events = FourFingerGesture.swipeRight(), expectedState = Error) + } + + @Test + fun doesntTriggerGestureError_FourFingerSwipeInProgress() { + assertStateAfterEvents( + events = FourFingerGesture.eventsForGestureInProgress { move(deltaX = SWIPE_DISTANCE) }, + expectedState = NotStarted, + ) + } + + @Test + fun ignoresOneFingerSwipes() { + val oneFingerSwipe = + listOf( + touchpadEvent(MotionEvent.ACTION_DOWN, 50f, 50f), + touchpadEvent(MotionEvent.ACTION_MOVE, 55f, 55f), + touchpadEvent(MotionEvent.ACTION_UP, 60f, 60f), + ) + assertStateAfterEvents(events = oneFingerSwipe, expectedState = NotStarted) } private fun assertStateAfterEvents(events: List<MotionEvent>, expectedState: GestureState) { 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 35ea0ea3e048..64cda1f21cf6 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 @@ -41,7 +41,13 @@ class BackGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu } override fun accept(event: MotionEvent) { - if (!isThreeFingerTouchpadSwipe(event)) return + if (!isMultifingerTouchpadSwipe(event)) return + if (!isThreeFingerTouchpadSwipe(event)) { + if (event.actionMasked == MotionEvent.ACTION_UP) { + gestureStateChangedCallback(GestureState.Error) + } + return + } val gestureState = distanceTracker.processEvent(event) updateGestureState( gestureStateChangedCallback, diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureRecognizer.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureRecognizer.kt index 68a2ef9528eb..884f08eae22d 100644 --- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureRecognizer.kt +++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureRecognizer.kt @@ -35,6 +35,11 @@ private fun isNFingerTouchpadSwipe(event: MotionEvent, fingerCount: Int): Boolea event.getAxisValue(MotionEvent.AXIS_GESTURE_SWIPE_FINGER_COUNT) == fingerCount.toFloat() } +fun isMultifingerTouchpadSwipe(event: MotionEvent): Boolean { + return event.classification == MotionEvent.CLASSIFICATION_MULTI_FINGER_SWIPE || + event.classification == MotionEvent.CLASSIFICATION_TWO_FINGER_SWIPE +} + fun isTwoFingerSwipe(event: MotionEvent): Boolean { return event.classification == MotionEvent.CLASSIFICATION_TWO_FINGER_SWIPE } 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 9801626dac8f..7767a46f7318 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 @@ -40,7 +40,13 @@ class HomeGestureRecognizer( } override fun accept(event: MotionEvent) { - if (!isThreeFingerTouchpadSwipe(event)) return + if (!isMultifingerTouchpadSwipe(event)) return + if (!isThreeFingerTouchpadSwipe(event)) { + if (event.actionMasked == MotionEvent.ACTION_UP) { + gestureStateChangedCallback(GestureState.Error) + } + return + } val gestureState = distanceTracker.processEvent(event) velocityTracker.accept(event) updateGestureState( 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 5ff583a19ee9..74746de0562c 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 @@ -43,7 +43,13 @@ class RecentAppsGestureRecognizer( } override fun accept(event: MotionEvent) { - if (!isThreeFingerTouchpadSwipe(event)) return + if (!isMultifingerTouchpadSwipe(event)) return + if (!isThreeFingerTouchpadSwipe(event)) { + if (event.actionMasked == MotionEvent.ACTION_UP) { + gestureStateChangedCallback(GestureState.Error) + } + return + } val gestureState = distanceTracker.processEvent(event) velocityTracker.accept(event) diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandler.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandler.kt index 21e2917cf01b..dd275bd11d1e 100644 --- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandler.kt @@ -40,9 +40,8 @@ class TouchpadGestureHandler( return if (isFromTouchpad && !buttonClick) { if (isTwoFingerSwipe(event)) { easterEggGestureMonitor.processTouchpadEvent(event) - } else { - gestureRecognizer.accept(event) } + gestureRecognizer.accept(event) true } else { false |