From e6c525971e8ff085c1308422460e49a9cf0fffc5 Mon Sep 17 00:00:00 2001 From: Austin Delgado Date: Fri, 6 Jan 2023 14:02:44 -0800 Subject: [PATCH] Add hover event handling to new touch architecture Test: atest SystemUITests:com.android.systemui.biometrics Bug: 260752272 Change-Id: Ie4f546320cf58feb7a640d9be2fef0f339a9322c --- .../udfps/SinglePointerTouchProcessor.kt | 7 +- .../udfps/SinglePointerTouchProcessorTest.kt | 81 +++++++++++++++++-- 2 files changed, 79 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessor.kt index 3a01cd5029292..39ea9368dacb3 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessor.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessor.kt @@ -54,9 +54,12 @@ class SinglePointerTouchProcessor @Inject constructor(val overlapDetector: Overl return when (event.actionMasked) { MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN, - MotionEvent.ACTION_MOVE -> processActionMove(preprocess()) + MotionEvent.ACTION_MOVE, + MotionEvent.ACTION_HOVER_ENTER, + MotionEvent.ACTION_HOVER_MOVE -> processActionMove(preprocess()) MotionEvent.ACTION_UP, - MotionEvent.ACTION_POINTER_UP -> + MotionEvent.ACTION_POINTER_UP, + MotionEvent.ACTION_HOVER_EXIT -> processActionUp(preprocess(), event.getPointerId(event.actionIndex)) MotionEvent.ACTION_CANCEL -> processActionCancel(NormalizedTouchData()) else -> diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessorTest.kt index 34ddf795c7e7d..8e20303fd1892 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/SinglePointerTouchProcessorTest.kt @@ -110,6 +110,28 @@ class SinglePointerTouchProcessorTest(val testCase: TestCase) : SysuiTestCase() expectedInteractionEvent = InteractionEvent.UP, expectedPointerOnSensorId = INVALID_POINTER_ID, ), + // MotionEvent.ACTION_HOVER_ENTER + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_ENTER, + previousPointerOnSensorId = INVALID_POINTER_ID, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = true)), + expectedInteractionEvent = InteractionEvent.DOWN, + expectedPointerOnSensorId = POINTER_ID_1, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_ENTER, + previousPointerOnSensorId = INVALID_POINTER_ID, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = false)), + expectedInteractionEvent = InteractionEvent.UNCHANGED, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_ENTER, + previousPointerOnSensorId = POINTER_ID_1, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = false)), + expectedInteractionEvent = InteractionEvent.UP, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), // MotionEvent.ACTION_MOVE genPositiveTestCases( motionEventAction = MotionEvent.ACTION_MOVE, @@ -161,6 +183,35 @@ class SinglePointerTouchProcessorTest(val testCase: TestCase) : SysuiTestCase() expectedInteractionEvent = InteractionEvent.UNCHANGED, expectedPointerOnSensorId = POINTER_ID_2, ), + // MotionEvent.ACTION_HOVER_MOVE + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_MOVE, + previousPointerOnSensorId = INVALID_POINTER_ID, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = true)), + expectedInteractionEvent = InteractionEvent.DOWN, + expectedPointerOnSensorId = POINTER_ID_1, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_MOVE, + previousPointerOnSensorId = POINTER_ID_1, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = true)), + expectedInteractionEvent = InteractionEvent.UNCHANGED, + expectedPointerOnSensorId = POINTER_ID_1, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_MOVE, + previousPointerOnSensorId = INVALID_POINTER_ID, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = false)), + expectedInteractionEvent = InteractionEvent.UNCHANGED, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_MOVE, + previousPointerOnSensorId = POINTER_ID_1, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = false)), + expectedInteractionEvent = InteractionEvent.UP, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), // MotionEvent.ACTION_UP genPositiveTestCases( motionEventAction = MotionEvent.ACTION_UP, @@ -183,6 +234,28 @@ class SinglePointerTouchProcessorTest(val testCase: TestCase) : SysuiTestCase() expectedInteractionEvent = InteractionEvent.UNCHANGED, expectedPointerOnSensorId = INVALID_POINTER_ID, ), + // MotionEvent.ACTION_HOVER_EXIT + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_EXIT, + previousPointerOnSensorId = INVALID_POINTER_ID, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = true)), + expectedInteractionEvent = InteractionEvent.UP, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_EXIT, + previousPointerOnSensorId = POINTER_ID_1, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = true)), + expectedInteractionEvent = InteractionEvent.UP, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), + genPositiveTestCases( + motionEventAction = MotionEvent.ACTION_HOVER_EXIT, + previousPointerOnSensorId = INVALID_POINTER_ID, + currentPointers = listOf(TestPointer(id = POINTER_ID_1, onSensor = false)), + expectedInteractionEvent = InteractionEvent.UNCHANGED, + expectedPointerOnSensorId = INVALID_POINTER_ID, + ), // MotionEvent.ACTION_CANCEL genPositiveTestCases( motionEventAction = MotionEvent.ACTION_CANCEL, @@ -315,13 +388,7 @@ class SinglePointerTouchProcessorTest(val testCase: TestCase) : SysuiTestCase() expectedPointerOnSensorId = POINTER_ID_2 ) ) - .flatten() + - listOf( - genTestCasesForUnsupportedAction(MotionEvent.ACTION_HOVER_ENTER), - genTestCasesForUnsupportedAction(MotionEvent.ACTION_HOVER_MOVE), - genTestCasesForUnsupportedAction(MotionEvent.ACTION_HOVER_EXIT) - ) - .flatten() + .flatten() } }