• 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 "multimodal_input_connect_manager.h"
17 
18 
19 #include "iservice_registry.h"
20 
21 #include "input_binder_client_server.h"
22 #include "multimodal_input_connect_death_recipient.h"
23 
24 #undef MMI_LOG_DOMAIN
25 #define MMI_LOG_DOMAIN MMI_LOG_SERVER
26 #undef MMI_LOG_TAG
27 #define MMI_LOG_TAG "MultimodalInputConnectManager"
28 
29 namespace OHOS {
30 namespace MMI {
31 namespace {
32 std::shared_ptr<MultimodalInputConnectManager> g_instance = nullptr;
33 } // namespace
34 
GetInstance()35 std::shared_ptr<MultimodalInputConnectManager> MultimodalInputConnectManager::GetInstance()
36 {
37     static std::once_flag flag;
38     std::call_once(flag, [&]() { g_instance.reset(new (std::nothrow) MultimodalInputConnectManager()); });
39 
40     CHKPP(g_instance);
41     if (g_instance != nullptr) {
42         g_instance->ConnectMultimodalInputService();
43     }
44     return g_instance;
45 }
46 
AllocSocketPair(const int32_t moduleType)47 int32_t MultimodalInputConnectManager::AllocSocketPair(const int32_t moduleType)
48 {
49     CALL_DEBUG_ENTER;
50     std::lock_guard<std::mutex> guard(lock_);
51     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
52 
53     const std::string programName(GetProgramName());
54     int32_t result = multimodalInputConnectService_->AllocSocketFd(programName, moduleType, socketFd_, tokenType_);
55     if (result != RET_OK) {
56         MMI_HILOGE("AllocSocketFd has error:%{public}d", result);
57         return RET_ERR;
58     }
59 
60     MMI_HILOGD("AllocSocketPair success. socketFd_:%{public}d tokenType_:%{public}d", socketFd_, tokenType_);
61     return RET_OK;
62 }
63 
GetClientSocketFdOfAllocedSocketPair() const64 int32_t MultimodalInputConnectManager::GetClientSocketFdOfAllocedSocketPair() const
65 {
66     CALL_DEBUG_ENTER;
67     return socketFd_;
68 }
69 
GetDisplayBindInfo(DisplayBindInfos & infos)70 int32_t MultimodalInputConnectManager::GetDisplayBindInfo(DisplayBindInfos &infos)
71 {
72     std::lock_guard<std::mutex> guard(lock_);
73     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
74     return multimodalInputConnectService_->GetDisplayBindInfo(infos);
75 }
76 
GetAllMmiSubscribedEvents(std::map<std::tuple<int32_t,int32_t,std::string>,int32_t> & datas)77 int32_t MultimodalInputConnectManager::GetAllMmiSubscribedEvents(std::map<std::tuple<int32_t, int32_t, std::string>,
78     int32_t> &datas)
79 {
80     std::lock_guard<std::mutex> guard(lock_);
81     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
82     return multimodalInputConnectService_->GetAllMmiSubscribedEvents(datas);
83 }
84 
SetDisplayBind(int32_t deviceId,int32_t displayId,std::string & msg)85 int32_t MultimodalInputConnectManager::SetDisplayBind(int32_t deviceId, int32_t displayId, std::string &msg)
86 {
87     std::lock_guard<std::mutex> guard(lock_);
88     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
89     return multimodalInputConnectService_->SetDisplayBind(deviceId, displayId, msg);
90 }
91 
GetWindowPid(int32_t windowId)92 int32_t MultimodalInputConnectManager::GetWindowPid(int32_t windowId)
93 {
94     std::lock_guard<std::mutex> guard(lock_);
95     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
96     return multimodalInputConnectService_->GetWindowPid(windowId);
97 }
98 
AddInputEventFilter(sptr<IEventFilter> filter,int32_t filterId,int32_t priority,uint32_t deviceTags)99 int32_t MultimodalInputConnectManager::AddInputEventFilter(sptr<IEventFilter> filter, int32_t filterId,
100     int32_t priority, uint32_t deviceTags)
101 {
102     std::lock_guard<std::mutex> guard(lock_);
103     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
104     return multimodalInputConnectService_->AddInputEventFilter(filter, filterId, priority, deviceTags);
105 }
106 
NotifyNapOnline()107 int32_t MultimodalInputConnectManager::NotifyNapOnline()
108 {
109     std::lock_guard<std::mutex> guard(lock_);
110     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
111     return multimodalInputConnectService_->NotifyNapOnline();
112 }
113 
RemoveInputEventObserver()114 int32_t MultimodalInputConnectManager::RemoveInputEventObserver()
115 {
116     std::lock_guard<std::mutex> guard(lock_);
117     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
118     return multimodalInputConnectService_->RemoveInputEventObserver();
119 }
120 
RemoveInputEventFilter(int32_t filterId)121 int32_t MultimodalInputConnectManager::RemoveInputEventFilter(int32_t filterId)
122 {
123     std::lock_guard<std::mutex> guard(lock_);
124     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
125     return multimodalInputConnectService_->RemoveInputEventFilter(filterId);
126 }
127 
SetMouseScrollRows(int32_t rows)128 int32_t MultimodalInputConnectManager::SetMouseScrollRows(int32_t rows)
129 {
130     std::lock_guard<std::mutex> guard(lock_);
131     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
132     return multimodalInputConnectService_->SetMouseScrollRows(rows);
133 }
134 
SetCustomCursor(int32_t windowId,int32_t focusX,int32_t focusY,void * pixelMap)135 int32_t MultimodalInputConnectManager::SetCustomCursor(int32_t windowId, int32_t focusX, int32_t focusY,
136     void* pixelMap)
137 {
138     std::lock_guard<std::mutex> guard(lock_);
139     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
140     return multimodalInputConnectService_->SetCustomCursor(windowId, focusX, focusY, pixelMap);
141 }
142 
SetMouseIcon(int32_t windowId,void * pixelMap)143 int32_t MultimodalInputConnectManager::SetMouseIcon(int32_t windowId, void* pixelMap)
144 {
145     std::lock_guard<std::mutex> guard(lock_);
146     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
147     return multimodalInputConnectService_->SetMouseIcon(windowId, pixelMap);
148 }
149 
SetMouseHotSpot(int32_t pid,int32_t windowId,int32_t hotSpotX,int32_t hotSpotY)150 int32_t MultimodalInputConnectManager::SetMouseHotSpot(
151     int32_t pid, int32_t windowId, int32_t hotSpotX, int32_t hotSpotY)
152 {
153     std::lock_guard<std::mutex> guard(lock_);
154     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
155     return multimodalInputConnectService_->SetMouseHotSpot(pid, windowId, hotSpotX, hotSpotY);
156 }
157 
GetMouseScrollRows(int32_t & rows)158 int32_t MultimodalInputConnectManager::GetMouseScrollRows(int32_t &rows)
159 {
160     std::lock_guard<std::mutex> guard(lock_);
161     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
162     return multimodalInputConnectService_->GetMouseScrollRows(rows);
163 }
164 
SetPointerSize(int32_t size)165 int32_t MultimodalInputConnectManager::SetPointerSize(int32_t size)
166 {
167     std::lock_guard<std::mutex> guard(lock_);
168     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
169     return multimodalInputConnectService_->SetPointerSize(size);
170 }
171 
SetNapStatus(int32_t pid,int32_t uid,std::string bundleName,int32_t napStatus)172 int32_t MultimodalInputConnectManager::SetNapStatus(int32_t pid, int32_t uid, std::string bundleName, int32_t napStatus)
173 {
174     std::lock_guard<std::mutex> guard(lock_);
175     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
176     return multimodalInputConnectService_->SetNapStatus(pid, uid, bundleName, napStatus);
177 }
178 
GetPointerSize(int32_t & size)179 int32_t MultimodalInputConnectManager::GetPointerSize(int32_t &size)
180 {
181     std::lock_guard<std::mutex> guard(lock_);
182     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
183     return multimodalInputConnectService_->GetPointerSize(size);
184 }
185 
GetCursorSurfaceId(uint64_t & surfaceId)186 int32_t MultimodalInputConnectManager::GetCursorSurfaceId(uint64_t &surfaceId)
187 {
188     std::lock_guard<std::mutex> guard(lock_);
189     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
190     return multimodalInputConnectService_->GetCursorSurfaceId(surfaceId);
191 }
192 
SetMousePrimaryButton(int32_t primaryButton)193 int32_t MultimodalInputConnectManager::SetMousePrimaryButton(int32_t primaryButton)
194 {
195     std::lock_guard<std::mutex> guard(lock_);
196     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
197     return multimodalInputConnectService_->SetMousePrimaryButton(primaryButton);
198 }
199 
GetMousePrimaryButton(int32_t & primaryButton)200 int32_t MultimodalInputConnectManager::GetMousePrimaryButton(int32_t &primaryButton)
201 {
202     std::lock_guard<std::mutex> guard(lock_);
203     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
204     return multimodalInputConnectService_->GetMousePrimaryButton(primaryButton);
205 }
206 
SetHoverScrollState(bool state)207 int32_t MultimodalInputConnectManager::SetHoverScrollState(bool state)
208 {
209     std::lock_guard<std::mutex> guard(lock_);
210     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
211     return multimodalInputConnectService_->SetHoverScrollState(state);
212 }
213 
GetHoverScrollState(bool & state)214 int32_t MultimodalInputConnectManager::GetHoverScrollState(bool &state)
215 {
216     std::lock_guard<std::mutex> guard(lock_);
217     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
218     return multimodalInputConnectService_->GetHoverScrollState(state);
219 }
220 
SetPointerVisible(bool visible,int32_t priority)221 int32_t MultimodalInputConnectManager::SetPointerVisible(bool visible, int32_t priority)
222 {
223     std::lock_guard<std::mutex> guard(lock_);
224     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
225     return multimodalInputConnectService_->SetPointerVisible(visible, priority);
226 }
227 
IsPointerVisible(bool & visible)228 int32_t MultimodalInputConnectManager::IsPointerVisible(bool &visible)
229 {
230     std::lock_guard<std::mutex> guard(lock_);
231     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
232     return multimodalInputConnectService_->IsPointerVisible(visible);
233 }
234 
MarkProcessed(int32_t eventType,int32_t eventId)235 int32_t MultimodalInputConnectManager::MarkProcessed(int32_t eventType, int32_t eventId)
236 {
237     std::lock_guard<std::mutex> guard(lock_);
238     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
239     return multimodalInputConnectService_->MarkProcessed(eventType, eventId);
240 }
241 
SetPointerColor(int32_t color)242 int32_t MultimodalInputConnectManager::SetPointerColor(int32_t color)
243 {
244     std::lock_guard<std::mutex> guard(lock_);
245     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
246     return multimodalInputConnectService_->SetPointerColor(color);
247 }
248 
GetPointerColor(int32_t & color)249 int32_t MultimodalInputConnectManager::GetPointerColor(int32_t &color)
250 {
251     std::lock_guard<std::mutex> guard(lock_);
252     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
253     return multimodalInputConnectService_->GetPointerColor(color);
254 }
255 
SetPointerSpeed(int32_t speed)256 int32_t MultimodalInputConnectManager::SetPointerSpeed(int32_t speed)
257 {
258     std::lock_guard<std::mutex> guard(lock_);
259     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
260     return multimodalInputConnectService_->SetPointerSpeed(speed);
261 }
262 
GetPointerSpeed(int32_t & speed)263 int32_t MultimodalInputConnectManager::GetPointerSpeed(int32_t &speed)
264 {
265     std::lock_guard<std::mutex> guard(lock_);
266     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
267     return multimodalInputConnectService_->GetPointerSpeed(speed);
268 }
269 
SetPointerStyle(int32_t windowId,PointerStyle pointerStyle,bool isUiExtension)270 int32_t MultimodalInputConnectManager::SetPointerStyle(int32_t windowId, PointerStyle pointerStyle, bool isUiExtension)
271 {
272     std::lock_guard<std::mutex> guard(lock_);
273     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
274     return multimodalInputConnectService_->SetPointerStyle(windowId, pointerStyle, isUiExtension);
275 }
276 
ClearWindowPointerStyle(int32_t pid,int32_t windowId)277 int32_t MultimodalInputConnectManager::ClearWindowPointerStyle(int32_t pid, int32_t windowId)
278 {
279     std::lock_guard<std::mutex> guard(lock_);
280     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
281     return multimodalInputConnectService_->ClearWindowPointerStyle(pid, windowId);
282 }
283 
GetPointerStyle(int32_t windowId,PointerStyle & pointerStyle,bool isUiExtension)284 int32_t MultimodalInputConnectManager::GetPointerStyle(int32_t windowId, PointerStyle &pointerStyle, bool isUiExtension)
285 {
286     std::lock_guard<std::mutex> guard(lock_);
287     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
288     return multimodalInputConnectService_->GetPointerStyle(windowId, pointerStyle, isUiExtension);
289 }
290 
RegisterDevListener()291 int32_t MultimodalInputConnectManager::RegisterDevListener()
292 {
293     std::lock_guard<std::mutex> guard(lock_);
294     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
295     return multimodalInputConnectService_->RegisterDevListener();
296 }
297 
UnregisterDevListener()298 int32_t MultimodalInputConnectManager::UnregisterDevListener()
299 {
300     std::lock_guard<std::mutex> guard(lock_);
301     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
302     return multimodalInputConnectService_->UnregisterDevListener();
303 }
304 
SupportKeys(int32_t deviceId,std::vector<int32_t> & keys,std::vector<bool> & keystroke)305 int32_t MultimodalInputConnectManager::SupportKeys(int32_t deviceId, std::vector<int32_t> &keys,
306     std::vector<bool> &keystroke)
307 {
308     std::lock_guard<std::mutex> guard(lock_);
309     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
310     return multimodalInputConnectService_->SupportKeys(deviceId, keys, keystroke);
311 }
312 
GetDeviceIds(std::vector<int32_t> & ids)313 int32_t MultimodalInputConnectManager::GetDeviceIds(std::vector<int32_t> &ids)
314 {
315     std::lock_guard<std::mutex> guard(lock_);
316     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
317     return multimodalInputConnectService_->GetDeviceIds(ids);
318 }
319 
GetDevice(int32_t deviceId,std::shared_ptr<InputDevice> & inputDevice)320 int32_t MultimodalInputConnectManager::GetDevice(int32_t deviceId, std::shared_ptr<InputDevice> &inputDevice)
321 {
322     std::lock_guard<std::mutex> guard(lock_);
323     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
324     return multimodalInputConnectService_->GetDevice(deviceId, inputDevice);
325 }
326 
GetKeyboardType(int32_t deviceId,int32_t & keyboardType)327 int32_t MultimodalInputConnectManager::GetKeyboardType(int32_t deviceId, int32_t &keyboardType)
328 {
329     std::lock_guard<std::mutex> guard(lock_);
330     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
331     return multimodalInputConnectService_->GetKeyboardType(deviceId, keyboardType);
332 }
333 
SetKeyboardRepeatDelay(int32_t delay)334 int32_t MultimodalInputConnectManager::SetKeyboardRepeatDelay(int32_t delay)
335 {
336     std::lock_guard<std::mutex> guard(lock_);
337     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
338     return multimodalInputConnectService_->SetKeyboardRepeatDelay(delay);
339 }
340 
SetKeyboardRepeatRate(int32_t rate)341 int32_t MultimodalInputConnectManager::SetKeyboardRepeatRate(int32_t rate)
342 {
343     std::lock_guard<std::mutex> guard(lock_);
344     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
345     return multimodalInputConnectService_->SetKeyboardRepeatRate(rate);
346 }
347 
GetKeyboardRepeatDelay(int32_t & delay)348 int32_t MultimodalInputConnectManager::GetKeyboardRepeatDelay(int32_t &delay)
349 {
350     std::lock_guard<std::mutex> guard(lock_);
351     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
352     return multimodalInputConnectService_->GetKeyboardRepeatDelay(delay);
353 }
354 
GetKeyboardRepeatRate(int32_t & rate)355 int32_t MultimodalInputConnectManager::GetKeyboardRepeatRate(int32_t &rate)
356 {
357     std::lock_guard<std::mutex> guard(lock_);
358     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
359     return multimodalInputConnectService_->GetKeyboardRepeatRate(rate);
360 }
361 
AddInputHandler(InputHandlerType handlerType,HandleEventType eventType,int32_t priority,uint32_t deviceTags,std::vector<int32_t> actionsType)362 int32_t MultimodalInputConnectManager::AddInputHandler(InputHandlerType handlerType, HandleEventType eventType,
363     int32_t priority, uint32_t deviceTags, std::vector<int32_t> actionsType)
364 {
365     std::lock_guard<std::mutex> guard(lock_);
366     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
367     return multimodalInputConnectService_->AddInputHandler(handlerType, eventType, priority, deviceTags, actionsType);
368 }
369 
RemoveInputHandler(InputHandlerType handlerType,HandleEventType eventType,int32_t priority,uint32_t deviceTags,std::vector<int32_t> actionsType)370 int32_t MultimodalInputConnectManager::RemoveInputHandler(InputHandlerType handlerType, HandleEventType eventType,
371     int32_t priority, uint32_t deviceTags, std::vector<int32_t> actionsType)
372 {
373     std::lock_guard<std::mutex> guard(lock_);
374     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
375     return multimodalInputConnectService_->RemoveInputHandler(handlerType, eventType, priority, deviceTags,
376         actionsType);
377 }
378 
AddPreInputHandler(int32_t handlerId,HandleEventType eventType,std::vector<int32_t> keys)379 int32_t MultimodalInputConnectManager::AddPreInputHandler(int32_t handlerId, HandleEventType eventType,
380     std::vector<int32_t> keys)
381 {
382     std::lock_guard<std::mutex> guard(lock_);
383     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
384     return multimodalInputConnectService_->AddPreInputHandler(handlerId, eventType, keys);
385 }
386 
RemovePreInputHandler(int32_t handlerId)387 int32_t MultimodalInputConnectManager::RemovePreInputHandler(int32_t handlerId)
388 {
389     std::lock_guard<std::mutex> guard(lock_);
390     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
391     return multimodalInputConnectService_->RemovePreInputHandler(handlerId);
392 }
393 
AddGestureMonitor(InputHandlerType handlerType,HandleEventType eventType,TouchGestureType gestureType,int32_t fingers)394 int32_t MultimodalInputConnectManager::AddGestureMonitor(InputHandlerType handlerType,
395     HandleEventType eventType, TouchGestureType gestureType, int32_t fingers)
396 {
397     std::lock_guard<std::mutex> guard(lock_);
398     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
399     return multimodalInputConnectService_->AddGestureMonitor(handlerType, eventType, gestureType, fingers);
400 }
401 
RemoveGestureMonitor(InputHandlerType handlerType,HandleEventType eventType,TouchGestureType gestureType,int32_t fingers)402 int32_t MultimodalInputConnectManager::RemoveGestureMonitor(InputHandlerType handlerType,
403     HandleEventType eventType, TouchGestureType gestureType, int32_t fingers)
404 {
405     std::lock_guard<std::mutex> guard(lock_);
406     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
407     return multimodalInputConnectService_->RemoveGestureMonitor(handlerType, eventType, gestureType, fingers);
408 }
409 
MarkEventConsumed(int32_t eventId)410 int32_t MultimodalInputConnectManager::MarkEventConsumed(int32_t eventId)
411 {
412     std::lock_guard<std::mutex> guard(lock_);
413     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
414     return multimodalInputConnectService_->MarkEventConsumed(eventId);
415 }
416 
SubscribeKeyEvent(int32_t subscribeId,const std::shared_ptr<KeyOption> option)417 int32_t MultimodalInputConnectManager::SubscribeKeyEvent(int32_t subscribeId, const std::shared_ptr<KeyOption> option)
418 {
419     std::lock_guard<std::mutex> guard(lock_);
420     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
421     return multimodalInputConnectService_->SubscribeKeyEvent(subscribeId, option);
422 }
423 
UnsubscribeKeyEvent(int32_t subscribeId)424 int32_t MultimodalInputConnectManager::UnsubscribeKeyEvent(int32_t subscribeId)
425 {
426     std::lock_guard<std::mutex> guard(lock_);
427     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
428     return multimodalInputConnectService_->UnsubscribeKeyEvent(subscribeId);
429 }
430 
SubscribeHotkey(int32_t subscribeId,const std::shared_ptr<KeyOption> option)431 int32_t MultimodalInputConnectManager::SubscribeHotkey(int32_t subscribeId, const std::shared_ptr<KeyOption> option)
432 {
433     std::lock_guard<std::mutex> guard(lock_);
434     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
435     return multimodalInputConnectService_->SubscribeHotkey(subscribeId, option);
436 }
437 
UnsubscribeHotkey(int32_t subscribeId)438 int32_t MultimodalInputConnectManager::UnsubscribeHotkey(int32_t subscribeId)
439 {
440     std::lock_guard<std::mutex> guard(lock_);
441     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
442     return multimodalInputConnectService_->UnsubscribeHotkey(subscribeId);
443 }
444 
SubscribeKeyMonitor(const KeyMonitorOption & keyOption)445 int32_t MultimodalInputConnectManager::SubscribeKeyMonitor(const KeyMonitorOption &keyOption)
446 {
447     std::lock_guard<std::mutex> guard(lock_);
448     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
449     return multimodalInputConnectService_->SubscribeKeyMonitor(keyOption);
450 }
451 
UnsubscribeKeyMonitor(const KeyMonitorOption & keyOption)452 int32_t MultimodalInputConnectManager::UnsubscribeKeyMonitor(const KeyMonitorOption &keyOption)
453 {
454     std::lock_guard<std::mutex> guard(lock_);
455     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
456     return multimodalInputConnectService_->UnsubscribeKeyMonitor(keyOption);
457 }
458 
SubscribeSwitchEvent(int32_t subscribeId,int32_t switchType)459 int32_t MultimodalInputConnectManager::SubscribeSwitchEvent(int32_t subscribeId, int32_t switchType)
460 {
461     std::lock_guard<std::mutex> guard(lock_);
462     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
463     return multimodalInputConnectService_->SubscribeSwitchEvent(subscribeId, switchType);
464 }
465 
UnsubscribeSwitchEvent(int32_t subscribeId)466 int32_t MultimodalInputConnectManager::UnsubscribeSwitchEvent(int32_t subscribeId)
467 {
468     std::lock_guard<std::mutex> guard(lock_);
469     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
470     return multimodalInputConnectService_->UnsubscribeSwitchEvent(subscribeId);
471 }
472 
SubscribeTabletProximity(int32_t subscribeId)473 int32_t MultimodalInputConnectManager::SubscribeTabletProximity(int32_t subscribeId)
474 {
475     std::lock_guard<std::mutex> guard(lock_);
476     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
477     return multimodalInputConnectService_->SubscribeTabletProximity(subscribeId);
478 }
479 
UnsubscribetabletProximity(int32_t subscribeId)480 int32_t MultimodalInputConnectManager::UnsubscribetabletProximity(int32_t subscribeId)
481 {
482     std::lock_guard<std::mutex> guard(lock_);
483     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
484     return multimodalInputConnectService_->UnsubscribetabletProximity(subscribeId);
485 }
486 
SubscribeLongPressEvent(int32_t subscribeId,const LongPressRequest & longPressRequest)487 int32_t MultimodalInputConnectManager::SubscribeLongPressEvent(int32_t subscribeId,
488     const LongPressRequest &longPressRequest)
489 {
490     std::lock_guard<std::mutex> guard(lock_);
491     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
492     return multimodalInputConnectService_->SubscribeLongPressEvent(subscribeId, longPressRequest);
493 }
494 
UnsubscribeLongPressEvent(int32_t subscribeId)495 int32_t MultimodalInputConnectManager::UnsubscribeLongPressEvent(int32_t subscribeId)
496 {
497     std::lock_guard<std::mutex> guard(lock_);
498     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
499     return multimodalInputConnectService_->UnsubscribeLongPressEvent(subscribeId);
500 }
501 
MoveMouseEvent(int32_t offsetX,int32_t offsetY)502 int32_t MultimodalInputConnectManager::MoveMouseEvent(int32_t offsetX, int32_t offsetY)
503 {
504     std::lock_guard<std::mutex> guard(lock_);
505     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
506     return multimodalInputConnectService_->MoveMouseEvent(offsetX, offsetY);
507 }
508 
InjectKeyEvent(const std::shared_ptr<KeyEvent> event,bool isNativeInject)509 int32_t MultimodalInputConnectManager::InjectKeyEvent(const std::shared_ptr<KeyEvent> event, bool isNativeInject)
510 {
511     std::lock_guard<std::mutex> guard(lock_);
512     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
513     return multimodalInputConnectService_->InjectKeyEvent(event, isNativeInject);
514 }
515 
InjectPointerEvent(const std::shared_ptr<PointerEvent> pointerEvent,bool isNativeInject)516 int32_t MultimodalInputConnectManager::InjectPointerEvent(const std::shared_ptr<PointerEvent> pointerEvent,
517     bool isNativeInject)
518 {
519     std::lock_guard<std::mutex> guard(lock_);
520     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
521     return multimodalInputConnectService_->InjectPointerEvent(pointerEvent, isNativeInject);
522 }
523 
InjectTouchPadEvent(std::shared_ptr<PointerEvent> pointerEvent,const TouchpadCDG & touchpadCDG,bool isNativeInject)524 int32_t MultimodalInputConnectManager::InjectTouchPadEvent(std::shared_ptr<PointerEvent> pointerEvent,
525     const TouchpadCDG &touchpadCDG, bool isNativeInject)
526 {
527     std::lock_guard<std::mutex> guard(lock_);
528     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
529     return multimodalInputConnectService_->InjectTouchPadEvent(pointerEvent, touchpadCDG, isNativeInject);
530 }
531 
SetAnrObserver()532 int32_t MultimodalInputConnectManager::SetAnrObserver()
533 {
534     std::lock_guard<std::mutex> guard(lock_);
535     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
536     return multimodalInputConnectService_->SetAnrObserver();
537 }
538 
GetFunctionKeyState(int32_t funcKey,bool & state)539 int32_t MultimodalInputConnectManager::GetFunctionKeyState(int32_t funcKey, bool &state)
540 {
541     std::lock_guard<std::mutex> guard(lock_);
542     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
543     return multimodalInputConnectService_->GetFunctionKeyState(funcKey, state);
544 }
545 
SetFunctionKeyState(int32_t funcKey,bool enable)546 int32_t MultimodalInputConnectManager::SetFunctionKeyState(int32_t funcKey, bool enable)
547 {
548     std::lock_guard<std::mutex> guard(lock_);
549     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
550     return multimodalInputConnectService_->SetFunctionKeyState(funcKey, enable);
551 }
552 
SetPointerLocation(int32_t x,int32_t y,int32_t displayId)553 int32_t MultimodalInputConnectManager::SetPointerLocation(int32_t x, int32_t y, int32_t displayId)
554 {
555     std::lock_guard<std::mutex> guard(lock_);
556     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
557     return multimodalInputConnectService_->SetPointerLocation(x, y, displayId);
558 }
559 
ConnectMultimodalInputService()560 bool MultimodalInputConnectManager::ConnectMultimodalInputService() __attribute__((no_sanitize("cfi")))
561 {
562     CALL_DEBUG_ENTER;
563     std::lock_guard<std::mutex> guard(lock_);
564     if (multimodalInputConnectService_ != nullptr) {
565         return true;
566     }
567     auto sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
568     CHKPF(sm);
569     auto sa = sm->CheckSystemAbility(IMultimodalInputConnect::MULTIMODAL_INPUT_CONNECT_SERVICE_ID);
570     CHKPF(sa);
571 
572     std::weak_ptr<MultimodalInputConnectManager> weakPtr = shared_from_this();
573     auto deathCallback = [weakPtr](const wptr<IRemoteObject> &object) {
574         auto sharedPtr = weakPtr.lock();
575         if (sharedPtr != nullptr) {
576             sharedPtr->OnDeath(object);
577         }
578     };
579 
580     multimodalInputConnectRecipient_ = new (std::nothrow) MultimodalInputConnectDeathRecipient(deathCallback);
581     CHKPF(multimodalInputConnectRecipient_);
582     if (!sa->AddDeathRecipient(multimodalInputConnectRecipient_)) {
583         MMI_HILOGE("Failed to add death recipient");
584         return false;
585     }
586     multimodalInputConnectService_ = iface_cast<IMultimodalInputConnect>(sa);
587     CHKPF(multimodalInputConnectService_);
588     sptr<IRemoteObject> remoteObject = INPUT_BINDER_CLIENT_SERVICE->GetClientSrv();
589     CHKPF(remoteObject);
590     multimodalInputConnectService_->TransferBinderClientSrv(remoteObject);
591     MMI_HILOGI("Get multimodalinput service successful");
592     return true;
593 }
594 
OnDeath(const wptr<IRemoteObject> & remoteObj)595 void MultimodalInputConnectManager::OnDeath(const wptr<IRemoteObject> &remoteObj)
596 {
597     CALL_DEBUG_ENTER;
598     Clean(remoteObj);
599     NotifyServiceDeath();
600     NotifyDeath();
601 }
602 
Clean(const wptr<IRemoteObject> & remoteObj)603 void MultimodalInputConnectManager::Clean(const wptr<IRemoteObject> &remoteObj)
604 {
605     std::lock_guard<std::mutex> guard(lock_);
606     if (multimodalInputConnectService_ != nullptr) {
607         auto serviceObj = multimodalInputConnectService_->AsObject();
608         if (serviceObj != nullptr) {
609             if (serviceObj != remoteObj.promote()) {
610                 return;
611             }
612             if (multimodalInputConnectRecipient_ != nullptr) {
613                 MMI_HILOGI("Remove death recipient on service death");
614                 serviceObj->RemoveDeathRecipient(multimodalInputConnectRecipient_);
615             }
616         }
617         MMI_HILOGI("Reset proxy on service death");
618         multimodalInputConnectRecipient_ = nullptr;
619         multimodalInputConnectService_ = nullptr;
620     }
621 }
622 
NotifyServiceDeath()623 void MultimodalInputConnectManager::NotifyServiceDeath()
624 {
625     std::lock_guard<std::mutex> guard(lock_);
626     for (const auto &watcher : watchers_) {
627         watcher->OnServiceDied();
628     }
629 }
630 
NotifyDeath()631 void MultimodalInputConnectManager::NotifyDeath()
632 {
633     CALL_DEBUG_ENTER;
634     int32_t retryCount = 50;
635     do {
636         std::this_thread::sleep_for(std::chrono::seconds(1));
637         if (ConnectMultimodalInputService()) {
638             MMI_HILOGD("Connect multimodalinput service successful");
639             return;
640         }
641     } while (--retryCount > 0);
642 }
643 
SetMouseCaptureMode(int32_t windowId,bool isCaptureMode)644 int32_t MultimodalInputConnectManager::SetMouseCaptureMode(int32_t windowId, bool isCaptureMode)
645 {
646     std::lock_guard<std::mutex> guard(lock_);
647     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
648     return multimodalInputConnectService_->SetMouseCaptureMode(windowId, isCaptureMode);
649 }
650 
AppendExtraData(const ExtraData & extraData)651 int32_t MultimodalInputConnectManager::AppendExtraData(const ExtraData &extraData)
652 {
653     std::lock_guard<std::mutex> guard(lock_);
654     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
655     return multimodalInputConnectService_->AppendExtraData(extraData);
656 }
657 
EnableCombineKey(bool enable)658 int32_t MultimodalInputConnectManager::EnableCombineKey(bool enable)
659 {
660     std::lock_guard<std::mutex> guard(lock_);
661     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
662     return multimodalInputConnectService_->EnableCombineKey(enable);
663 }
664 
EnableInputDevice(bool enable)665 int32_t MultimodalInputConnectManager::EnableInputDevice(bool enable)
666 {
667     std::lock_guard<std::mutex> guard(lock_);
668     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
669     return multimodalInputConnectService_->EnableInputDevice(enable);
670 }
671 
SetKeyDownDuration(const std::string & businessId,int32_t delay)672 int32_t MultimodalInputConnectManager::SetKeyDownDuration(const std::string &businessId, int32_t delay)
673 {
674     std::lock_guard<std::mutex> guard(lock_);
675     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
676     return multimodalInputConnectService_->SetKeyDownDuration(businessId, delay);
677 }
678 
SetTouchpadScrollSwitch(bool switchFlag)679 int32_t MultimodalInputConnectManager::SetTouchpadScrollSwitch(bool switchFlag)
680 {
681     std::lock_guard<std::mutex> guard(lock_);
682     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
683     return multimodalInputConnectService_->SetTouchpadScrollSwitch(switchFlag);
684 }
685 
GetTouchpadScrollSwitch(bool & switchFlag)686 int32_t MultimodalInputConnectManager::GetTouchpadScrollSwitch(bool &switchFlag)
687 {
688     std::lock_guard<std::mutex> guard(lock_);
689     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
690     return multimodalInputConnectService_->GetTouchpadScrollSwitch(switchFlag);
691 }
692 
SetTouchpadScrollDirection(bool state)693 int32_t MultimodalInputConnectManager::SetTouchpadScrollDirection(bool state)
694 {
695     std::lock_guard<std::mutex> guard(lock_);
696     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
697     return multimodalInputConnectService_->SetTouchpadScrollDirection(state);
698 }
699 
GetTouchpadScrollDirection(bool & state)700 int32_t MultimodalInputConnectManager::GetTouchpadScrollDirection(bool &state)
701 {
702     std::lock_guard<std::mutex> guard(lock_);
703     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
704     return multimodalInputConnectService_->GetTouchpadScrollDirection(state);
705 }
706 
SetTouchpadTapSwitch(bool switchFlag)707 int32_t MultimodalInputConnectManager::SetTouchpadTapSwitch(bool switchFlag)
708 {
709     std::lock_guard<std::mutex> guard(lock_);
710     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
711     return multimodalInputConnectService_->SetTouchpadTapSwitch(switchFlag);
712 }
713 
GetTouchpadTapSwitch(bool & switchFlag)714 int32_t MultimodalInputConnectManager::GetTouchpadTapSwitch(bool &switchFlag)
715 {
716     std::lock_guard<std::mutex> guard(lock_);
717     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
718     return multimodalInputConnectService_->GetTouchpadTapSwitch(switchFlag);
719 }
720 
SetTouchpadPointerSpeed(int32_t speed)721 int32_t MultimodalInputConnectManager::SetTouchpadPointerSpeed(int32_t speed)
722 {
723     std::lock_guard<std::mutex> guard(lock_);
724     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
725     return multimodalInputConnectService_->SetTouchpadPointerSpeed(speed);
726 }
727 
GetTouchpadPointerSpeed(int32_t & speed)728 int32_t MultimodalInputConnectManager::GetTouchpadPointerSpeed(int32_t &speed)
729 {
730     std::lock_guard<std::mutex> guard(lock_);
731     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
732     return multimodalInputConnectService_->GetTouchpadPointerSpeed(speed);
733 }
734 
GetTouchpadCDG(TouchpadCDG & touchpadCDG)735 int32_t MultimodalInputConnectManager::GetTouchpadCDG(TouchpadCDG &touchpadCDG)
736 {
737     std::lock_guard<std::mutex> guard(lock_);
738     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
739     return multimodalInputConnectService_->GetTouchpadCDG(touchpadCDG);
740 }
741 
SetTouchpadPinchSwitch(bool switchFlag)742 int32_t MultimodalInputConnectManager::SetTouchpadPinchSwitch(bool switchFlag)
743 {
744     std::lock_guard<std::mutex> guard(lock_);
745     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
746     return multimodalInputConnectService_->SetTouchpadPinchSwitch(switchFlag);
747 }
748 
GetTouchpadPinchSwitch(bool & switchFlag)749 int32_t MultimodalInputConnectManager::GetTouchpadPinchSwitch(bool &switchFlag)
750 {
751     std::lock_guard<std::mutex> guard(lock_);
752     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
753     return multimodalInputConnectService_->GetTouchpadPinchSwitch(switchFlag);
754 }
755 
SetTouchpadSwipeSwitch(bool switchFlag)756 int32_t MultimodalInputConnectManager::SetTouchpadSwipeSwitch(bool switchFlag)
757 {
758     std::lock_guard<std::mutex> guard(lock_);
759     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
760     return multimodalInputConnectService_->SetTouchpadSwipeSwitch(switchFlag);
761 }
762 
GetTouchpadSwipeSwitch(bool & switchFlag)763 int32_t MultimodalInputConnectManager::GetTouchpadSwipeSwitch(bool &switchFlag)
764 {
765     std::lock_guard<std::mutex> guard(lock_);
766     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
767     return multimodalInputConnectService_->GetTouchpadSwipeSwitch(switchFlag);
768 }
769 
SetTouchpadRightClickType(int32_t type)770 int32_t MultimodalInputConnectManager::SetTouchpadRightClickType(int32_t type)
771 {
772     std::lock_guard<std::mutex> guard(lock_);
773     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
774     return multimodalInputConnectService_->SetTouchpadRightClickType(type);
775 }
776 
GetTouchpadRightClickType(int32_t & type)777 int32_t MultimodalInputConnectManager::GetTouchpadRightClickType(int32_t &type)
778 {
779     std::lock_guard<std::mutex> guard(lock_);
780     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
781     return multimodalInputConnectService_->GetTouchpadRightClickType(type);
782 }
783 
SetTouchpadRotateSwitch(bool rotateSwitch)784 int32_t MultimodalInputConnectManager::SetTouchpadRotateSwitch(bool rotateSwitch)
785 {
786     std::lock_guard<std::mutex> guard(lock_);
787     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
788     return multimodalInputConnectService_->SetTouchpadRotateSwitch(rotateSwitch);
789 }
790 
GetTouchpadRotateSwitch(bool & rotateSwitch)791 int32_t MultimodalInputConnectManager::GetTouchpadRotateSwitch(bool &rotateSwitch)
792 {
793     std::lock_guard<std::mutex> guard(lock_);
794     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
795     return multimodalInputConnectService_->GetTouchpadRotateSwitch(rotateSwitch);
796 }
797 
SetTouchpadDoubleTapAndDragState(bool switchFlag)798 int32_t MultimodalInputConnectManager::SetTouchpadDoubleTapAndDragState(bool switchFlag)
799 {
800     std::lock_guard<std::mutex> guard(lock_);
801     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
802     return multimodalInputConnectService_->SetTouchpadDoubleTapAndDragState(switchFlag);
803 }
804 
GetTouchpadDoubleTapAndDragState(bool & switchFlag)805 int32_t MultimodalInputConnectManager::GetTouchpadDoubleTapAndDragState(bool &switchFlag)
806 {
807     std::lock_guard<std::mutex> guard(lock_);
808     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
809     return multimodalInputConnectService_->GetTouchpadDoubleTapAndDragState(switchFlag);
810 }
811 
SetShieldStatus(int32_t shieldMode,bool isShield)812 int32_t MultimodalInputConnectManager::SetShieldStatus(int32_t shieldMode, bool isShield)
813 {
814     std::lock_guard<std::mutex> guard(lock_);
815     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
816     return multimodalInputConnectService_->SetShieldStatus(shieldMode, isShield);
817 }
818 
GetShieldStatus(int32_t shieldMode,bool & isShield)819 int32_t MultimodalInputConnectManager::GetShieldStatus(int32_t shieldMode, bool &isShield)
820 {
821     std::lock_guard<std::mutex> guard(lock_);
822     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
823     return multimodalInputConnectService_->GetShieldStatus(shieldMode, isShield);
824 }
825 
GetKeyState(std::vector<int32_t> & pressedKeys,std::map<int32_t,int32_t> & specialKeysState)826 int32_t MultimodalInputConnectManager::GetKeyState(std::vector<int32_t> &pressedKeys,
827     std::map<int32_t, int32_t> &specialKeysState)
828 {
829     std::lock_guard<std::mutex> guard(lock_);
830     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
831     return multimodalInputConnectService_->GetKeyState(pressedKeys, specialKeysState);
832 }
833 
AddServiceWatcher(std::shared_ptr<IInputServiceWatcher> watcher)834 void MultimodalInputConnectManager::AddServiceWatcher(std::shared_ptr<IInputServiceWatcher> watcher)
835 {
836     CHKPV(watcher);
837     std::lock_guard<std::mutex> guard(lock_);
838     watchers_.insert(watcher);
839 }
840 
RemoveServiceWatcher(std::shared_ptr<IInputServiceWatcher> watcher)841 void MultimodalInputConnectManager::RemoveServiceWatcher(std::shared_ptr<IInputServiceWatcher> watcher)
842 {
843     std::lock_guard<std::mutex> guard(lock_);
844     watchers_.erase(watcher);
845 }
846 
Authorize(bool isAuthorize)847 int32_t MultimodalInputConnectManager::Authorize(bool isAuthorize)
848 {
849     std::lock_guard<std::mutex> guard(lock_);
850     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
851     return multimodalInputConnectService_->Authorize(isAuthorize);
852 }
853 
CancelInjection()854 int32_t MultimodalInputConnectManager::CancelInjection()
855 {
856     std::lock_guard<std::mutex> guard(lock_);
857     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
858     return multimodalInputConnectService_->CancelInjection();
859 }
860 
HasIrEmitter(bool & hasIrEmitter)861 int32_t MultimodalInputConnectManager::HasIrEmitter(bool &hasIrEmitter)
862 {
863     std::lock_guard<std::mutex> guard(lock_);
864     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
865     return multimodalInputConnectService_->HasIrEmitter(hasIrEmitter);
866 }
867 
GetInfraredFrequencies(std::vector<InfraredFrequency> & requencys)868 int32_t MultimodalInputConnectManager::GetInfraredFrequencies(std::vector<InfraredFrequency>& requencys)
869 {
870     std::lock_guard<std::mutex> guard(lock_);
871     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
872     return multimodalInputConnectService_->GetInfraredFrequencies(requencys);
873 }
874 
TransmitInfrared(int64_t number,std::vector<int64_t> & pattern)875 int32_t MultimodalInputConnectManager::TransmitInfrared(int64_t number, std::vector<int64_t>& pattern)
876 {
877     std::lock_guard<std::mutex> guard(lock_);
878     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
879     return multimodalInputConnectService_->TransmitInfrared(number, pattern);
880 }
881 
882 #ifdef OHOS_BUILD_ENABLE_VKEYBOARD
CreateVKeyboardDevice(sptr<IRemoteObject> & vkeyboardDevice)883 int32_t MultimodalInputConnectManager::CreateVKeyboardDevice(sptr<IRemoteObject> &vkeyboardDevice)
884 {
885     std::lock_guard<std::mutex> guard(lock_);
886     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
887     return multimodalInputConnectService_->CreateVKeyboardDevice(vkeyboardDevice);
888 }
889 #endif // OHOS_BUILD_ENABLE_VKEYBOARD
890 
SetPixelMapData(int32_t infoId,void * pixelMap)891 int32_t MultimodalInputConnectManager::SetPixelMapData(int32_t infoId, void* pixelMap)
892 {
893     std::lock_guard<std::mutex> guard(lock_);
894     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
895     return multimodalInputConnectService_->SetPixelMapData(infoId, pixelMap);
896 }
897 
SetCurrentUser(int32_t userId)898 int32_t MultimodalInputConnectManager::SetCurrentUser(int32_t userId)
899 {
900     std::lock_guard<std::mutex> guard(lock_);
901     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
902     return multimodalInputConnectService_->SetCurrentUser(userId);
903 }
904 
SetTouchpadThreeFingersTapSwitch(bool switchFlag)905 int32_t MultimodalInputConnectManager::SetTouchpadThreeFingersTapSwitch(bool switchFlag)
906 {
907     std::lock_guard<std::mutex> guard(lock_);
908     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
909     return multimodalInputConnectService_->SetTouchpadThreeFingersTapSwitch(switchFlag);
910 }
911 
GetTouchpadThreeFingersTapSwitch(bool & switchFlag)912 int32_t MultimodalInputConnectManager::GetTouchpadThreeFingersTapSwitch(bool &switchFlag)
913 {
914     std::lock_guard<std::mutex> guard(lock_);
915     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
916     return multimodalInputConnectService_->GetTouchpadThreeFingersTapSwitch(switchFlag);
917 }
918 
SetMoveEventFilters(bool flag)919 int32_t MultimodalInputConnectManager::SetMoveEventFilters(bool flag)
920 {
921     std::lock_guard<std::mutex> guard(lock_);
922     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
923     return multimodalInputConnectService_->SetMoveEventFilters(flag);
924 }
925 
EnableHardwareCursorStats(bool enable)926 int32_t MultimodalInputConnectManager::EnableHardwareCursorStats(bool enable)
927 {
928     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
929     return multimodalInputConnectService_->EnableHardwareCursorStats(enable);
930 }
931 
GetHardwareCursorStats(uint32_t & frameCount,uint32_t & vsyncCount)932 int32_t MultimodalInputConnectManager::GetHardwareCursorStats(uint32_t &frameCount, uint32_t &vsyncCount)
933 {
934     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
935     return multimodalInputConnectService_->GetHardwareCursorStats(frameCount, vsyncCount);
936 }
937 
938 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
GetPointerSnapshot(void * pixelMapPtr)939 int32_t MultimodalInputConnectManager::GetPointerSnapshot(void *pixelMapPtr)
940 {
941     std::lock_guard<std::mutex> guard(lock_);
942     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
943     return multimodalInputConnectService_->GetPointerSnapshot(pixelMapPtr);
944 }
945 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR
946 
SetTouchpadScrollRows(int32_t rows)947 int32_t MultimodalInputConnectManager::SetTouchpadScrollRows(int32_t rows)
948 {
949     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
950     return multimodalInputConnectService_->SetTouchpadScrollRows(rows);
951 }
952 
GetTouchpadScrollRows(int32_t & rows)953 int32_t MultimodalInputConnectManager::GetTouchpadScrollRows(int32_t &rows)
954 {
955     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
956     return multimodalInputConnectService_->GetTouchpadScrollRows(rows);
957 }
958 
AddVirtualInputDevice(std::shared_ptr<InputDevice> device,int32_t & deviceId)959 int32_t MultimodalInputConnectManager::AddVirtualInputDevice(std::shared_ptr<InputDevice> device, int32_t &deviceId)
960 {
961     std::lock_guard<std::mutex> guard(lock_);
962     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
963     return multimodalInputConnectService_->AddVirtualInputDevice(device, deviceId);
964 }
965 
RemoveVirtualInputDevice(int32_t deviceId)966 int32_t MultimodalInputConnectManager::RemoveVirtualInputDevice(int32_t deviceId)
967 {
968     std::lock_guard<std::mutex> guard(lock_);
969     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
970     return multimodalInputConnectService_->RemoveVirtualInputDevice(deviceId);
971 }
972 
973 #ifdef OHOS_BUILD_ENABLE_ANCO
AncoAddChannel(sptr<IAncoChannel> channel)974 int32_t MultimodalInputConnectManager::AncoAddChannel(sptr<IAncoChannel> channel)
975 {
976     std::lock_guard<std::mutex> guard(lock_);
977     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
978     return multimodalInputConnectService_->AncoAddChannel(channel);
979 }
980 
AncoRemoveChannel(sptr<IAncoChannel> channel)981 int32_t MultimodalInputConnectManager::AncoRemoveChannel(sptr<IAncoChannel> channel)
982 {
983     std::lock_guard<std::mutex> guard(lock_);
984     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
985     return multimodalInputConnectService_->AncoRemoveChannel(channel);
986 }
987 
CheckKnuckleEvent(float pointX,float pointY,bool & touchType)988 int32_t MultimodalInputConnectManager::CheckKnuckleEvent(float pointX, float pointY, bool &touchType)
989 {
990     CALL_INFO_TRACE;
991     std::lock_guard<std::mutex> guard(lock_);
992     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
993     return multimodalInputConnectService_->CheckKnuckleEvent(pointX, pointY, touchType);
994 }
995 #endif // OHOS_BUILD_ENABLE_ANCO
996 
SkipPointerLayer(bool isSkip)997 int32_t MultimodalInputConnectManager::SkipPointerLayer(bool isSkip)
998 {
999     std::lock_guard<std::mutex> guard(lock_);
1000     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1001     return multimodalInputConnectService_->SkipPointerLayer(isSkip);
1002 }
1003 
SetClientInfo(int32_t pid,uint64_t readThreadId)1004 int32_t MultimodalInputConnectManager::SetClientInfo(int32_t pid, uint64_t readThreadId)
1005 {
1006     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1007     return multimodalInputConnectService_->SetClientInfo(pid, readThreadId);
1008 }
1009 
GetIntervalSinceLastInput(int64_t & timeInterval)1010 int32_t MultimodalInputConnectManager::GetIntervalSinceLastInput(int64_t &timeInterval)
1011 {
1012     std::lock_guard<std::mutex> guard(lock_);
1013     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1014     return multimodalInputConnectService_->GetIntervalSinceLastInput(timeInterval);
1015 }
1016 
GetAllSystemHotkeys(std::vector<std::unique_ptr<KeyOption>> & keyOptions)1017 int32_t MultimodalInputConnectManager::GetAllSystemHotkeys(std::vector<std::unique_ptr<KeyOption>> &keyOptions)
1018 {
1019     CALL_INFO_TRACE;
1020     std::lock_guard<std::mutex> guard(lock_);
1021     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1022     return multimodalInputConnectService_->GetAllSystemHotkeys(keyOptions);
1023 }
1024 
SetInputDeviceEnabled(int32_t deviceId,bool enable,int32_t index)1025 int32_t MultimodalInputConnectManager::SetInputDeviceEnabled(int32_t deviceId, bool enable, int32_t index)
1026 {
1027     std::lock_guard<std::mutex> guard(lock_);
1028     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1029     return multimodalInputConnectService_->SetInputDeviceEnabled(deviceId, enable, index);
1030 }
1031 
ShiftAppPointerEvent(const ShiftWindowParam & param,bool autoGenDown)1032 int32_t MultimodalInputConnectManager::ShiftAppPointerEvent(const ShiftWindowParam &param, bool autoGenDown)
1033 {
1034     CALL_INFO_TRACE;
1035     std::lock_guard<std::mutex> guard(lock_);
1036     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1037     return multimodalInputConnectService_->ShiftAppPointerEvent(param, autoGenDown);
1038 }
1039 
SetCustomCursor(int32_t windowId,CustomCursor cursor,CursorOptions options)1040 int32_t MultimodalInputConnectManager::SetCustomCursor(int32_t windowId, CustomCursor cursor, CursorOptions options)
1041 {
1042     std::lock_guard<std::mutex> guard(lock_);
1043     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1044     return multimodalInputConnectService_->SetCustomCursor(windowId, cursor, options);
1045 }
1046 
SetMultiWindowScreenId(uint64_t screenId,uint64_t displayNodeScreenId)1047 int32_t MultimodalInputConnectManager::SetMultiWindowScreenId(uint64_t screenId, uint64_t displayNodeScreenId)
1048 {
1049     std::lock_guard<std::mutex> guard(lock_);
1050     CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID);
1051     return multimodalInputConnectService_->SetMultiWindowScreenId(screenId, displayNodeScreenId);
1052 }
1053 } // namespace MMI
1054 } // namespace OHOS
1055