1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef INPUT_ADAPTER_H 17 #define INPUT_ADAPTER_H 18 19 #include "nocopyable.h" 20 21 #include "i_input_adapter.h" 22 23 #include "i_input_event_consumer.h" 24 #include "i_input_event_filter.h" 25 namespace OHOS { 26 namespace Msdp { 27 namespace DeviceStatus { 28 class InputAdapter final : public IInputAdapter { 29 public: 30 InputAdapter() = default; 31 ~InputAdapter() = default; 32 DISALLOW_COPY_AND_MOVE(InputAdapter); 33 34 int32_t AddMonitor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> callback) override; 35 int32_t AddMonitor(std::function<void(std::shared_ptr<MMI::KeyEvent>)> callback) override; 36 int32_t AddMonitor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback, 37 std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback, MMI::HandleEventType eventType) override; 38 void RemoveMonitor(int32_t monitorId) override; 39 40 int32_t AddInterceptor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback) override; 41 int32_t AddInterceptor(std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback) override; 42 int32_t AddInterceptor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback, 43 std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback) override; 44 void RemoveInterceptor(int32_t interceptorId) override; 45 46 int32_t AddFilter(std::function<bool(std::shared_ptr<MMI::PointerEvent>)> callback) override; 47 void RemoveFilter(int32_t filterId) override; 48 49 int32_t SetPointerVisibility(bool visible, int32_t priority = 0) override; 50 int32_t SetPointerLocation(int32_t x, int32_t y, int32_t displayId) override; 51 int32_t EnableInputDevice(bool enable) override; 52 53 void SimulateInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) override; 54 void SimulateInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) override; 55 int32_t AddVirtualInputDevice(std::shared_ptr<MMI::InputDevice> device, int32_t &deviceId) override; 56 int32_t RemoveVirtualInputDevice(int32_t deviceId) override; 57 int32_t GetPointerSpeed(int32_t &speed) override; 58 int32_t SetPointerSpeed(int32_t speed) override; 59 int32_t GetTouchPadSpeed(int32_t &speed) override; 60 int32_t SetTouchPadSpeed(int32_t speed) override; 61 bool HasLocalPointerDevice() override; 62 private: 63 bool IsLocalPointerDevice(std::shared_ptr<MMI::InputDevice> device); 64 bool IsVirtualTrackpad(std::shared_ptr<MMI::InputDevice> device); 65 }; 66 67 class PointerFilter : public MMI::IInputEventFilter { 68 public: PointerFilter(std::function<bool (std::shared_ptr<MMI::PointerEvent>)> filter)69 explicit PointerFilter(std::function<bool(std::shared_ptr<MMI::PointerEvent>)> filter) 70 : filter_(filter) {} 71 OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent)72 bool OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) const override 73 { 74 return (filter_ != nullptr ? filter_(pointerEvent) : false); 75 } 76 OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent)77 bool OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) const override 78 { 79 return false; 80 } 81 82 private: 83 std::function<bool(std::shared_ptr<MMI::PointerEvent>)> filter_; 84 }; 85 86 class InterceptorConsumer : public MMI::IInputEventConsumer { 87 public: InterceptorConsumer(std::function<void (std::shared_ptr<MMI::PointerEvent>)> pointCallback,std::function<void (std::shared_ptr<MMI::KeyEvent>)> keyCallback)88 InterceptorConsumer(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback, 89 std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback) 90 : pointCallback_(pointCallback), keyCallback_(keyCallback) {} 91 OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent)92 void OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) const override 93 { 94 if (keyCallback_ != nullptr) { 95 keyCallback_(keyEvent); 96 } 97 } 98 OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent)99 void OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) const override 100 { 101 if (pointCallback_ != nullptr) { 102 pointCallback_(pointerEvent); 103 } 104 } 105 OnInputEvent(std::shared_ptr<MMI::AxisEvent> axisEvent)106 void OnInputEvent(std::shared_ptr<MMI::AxisEvent> axisEvent) const override {} 107 108 private: 109 std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback_; 110 std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback_; 111 }; 112 113 class MonitorConsumer : public MMI::IInputEventConsumer { 114 public: MonitorConsumer(std::function<void (std::shared_ptr<MMI::PointerEvent>)> pointCallback,std::function<void (std::shared_ptr<MMI::KeyEvent>)> keyCallback)115 MonitorConsumer(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback, 116 std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback) 117 : pointCallback_(pointCallback), keyCallback_(keyCallback) {} OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent)118 void OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) const override 119 { 120 if (keyCallback_ != nullptr) { 121 keyCallback_(keyEvent); 122 } 123 } 124 OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent)125 void OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) const override 126 { 127 if (pointCallback_ != nullptr) { 128 pointCallback_(pointerEvent); 129 } 130 } 131 OnInputEvent(std::shared_ptr<MMI::AxisEvent> axisEvent)132 void OnInputEvent(std::shared_ptr<MMI::AxisEvent> axisEvent) const override {} 133 134 private: 135 std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointCallback_; 136 std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCallback_; 137 }; 138 } // namespace DeviceStatus 139 } // namespace Msdp 140 } // namespace OHOS 141 #endif // INPUT_ADAPTER_H