1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#include "input_adapter.h" 17c29fa5a6Sopenharmony_ci 18c29fa5a6Sopenharmony_ci#include "input_manager.h" 19c29fa5a6Sopenharmony_ci#include "i_input_event_consumer.h" 20c29fa5a6Sopenharmony_ci#include "i_input_event_filter.h" 21c29fa5a6Sopenharmony_ci 22c29fa5a6Sopenharmony_ci#include "devicestatus_define.h" 23c29fa5a6Sopenharmony_ci 24c29fa5a6Sopenharmony_ci#undef LOG_TAG 25c29fa5a6Sopenharmony_ci#define LOG_TAG "InputAdapter" 26c29fa5a6Sopenharmony_ci 27c29fa5a6Sopenharmony_cinamespace OHOS { 28c29fa5a6Sopenharmony_cinamespace Msdp { 29c29fa5a6Sopenharmony_cinamespace DeviceStatus { 30c29fa5a6Sopenharmony_ci 31c29fa5a6Sopenharmony_ciclass PointerFilter : public MMI::IInputEventFilter { 32c29fa5a6Sopenharmony_cipublic: 33c29fa5a6Sopenharmony_ci explicit PointerFilter(std::function<bool(std::shared_ptr<MMI::PointerEvent>)> filter) 34c29fa5a6Sopenharmony_ci : filter_(filter) {} 35c29fa5a6Sopenharmony_ci 36c29fa5a6Sopenharmony_ci bool OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) const override 37c29fa5a6Sopenharmony_ci { 38c29fa5a6Sopenharmony_ci return (filter_ != nullptr ? filter_(pointerEvent) : false); 39c29fa5a6Sopenharmony_ci } 40c29fa5a6Sopenharmony_ci 41c29fa5a6Sopenharmony_ci bool OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) const override 42c29fa5a6Sopenharmony_ci { 43c29fa5a6Sopenharmony_ci return false; 44c29fa5a6Sopenharmony_ci } 45c29fa5a6Sopenharmony_ci 46c29fa5a6Sopenharmony_ciprivate: 47c29fa5a6Sopenharmony_ci std::function<bool(std::shared_ptr<MMI::PointerEvent>)> filter_; 48c29fa5a6Sopenharmony_ci}; 49c29fa5a6Sopenharmony_ci 50c29fa5a6Sopenharmony_ciclass InterceptorConsumer : public MMI::IInputEventConsumer { 51c29fa5a6Sopenharmony_cipublic: 52c29fa5a6Sopenharmony_ci InterceptorConsumer(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointerCb, 53c29fa5a6Sopenharmony_ci std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCb) 54c29fa5a6Sopenharmony_ci : pointerCb_(pointerCb), keyCb_(keyCb) {} 55c29fa5a6Sopenharmony_ci 56c29fa5a6Sopenharmony_ci void OnInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) const override 57c29fa5a6Sopenharmony_ci { 58c29fa5a6Sopenharmony_ci if (keyCb_ != nullptr) { 59c29fa5a6Sopenharmony_ci keyCb_(keyEvent); 60c29fa5a6Sopenharmony_ci } 61c29fa5a6Sopenharmony_ci } 62c29fa5a6Sopenharmony_ci 63c29fa5a6Sopenharmony_ci void OnInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) const override 64c29fa5a6Sopenharmony_ci { 65c29fa5a6Sopenharmony_ci if (pointerCb_ != nullptr) { 66c29fa5a6Sopenharmony_ci pointerCb_(pointerEvent); 67c29fa5a6Sopenharmony_ci } 68c29fa5a6Sopenharmony_ci } 69c29fa5a6Sopenharmony_ci 70c29fa5a6Sopenharmony_ci void OnInputEvent(std::shared_ptr<MMI::AxisEvent> axisEvent) const override {} 71c29fa5a6Sopenharmony_ci 72c29fa5a6Sopenharmony_ciprivate: 73c29fa5a6Sopenharmony_ci std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointerCb_; 74c29fa5a6Sopenharmony_ci std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCb_; 75c29fa5a6Sopenharmony_ci}; 76c29fa5a6Sopenharmony_ci 77c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddMonitor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> callback) 78c29fa5a6Sopenharmony_ci{ 79c29fa5a6Sopenharmony_ci int32_t monitorId = MMI::InputManager::GetInstance()->AddMonitor(callback); 80c29fa5a6Sopenharmony_ci if (monitorId < 0) { 81c29fa5a6Sopenharmony_ci FI_HILOGE("AddMonitor fail"); 82c29fa5a6Sopenharmony_ci } 83c29fa5a6Sopenharmony_ci return monitorId; 84c29fa5a6Sopenharmony_ci} 85c29fa5a6Sopenharmony_ci 86c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddMonitor(std::function<void(std::shared_ptr<MMI::KeyEvent>)> callback) 87c29fa5a6Sopenharmony_ci{ 88c29fa5a6Sopenharmony_ci int32_t monitorId = MMI::InputManager::GetInstance()->AddMonitor(callback); 89c29fa5a6Sopenharmony_ci if (monitorId < 0) { 90c29fa5a6Sopenharmony_ci FI_HILOGE("AddMonitor fail"); 91c29fa5a6Sopenharmony_ci } 92c29fa5a6Sopenharmony_ci return monitorId; 93c29fa5a6Sopenharmony_ci} 94c29fa5a6Sopenharmony_ci 95c29fa5a6Sopenharmony_civoid InputAdapter::RemoveMonitor(int32_t monitorId) 96c29fa5a6Sopenharmony_ci{ 97c29fa5a6Sopenharmony_ci MMI::InputManager::GetInstance()->RemoveMonitor(monitorId); 98c29fa5a6Sopenharmony_ci} 99c29fa5a6Sopenharmony_ci 100c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddInterceptor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointerCb) 101c29fa5a6Sopenharmony_ci{ 102c29fa5a6Sopenharmony_ci return AddInterceptor(pointerCb, nullptr); 103c29fa5a6Sopenharmony_ci} 104c29fa5a6Sopenharmony_ci 105c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddInterceptor(std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCb) 106c29fa5a6Sopenharmony_ci{ 107c29fa5a6Sopenharmony_ci return AddInterceptor(nullptr, keyCb); 108c29fa5a6Sopenharmony_ci} 109c29fa5a6Sopenharmony_ci 110c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddInterceptor(std::function<void(std::shared_ptr<MMI::PointerEvent>)> pointerCb, 111c29fa5a6Sopenharmony_ci std::function<void(std::shared_ptr<MMI::KeyEvent>)> keyCb) 112c29fa5a6Sopenharmony_ci{ 113c29fa5a6Sopenharmony_ci uint32_t tags { 0u }; 114c29fa5a6Sopenharmony_ci if (pointerCb != nullptr) { 115c29fa5a6Sopenharmony_ci tags |= MMI::CapabilityToTags(MMI::INPUT_DEV_CAP_POINTER); 116c29fa5a6Sopenharmony_ci } 117c29fa5a6Sopenharmony_ci if (keyCb != nullptr) { 118c29fa5a6Sopenharmony_ci tags |= MMI::CapabilityToTags(MMI::INPUT_DEV_CAP_KEYBOARD); 119c29fa5a6Sopenharmony_ci } 120c29fa5a6Sopenharmony_ci if (tags == 0u) { 121c29fa5a6Sopenharmony_ci FI_HILOGE("Both interceptors are null"); 122c29fa5a6Sopenharmony_ci return -1; 123c29fa5a6Sopenharmony_ci } 124c29fa5a6Sopenharmony_ci auto interceptor = std::make_shared<InterceptorConsumer>(pointerCb, keyCb); 125c29fa5a6Sopenharmony_ci constexpr int32_t DEFAULT_PRIORITY { 499 }; 126c29fa5a6Sopenharmony_ci int32_t interceptorId = MMI::InputManager::GetInstance()->AddInterceptor(interceptor, DEFAULT_PRIORITY, tags); 127c29fa5a6Sopenharmony_ci if (interceptorId < 0) { 128c29fa5a6Sopenharmony_ci FI_HILOGE("AddInterceptor fail"); 129c29fa5a6Sopenharmony_ci } 130c29fa5a6Sopenharmony_ci return interceptorId; 131c29fa5a6Sopenharmony_ci} 132c29fa5a6Sopenharmony_ci 133c29fa5a6Sopenharmony_civoid InputAdapter::RemoveInterceptor(int32_t interceptorId) 134c29fa5a6Sopenharmony_ci{ 135c29fa5a6Sopenharmony_ci MMI::InputManager::GetInstance()->RemoveInterceptor(interceptorId); 136c29fa5a6Sopenharmony_ci} 137c29fa5a6Sopenharmony_ci 138c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddFilter(std::function<bool(std::shared_ptr<MMI::PointerEvent>)> callback) 139c29fa5a6Sopenharmony_ci{ 140c29fa5a6Sopenharmony_ci constexpr int32_t DEFAULT_PRIORITY { 220 }; 141c29fa5a6Sopenharmony_ci auto filter = std::make_shared<PointerFilter>(callback); 142c29fa5a6Sopenharmony_ci uint32_t tags = CapabilityToTags(MMI::INPUT_DEV_CAP_POINTER); 143c29fa5a6Sopenharmony_ci int32_t filterId = MMI::InputManager::GetInstance()->AddInputEventFilter(filter, DEFAULT_PRIORITY, tags); 144c29fa5a6Sopenharmony_ci if (filterId < 0) { 145c29fa5a6Sopenharmony_ci FI_HILOGE("AddInputEventFilter fail"); 146c29fa5a6Sopenharmony_ci } 147c29fa5a6Sopenharmony_ci return filterId; 148c29fa5a6Sopenharmony_ci} 149c29fa5a6Sopenharmony_ci 150c29fa5a6Sopenharmony_civoid InputAdapter::RemoveFilter(int32_t filterId) 151c29fa5a6Sopenharmony_ci{ 152c29fa5a6Sopenharmony_ci MMI::InputManager::GetInstance()->RemoveInputEventFilter(filterId); 153c29fa5a6Sopenharmony_ci} 154c29fa5a6Sopenharmony_ci 155c29fa5a6Sopenharmony_ciint32_t InputAdapter::SetPointerVisibility(bool visible, int32_t priority) 156c29fa5a6Sopenharmony_ci{ 157c29fa5a6Sopenharmony_ci FI_HILOGI("Set pointer visibility, visible:%{public}s", visible ? "true" : "false"); 158c29fa5a6Sopenharmony_ci return MMI::InputManager::GetInstance()->SetPointerVisible(visible, priority); 159c29fa5a6Sopenharmony_ci} 160c29fa5a6Sopenharmony_ci 161c29fa5a6Sopenharmony_ciint32_t InputAdapter::SetPointerLocation(int32_t x, int32_t y) 162c29fa5a6Sopenharmony_ci{ 163c29fa5a6Sopenharmony_ci return MMI::InputManager::GetInstance()->SetPointerLocation(x, y); 164c29fa5a6Sopenharmony_ci} 165c29fa5a6Sopenharmony_ci 166c29fa5a6Sopenharmony_ciint32_t InputAdapter::EnableInputDevice(bool enable) 167c29fa5a6Sopenharmony_ci{ 168c29fa5a6Sopenharmony_ci return MMI::InputManager::GetInstance()->EnableInputDevice(enable); 169c29fa5a6Sopenharmony_ci} 170c29fa5a6Sopenharmony_ci 171c29fa5a6Sopenharmony_civoid InputAdapter::SimulateInputEvent(std::shared_ptr<MMI::PointerEvent> pointerEvent) 172c29fa5a6Sopenharmony_ci{ 173c29fa5a6Sopenharmony_ci MMI::InputManager::GetInstance()->SimulateInputEvent(pointerEvent); 174c29fa5a6Sopenharmony_ci} 175c29fa5a6Sopenharmony_ci 176c29fa5a6Sopenharmony_civoid InputAdapter::SimulateInputEvent(std::shared_ptr<MMI::KeyEvent> keyEvent) 177c29fa5a6Sopenharmony_ci{ 178c29fa5a6Sopenharmony_ci MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent); 179c29fa5a6Sopenharmony_ci} 180c29fa5a6Sopenharmony_ci 181c29fa5a6Sopenharmony_ciint32_t InputAdapter::AddVirtualInputDevice(std::shared_ptr<MMI::InputDevice> device, int32_t &deviceId) 182c29fa5a6Sopenharmony_ci{ 183c29fa5a6Sopenharmony_ci return MMI::InputManager::GetInstance()->AddVirtualInputDevice(device, deviceId); 184c29fa5a6Sopenharmony_ci} 185c29fa5a6Sopenharmony_ci 186c29fa5a6Sopenharmony_ciint32_t InputAdapter::RemoveVirtualInputDevice(int32_t deviceId) 187c29fa5a6Sopenharmony_ci{ 188c29fa5a6Sopenharmony_ci return MMI::InputManager::GetInstance()->RemoveVirtualInputDevice(deviceId); 189c29fa5a6Sopenharmony_ci} 190c29fa5a6Sopenharmony_ci} // namespace DeviceStatus 191c29fa5a6Sopenharmony_ci} // namespace Msdp 192c29fa5a6Sopenharmony_ci} // namespace OHOS