diff options
author | 2023-01-29 14:57:43 -0800 | |
---|---|---|
committer | 2023-02-22 15:54:24 +0000 | |
commit | 92c8fd5ad1b044f9a4dc0e1462b1b48dd9c1b5d6 (patch) | |
tree | 91681a33a945089c89b91917f187dba46a86a74c /include/input/InputVerifier.h | |
parent | e38446b90e6c2967b23a52c4e5b53dcf2749731f (diff) |
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)
Diffstat (limited to 'include/input/InputVerifier.h')
-rw-r--r-- | include/input/InputVerifier.h | 49 |
1 files changed, 49 insertions, 0 deletions
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 <input/Input.h> +#include <map> + +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<int32_t /*deviceId*/, std::bitset<MAX_POINTER_ID + 1>> mTouchingPointerIdsByDevice; + void ensureTouchingPointersMatch(int32_t deviceId, uint32_t pointerCount, + const PointerProperties* pointerProperties, + const char* action) const; +}; + +} // namespace android |