From 92c8fd5ad1b044f9a4dc0e1462b1b48dd9c1b5d6 Mon Sep 17 00:00:00 2001 From: Siarhei Vishniakou Date: Sun, 29 Jan 2023 14:57:43 -0800 Subject: Ensure channel receives a consistent touch stream Add an event verifier to check the touch streams that are being sent to the input channel. If a stream is inconsistent, crash. For now, only touch streams are being verified. Disable the feature while the bugs are being fixed. Bug: 267082966 Test: m inputflinger_tests && $ANDROID_HOST_OUT/nativetest64/inputflinger_tests/inputflinger_tests Merged-In: Ibb8ab70b0019789c1a17dae0077be6b23d3d9139 Change-Id: Ibb8ab70b0019789c1a17dae0077be6b23d3d9139 (cherry picked from commit f06b672b3e433121037398c7255098ed0130c649) --- include/input/InputTransport.h | 2 ++ include/input/InputVerifier.h | 49 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 include/input/InputVerifier.h (limited to 'include') diff --git a/include/input/InputTransport.h b/include/input/InputTransport.h index 1c52792cf6..a1be542d7b 100644 --- a/include/input/InputTransport.h +++ b/include/input/InputTransport.h @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -444,6 +445,7 @@ public: private: std::shared_ptr mChannel; + InputVerifier mInputVerifier; }; /* diff --git a/include/input/InputVerifier.h b/include/input/InputVerifier.h new file mode 100644 index 0000000000..d4589f53b5 --- /dev/null +++ b/include/input/InputVerifier.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include + +namespace android { + +/* + * Crash if the provided touch stream is inconsistent. + * + * TODO(b/211379801): Add support for hover events: + * - No hover move without enter + * - No touching pointers when hover enter + * - No hovering pointers when touching + * - Only 1 hovering pointer max + */ +class InputVerifier { +public: + InputVerifier(const std::string& name); + + void processMovement(int32_t deviceId, int32_t action, uint32_t pointerCount, + const PointerProperties* pointerProperties, + const PointerCoords* pointerCoords, int32_t flags); + +private: + const std::string mName; + std::map> mTouchingPointerIdsByDevice; + void ensureTouchingPointersMatch(int32_t deviceId, uint32_t pointerCount, + const PointerProperties* pointerProperties, + const char* action) const; +}; + +} // namespace android -- cgit v1.2.3-59-g8ed1b