1 /*
2 * Copyright (c) 2021-2025 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 #include "input_monitor_manager.h"
17
18 #include "multimodal_input_connect_manager.h"
19 #include "mmi_log.h"
20
21 #undef MMI_LOG_TAG
22 #define MMI_LOG_TAG "InputMonitorManager"
23
24 namespace OHOS {
25 namespace MMI {
GetInstance()26 InputMonitorManager &InputMonitorManager::GetInstance()
27 {
28 __attribute__((no_destroy)) static InputMonitorManager instance;
29 return instance;
30 }
31
AddMonitor(std::shared_ptr<IInputEventConsumer> monitor,HandleEventType eventType)32 int32_t InputMonitorManager::AddMonitor(std::shared_ptr<IInputEventConsumer> monitor, HandleEventType eventType)
33 {
34 CHKPR(monitor, INVALID_HANDLER_ID);
35 return AddHandler(InputHandlerType::MONITOR, monitor, eventType);
36 }
37
AddGestureMonitor(std::shared_ptr<IInputEventConsumer> consumer,TouchGestureType type,int32_t fingers)38 int32_t InputMonitorManager::AddGestureMonitor(
39 std::shared_ptr<IInputEventConsumer> consumer, TouchGestureType type, int32_t fingers)
40 {
41 CHKPR(consumer, INVALID_HANDLER_ID);
42 return InputHandlerManager::AddGestureMonitor(InputHandlerType::MONITOR,
43 consumer, HANDLE_EVENT_TYPE_TOUCH_GESTURE, type, fingers);
44 }
45
RemoveGestureMonitor(int32_t monitorId)46 int32_t InputMonitorManager::RemoveGestureMonitor(int32_t monitorId)
47 {
48 return InputHandlerManager::RemoveGestureMonitor(monitorId, InputHandlerType::MONITOR);
49 }
50
RemoveMonitor(int32_t monitorId)51 int32_t InputMonitorManager::RemoveMonitor(int32_t monitorId)
52 {
53 return RemoveHandler(monitorId, InputHandlerType::MONITOR);
54 }
55
AddMonitor(std::shared_ptr<IInputEventConsumer> monitor,std::vector<int32_t> actionsType)56 int32_t InputMonitorManager::AddMonitor(std::shared_ptr<IInputEventConsumer> monitor,
57 std::vector<int32_t> actionsType)
58 {
59 CHKPR(monitor, INVALID_HANDLER_ID);
60 return AddHandler(InputHandlerType::MONITOR, monitor, actionsType);
61 }
62
MarkConsumed(int32_t monitorId,int32_t eventId)63 void InputMonitorManager::MarkConsumed(int32_t monitorId, int32_t eventId)
64 {
65 MMI_HILOGD("Mark consumed state, monitor:%{public}d,event:%{public}d", monitorId, eventId);
66 if (!HasHandler(monitorId)) {
67 MMI_HILOGW("Failed to find the monitorId");
68 return;
69 }
70 int32_t ret = MULTIMODAL_INPUT_CONNECT_MGR->MarkEventConsumed(eventId);
71 if (ret != RET_OK) {
72 MMI_HILOGE("Send to server failed, ret:%{public}d", ret);
73 }
74 }
75
CheckMonitorValid(TouchGestureType type,int32_t fingers)76 bool InputMonitorManager::CheckMonitorValid(TouchGestureType type, int32_t fingers)
77 {
78 if (type == TOUCH_GESTURE_TYPE_NONE ||
79 (TOUCH_GESTURE_TYPE_ALL & type) != type) {
80 return false;
81 }
82 TouchGestureType ret = TOUCH_GESTURE_TYPE_NONE;
83 if (fingers == ALL_FINGER_COUNT) {
84 return true;
85 }
86 if (((type & TOUCH_GESTURE_TYPE_SWIPE) == TOUCH_GESTURE_TYPE_SWIPE) &&
87 (THREE_FINGER_COUNT <= fingers && fingers <= MAX_FINGERS_COUNT)) {
88 ret = TOUCH_GESTURE_TYPE_SWIPE;
89 } else if (((type & TOUCH_GESTURE_TYPE_PINCH) == TOUCH_GESTURE_TYPE_PINCH) &&
90 (FOUR_FINGER_COUNT <= fingers && fingers <= MAX_FINGERS_COUNT)) {
91 ret = TOUCH_GESTURE_TYPE_PINCH;
92 }
93 if (ret != TOUCH_GESTURE_TYPE_NONE) {
94 if ((type = type ^ ret) != TOUCH_GESTURE_TYPE_NONE) {
95 return CheckMonitorValid(type, fingers);
96 }
97 } else {
98 return false;
99 }
100 return true;
101 }
102 } // namespace MMI
103 } // namespace OHOS
104