summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
author Harry Cutts <hcutts@google.com> 2025-01-27 09:01:06 -0800
committer Harry Cutts <hcutts@google.com> 2025-02-05 12:44:25 +0000
commit26640c99888043d5f41b5e209bb96efe76b7ef9e (patch)
treefb4bf31b87904bd9d917042959faecd0812fe565 /include
parent03ec059e19d131dc3ea20504f7c0372eddb26d91 (diff)
InputVerifier: verify button events and states (attempt 2)
Check the following things: * BUTTON_PRESS and _RELEASE actions have a single, valid action button * No redundant BUTTON_PRESS or _RELEASE actions (i.e. for buttons that are already pressed or released) * Button state remains consistent throughout the stream, i.e.: * Buttons are only added to the state by BUTTON_PRESS (though DOWN events can have "pending" buttons on them) * Buttons are only removed from the state by BUTTON_RELEASE * When a DOWN event has pending buttons in its state, it is immediately followed by a BUTTON_PRESS for each one We could also verify that press and release events for primary, secondary, and tertiary buttons are accompanied by down and up events. However, I couldn't find any documentation that states which buttons should result in down or up events, so I haven't implemented this for now. This is the second attempt to land this change, due to the original causing test failures. Change I5c259c13d433d3010d2cf9c6fe01e08ba5990ef7 fixes the failures. v2 also adds a separate flag for button state verification, as it is actually used in production to check events injected by assistive technologies, whether or not the flag that I previously thought was guarding it is enabled. Test: connect a mouse and a touchpad, enable the verifier, play around with the buttons, and check that any issues found by the verifier appear to be legitimate. (I found b/391298464 , and checked that the verifier caught a button problem with a partial fix to b/372571823 .) Test: atest --host libinput_rust_tests Test: atest --host frameworks/native/libs/input/tests/InputVerifier_test.cpp Test: atest --host \ frameworks/native/services/inputflinger/tests/InputDispatcher_test.cpp Bug: 392870542 Flag: com.android.input.flags.enable_button_state_verification Change-Id: I46f489b26df8785563e41e58135b6b5de4ff62a2
Diffstat (limited to 'include')
-rw-r--r--include/android/input.h2
-rw-r--r--include/input/InputVerifier.h5
2 files changed, 5 insertions, 2 deletions
diff --git a/include/android/input.h b/include/android/input.h
index ee98d7aee9..5f445509fa 100644
--- a/include/android/input.h
+++ b/include/android/input.h
@@ -849,6 +849,7 @@ enum {
* Refer to the documentation on the MotionEvent class for descriptions of each button.
*/
enum {
+ // LINT.IfChange(AMOTION_EVENT_BUTTON)
/** primary */
AMOTION_EVENT_BUTTON_PRIMARY = 1 << 0,
/** secondary */
@@ -861,6 +862,7 @@ enum {
AMOTION_EVENT_BUTTON_FORWARD = 1 << 4,
AMOTION_EVENT_BUTTON_STYLUS_PRIMARY = 1 << 5,
AMOTION_EVENT_BUTTON_STYLUS_SECONDARY = 1 << 6,
+ // LINT.ThenChange(/frameworks/native/libs/input/rust/input.rs)
};
/**
diff --git a/include/input/InputVerifier.h b/include/input/InputVerifier.h
index 14dd463425..7d3fb469c6 100644
--- a/include/input/InputVerifier.h
+++ b/include/input/InputVerifier.h
@@ -47,9 +47,10 @@ public:
InputVerifier(const std::string& name);
android::base::Result<void> processMovement(int32_t deviceId, int32_t source, int32_t action,
- uint32_t pointerCount,
+ int32_t actionButton, uint32_t pointerCount,
const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords, int32_t flags);
+ const PointerCoords* pointerCoords, int32_t flags,
+ int32_t buttonState);
void resetDevice(int32_t deviceId);