blob: 862ff0b21aebfd797920bd896bb4f5aeb67ff599 [file] [log] [blame]
Harry Cutts6b5fbc52022-11-28 16:37:43 +00001/*
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
33namespace android {
34
35class FakeInputReaderPolicy : public InputReaderPolicyInterface {
36protected:
37 virtual ~FakeInputReaderPolicy() {}
38
39public:
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);
Michael Wrighta9cf4192022-12-01 23:46:39 +000052 void addDisplayViewport(int32_t displayId, int32_t width, int32_t height,
53 ui::Rotation orientation, bool isActive, const std::string& uniqueId,
Harry Cutts6b5fbc52022-11-28 16:37:43 +000054 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);
Ambrus Weisz7bc23bf2022-10-04 13:13:07 +000058 void addDeviceTypeAssociation(const std::string& inputPort, const std::string& type);
Harry Cutts6b5fbc52022-11-28 16:37:43 +000059 void addInputUniqueIdAssociation(const std::string& inputUniqueId,
60 const std::string& displayUniqueId);
Zixuan Qufecb6062022-11-12 04:44:31 +000061 void addKeyboardLayoutAssociation(const std::string& inputUniqueId,
62 const KeyboardLayoutInfo& layoutInfo);
Harry Cutts6b5fbc52022-11-28 16:37:43 +000063 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,
Michael Wrighta9cf4192022-12-01 23:46:39 +000069 ui::Rotation surfaceRotation);
Harry Cutts6b5fbc52022-11-28 16:37:43 +000070 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
79private:
80 void getReaderConfiguration(InputReaderConfiguration* outConfig) override;
81 std::shared_ptr<PointerControllerInterface> obtainPointerController(
82 int32_t /*deviceId*/) override;
83 void notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) override;
84 std::shared_ptr<KeyCharacterMap> getKeyboardLayoutOverlay(
85 const InputDeviceIdentifier&) override;
86 std::string getDeviceAlias(const InputDeviceIdentifier&) override;
87 void waitForInputDevices(std::function<void(bool)> processDevicesChanged);
88 void notifyStylusGestureStarted(int32_t deviceId, nsecs_t eventTime) override;
89
90 std::mutex mLock;
91 std::condition_variable mDevicesChangedCondition;
92
93 InputReaderConfiguration mConfig;
94 std::shared_ptr<FakePointerController> mPointerController;
95 std::vector<InputDeviceInfo> mInputDevices GUARDED_BY(mLock);
96 bool mInputDevicesChanged GUARDED_BY(mLock){false};
97 std::vector<DisplayViewport> mViewports;
98 TouchAffineTransformation transform;
99 std::optional<int32_t /*deviceId*/> mStylusGestureNotified GUARDED_BY(mLock){};
100
101 uint32_t mNextPointerCaptureSequenceNumber{0};
102};
103
104} // namespace android