Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2019 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
Prabir Pradhan | 4810866 | 2022-09-09 21:22:04 +0000 | [diff] [blame] | 17 | #pragma once |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 18 | |
| 19 | #include "TouchInputMapper.h" |
Harry Cutts | 2d77f55 | 2022-11-07 12:10:56 +0000 | [diff] [blame] | 20 | #include "accumulator/MultiTouchMotionAccumulator.h" |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 21 | |
| 22 | namespace android { |
| 23 | |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 24 | class MultiTouchInputMapper : public TouchInputMapper { |
| 25 | public: |
Nathaniel R. Lewis | 26ec222 | 2020-01-10 16:30:54 -0800 | [diff] [blame] | 26 | explicit MultiTouchInputMapper(InputDeviceContext& deviceContext); |
Michael Wright | 227c554 | 2020-07-02 18:30:52 +0100 | [diff] [blame] | 27 | ~MultiTouchInputMapper() override; |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 28 | |
Siarhei Vishniakou | 2935db7 | 2022-09-22 13:35:22 -0700 | [diff] [blame] | 29 | [[nodiscard]] std::list<NotifyArgs> reset(nsecs_t when) override; |
| 30 | [[nodiscard]] std::list<NotifyArgs> process(const RawEvent* rawEvent) override; |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 31 | |
| 32 | protected: |
Michael Wright | 227c554 | 2020-07-02 18:30:52 +0100 | [diff] [blame] | 33 | void syncTouch(nsecs_t when, RawState* outState) override; |
| 34 | void configureRawPointerAxes() override; |
| 35 | bool hasStylus() const override; |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 36 | |
| 37 | private: |
Prabir Pradhan | f4d65b1 | 2022-02-10 07:15:38 -0800 | [diff] [blame] | 38 | // simulate_stylus_with_touch is a debug mode that converts all finger pointers reported by this |
| 39 | // mapper's touchscreen into stylus pointers, and adds SOURCE_STYLUS to the input device. |
| 40 | // It is used to simulate stylus events for debugging and testing on a device that does not |
| 41 | // support styluses. It can be enabled using |
| 42 | // "adb shell setprop persist.debug.input.simulate_stylus_with_touch true", |
| 43 | // and requires a reboot to take effect. |
| 44 | inline bool shouldSimulateStylusWithTouch() const; |
| 45 | |
arthurhung | cc7f980 | 2020-04-30 17:55:40 +0800 | [diff] [blame] | 46 | // If the slot is in use, return the bit id. Return std::nullopt otherwise. |
| 47 | std::optional<int32_t> getActiveBitId(const MultiTouchMotionAccumulator::Slot& inSlot); |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 48 | MultiTouchMotionAccumulator mMultiTouchMotionAccumulator; |
| 49 | |
| 50 | // Specifies the pointer id bits that are in use, and their associated tracking id. |
| 51 | BitSet32 mPointerIdBits; |
| 52 | int32_t mPointerTrackingIdMap[MAX_POINTER_ID + 1]; |
Prabir Pradhan | 5d0d97d | 2022-11-17 01:06:01 +0000 | [diff] [blame] | 53 | |
| 54 | bool mStylusMtToolSeen{false}; |
Prabir Pradhan | baa5c82 | 2019-08-30 15:27:05 -0700 | [diff] [blame] | 55 | }; |
| 56 | |
| 57 | } // namespace android |