• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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_handler_manager.h"
17 
18 #include <cinttypes>
19 
20 #include "anr_handler.h"
21 #include "bytrace_adapter.h"
22 #include "input_handler_type.h"
23 #include "mmi_log.h"
24 #include "multimodal_event_handler.h"
25 #include "multimodal_input_connect_manager.h"
26 #include "napi_constants.h"
27 #include "net_packet.h"
28 #include "proto.h"
29 
30 #undef MMI_LOG_TAG
31 #define MMI_LOG_TAG "InputHandlerManager"
32 
33 namespace OHOS {
34 namespace MMI {
35 namespace {
36 constexpr int32_t DEVICE_TAGS { 1 };
37 } // namespace
InputHandlerManager()38 InputHandlerManager::InputHandlerManager()
39 {
40     monitorCallback_ =
41         [this] (int32_t eventId, int64_t actionTime) { return this->OnDispatchEventProcessed(eventId, actionTime); };
42     monitorCallbackConsume_ =
43         [this] (int32_t eventId, int64_t actionTime) {
44             return this->OnDispatchEventProcessed(eventId, actionTime, true);
45         };
46 }
47 
AddHandler(InputHandlerType handlerType,std::shared_ptr<IInputEventConsumer> consumer,HandleEventType eventType,int32_t priority,uint32_t deviceTags)48 int32_t InputHandlerManager::AddHandler(InputHandlerType handlerType, std::shared_ptr<IInputEventConsumer> consumer,
49     HandleEventType eventType, int32_t priority, uint32_t deviceTags)
50 {
51     CALL_DEBUG_ENTER;
52     CHKPR(consumer, INVALID_HANDLER_ID);
53     if (handlerType == InputHandlerType::INTERCEPTOR) {
54         eventType = HANDLE_EVENT_TYPE_NONE;
55         if ((deviceTags & CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_KEYBOARD)) != 0) {
56             eventType |= HANDLE_EVENT_TYPE_KEY;
57         }
58         if ((deviceTags & (CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_MAX) -
59             CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_KEYBOARD))) != 0) {
60             eventType |= HANDLE_EVENT_TYPE_POINTER;
61         }
62     }
63     std::lock_guard<std::mutex> guard(mtxHandlers_);
64     CHKFR(((monitorHandlers_.size() + interHandlers_.size()) < MAX_N_INPUT_HANDLERS), ERROR_EXCEED_MAX_COUNT,
65           "The number of handlers exceeds the maximum");
66     int32_t handlerId = GetNextId();
67     CHKFR((handlerId != INVALID_HANDLER_ID), INVALID_HANDLER_ID, "Exceeded limit of 32-bit maximum number of integers");
68     CHKFR((eventType != HANDLE_EVENT_TYPE_NONE), INVALID_HANDLER_ID, "Invalid event type");
69     const HandleEventType currentType = GetEventType();
70     MMI_HILOGD("Register new handler:%{public}d, currentType:%{public}d, deviceTags:%{public}d", handlerId, currentType,
71         deviceTags);
72     uint32_t currentTags = GetDeviceTags();
73     if (RET_OK == AddLocal(handlerId, handlerType, eventType, priority, deviceTags, consumer)) {
74         MMI_HILOGD("New handler successfully registered, report to server");
75         const HandleEventType newType = GetEventType();
76         if (currentType != newType || ((currentTags & deviceTags) != deviceTags)) {
77             uint32_t allDeviceTags = GetDeviceTags();
78             MMI_HILOGD("handlerType:%{public}d, newType:%{public}d, deviceTags:%{public}d, priority:%{public}d",
79                 handlerType, newType, allDeviceTags, priority);
80             int32_t ret = AddToServer(handlerType, newType, priority, allDeviceTags);
81             if (ret != RET_OK) {
82                 MMI_HILOGE("Add Handler:%{public}d:%{public}d to server failed, (eventType,deviceTag) current: "
83                            "(%{public}d, %{public}d), new: (%{public}d, %{public}d), priority:%{public}d",
84                            handlerType, handlerId, currentType, currentTags, newType, deviceTags, priority);
85                 RemoveLocal(handlerId, handlerType, allDeviceTags);
86                 return ret;
87             }
88         }
89         MMI_HILOGI("Finish add Handler:%{public}d:%{public}d, (eventType,deviceTag) current:"
90                    " (%{public}d, %{public}d), new: (%{public}d, %{public}d), priority:%{public}d",
91                    handlerType, handlerId, currentType, currentTags, newType, deviceTags, priority);
92     } else {
93         MMI_HILOGE("Add Handler:%{public}d:%{public}d local failed, (eventType,deviceTag,priority): "
94                    "(%{public}d, %{public}d, %{public}d)", handlerType, handlerId, eventType, deviceTags, priority);
95         handlerId = INVALID_HANDLER_ID;
96     }
97     return handlerId;
98 }
99 
RemoveHandler(int32_t handlerId,InputHandlerType handlerType)100 int32_t InputHandlerManager::RemoveHandler(int32_t handlerId, InputHandlerType handlerType)
101 {
102     CALL_DEBUG_ENTER;
103     MMI_HILOGD("Unregister handler:%{public}d,type:%{public}d", handlerId, handlerType);
104     std::lock_guard<std::mutex> guard(mtxHandlers_);
105     const HandleEventType currentType = GetEventType();
106     uint32_t currentTags = GetDeviceTags();
107     uint32_t deviceTags = 0;
108     int32_t ret = RemoveLocal(handlerId, handlerType, deviceTags);
109     if (ret == RET_OK) {
110         const HandleEventType newType = GetEventType();
111         const int32_t newLevel = GetPriority();
112         const uint64_t newTags = GetDeviceTags();
113         if (currentType != newType || ((currentTags & deviceTags) != 0)) {
114             ret = RemoveFromServer(handlerType, newType, newLevel, newTags);
115             if (ret != RET_OK) {
116                 return ret;
117             }
118         }
119         MMI_HILOGI("Remove Handler:%{public}d:%{public}d, (eventType,deviceTag): (%{public}d:%{public}d) ",
120                    handlerType, handlerId, currentType, currentTags);
121     }
122     return ret;
123 }
124 
AddLocal(int32_t handlerId,InputHandlerType handlerType,HandleEventType eventType,int32_t priority,uint32_t deviceTags,std::shared_ptr<IInputEventConsumer> monitor)125 int32_t InputHandlerManager::AddLocal(int32_t handlerId, InputHandlerType handlerType, HandleEventType eventType,
126     int32_t priority, uint32_t deviceTags, std::shared_ptr<IInputEventConsumer> monitor)
127 {
128     InputHandlerManager::Handler handler{
129         .handlerId_ = handlerId,
130         .handlerType_ = handlerType,
131         .eventType_ = eventType,
132         .priority_ = priority,
133         .deviceTags_ = deviceTags,
134         .consumer_ = monitor,
135     };
136     if (handlerType == InputHandlerType::MONITOR) {
137         auto ret = monitorHandlers_.emplace(handler.handlerId_, handler);
138         if (!ret.second) {
139             MMI_HILOGE("Duplicate handler:%{public}d", handler.handlerId_);
140             return RET_ERR;
141         }
142     }
143     if (handlerType == InputHandlerType::INTERCEPTOR) {
144         auto iterIndex = interHandlers_.begin();
145         for (; iterIndex != interHandlers_.end(); ++iterIndex) {
146             if (handler.priority_ < iterIndex->priority_) {
147                 break;
148             }
149         }
150         auto iter = interHandlers_.emplace(iterIndex, handler);
151         if (iter == interHandlers_.end()) {
152             MMI_HILOGE("Add new handler failed");
153             return RET_ERR;
154         }
155     }
156     return RET_OK;
157 }
158 
AddToServer(InputHandlerType handlerType,HandleEventType eventType,int32_t priority,uint32_t deviceTags)159 int32_t InputHandlerManager::AddToServer(InputHandlerType handlerType, HandleEventType eventType, int32_t priority,
160     uint32_t deviceTags)
161 {
162     int32_t ret = MULTIMODAL_INPUT_CONNECT_MGR->AddInputHandler(handlerType, eventType, priority, deviceTags);
163     if (ret != RET_OK) {
164         MMI_HILOGE("Send to server failed, ret:%{public}d", ret);
165     }
166     return ret;
167 }
168 
RemoveLocal(int32_t handlerId,InputHandlerType handlerType,uint32_t & deviceTags)169 int32_t InputHandlerManager::RemoveLocal(int32_t handlerId, InputHandlerType handlerType, uint32_t &deviceTags)
170 {
171     if (handlerType == InputHandlerType::MONITOR) {
172         auto iter = monitorHandlers_.find(handlerId);
173         if (iter == monitorHandlers_.end()) {
174             MMI_HILOGE("No handler with specified");
175             return RET_ERR;
176         }
177         if (handlerType != iter->second.handlerType_) {
178             MMI_HILOGE("Unmatched handler type, InputHandlerType:%{public}d,FindHandlerType:%{public}d", handlerType,
179                 iter->second.handlerType_);
180             return RET_ERR;
181         }
182         monitorHandlers_.erase(iter);
183     }
184 
185     if (handlerType == InputHandlerType::INTERCEPTOR) {
186         for (auto it = interHandlers_.begin(); it != interHandlers_.end(); ++it) {
187             if (handlerId == it->handlerId_) {
188                 deviceTags = it->deviceTags_;
189                 interHandlers_.erase(it);
190                 break;
191             }
192         }
193     }
194     return RET_OK;
195 }
196 
RemoveFromServer(InputHandlerType handlerType,HandleEventType eventType,int32_t priority,uint32_t deviceTags)197 int32_t InputHandlerManager::RemoveFromServer(InputHandlerType handlerType, HandleEventType eventType, int32_t priority,
198     uint32_t deviceTags)
199 {
200     int32_t ret = MULTIMODAL_INPUT_CONNECT_MGR->RemoveInputHandler(handlerType, eventType, priority, deviceTags);
201     if (ret != 0) {
202         MMI_HILOGE("Send to server failed, ret:%{public}d", ret);
203     }
204     return ret;
205 }
206 
GetNextId()207 int32_t InputHandlerManager::GetNextId()
208 {
209     if (nextId_ == std::numeric_limits<int32_t>::max()) {
210         MMI_HILOGE("Exceeded limit of 32-bit maximum number of integers");
211         return INVALID_HANDLER_ID;
212     }
213     return nextId_++;
214 }
215 
FindHandler(int32_t handlerId)216 std::shared_ptr<IInputEventConsumer> InputHandlerManager::FindHandler(int32_t handlerId)
217 {
218     if (GetHandlerType() == InputHandlerType::MONITOR) {
219         auto iter = monitorHandlers_.find(handlerId);
220         if (iter != monitorHandlers_.end()) {
221             return iter->second.consumer_;
222         }
223     }
224     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
225         for (const auto &item : interHandlers_) {
226             if (item.handlerId_ == handlerId) {
227                 return item.consumer_;
228             }
229         }
230     }
231     return nullptr;
232 }
233 
234 #ifdef OHOS_BUILD_ENABLE_KEYBOARD
OnInputEvent(std::shared_ptr<KeyEvent> keyEvent,uint32_t deviceTags)235 void InputHandlerManager::OnInputEvent(std::shared_ptr<KeyEvent> keyEvent, uint32_t deviceTags)
236 {
237     CHK_PID_AND_TID();
238     CHKPV(keyEvent);
239     std::lock_guard<std::mutex> guard(mtxHandlers_);
240     BytraceAdapter::StartBytrace(keyEvent, BytraceAdapter::TRACE_STOP, BytraceAdapter::KEY_INTERCEPT_EVENT);
241     if (GetHandlerType() == InputHandlerType::MONITOR) {
242         for (const auto &item : monitorHandlers_) {
243             if ((item.second.eventType_ & HANDLE_EVENT_TYPE_KEY) != HANDLE_EVENT_TYPE_KEY) {
244                 continue;
245             }
246             int32_t handlerId = item.first;
247             std::shared_ptr<IInputEventConsumer> consumer = item.second.consumer_;
248             CHKPV(consumer);
249             consumer->OnInputEvent(keyEvent);
250             MMI_HILOG_DISPATCHD("Key event id:%{public}d keyCode:%{private}d",
251                 handlerId, keyEvent->GetKeyCode());
252         }
253     }
254     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
255         for (const auto &item : interHandlers_) {
256             if ((item.eventType_ & HANDLE_EVENT_TYPE_KEY) != HANDLE_EVENT_TYPE_KEY) {
257                 continue;
258             }
259             int32_t handlerId = item.handlerId_;
260             std::shared_ptr<IInputEventConsumer> consumer = item.consumer_;
261             CHKPV(consumer);
262             consumer->OnInputEvent(keyEvent);
263             MMI_HILOG_DISPATCHD("Key event id:%{public}d keyCode:%{private}d",
264                 handlerId, keyEvent->GetKeyCode());
265             break;
266         }
267     }
268 }
269 #endif // OHOS_BUILD_ENABLE_KEYBOARD
270 
271 #if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH)
CheckInputDeviceSource(const std::shared_ptr<PointerEvent> pointerEvent,uint32_t deviceTags) const272 bool InputHandlerManager::CheckInputDeviceSource(
273     const std::shared_ptr<PointerEvent> pointerEvent, uint32_t deviceTags) const
274 {
275     if ((pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_TOUCHSCREEN) &&
276         ((deviceTags & CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_TOUCH)) ||
277         (deviceTags & CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_TABLET_TOOL)))) {
278         return true;
279     } else if ((pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) &&
280         (deviceTags & CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_POINTER))) {
281         return true;
282     } else if ((pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_TOUCHPAD) &&
283         (deviceTags & CapabilityToTags(InputDeviceCapability::INPUT_DEV_CAP_POINTER))) {
284         return true;
285     }
286     return false;
287 }
288 
GetConsumerInfos(std::shared_ptr<PointerEvent> pointerEvent,uint32_t deviceTags,std::map<int32_t,std::shared_ptr<IInputEventConsumer>> & consumerInfos)289 void InputHandlerManager::GetConsumerInfos(std::shared_ptr<PointerEvent> pointerEvent, uint32_t deviceTags,
290     std::map<int32_t, std::shared_ptr<IInputEventConsumer>> &consumerInfos)
291 {
292     std::lock_guard<std::mutex> guard(mtxHandlers_);
293     int32_t consumerCount = 0;
294     if (GetHandlerType() == InputHandlerType::MONITOR) {
295         lastPointerEvent_ = std::make_shared<PointerEvent>(*pointerEvent);
296         consumerCount = GetMonitorConsumerInfos(pointerEvent, consumerInfos);
297     }
298     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
299         for (const auto &item : interHandlers_) {
300             if ((item.eventType_ & HANDLE_EVENT_TYPE_POINTER) != HANDLE_EVENT_TYPE_POINTER) {
301                 continue;
302             }
303             if (((deviceTags & item.deviceTags_) == item.deviceTags_) &&
304                 !CheckInputDeviceSource(pointerEvent, item.deviceTags_)) {
305                 continue;
306             }
307             int32_t handlerId = item.handlerId_;
308             std::shared_ptr<IInputEventConsumer> consumer = item.consumer_;
309             CHKPV(consumer);
310             auto ret = consumerInfos.emplace(handlerId, consumer);
311             if (!ret.second) {
312                 MMI_HILOGI("Duplicate handler:%{public}d", handlerId);
313                 continue;
314             }
315             consumerCount++;
316             break;
317         }
318     }
319 
320     if (consumerCount == 0) {
321         MMI_HILOGE("All task post failed");
322         return;
323     }
324     int32_t tokenType = MULTIMODAL_INPUT_CONNECT_MGR->GetTokenType();
325     if (tokenType != TokenType::TOKEN_HAP && tokenType != TokenType::TOKEN_SYSTEM_HAP) {
326         return;
327     }
328     AddMouseEventId(pointerEvent);
329 }
330 
AddMouseEventId(std::shared_ptr<PointerEvent> pointerEvent)331 void InputHandlerManager::AddMouseEventId(std::shared_ptr<PointerEvent> pointerEvent)
332 {
333     if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
334         mouseEventIds_.emplace(pointerEvent->GetId());
335     }
336 }
337 
GetMonitorConsumerInfos(std::shared_ptr<PointerEvent> pointerEvent,std::map<int32_t,std::shared_ptr<IInputEventConsumer>> & consumerInfos)338 int32_t InputHandlerManager::GetMonitorConsumerInfos(std::shared_ptr<PointerEvent> pointerEvent,
339     std::map<int32_t, std::shared_ptr<IInputEventConsumer>> &consumerInfos)
340 {
341     int32_t consumerCount = 0;
342     MMI_HILOG_DISPATCHD("id:%{public}d ac:%{public}d recv", pointerEvent->GetId(), pointerEvent->GetPointerAction());
343     for (const auto &item : monitorHandlers_) {
344         if ((item.second.eventType_ & HANDLE_EVENT_TYPE_POINTER) != HANDLE_EVENT_TYPE_POINTER) {
345             continue;
346         }
347         int32_t handlerId = item.first;
348         std::shared_ptr<IInputEventConsumer> consumer = item.second.consumer_;
349         CHKPR(consumer, INVALID_HANDLER_ID);
350         auto ret = consumerInfos.emplace(handlerId, consumer);
351         if (!ret.second) {
352             MMI_HILOGI("Duplicate handler:%{public}d", handlerId);
353             continue;
354         }
355         consumerCount++;
356     }
357     return consumerCount;
358 }
359 
OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent,uint32_t deviceTags)360 void InputHandlerManager::OnInputEvent(std::shared_ptr<PointerEvent> pointerEvent, uint32_t deviceTags)
361 {
362     CHK_PID_AND_TID();
363     CHKPV(pointerEvent);
364     BytraceAdapter::StartBytrace(pointerEvent, BytraceAdapter::TRACE_STOP, BytraceAdapter::POINT_INTERCEPT_EVENT);
365     std::map<int32_t, std::shared_ptr<IInputEventConsumer>> consumerInfos;
366     GetConsumerInfos(pointerEvent, deviceTags, consumerInfos);
367     for (auto iter = consumerInfos.begin(); iter != consumerInfos.end(); ++iter) {
368         auto tempEvent = std::make_shared<PointerEvent>(*pointerEvent);
369         if (std::next(iter) == consumerInfos.end()) {
370             tempEvent->SetProcessedCallback(monitorCallbackConsume_);
371         } else {
372             tempEvent->SetProcessedCallback(monitorCallback_);
373         }
374         CHKPV(iter->second);
375         auto consumer = iter->second;
376         consumer->OnInputEvent(tempEvent);
377         MMI_HILOG_DISPATCHD("Pointer event id:%{public}d pointerId:%{public}d",
378             iter->first, pointerEvent->GetPointerId());
379     }
380 }
381 #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH
382 
383 #if defined(OHOS_BUILD_ENABLE_INTERCEPTOR) || defined(OHOS_BUILD_ENABLE_MONITOR)
384 template<typename T>
RecoverPointerEvent(std::initializer_list<T> pointerActionEvents,T pointerActionEvent)385 bool InputHandlerManager::RecoverPointerEvent(std::initializer_list<T> pointerActionEvents, T pointerActionEvent)
386 {
387     CALL_INFO_TRACE;
388     std::unique_lock<std::mutex> lock(mtxHandlers_);
389     CHKPF(lastPointerEvent_);
390     int32_t pointerAction = lastPointerEvent_->GetPointerAction();
391     for (const auto &it : pointerActionEvents) {
392         if (pointerAction == it) {
393             PointerEvent::PointerItem item;
394             int32_t pointerId = lastPointerEvent_->GetPointerId();
395             if (!lastPointerEvent_->GetPointerItem(pointerId, item)) {
396                 MMI_HILOG_DISPATCHD("Get pointer item failed. pointer:%{public}d",
397                     pointerId);
398                 return false;
399             }
400             item.SetPressed(false);
401             lastPointerEvent_->UpdatePointerItem(pointerId, item);
402             lastPointerEvent_->SetPointerAction(pointerActionEvent);
403             auto copiedPointerEvent = std::make_shared<PointerEvent>(*lastPointerEvent_);
404             lock.unlock();
405 #if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH)
406             OnInputEvent(copiedPointerEvent, DEVICE_TAGS);
407 #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH
408             return true;
409         }
410     }
411     return false;
412 }
413 
OnDisconnected()414 void InputHandlerManager::OnDisconnected()
415 {
416     CALL_INFO_TRACE;
417     std::initializer_list<int32_t> pointerActionSwipeEvents { PointerEvent::POINTER_ACTION_SWIPE_UPDATE,
418         PointerEvent::POINTER_ACTION_SWIPE_BEGIN };
419     if (RecoverPointerEvent(pointerActionSwipeEvents, PointerEvent::POINTER_ACTION_SWIPE_END)) {
420         MMI_HILOGE("Swipe end event for service exception re-sending");
421         return;
422     }
423 }
424 
OnConnected()425 void InputHandlerManager::OnConnected()
426 {
427     CALL_DEBUG_ENTER;
428     HandleEventType eventType = GetEventType();
429     int32_t priority = GetPriority();
430     uint32_t deviceTags = GetDeviceTags();
431     if (eventType != HANDLE_EVENT_TYPE_NONE) {
432         AddToServer(GetHandlerType(), eventType, priority, deviceTags);
433     }
434 }
435 #endif // OHOS_BUILD_ENABLE_INTERCEPTOR || OHOS_BUILD_ENABLE_MONITOR
436 
HasHandler(int32_t handlerId)437 bool InputHandlerManager::HasHandler(int32_t handlerId)
438 {
439     std::lock_guard<std::mutex> guard(mtxHandlers_);
440     if (GetHandlerType() == InputHandlerType::MONITOR) {
441         auto iter = monitorHandlers_.find(handlerId);
442         return (iter != monitorHandlers_.end());
443     }
444     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
445         for (const auto &item : interHandlers_) {
446             if (item.handlerId_ == handlerId) {
447                 return true;
448             }
449         }
450     }
451     return false;
452 }
453 
GetEventType() const454 HandleEventType InputHandlerManager::GetEventType() const
455 {
456     uint32_t eventType{ HANDLE_EVENT_TYPE_NONE };
457     if (GetHandlerType() == InputHandlerType::MONITOR) {
458         if (monitorHandlers_.empty()) {
459             MMI_HILOGD("monitorHandlers_ is empty");
460             return HANDLE_EVENT_TYPE_NONE;
461         }
462         for (const auto &inputHandler : monitorHandlers_) {
463             eventType |= inputHandler.second.eventType_;
464         }
465     }
466 
467     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
468         if (interHandlers_.empty()) {
469             MMI_HILOGD("interHandlers_ is empty");
470             return HANDLE_EVENT_TYPE_NONE;
471         }
472         for (const auto &interHandler : interHandlers_) {
473             eventType |= interHandler.eventType_;
474         }
475     }
476     return eventType;
477 }
478 
GetPriority() const479 int32_t InputHandlerManager::GetPriority() const
480 {
481     int32_t priority{ DEFUALT_INTERCEPTOR_PRIORITY };
482     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
483         if (!interHandlers_.empty()) {
484             priority = interHandlers_.front().priority_;
485         }
486     }
487     return priority;
488 }
489 
GetDeviceTags() const490 uint32_t InputHandlerManager::GetDeviceTags() const
491 {
492     uint32_t deviceTags = 0;
493     if (GetHandlerType() == InputHandlerType::INTERCEPTOR) {
494         for (const auto &item : interHandlers_) {
495             deviceTags |= item.deviceTags_;
496         }
497     }
498     if (GetHandlerType() == InputHandlerType::MONITOR) {
499         for (const auto &item : monitorHandlers_) {
500             deviceTags |= item.second.deviceTags_;
501         }
502     }
503     return deviceTags;
504 }
505 
OnDispatchEventProcessed(int32_t eventId,int64_t actionTime)506 void InputHandlerManager::OnDispatchEventProcessed(int32_t eventId, int64_t actionTime)
507 {
508     std::lock_guard<std::mutex> guard(mtxHandlers_);
509     CALL_DEBUG_ENTER;
510     MMIClientPtr client = MMIEventHdl.GetMMIClient();
511     CHKPV(client);
512     if (mouseEventIds_.find(eventId) != mouseEventIds_.end()) {
513         mouseEventIds_.erase(eventId);
514         return;
515     }
516 }
517 
OnDispatchEventProcessed(int32_t eventId,int64_t actionTime,bool isNeedConsume)518 void InputHandlerManager::OnDispatchEventProcessed(int32_t eventId, int64_t actionTime, bool isNeedConsume)
519 {
520     OnDispatchEventProcessed(eventId, actionTime);
521     ANRHDL->SetLastProcessedEventId(ANR_MONITOR, eventId, actionTime);
522 }
523 } // namespace MMI
524 } // namespace OHOS
525