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 ¶m, 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