summaryrefslogtreecommitdiff
path: root/libs/input/Input.cpp
diff options
context:
space:
mode:
author Siarhei Vishniakou <svv@google.com> 2023-10-18 09:20:07 -0700
committer Siarhei Vishniakou <svv@google.com> 2023-10-18 09:22:19 -0700
commitdcc6e6ede741905fa2ec2ff91722f85d3979276c (patch)
tree45e98a56c399d5a4b9a6db619863f1ac61a9a7ea /libs/input/Input.cpp
parent59dd790de3a1d6f5b4dbc3b96eaff4bf888e8bea (diff)
Change isStylusEvent behaviour
This function is now getting moved to Input.h. We are also making its behaviour deterministic: if at least one pointer is stylus, then the event is a stylus event (unless the source wasn't set to "stylus"). This way, an event with 1 finger and 1 stylus pointers will have the same consistent behaviour, regardless of the order that the pointers are stored inside the event. Bug: 211379801 Test: TEST=inputflinger_tests; m $TEST && $ANDROID_HOST_OUT/nativetest64/$TEST/$TEST Change-Id: Ie164e32b7c0e9cf21b3819b01a03ac2885666191
Diffstat (limited to 'libs/input/Input.cpp')
-rw-r--r--libs/input/Input.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/libs/input/Input.cpp b/libs/input/Input.cpp
index c1274110d3..bd5b67b1d0 100644
--- a/libs/input/Input.cpp
+++ b/libs/input/Input.cpp
@@ -217,6 +217,19 @@ bool isStylusToolType(ToolType toolType) {
return toolType == ToolType::STYLUS || toolType == ToolType::ERASER;
}
+bool isStylusEvent(uint32_t source, const std::vector<PointerProperties>& properties) {
+ if (!isFromSource(source, AINPUT_SOURCE_STYLUS)) {
+ return false;
+ }
+ // Need at least one stylus pointer for this event to be considered a stylus event
+ for (const PointerProperties& pointerProperties : properties) {
+ if (isStylusToolType(pointerProperties.toolType)) {
+ return true;
+ }
+ }
+ return false;
+}
+
VerifiedKeyEvent verifiedKeyEventFromKeyEvent(const KeyEvent& event) {
return {{VerifiedInputEvent::Type::KEY, event.getDeviceId(), event.getEventTime(),
event.getSource(), event.getDisplayId()},