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