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