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