xref: /aosp_15_r20/frameworks/native/services/inputflinger/tests/FakeInputReaderPolicy.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright 2022 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker #pragma once
18*38e8c45fSAndroid Build Coastguard Worker 
19*38e8c45fSAndroid Build Coastguard Worker #include <condition_variable>
20*38e8c45fSAndroid Build Coastguard Worker #include <memory>
21*38e8c45fSAndroid Build Coastguard Worker #include <mutex>
22*38e8c45fSAndroid Build Coastguard Worker #include <optional>
23*38e8c45fSAndroid Build Coastguard Worker #include <string>
24*38e8c45fSAndroid Build Coastguard Worker #include <vector>
25*38e8c45fSAndroid Build Coastguard Worker 
26*38e8c45fSAndroid Build Coastguard Worker #include <InputDevice.h>
27*38e8c45fSAndroid Build Coastguard Worker #include <InputReaderBase.h>
28*38e8c45fSAndroid Build Coastguard Worker 
29*38e8c45fSAndroid Build Coastguard Worker #include "input/DisplayViewport.h"
30*38e8c45fSAndroid Build Coastguard Worker #include "input/InputDevice.h"
31*38e8c45fSAndroid Build Coastguard Worker 
32*38e8c45fSAndroid Build Coastguard Worker namespace android {
33*38e8c45fSAndroid Build Coastguard Worker 
34*38e8c45fSAndroid Build Coastguard Worker class FakeInputReaderPolicy : public InputReaderPolicyInterface {
35*38e8c45fSAndroid Build Coastguard Worker protected:
~FakeInputReaderPolicy()36*38e8c45fSAndroid Build Coastguard Worker     virtual ~FakeInputReaderPolicy() {}
37*38e8c45fSAndroid Build Coastguard Worker 
38*38e8c45fSAndroid Build Coastguard Worker public:
FakeInputReaderPolicy()39*38e8c45fSAndroid Build Coastguard Worker     FakeInputReaderPolicy() {}
40*38e8c45fSAndroid Build Coastguard Worker 
41*38e8c45fSAndroid Build Coastguard Worker     void assertInputDevicesChanged();
42*38e8c45fSAndroid Build Coastguard Worker     void assertInputDevicesNotChanged();
43*38e8c45fSAndroid Build Coastguard Worker     void assertStylusGestureNotified(int32_t deviceId);
44*38e8c45fSAndroid Build Coastguard Worker     void assertStylusGestureNotNotified();
45*38e8c45fSAndroid Build Coastguard Worker     void assertTouchpadHardwareStateNotified();
46*38e8c45fSAndroid Build Coastguard Worker     void assertTouchpadThreeFingerTapNotified();
47*38e8c45fSAndroid Build Coastguard Worker 
48*38e8c45fSAndroid Build Coastguard Worker     virtual void clearViewports();
49*38e8c45fSAndroid Build Coastguard Worker     std::optional<DisplayViewport> getDisplayViewportByUniqueId(const std::string& uniqueId) const;
50*38e8c45fSAndroid Build Coastguard Worker     std::optional<DisplayViewport> getDisplayViewportByType(ViewportType type) const;
51*38e8c45fSAndroid Build Coastguard Worker     std::optional<DisplayViewport> getDisplayViewportByPort(uint8_t displayPort) const;
52*38e8c45fSAndroid Build Coastguard Worker     void addDisplayViewport(DisplayViewport viewport);
53*38e8c45fSAndroid Build Coastguard Worker     void addDisplayViewport(ui::LogicalDisplayId displayId, int32_t width, int32_t height,
54*38e8c45fSAndroid Build Coastguard Worker                             ui::Rotation orientation, bool isActive, const std::string& uniqueId,
55*38e8c45fSAndroid Build Coastguard Worker                             std::optional<uint8_t> physicalPort, ViewportType type);
56*38e8c45fSAndroid Build Coastguard Worker     bool updateViewport(const DisplayViewport& viewport);
57*38e8c45fSAndroid Build Coastguard Worker     void addExcludedDeviceName(const std::string& deviceName);
58*38e8c45fSAndroid Build Coastguard Worker     void addInputPortAssociation(const std::string& inputPort, uint8_t displayPort);
59*38e8c45fSAndroid Build Coastguard Worker     void addDeviceTypeAssociation(const std::string& inputPort, const std::string& type);
60*38e8c45fSAndroid Build Coastguard Worker     void addInputUniqueIdAssociation(const std::string& inputUniqueId,
61*38e8c45fSAndroid Build Coastguard Worker                                      const std::string& displayUniqueId);
62*38e8c45fSAndroid Build Coastguard Worker     void addKeyboardLayoutAssociation(const std::string& inputUniqueId,
63*38e8c45fSAndroid Build Coastguard Worker                                       const KeyboardLayoutInfo& layoutInfo);
64*38e8c45fSAndroid Build Coastguard Worker     void addDisabledDevice(int32_t deviceId);
65*38e8c45fSAndroid Build Coastguard Worker     void removeDisabledDevice(int32_t deviceId);
66*38e8c45fSAndroid Build Coastguard Worker     const InputReaderConfiguration& getReaderConfiguration() const;
67*38e8c45fSAndroid Build Coastguard Worker     const std::vector<InputDeviceInfo> getInputDevices() const;
68*38e8c45fSAndroid Build Coastguard Worker     TouchAffineTransformation getTouchAffineTransformation(const std::string& inputDeviceDescriptor,
69*38e8c45fSAndroid Build Coastguard Worker                                                            ui::Rotation surfaceRotation);
70*38e8c45fSAndroid Build Coastguard Worker     void setTouchAffineTransformation(const TouchAffineTransformation t);
71*38e8c45fSAndroid Build Coastguard Worker     PointerCaptureRequest setPointerCapture(const sp<IBinder>& window);
72*38e8c45fSAndroid Build Coastguard Worker     void setDefaultPointerDisplayId(ui::LogicalDisplayId pointerDisplayId);
73*38e8c45fSAndroid Build Coastguard Worker     void setPointerGestureEnabled(bool enabled);
74*38e8c45fSAndroid Build Coastguard Worker     float getPointerGestureMovementSpeedRatio();
75*38e8c45fSAndroid Build Coastguard Worker     float getPointerGestureZoomSpeedRatio();
76*38e8c45fSAndroid Build Coastguard Worker     void setVelocityControlParams(const VelocityControlParameters& params);
77*38e8c45fSAndroid Build Coastguard Worker     void setStylusButtonMotionEventsEnabled(bool enabled);
78*38e8c45fSAndroid Build Coastguard Worker     void setStylusPointerIconEnabled(bool enabled);
79*38e8c45fSAndroid Build Coastguard Worker     void setIsInputMethodConnectionActive(bool active);
80*38e8c45fSAndroid Build Coastguard Worker     bool isInputMethodConnectionActive() override;
81*38e8c45fSAndroid Build Coastguard Worker     std::optional<DisplayViewport> getPointerViewportForAssociatedDisplay(
82*38e8c45fSAndroid Build Coastguard Worker             ui::LogicalDisplayId associatedDisplayId) override;
83*38e8c45fSAndroid Build Coastguard Worker 
84*38e8c45fSAndroid Build Coastguard Worker private:
85*38e8c45fSAndroid Build Coastguard Worker     void getReaderConfiguration(InputReaderConfiguration* outConfig) override;
86*38e8c45fSAndroid Build Coastguard Worker     void notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) override;
87*38e8c45fSAndroid Build Coastguard Worker     void notifyTouchpadHardwareState(const SelfContainedHardwareState& schs,
88*38e8c45fSAndroid Build Coastguard Worker                                      int32_t deviceId) override;
89*38e8c45fSAndroid Build Coastguard Worker     void notifyTouchpadGestureInfo(GestureType type, int32_t deviceId) override;
90*38e8c45fSAndroid Build Coastguard Worker     void notifyTouchpadThreeFingerTap() override;
91*38e8c45fSAndroid Build Coastguard Worker     std::shared_ptr<KeyCharacterMap> getKeyboardLayoutOverlay(
92*38e8c45fSAndroid Build Coastguard Worker             const InputDeviceIdentifier&, const std::optional<KeyboardLayoutInfo>) override;
93*38e8c45fSAndroid Build Coastguard Worker     std::string getDeviceAlias(const InputDeviceIdentifier&) override;
94*38e8c45fSAndroid Build Coastguard Worker     void waitForInputDevices(std::function<void(bool)> processDevicesChanged,
95*38e8c45fSAndroid Build Coastguard Worker                              std::chrono::milliseconds timeout);
96*38e8c45fSAndroid Build Coastguard Worker     void notifyStylusGestureStarted(int32_t deviceId, nsecs_t eventTime) override;
97*38e8c45fSAndroid Build Coastguard Worker 
98*38e8c45fSAndroid Build Coastguard Worker     mutable std::mutex mLock;
99*38e8c45fSAndroid Build Coastguard Worker     std::condition_variable mDevicesChangedCondition;
100*38e8c45fSAndroid Build Coastguard Worker 
101*38e8c45fSAndroid Build Coastguard Worker     InputReaderConfiguration mConfig;
102*38e8c45fSAndroid Build Coastguard Worker     std::vector<InputDeviceInfo> mInputDevices GUARDED_BY(mLock);
GUARDED_BY(mLock)103*38e8c45fSAndroid Build Coastguard Worker     bool mInputDevicesChanged GUARDED_BY(mLock){false};
104*38e8c45fSAndroid Build Coastguard Worker     std::vector<DisplayViewport> mViewports;
105*38e8c45fSAndroid Build Coastguard Worker     TouchAffineTransformation transform;
106*38e8c45fSAndroid Build Coastguard Worker     bool mIsInputMethodConnectionActive{false};
107*38e8c45fSAndroid Build Coastguard Worker 
108*38e8c45fSAndroid Build Coastguard Worker     std::condition_variable mStylusGestureNotifiedCondition;
GUARDED_BY(mLock)109*38e8c45fSAndroid Build Coastguard Worker     std::optional<DeviceId> mDeviceIdOfNotifiedStylusGesture GUARDED_BY(mLock){};
110*38e8c45fSAndroid Build Coastguard Worker 
111*38e8c45fSAndroid Build Coastguard Worker     std::condition_variable mTouchpadHardwareStateNotified;
GUARDED_BY(mLock)112*38e8c45fSAndroid Build Coastguard Worker     std::optional<SelfContainedHardwareState> mTouchpadHardwareState GUARDED_BY(mLock){};
113*38e8c45fSAndroid Build Coastguard Worker 
114*38e8c45fSAndroid Build Coastguard Worker     std::condition_variable mTouchpadThreeFingerTapNotified;
115*38e8c45fSAndroid Build Coastguard Worker     bool mTouchpadThreeFingerTapHasBeenReported{false};
116*38e8c45fSAndroid Build Coastguard Worker 
117*38e8c45fSAndroid Build Coastguard Worker     uint32_t mNextPointerCaptureSequenceNumber{0};
118*38e8c45fSAndroid Build Coastguard Worker };
119*38e8c45fSAndroid Build Coastguard Worker 
120*38e8c45fSAndroid Build Coastguard Worker } // namespace android
121