• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2022 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 
17 #pragma once
18 
19 #include <condition_variable>
20 #include <memory>
21 #include <mutex>
22 #include <optional>
23 #include <string>
24 #include <vector>
25 
26 #include <InputDevice.h>
27 #include <InputReaderBase.h>
28 
29 #include "FakePointerController.h"
30 #include "input/DisplayViewport.h"
31 #include "input/InputDevice.h"
32 
33 namespace android {
34 
35 class FakeInputReaderPolicy : public InputReaderPolicyInterface {
36 protected:
~FakeInputReaderPolicy()37     virtual ~FakeInputReaderPolicy() {}
38 
39 public:
FakeInputReaderPolicy()40     FakeInputReaderPolicy() {}
41 
42     void assertInputDevicesChanged();
43     void assertInputDevicesNotChanged();
44     void assertStylusGestureNotified(int32_t deviceId);
45     void assertStylusGestureNotNotified();
46 
47     virtual void clearViewports();
48     std::optional<DisplayViewport> getDisplayViewportByUniqueId(const std::string& uniqueId) const;
49     std::optional<DisplayViewport> getDisplayViewportByType(ViewportType type) const;
50     std::optional<DisplayViewport> getDisplayViewportByPort(uint8_t displayPort) const;
51     void addDisplayViewport(DisplayViewport viewport);
52     void addDisplayViewport(int32_t displayId, int32_t width, int32_t height,
53                             ui::Rotation orientation, bool isActive, const std::string& uniqueId,
54                             std::optional<uint8_t> physicalPort, ViewportType type);
55     bool updateViewport(const DisplayViewport& viewport);
56     void addExcludedDeviceName(const std::string& deviceName);
57     void addInputPortAssociation(const std::string& inputPort, uint8_t displayPort);
58     void addDeviceTypeAssociation(const std::string& inputPort, const std::string& type);
59     void addInputUniqueIdAssociation(const std::string& inputUniqueId,
60                                      const std::string& displayUniqueId);
61     void addKeyboardLayoutAssociation(const std::string& inputUniqueId,
62                                       const KeyboardLayoutInfo& layoutInfo);
63     void addDisabledDevice(int32_t deviceId);
64     void removeDisabledDevice(int32_t deviceId);
65     void setPointerController(std::shared_ptr<FakePointerController> controller);
66     const InputReaderConfiguration& getReaderConfiguration() const;
67     const std::vector<InputDeviceInfo>& getInputDevices() const;
68     TouchAffineTransformation getTouchAffineTransformation(const std::string& inputDeviceDescriptor,
69                                                            ui::Rotation surfaceRotation);
70     void setTouchAffineTransformation(const TouchAffineTransformation t);
71     PointerCaptureRequest setPointerCapture(bool enabled);
72     void setShowTouches(bool enabled);
73     void setDefaultPointerDisplayId(int32_t pointerDisplayId);
74     void setPointerGestureEnabled(bool enabled);
75     float getPointerGestureMovementSpeedRatio();
76     float getPointerGestureZoomSpeedRatio();
77     void setVelocityControlParams(const VelocityControlParameters& params);
78     void setStylusButtonMotionEventsEnabled(bool enabled);
79     void setStylusPointerIconEnabled(bool enabled);
80     void setIsInputMethodConnectionActive(bool active);
81     bool isInputMethodConnectionActive() override;
82 
83 private:
84     void getReaderConfiguration(InputReaderConfiguration* outConfig) override;
85     std::shared_ptr<PointerControllerInterface> obtainPointerController(
86             int32_t /*deviceId*/) override;
87     void notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) override;
88     std::shared_ptr<KeyCharacterMap> getKeyboardLayoutOverlay(
89             const InputDeviceIdentifier&) override;
90     std::string getDeviceAlias(const InputDeviceIdentifier&) override;
91     void waitForInputDevices(std::function<void(bool)> processDevicesChanged);
92     void notifyStylusGestureStarted(int32_t deviceId, nsecs_t eventTime) override;
93 
94     std::mutex mLock;
95     std::condition_variable mDevicesChangedCondition;
96 
97     InputReaderConfiguration mConfig;
98     std::shared_ptr<FakePointerController> mPointerController;
99     std::vector<InputDeviceInfo> mInputDevices GUARDED_BY(mLock);
GUARDED_BY(mLock)100     bool mInputDevicesChanged GUARDED_BY(mLock){false};
101     std::vector<DisplayViewport> mViewports;
102     TouchAffineTransformation transform;
GUARDED_BY(mLock)103     std::optional<int32_t /*deviceId*/> mStylusGestureNotified GUARDED_BY(mLock){};
104     bool mIsInputMethodConnectionActive{false};
105 
106     uint32_t mNextPointerCaptureSequenceNumber{0};
107 };
108 
109 } // namespace android
110