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