1 /*
2 * Copyright (c) 2021-2022 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_stub.h"
17
18 #include <sys/types.h>
19 #include <sys/socket.h>
20 #include <unistd.h>
21
22 #include "ipc_skeleton.h"
23 #include "string_ex.h"
24 #include "tokenid_kit.h"
25
26
27 #include "bytrace_adapter.h"
28 #include "error_multimodal.h"
29 #include "multimodal_input_connect_def_parcel.h"
30 #include "multimodalinput_ipc_interface_code.h"
31 #include "nap_process.h"
32 #include "permission_helper.h"
33 #include "pixel_map.h"
34 #include "time_cost_chk.h"
35 #ifdef PLAYER_FRAMEWORK_EXISTS
36 #include "screen_capture_monitor.h"
37 #endif
38
39 #undef MMI_LOG_DOMAIN
40 #define MMI_LOG_DOMAIN MMI_LOG_SERVER
41 #undef MMI_LOG_TAG
42 #define MMI_LOG_TAG "MultimodalInputConnectStub"
43
44 namespace OHOS {
45 namespace MMI {
46 namespace {
47 constexpr int32_t MAX_AXIS_INFO { 64 };
48 constexpr int32_t UID_TRANSFORM_DIVISOR { 200000 };
49 const std::string SCENEBOARD_NAME { "com.ohos.sceneboard" };
50
g_parseInputDevice(MessageParcel & data,std::shared_ptr<InputDevice> & inputDevice)51 int32_t g_parseInputDevice(MessageParcel &data, std::shared_ptr<InputDevice> &inputDevice)
52 {
53 CHKPR(inputDevice, RET_ERR);
54 int32_t value = 0;
55 READINT32(data, value, IPC_PROXY_DEAD_OBJECT_ERR);
56 inputDevice->SetId(value);
57 READINT32(data, value, IPC_PROXY_DEAD_OBJECT_ERR);
58 inputDevice->SetType(value);
59 std::string element;
60 READSTRING(data, element, IPC_PROXY_DEAD_OBJECT_ERR);
61 inputDevice->SetName(element);
62 READINT32(data, value, IPC_PROXY_DEAD_OBJECT_ERR);
63 inputDevice->SetBus(value);
64 READINT32(data, value, IPC_PROXY_DEAD_OBJECT_ERR);
65 inputDevice->SetVersion(value);
66 READINT32(data, value, IPC_PROXY_DEAD_OBJECT_ERR);
67 inputDevice->SetProduct(value);
68 READINT32(data, value, IPC_PROXY_DEAD_OBJECT_ERR);
69 inputDevice->SetVendor(value);
70 READSTRING(data, element, IPC_PROXY_DEAD_OBJECT_ERR);
71 inputDevice->SetPhys(element);
72 READSTRING(data, element, IPC_PROXY_DEAD_OBJECT_ERR);
73 inputDevice->SetUniq(element);
74 uint64_t caps;
75 READUINT64(data, caps, IPC_PROXY_DEAD_OBJECT_ERR);
76 inputDevice->SetCapabilities(static_cast<unsigned long>(caps));
77 uint32_t size = 0;
78 READUINT32(data, size, IPC_PROXY_DEAD_OBJECT_ERR);
79 if (size > MAX_AXIS_INFO) {
80 return RET_ERR;
81 }
82 InputDevice::AxisInfo axis;
83 for (uint32_t i = 0; i < size; ++i) {
84 int32_t val = 0;
85 READINT32(data, val, IPC_PROXY_DEAD_OBJECT_ERR);
86 axis.SetMinimum(val);
87 READINT32(data, val, IPC_PROXY_DEAD_OBJECT_ERR);
88 axis.SetMaximum(val);
89 READINT32(data, val, IPC_PROXY_DEAD_OBJECT_ERR);
90 axis.SetAxisType(val);
91 READINT32(data, val, IPC_PROXY_DEAD_OBJECT_ERR);
92 axis.SetFuzz(val);
93 READINT32(data, val, IPC_PROXY_DEAD_OBJECT_ERR);
94 axis.SetFlat(val);
95 READINT32(data, val, IPC_PROXY_DEAD_OBJECT_ERR);
96 axis.SetResolution(val);
97 inputDevice->AddAxisInfo(axis);
98 }
99 return RET_OK;
100 }
101 } // namespace
102 const int32_t TUPLE_PID { 0 };
103 const int32_t TUPLE_UID { 1 };
104 const int32_t TUPLE_NAME { 2 };
105 const int32_t DEFAULT_POINTER_COLOR { 0x000000 };
106 constexpr int32_t MAX_N_TRANSMIT_INFRARED_PATTERN { 1024 };
107
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)108 int32_t MultimodalInputConnectStub::OnRemoteRequest(uint32_t code, MessageParcel& data,
109 MessageParcel& reply, MessageOption& option)
110 {
111 int32_t pid = GetCallingPid();
112 TimeCostChk chk("IPC-OnRemoteRequest", "overtime 300(us)", MAX_OVER_TIME, pid,
113 static_cast<int64_t>(code));
114 MMI_HILOGD("RemoteRequest code:%{public}d, tid:%{public}" PRIu64 ", pid:%{public}d", code, GetThisThreadId(), pid);
115
116 std::u16string descriptor = data.ReadInterfaceToken();
117 if (descriptor != IMultimodalInputConnect::GetDescriptor()) {
118 MMI_HILOGE("Get unexpect descriptor:%{public}s", Str16ToStr8(descriptor).c_str());
119 return ERR_INVALID_STATE;
120 }
121 ResetLogTrace();
122 BytraceAdapter::StartIpcServer(code);
123 int32_t ret = RET_ERR;
124 switch (code) {
125 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ALLOC_SOCKET_FD):
126 ret = StubHandleAllocSocketFd(data, reply);
127 break;
128 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ADD_INPUT_EVENT_FILTER):
129 ret = StubAddInputEventFilter(data, reply);
130 break;
131 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::RMV_INPUT_EVENT_FILTER):
132 ret = StubRemoveInputEventFilter(data, reply);
133 break;
134 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_MOUSE_SCROLL_ROWS):
135 ret = StubSetMouseScrollRows(data, reply);
136 break;
137 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_MOUSE_SCROLL_ROWS):
138 ret = StubGetMouseScrollRows(data, reply);
139 break;
140 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_POINTER_SIZE):
141 ret = StubSetPointerSize(data, reply);
142 break;
143 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_POINTER_SIZE):
144 ret = StubGetPointerSize(data, reply);
145 break;
146 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_CUSTOM_CURSOR):
147 ret = StubSetCustomCursor(data, reply);
148 break;
149 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_MOUSE_ICON):
150 ret = StubSetMouseIcon(data, reply);
151 break;
152 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_MOUSE_PRIMARY_BUTTON):
153 ret = StubSetMousePrimaryButton(data, reply);
154 break;
155 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_MOUSE_PRIMARY_BUTTON):
156 ret = StubGetMousePrimaryButton(data, reply);
157 break;
158 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_HOVER_SCROLL_STATE):
159 ret = StubSetHoverScrollState(data, reply);
160 break;
161 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_HOVER_SCROLL_STATE):
162 ret = StubGetHoverScrollState(data, reply);
163 break;
164 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_POINTER_VISIBLE):
165 ret = StubSetPointerVisible(data, reply);
166 break;
167 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_POINTER_STYLE):
168 ret = StubSetPointerStyle(data, reply);
169 break;
170 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::NOTIFY_NAP_ONLINE):
171 ret = StubNotifyNapOnline(data, reply);
172 break;
173 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::RMV_INPUT_EVENT_OBSERVER):
174 ret = StubRemoveInputEventObserver(data, reply);
175 break;
176 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_NAP_STATUS):
177 ret = StubSetNapStatus(data, reply);
178 break;
179 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::CLEAN_WIDNOW_STYLE):
180 ret = StubClearWindowPointerStyle(data, reply);
181 break;
182 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_POINTER_STYLE):
183 ret = StubGetPointerStyle(data, reply);
184 break;
185 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::IS_POINTER_VISIBLE):
186 ret = StubIsPointerVisible(data, reply);
187 break;
188 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::REGISTER_DEV_MONITOR):
189 ret = StubRegisterInputDeviceMonitor(data, reply);
190 break;
191 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::UNREGISTER_DEV_MONITOR):
192 ret = StubUnregisterInputDeviceMonitor(data, reply);
193 break;
194 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_DEVICE_IDS):
195 ret = StubGetDeviceIds(data, reply);
196 break;
197 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_DEVICE):
198 ret = StubGetDevice(data, reply);
199 break;
200 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SUPPORT_KEYS):
201 ret = StubSupportKeys(data, reply);
202 break;
203 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_KEYBOARD_TYPE):
204 ret = StubGetKeyboardType(data, reply);
205 break;
206 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_POINTER_COLOR):
207 ret = StubSetPointerColor(data, reply);
208 break;
209 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_POINTER_COLOR):
210 ret = StubGetPointerColor(data, reply);
211 break;
212 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_POINTER_SPEED):
213 ret = StubSetPointerSpeed(data, reply);
214 break;
215 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_POINTER_SPEED):
216 ret = StubGetPointerSpeed(data, reply);
217 break;
218 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SUBSCRIBE_KEY_EVENT):
219 ret = StubSubscribeKeyEvent(data, reply);
220 break;
221 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::UNSUBSCRIBE_KEY_EVENT):
222 ret = StubUnsubscribeKeyEvent(data, reply);
223 break;
224 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SUBSCRIBE_SWITCH_EVENT):
225 ret = StubSubscribeSwitchEvent(data, reply);
226 break;
227 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::UNSUBSCRIBE_SWITCH_EVENT):
228 ret = StubUnsubscribeSwitchEvent(data, reply);
229 break;
230 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::MARK_PROCESSED):
231 ret = StubMarkProcessed(data, reply);
232 break;
233 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ADD_INPUT_HANDLER):
234 ret = StubAddInputHandler(data, reply);
235 break;
236 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::REMOVE_INPUT_HANDLER):
237 ret = StubRemoveInputHandler(data, reply);
238 break;
239 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::MARK_EVENT_CONSUMED):
240 ret = StubMarkEventConsumed(data, reply);
241 break;
242 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::MOVE_MOUSE):
243 ret = StubMoveMouseEvent(data, reply);
244 break;
245 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::INJECT_KEY_EVENT):
246 ret = StubInjectKeyEvent(data, reply);
247 break;
248 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::INJECT_POINTER_EVENT):
249 ret = StubInjectPointerEvent(data, reply);
250 break;
251 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_ANR_OBSERVER):
252 ret = StubSetAnrListener(data, reply);
253 break;
254 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_DISPLAY_BIND_INFO):
255 ret = StubGetDisplayBindInfo(data, reply);
256 break;
257 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_ALL_NAPSTATUS_DATA):
258 ret = StubGetAllMmiSubscribedEvents(data, reply);
259 break;
260 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_DISPLAY_BIND):
261 ret = StubSetDisplayBind(data, reply);
262 break;
263 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_FUNCTION_KEY_STATE):
264 ret = StubGetFunctionKeyState(data, reply);
265 break;
266 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_FUNCTION_KEY_STATE):
267 ret = StubSetFunctionKeyState(data, reply);
268 break;
269 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_POINTER_LOCATION):
270 ret = StubSetPointerLocation(data, reply);
271 break;
272 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_CAPTURE_MODE):
273 ret = StubSetMouseCaptureMode(data, reply);
274 break;
275 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_WINDOW_PID):
276 ret = StubGetWindowPid(data, reply);
277 break;
278 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::APPEND_EXTRA_DATA):
279 ret = StubAppendExtraData(data, reply);
280 break;
281 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ENABLE_INPUT_DEVICE):
282 ret = StubEnableInputDevice(data, reply);
283 break;
284 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ENABLE_COMBINE_KEY):
285 ret = StubEnableCombineKey(data, reply);
286 break;
287 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_KEY_DOWN_DURATION):
288 ret = StubSetKeyDownDuration(data, reply);
289 break;
290 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_SCROLL_SWITCH):
291 ret = StubSetTouchpadScrollSwitch(data, reply);
292 break;
293 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_SCROLL_SWITCH):
294 ret = StubGetTouchpadScrollSwitch(data, reply);
295 break;
296 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_SCROLL_DIRECT_SWITCH):
297 ret = StubSetTouchpadScrollDirection(data, reply);
298 break;
299 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_SCROLL_DIRECT_SWITCH):
300 ret = StubGetTouchpadScrollDirection(data, reply);
301 break;
302 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_TAP_SWITCH):
303 ret = StubSetTouchpadTapSwitch(data, reply);
304 break;
305 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_TAP_SWITCH):
306 ret = StubGetTouchpadTapSwitch(data, reply);
307 break;
308 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_POINTER_SPEED):
309 ret = StubSetTouchpadPointerSpeed(data, reply);
310 break;
311 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_POINTER_SPEED):
312 ret = StubGetTouchpadPointerSpeed(data, reply);
313 break;
314 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_KEYBOARD_REPEAT_DELAY):
315 ret = StubSetKeyboardRepeatDelay(data, reply);
316 break;
317 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_KEYBOARD_REPEAT_RATE):
318 ret = StubSetKeyboardRepeatRate(data, reply);
319 break;
320 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_PINCH_SWITCH):
321 ret = StubSetTouchpadPinchSwitch(data, reply);
322 break;
323 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_PINCH_SWITCH):
324 ret = StubGetTouchpadPinchSwitch(data, reply);
325 break;
326 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_SWIPE_SWITCH):
327 ret = StubSetTouchpadSwipeSwitch(data, reply);
328 break;
329 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_SWIPE_SWITCH):
330 ret = StubGetTouchpadSwipeSwitch(data, reply);
331 break;
332 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_RIGHT_CLICK_TYPE):
333 ret = StubSetTouchpadRightClickType(data, reply);
334 break;
335 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_RIGHT_CLICK_TYPE):
336 ret = StubGetTouchpadRightClickType(data, reply);
337 break;
338 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_TP_ROTATE_SWITCH):
339 return StubSetTouchpadRotateSwitch(data, reply);
340 break;
341 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_TP_ROTATE_SWITCH):
342 return StubGetTouchpadRotateSwitch(data, reply);
343 break;
344 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_DOUBLE_TAP_DRAG_STATE):
345 ret = StubSetTouchpadDoubleTapAndDragState(data, reply);
346 break;
347 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_DOUBLE_TAP_DRAG_STATE):
348 ret = StubGetTouchpadDoubleTapAndDragState(data, reply);
349 break;
350 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_KEYBOARD_REPEAT_DELAY):
351 ret = StubGetKeyboardRepeatDelay(data, reply);
352 break;
353 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_KEYBOARD_REPEAT_RATE):
354 ret = StubGetKeyboardRepeatRate(data, reply);
355 break;
356 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_MOUSE_HOT_SPOT):
357 ret = StubSetMouseHotSpot(data, reply);
358 break;
359 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_SHIELD_STATUS):
360 ret = StubSetShieldStatus(data, reply);
361 break;
362 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_SHIELD_STATUS):
363 ret = StubGetShieldStatus(data, reply);
364 break;
365 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_KEY_STATE):
366 ret = StubGetKeyState(data, reply);
367 break;
368 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::NATIVE_AUTHORIZE):
369 ret = StubAuthorize(data, reply);
370 break;
371 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::NATIVE_CANCEL_INJECTION):
372 ret = StubCancelInjection(data, reply);
373 break;
374 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_PIXEL_MAP_DATA):
375 ret = StubSetPixelMapData(data, reply);
376 break;
377 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::NATIVE_INFRARED_OWN):
378 ret = StubHasIrEmitter(data, reply);
379 break;
380 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::NATIVE_INFRARED_FREQUENCY):
381 ret = StubGetInfraredFrequencies(data, reply);
382 break;
383 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::NATIVE_CANCEL_TRANSMIT):
384 ret = StubTransmitInfrared(data, reply);
385 break;
386 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::SET_CURRENT_USERID):
387 ret = StubSetCurrentUser(data, reply);
388 break;
389 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ADD_VIRTUAL_INPUT_DEVICE):
390 ret = StubAddVirtualInputDevice(data, reply);
391 break;
392 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::REMOVE_VIRTUAL_INPUT_DEVICE):
393 ret = StubRemoveVirtualInputDevice(data, reply);
394 break;
395 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ENABLE_HARDWARE_CURSOR_STATS):
396 return StubEnableHardwareCursorStats(data, reply);
397 break;
398 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_HARDWARE_CURSOR_STATS):
399 return StubGetHardwareCursorStats(data, reply);
400 break;
401 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
402 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_POINTER_SNAPSHOT):
403 ret = StubGetPointerSnapshot(data, reply);
404 break;
405 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR
406 #ifdef OHOS_BUILD_ENABLE_ANCO
407 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::ADD_ANCO_CHANNEL):
408 ret = StubAncoAddChannel(data, reply);
409 break;
410 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::REMOVE_ANCO_CHANNEL):
411 ret = StubAncoRemoveChannel(data, reply);
412 break;
413 #endif // OHOS_BUILD_ENABLE_ANCO
414 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::TRANSFER_BINDER_CLIENT_SERVICE):
415 ret = StubTransferBinderClientService(data, reply);
416 break;
417 case static_cast<uint32_t>(MultimodalinputConnectInterfaceCode::GET_SYSTEM_EVENT_TIME_INTERVAL):
418 ret = StubGetIntervalSinceLastInput(data, reply);
419 break;
420 default: {
421 MMI_HILOGE("Unknown code:%{public}u, go switch default", code);
422 ret = IPCObjectStub::OnRemoteRequest(code, data, reply, option);
423 }
424 }
425 BytraceAdapter::StopIpcServer();
426 return ret;
427 }
428
StubHandleAllocSocketFd(MessageParcel & data,MessageParcel & reply)429 int32_t MultimodalInputConnectStub::StubHandleAllocSocketFd(MessageParcel& data, MessageParcel& reply)
430 {
431 int32_t pid = GetCallingPid();
432 if (!IsRunning()) {
433 MMI_HILOGE("Service is not running. pid:%{public}d, go switch default", pid);
434 return MMISERVICE_NOT_RUNNING;
435 }
436 sptr<ConnectReqParcel> req = data.ReadParcelable<ConnectReqParcel>();
437 CHKPR(req, ERROR_NULL_POINTER);
438 MMI_HILOGD("clientName:%{public}s, moduleId:%{public}d", req->data.clientName.c_str(), req->data.moduleId);
439
440 int32_t clientFd = INVALID_SOCKET_FD;
441 int32_t tokenType = PER_HELPER->GetTokenType();
442 int32_t ret = AllocSocketFd(req->data.clientName, req->data.moduleId, clientFd, tokenType);
443 if (ret != RET_OK) {
444 MMI_HILOGE("AllocSocketFd failed pid:%{public}d, go switch default", pid);
445 if (clientFd >= 0) {
446 close(clientFd);
447 }
448 return ret;
449 }
450
451 if (!reply.WriteFileDescriptor(clientFd)) {
452 MMI_HILOGE("Write file descriptor failed");
453 close(clientFd);
454 return IPC_STUB_WRITE_PARCEL_ERR;
455 }
456
457 WRITEINT32(reply, tokenType, IPC_STUB_WRITE_PARCEL_ERR);
458 MMI_HILOGI("Send clientFd to client, clientFd:%{public}d, tokenType:%{public}d", clientFd, tokenType);
459 close(clientFd);
460 return RET_OK;
461 }
462
StubAddInputEventFilter(MessageParcel & data,MessageParcel & reply)463 int32_t MultimodalInputConnectStub::StubAddInputEventFilter(MessageParcel& data, MessageParcel& reply)
464 {
465 CALL_DEBUG_ENTER;
466 if (!PER_HELPER->VerifySystemApp()) {
467 MMI_HILOGE("Verify system APP failed");
468 return ERROR_NOT_SYSAPI;
469 }
470 if (!PER_HELPER->CheckInputEventFilter()) {
471 MMI_HILOGE("Filter permission check failed");
472 return ERROR_NO_PERMISSION;
473 }
474 sptr<IRemoteObject> client = data.ReadRemoteObject();
475 CHKPR(client, ERR_INVALID_VALUE);
476 sptr<IEventFilter> filter = iface_cast<IEventFilter>(client);
477 CHKPR(filter, ERROR_NULL_POINTER);
478 int32_t filterId = -1;
479 READINT32(data, filterId, IPC_PROXY_DEAD_OBJECT_ERR);
480 int32_t priority = 0;
481 READINT32(data, priority, IPC_PROXY_DEAD_OBJECT_ERR);
482 uint32_t deviceTags = 0;
483 READUINT32(data, deviceTags, IPC_PROXY_DEAD_OBJECT_ERR);
484 int32_t ret = AddInputEventFilter(filter, filterId, priority, deviceTags);
485 if (ret != RET_OK) {
486 MMI_HILOGE("Call AddInputEventFilter failed:%{public}d", ret);
487 return ret;
488 }
489 MMI_HILOGD("Success pid:%{public}d", GetCallingPid());
490 return RET_OK;
491 }
492
StubRemoveInputEventFilter(MessageParcel & data,MessageParcel & reply)493 int32_t MultimodalInputConnectStub::StubRemoveInputEventFilter(MessageParcel& data, MessageParcel& reply)
494 {
495 CALL_DEBUG_ENTER;
496 if (!PER_HELPER->VerifySystemApp()) {
497 MMI_HILOGE("Verify system APP failed");
498 return ERROR_NOT_SYSAPI;
499 }
500 if (!PER_HELPER->CheckInputEventFilter()) {
501 MMI_HILOGE("Filter permission check failed");
502 return ERROR_NO_PERMISSION;
503 }
504 int32_t filterId = -1;
505 READINT32(data, filterId, IPC_PROXY_DEAD_OBJECT_ERR);
506 int32_t ret = RemoveInputEventFilter(filterId);
507 if (ret != RET_OK) {
508 MMI_HILOGE("Call RemoveInputEventFilter failed:%{public}d", ret);
509 return ret;
510 }
511 MMI_HILOGD("Success pid:%{public}d", GetCallingPid());
512 return RET_OK;
513 }
514
StubSetMouseScrollRows(MessageParcel & data,MessageParcel & reply)515 int32_t MultimodalInputConnectStub::StubSetMouseScrollRows(MessageParcel& data, MessageParcel& reply)
516 {
517 CALL_DEBUG_ENTER;
518 if (!IsRunning()) {
519 MMI_HILOGE("Service is not running");
520 return MMISERVICE_NOT_RUNNING;
521 }
522
523 if (!PER_HELPER->VerifySystemApp()) {
524 MMI_HILOGE("Verify system APP failed");
525 return ERROR_NOT_SYSAPI;
526 }
527
528 int32_t rows = 3; // the initial number of scrolling rows is 3.
529 READINT32(data, rows, IPC_PROXY_DEAD_OBJECT_ERR);
530 int32_t ret = SetMouseScrollRows(rows);
531 if (ret != RET_OK) {
532 MMI_HILOGE("Call SetMouseScrollRows failed:%{public}d", ret);
533 return ret;
534 }
535 MMI_HILOGD("Success rows:%{public}d, pid:%{public}d", rows, GetCallingPid());
536 return RET_OK;
537 }
538
StubSetCustomCursor(MessageParcel & data,MessageParcel & reply)539 int32_t MultimodalInputConnectStub::StubSetCustomCursor(MessageParcel& data, MessageParcel& reply)
540 {
541 CALL_DEBUG_ENTER;
542 if (!IsRunning()) {
543 MMI_HILOGE("Service is not running");
544 return MMISERVICE_NOT_RUNNING;
545 }
546 int32_t windowId = 0;
547 int32_t windowPid = INVALID_PID;
548 int32_t focusX = 0;
549 int32_t focusY = 0;
550 READINT32(data, windowPid, IPC_PROXY_DEAD_OBJECT_ERR);
551 READINT32(data, windowId, IPC_PROXY_DEAD_OBJECT_ERR);
552 READINT32(data, focusX, IPC_PROXY_DEAD_OBJECT_ERR);
553 READINT32(data, focusY, IPC_PROXY_DEAD_OBJECT_ERR);
554 if (windowId <= 0) {
555 MMI_HILOGE("Invalid windowId:%{public}d", windowId);
556 return RET_ERR;
557 }
558 OHOS::Media::PixelMap* pixelMap = Media::PixelMap::Unmarshalling(data);
559 CHKPR(pixelMap, RET_ERR);
560 int32_t ret = SetCustomCursor(windowPid, windowId, focusX, focusY, (void*)pixelMap);
561 if (ret != RET_OK) {
562 MMI_HILOGE("Call SetCustomCursor failed:%{public}d", ret);
563 return ret;
564 }
565 return RET_OK;
566 }
567
StubSetMouseIcon(MessageParcel & data,MessageParcel & reply)568 int32_t MultimodalInputConnectStub::StubSetMouseIcon(MessageParcel& data, MessageParcel& reply)
569 {
570 CALL_DEBUG_ENTER;
571 if (!IsRunning()) {
572 MMI_HILOGE("Service is not running");
573 return MMISERVICE_NOT_RUNNING;
574 }
575 int32_t windowId = 0;
576 OHOS::Media::PixelMap *pixelMap = OHOS::Media::PixelMap::Unmarshalling(data);
577 CHKPR(pixelMap, RET_ERR);
578 READINT32(data, windowId, IPC_PROXY_DEAD_OBJECT_ERR);
579 MMI_HILOGD("Reading windowid the tlv count:%{public}d", windowId);
580 if (windowId <= 0) {
581 MMI_HILOGE("Invalid windowId:%{public}d", windowId);
582 return RET_ERR;
583 }
584
585 int32_t ret = SetMouseIcon(windowId, (void*)pixelMap);
586 if (ret != RET_OK) {
587 MMI_HILOGE("Call SetMouseIcon failed:%{public}d", ret);
588 return ret;
589 }
590 return RET_OK;
591 }
592
StubSetMouseHotSpot(MessageParcel & data,MessageParcel & reply)593 int32_t MultimodalInputConnectStub::StubSetMouseHotSpot(MessageParcel& data, MessageParcel& reply)
594 {
595 CALL_DEBUG_ENTER;
596 if (!PER_HELPER->VerifySystemApp()) {
597 MMI_HILOGE("Verify system APP failed");
598 return ERROR_NOT_SYSAPI;
599 }
600 if (!IsRunning()) {
601 MMI_HILOGE("Service is not running");
602 return MMISERVICE_NOT_RUNNING;
603 }
604 int32_t windowId = 0;
605 int32_t winPid = -1;
606 READINT32(data, winPid, IPC_PROXY_DEAD_OBJECT_ERR);
607 READINT32(data, windowId, IPC_PROXY_DEAD_OBJECT_ERR);
608 if (windowId <= 0) {
609 MMI_HILOGE("Invalid windowId:%{public}d", windowId);
610 return RET_ERR;
611 }
612 int32_t hotSpotX = 0;
613 READINT32(data, hotSpotX, IPC_PROXY_DEAD_OBJECT_ERR);
614 int32_t hotSpotY = 0;
615 READINT32(data, hotSpotY, IPC_PROXY_DEAD_OBJECT_ERR);
616 int32_t ret = SetMouseHotSpot(winPid, windowId, hotSpotX, hotSpotY);
617 if (ret != RET_OK) {
618 MMI_HILOGE("Call SetMouseHotSpot failed:%{public}d", ret);
619 return ret;
620 }
621 return RET_OK;
622 }
623
StubGetMouseScrollRows(MessageParcel & data,MessageParcel & reply)624 int32_t MultimodalInputConnectStub::StubGetMouseScrollRows(MessageParcel& data, MessageParcel& reply)
625 {
626 CALL_DEBUG_ENTER;
627 if (!IsRunning()) {
628 MMI_HILOGE("Service is not running");
629 return MMISERVICE_NOT_RUNNING;
630 }
631
632 if (!PER_HELPER->VerifySystemApp()) {
633 MMI_HILOGE("Verify system APP failed");
634 return ERROR_NOT_SYSAPI;
635 }
636
637 int32_t rows = 3; // the initial number of scrolling rows is 3.
638 int32_t ret = GetMouseScrollRows(rows);
639 if (ret != RET_OK) {
640 MMI_HILOGE("Call GetMouseScrollRows failed ret:%{public}d", ret);
641 return ret;
642 }
643 WRITEINT32(reply, rows, IPC_STUB_WRITE_PARCEL_ERR);
644 MMI_HILOGD("Mouse scroll rows:%{public}d, ret:%{public}d", rows, ret);
645 return RET_OK;
646 }
647
StubSetPointerSize(MessageParcel & data,MessageParcel & reply)648 int32_t MultimodalInputConnectStub::StubSetPointerSize(MessageParcel& data, MessageParcel& reply)
649 {
650 CALL_DEBUG_ENTER;
651 if (!IsRunning()) {
652 MMI_HILOGE("Service is not running");
653 return MMISERVICE_NOT_RUNNING;
654 }
655
656 if (!PER_HELPER->VerifySystemApp()) {
657 MMI_HILOGE("Verify system APP failed");
658 return ERROR_NOT_SYSAPI;
659 }
660
661 int32_t size = 1; // the initial pointer size is 1.
662 READINT32(data, size, IPC_PROXY_DEAD_OBJECT_ERR);
663 int32_t ret = SetPointerSize(size);
664 if (ret != RET_OK) {
665 MMI_HILOGE("Call SetPointerSize failed ret:%{public}d", ret);
666 return ret;
667 }
668 MMI_HILOGD("Success size:%{public}d, pid:%{public}d", size, GetCallingPid());
669 return RET_OK;
670 }
671
StubSetNapStatus(MessageParcel & data,MessageParcel & reply)672 int32_t MultimodalInputConnectStub::StubSetNapStatus(MessageParcel& data, MessageParcel& reply)
673 {
674 CALL_DEBUG_ENTER;
675 if (!PER_HELPER->VerifySystemApp()) {
676 MMI_HILOGE("Verify system APP failed");
677 return ERROR_NOT_SYSAPI;
678 }
679 if (!IsRunning()) {
680 MMI_HILOGE("Service is not running");
681 return MMISERVICE_NOT_RUNNING;
682 }
683 int32_t napPid = -1;
684 int32_t napUid = -1;
685 std::string napBundleName;
686 int32_t napStatus = 0;
687 READINT32(data, napPid, IPC_PROXY_DEAD_OBJECT_ERR);
688 READINT32(data, napUid, IPC_PROXY_DEAD_OBJECT_ERR);
689 READSTRING(data, napBundleName, IPC_PROXY_DEAD_OBJECT_ERR);
690 READINT32(data, napStatus, IPC_PROXY_DEAD_OBJECT_ERR);
691
692 int32_t ret = SetNapStatus(napPid, napUid, napBundleName, napStatus);
693 if (ret != RET_OK) {
694 MMI_HILOGE("Call StubSetNapStatus failed ret:%{public}d", ret);
695 return ret;
696 }
697 MMI_HILOGD("Success set napStatus:%{public}d, pid:%{public}d", napStatus, GetCallingPid());
698 return RET_OK;
699 }
700
StubGetPointerSize(MessageParcel & data,MessageParcel & reply)701 int32_t MultimodalInputConnectStub::StubGetPointerSize(MessageParcel& data, MessageParcel& reply)
702 {
703 CALL_DEBUG_ENTER;
704 if (!IsRunning()) {
705 MMI_HILOGE("Service is not running");
706 return MMISERVICE_NOT_RUNNING;
707 }
708
709 if (!PER_HELPER->VerifySystemApp()) {
710 MMI_HILOGE("Verify system APP failed");
711 return ERROR_NOT_SYSAPI;
712 }
713
714 int32_t size = 1; // the initial pointer size is 1.
715 int32_t ret = GetPointerSize(size);
716 if (ret != RET_OK) {
717 MMI_HILOGE("Call GetPoinerSize failed ret:%{public}d", ret);
718 return ret;
719 }
720 WRITEINT32(reply, size, IPC_STUB_WRITE_PARCEL_ERR);
721 MMI_HILOGD("Pointer size:%{public}d, ret:%{public}d", size, ret);
722 return RET_OK;
723 }
724
StubSetMousePrimaryButton(MessageParcel & data,MessageParcel & reply)725 int32_t MultimodalInputConnectStub::StubSetMousePrimaryButton(MessageParcel& data, MessageParcel& reply)
726 {
727 CALL_DEBUG_ENTER;
728 if (!PER_HELPER->VerifySystemApp()) {
729 MMI_HILOGE("Verify system APP failed");
730 return ERROR_NOT_SYSAPI;
731 }
732
733 int32_t primaryButton = -1;
734 READINT32(data, primaryButton, IPC_PROXY_DEAD_OBJECT_ERR);
735 int32_t ret = SetMousePrimaryButton(primaryButton);
736 if (ret != RET_OK) {
737 MMI_HILOGE("Call SetMousePrimaryButton failed ret:%{public}d", ret);
738 return ret;
739 }
740 MMI_HILOGD("Success primaryButton:%{public}d, pid:%{public}d", primaryButton, GetCallingPid());
741 return RET_OK;
742 }
743
StubGetMousePrimaryButton(MessageParcel & data,MessageParcel & reply)744 int32_t MultimodalInputConnectStub::StubGetMousePrimaryButton(MessageParcel& data, MessageParcel& reply)
745 {
746 CALL_DEBUG_ENTER;
747 if (!PER_HELPER->VerifySystemApp()) {
748 MMI_HILOGE("Verify system APP failed");
749 return ERROR_NOT_SYSAPI;
750 }
751
752 int32_t primaryButton = -1;
753 int32_t ret = GetMousePrimaryButton(primaryButton);
754 if (ret != RET_OK) {
755 MMI_HILOGE("Call GetMousePrimaryButton failed ret:%{public}d", ret);
756 return ret;
757 }
758 WRITEINT32(reply, primaryButton, IPC_STUB_WRITE_PARCEL_ERR);
759 MMI_HILOGD("Mouse primaryButton:%{public}d, ret:%{public}d", primaryButton, ret);
760 return RET_OK;
761 }
762
StubSetHoverScrollState(MessageParcel & data,MessageParcel & reply)763 int32_t MultimodalInputConnectStub::StubSetHoverScrollState(MessageParcel& data, MessageParcel& reply)
764 {
765 CALL_DEBUG_ENTER;
766 if (!PER_HELPER->VerifySystemApp()) {
767 MMI_HILOGE("Verify system APP failed");
768 return ERROR_NOT_SYSAPI;
769 }
770
771 bool state = true;
772 READBOOL(data, state, IPC_PROXY_DEAD_OBJECT_ERR);
773 int32_t ret = SetHoverScrollState(state);
774 if (ret != RET_OK) {
775 MMI_HILOGE("Call SetHoverScrollState failed, ret:%{public}d", ret);
776 return ret;
777 }
778 MMI_HILOGD("Success state:%{public}d, pid:%{public}d", state, GetCallingPid());
779 return RET_OK;
780 }
781
StubGetHoverScrollState(MessageParcel & data,MessageParcel & reply)782 int32_t MultimodalInputConnectStub::StubGetHoverScrollState(MessageParcel& data, MessageParcel& reply)
783 {
784 CALL_DEBUG_ENTER;
785 if (!PER_HELPER->VerifySystemApp()) {
786 MMI_HILOGE("Verify system APP failed");
787 return ERROR_NOT_SYSAPI;
788 }
789
790 bool state = true;
791 int32_t ret = GetHoverScrollState(state);
792 if (ret != RET_OK) {
793 MMI_HILOGE("Call GetHoverScrollState failed, ret:%{public}d", ret);
794 return ret;
795 }
796 WRITEBOOL(reply, state, IPC_STUB_WRITE_PARCEL_ERR);
797 MMI_HILOGD("Mouse hover scroll state:%{public}d, ret:%{public}d", state, ret);
798 return RET_OK;
799 }
800
StubSetPointerVisible(MessageParcel & data,MessageParcel & reply)801 int32_t MultimodalInputConnectStub::StubSetPointerVisible(MessageParcel& data, MessageParcel& reply)
802 {
803 CALL_DEBUG_ENTER;
804 bool visible = false;
805 READBOOL(data, visible, IPC_PROXY_DEAD_OBJECT_ERR);
806 int32_t priority = 0;
807 READINT32(data, priority, IPC_PROXY_DEAD_OBJECT_ERR);
808 int32_t ret = SetPointerVisible(visible, priority);
809 if (ret != RET_OK) {
810 MMI_HILOGE("Call SetPointerVisible failed ret:%{public}d", ret);
811 return ret;
812 }
813 MMI_HILOGD("Success visible:%{public}d,pid:%{public}d", visible, GetCallingPid());
814 return RET_OK;
815 }
816
StubIsPointerVisible(MessageParcel & data,MessageParcel & reply)817 int32_t MultimodalInputConnectStub::StubIsPointerVisible(MessageParcel& data, MessageParcel& reply)
818 {
819 CALL_DEBUG_ENTER;
820 bool visible = false;
821 int32_t ret = IsPointerVisible(visible);
822 if (ret != RET_OK) {
823 MMI_HILOGE("Call IsPointerVisible failed ret:%{public}d", ret);
824 return ret;
825 }
826 WRITEBOOL(reply, visible, IPC_STUB_WRITE_PARCEL_ERR);
827 MMI_HILOGD("visible:%{public}d, ret:%{public}d, pid:%{public}d", visible, ret, GetCallingPid());
828 return RET_OK;
829 }
830
StubMarkProcessed(MessageParcel & data,MessageParcel & reply)831 int32_t MultimodalInputConnectStub::StubMarkProcessed(MessageParcel& data, MessageParcel& reply)
832 {
833 CALL_DEBUG_ENTER;
834 if (!IsRunning()) {
835 MMI_HILOGE("Service is not running");
836 return MMISERVICE_NOT_RUNNING;
837 }
838 int32_t eventType;
839 READINT32(data, eventType, IPC_PROXY_DEAD_OBJECT_ERR);
840 int32_t eventId;
841 READINT32(data, eventId, IPC_PROXY_DEAD_OBJECT_ERR);
842 int32_t ret = MarkProcessed(eventType, eventId);
843 if (ret != RET_OK) {
844 MMI_HILOGD("MarkProcessed failed, ret:%{public}d", ret);
845 return ret;
846 }
847 return RET_OK;
848 }
849
StubSetPointerColor(MessageParcel & data,MessageParcel & reply)850 int32_t MultimodalInputConnectStub::StubSetPointerColor(MessageParcel& data, MessageParcel& reply)
851 {
852 CALL_DEBUG_ENTER;
853 if (!IsRunning()) {
854 MMI_HILOGE("Service is not running");
855 return MMISERVICE_NOT_RUNNING;
856 }
857
858 if (!PER_HELPER->VerifySystemApp()) {
859 MMI_HILOGE("Verify system APP failed");
860 return ERROR_NOT_SYSAPI;
861 }
862
863 int32_t color = DEFAULT_POINTER_COLOR;
864 READINT32(data, color, IPC_PROXY_DEAD_OBJECT_ERR);
865 int32_t ret = SetPointerColor(color);
866 if (ret != RET_OK) {
867 MMI_HILOGE("Call SetPointerColor failed ret:%{public}d", ret);
868 return ret;
869 }
870 MMI_HILOGD("Success color:%{public}d, pid:%{public}d", color, GetCallingPid());
871 return RET_OK;
872 }
873
StubGetPointerColor(MessageParcel & data,MessageParcel & reply)874 int32_t MultimodalInputConnectStub::StubGetPointerColor(MessageParcel& data, MessageParcel& reply)
875 {
876 CALL_DEBUG_ENTER;
877 if (!IsRunning()) {
878 MMI_HILOGE("Service is not running");
879 return MMISERVICE_NOT_RUNNING;
880 }
881
882 if (!PER_HELPER->VerifySystemApp()) {
883 MMI_HILOGE("Verify system APP failed");
884 return ERROR_NOT_SYSAPI;
885 }
886
887 int32_t color = DEFAULT_POINTER_COLOR;
888 int32_t ret = GetPointerColor(color);
889 if (ret != RET_OK) {
890 MMI_HILOGE("Call GetPointerColor failed ret:%{public}d", ret);
891 return ret;
892 }
893 WRITEINT32(reply, color, IPC_STUB_WRITE_PARCEL_ERR);
894 MMI_HILOGD("Pointer color:%{public}d, ret:%{public}d", color, ret);
895 return RET_OK;
896 }
897
StubSetPointerSpeed(MessageParcel & data,MessageParcel & reply)898 int32_t MultimodalInputConnectStub::StubSetPointerSpeed(MessageParcel& data, MessageParcel& reply)
899 {
900 CALL_DEBUG_ENTER;
901 if (!PER_HELPER->VerifySystemApp()) {
902 MMI_HILOGE("Verify system APP failed");
903 return ERROR_NOT_SYSAPI;
904 }
905
906 int32_t speed = 0;
907 READINT32(data, speed, IPC_PROXY_DEAD_OBJECT_ERR);
908 int32_t ret = SetPointerSpeed(speed);
909 if (ret != RET_OK) {
910 MMI_HILOGE("Set pointer speed failed ret:%{public}d", ret);
911 return RET_ERR;
912 }
913 return RET_OK;
914 }
915
StubGetPointerSpeed(MessageParcel & data,MessageParcel & reply)916 int32_t MultimodalInputConnectStub::StubGetPointerSpeed(MessageParcel& data, MessageParcel& reply)
917 {
918 CALL_DEBUG_ENTER;
919 if (!PER_HELPER->VerifySystemApp()) {
920 MMI_HILOGE("Verify system APP failed");
921 return ERROR_NOT_SYSAPI;
922 }
923
924 int32_t speed = 0;
925 int32_t ret = GetPointerSpeed(speed);
926 if (ret != RET_OK) {
927 MMI_HILOGE("Call get pointer speed failed ret:%{public}d", ret);
928 return RET_ERR;
929 }
930 WRITEINT32(reply, speed, IPC_STUB_WRITE_PARCEL_ERR);
931 MMI_HILOGD("Pointer speed:%{public}d, ret:%{public}d", speed, ret);
932 return RET_OK;
933 }
934
StubNotifyNapOnline(MessageParcel & data,MessageParcel & reply)935 int32_t MultimodalInputConnectStub::StubNotifyNapOnline(MessageParcel& data, MessageParcel& reply)
936 {
937 CALL_DEBUG_ENTER;
938 int32_t ret = NotifyNapOnline();
939 return ret;
940 }
941
StubRemoveInputEventObserver(MessageParcel & data,MessageParcel & reply)942 int32_t MultimodalInputConnectStub::StubRemoveInputEventObserver(MessageParcel& data, MessageParcel& reply)
943 {
944 CALL_DEBUG_ENTER;
945 if (!PER_HELPER->VerifySystemApp()) {
946 MMI_HILOGE("Verify system APP failed");
947 return ERROR_NOT_SYSAPI;
948 }
949 int32_t ret = RemoveInputEventObserver();
950 return ret;
951 }
952
StubSetPointerStyle(MessageParcel & data,MessageParcel & reply)953 int32_t MultimodalInputConnectStub::StubSetPointerStyle(MessageParcel& data, MessageParcel& reply)
954 {
955 CALL_DEBUG_ENTER;
956 int32_t windowId = 0;
957 READINT32(data, windowId, RET_ERR);
958 PointerStyle pointerStyle;
959 READINT32(data, pointerStyle.size, RET_ERR);
960 READINT32(data, pointerStyle.color, RET_ERR);
961 READINT32(data, pointerStyle.id, RET_ERR);
962 bool isUiExtension;
963 READBOOL(data, isUiExtension, RET_ERR);
964 if (windowId == -1 && !PER_HELPER->VerifySystemApp()) {
965 MMI_HILOGE("can not set global winid, because this is not sys app");
966 return ERROR_NOT_SYSAPI;
967 }
968 int32_t ret = SetPointerStyle(windowId, pointerStyle, isUiExtension);
969 if (ret != RET_OK) {
970 MMI_HILOGE("Call SetPointerStyle failed ret:%{public}d", ret);
971 return ret;
972 }
973 MMI_HILOGD("Successfully set windowId:%{public}d, icon:%{public}d", windowId, pointerStyle.id);
974 return RET_OK;
975 }
976
StubClearWindowPointerStyle(MessageParcel & data,MessageParcel & reply)977 int32_t MultimodalInputConnectStub::StubClearWindowPointerStyle(MessageParcel& data, MessageParcel& reply)
978 {
979 CALL_DEBUG_ENTER;
980 if (!PER_HELPER->VerifySystemApp()) {
981 MMI_HILOGE("Verify system APP failed");
982 return ERROR_NOT_SYSAPI;
983 }
984 int32_t pid = 0;
985 int32_t windowId = 0;
986 READINT32(data, pid, RET_ERR);
987 READINT32(data, windowId, RET_ERR);
988 int32_t ret = ClearWindowPointerStyle(pid, windowId);
989 if (ret != RET_OK) {
990 MMI_HILOGE("Call SetPointerStyle failed ret:%{public}d", ret);
991 return ret;
992 }
993 MMI_HILOGD("Successfully clean pointerStyle for windowId:%{public}d, pid:%{public}d", windowId, pid);
994 return RET_OK;
995 }
996
StubGetPointerStyle(MessageParcel & data,MessageParcel & reply)997 int32_t MultimodalInputConnectStub::StubGetPointerStyle(MessageParcel& data, MessageParcel& reply)
998 {
999 CALL_DEBUG_ENTER;
1000 int32_t windowId = 0;
1001 READINT32(data, windowId, RET_ERR);
1002 bool isUiExtension;
1003 READBOOL(data, isUiExtension, RET_ERR);
1004 PointerStyle pointerStyle;
1005 int32_t ret = GetPointerStyle(windowId, pointerStyle, isUiExtension);
1006 if (ret != RET_OK) {
1007 MMI_HILOGE("Call GetPointerStyle failed ret:%{public}d", ret);
1008 return ret;
1009 }
1010 WRITEINT32(reply, pointerStyle.size, RET_ERR);
1011 WRITEINT32(reply, pointerStyle.color, RET_ERR);
1012 WRITEINT32(reply, pointerStyle.id, RET_ERR);
1013 WRITEINT32(reply, pointerStyle.options, RET_ERR);
1014 MMI_HILOGD("Successfully get windowId:%{public}d, icon:%{public}d", windowId, pointerStyle.id);
1015 return RET_OK;
1016 }
1017
StubSupportKeys(MessageParcel & data,MessageParcel & reply)1018 int32_t MultimodalInputConnectStub::StubSupportKeys(MessageParcel& data, MessageParcel& reply)
1019 {
1020 CALL_DEBUG_ENTER;
1021 int32_t deviceId = -1;
1022 READINT32(data, deviceId, IPC_PROXY_DEAD_OBJECT_ERR);
1023 int32_t size = 0;
1024 READINT32(data, size, IPC_PROXY_DEAD_OBJECT_ERR);
1025 if (size < 0 || size > ExtraData::MAX_BUFFER_SIZE) {
1026 MMI_HILOGE("Invalid size:%{public}d", size);
1027 return RET_ERR;
1028 }
1029 std::vector<int32_t> keys;
1030 int32_t key = 0;
1031 for (int32_t i = 0; i < size; ++i) {
1032 READINT32(data, key, IPC_PROXY_DEAD_OBJECT_ERR);
1033 keys.push_back(key);
1034 }
1035 std::vector<bool> keystroke;
1036 int32_t ret = SupportKeys(deviceId, keys, keystroke);
1037 if (ret != RET_OK) {
1038 MMI_HILOGE("Call SupportKeys failed ret:%{public}d", ret);
1039 return RET_ERR;
1040 }
1041 if (!reply.WriteBoolVector(keystroke)) {
1042 MMI_HILOGE("Write keyStroke failed");
1043 return RET_ERR;
1044 }
1045 return ret;
1046 }
1047
StubGetDeviceIds(MessageParcel & data,MessageParcel & reply)1048 int32_t MultimodalInputConnectStub::StubGetDeviceIds(MessageParcel& data, MessageParcel& reply)
1049 {
1050 CALL_DEBUG_ENTER;
1051 std::vector<int32_t> ids;
1052 int32_t ret = GetDeviceIds(ids);
1053 if (ret != RET_OK) {
1054 MMI_HILOGE("Call GetDeviceIds failed ret:%{public}d", ret);
1055 return RET_ERR;
1056 }
1057 if (!reply.WriteInt32Vector(ids)) {
1058 MMI_HILOGE("Write ids failed");
1059 return RET_ERR;
1060 }
1061 return ret;
1062 }
1063
StubGetDevice(MessageParcel & data,MessageParcel & reply)1064 int32_t MultimodalInputConnectStub::StubGetDevice(MessageParcel& data, MessageParcel& reply)
1065 {
1066 CALL_DEBUG_ENTER;
1067 int32_t deviceId = -1;
1068 READINT32(data, deviceId, IPC_PROXY_DEAD_OBJECT_ERR);
1069 std::shared_ptr<InputDevice> inputDevice = std::make_shared<InputDevice>();
1070 int32_t ret = GetDevice(deviceId, inputDevice);
1071 if (ret != RET_OK) {
1072 MMI_HILOGE("Call GetDevice failed ret:%{public}d", ret);
1073 return RET_ERR;
1074 }
1075 WRITEINT32(reply, inputDevice->GetId(), IPC_STUB_WRITE_PARCEL_ERR);
1076 WRITEINT32(reply, inputDevice->GetType(), IPC_STUB_WRITE_PARCEL_ERR);
1077 WRITESTRING(reply, inputDevice->GetName(), IPC_STUB_WRITE_PARCEL_ERR);
1078 WRITEINT32(reply, inputDevice->GetBus(), IPC_STUB_WRITE_PARCEL_ERR);
1079 WRITEINT32(reply, inputDevice->GetVersion(), IPC_STUB_WRITE_PARCEL_ERR);
1080 WRITEINT32(reply, inputDevice->GetProduct(), IPC_STUB_WRITE_PARCEL_ERR);
1081 WRITEINT32(reply, inputDevice->GetVendor(), IPC_STUB_WRITE_PARCEL_ERR);
1082 WRITESTRING(reply, inputDevice->GetPhys(), IPC_STUB_WRITE_PARCEL_ERR);
1083 WRITESTRING(reply, inputDevice->GetUniq(), IPC_STUB_WRITE_PARCEL_ERR);
1084 WRITEUINT64(reply, static_cast<uint64_t>(inputDevice->GetCapabilities()), IPC_STUB_WRITE_PARCEL_ERR);
1085 WRITEUINT32(reply, static_cast<uint32_t>(inputDevice->GetAxisInfo().size()), IPC_STUB_WRITE_PARCEL_ERR);
1086 for (const auto &item : inputDevice->GetAxisInfo()) {
1087 WRITEINT32(reply, item.GetMinimum(), IPC_STUB_WRITE_PARCEL_ERR);
1088 WRITEINT32(reply, item.GetMaximum(), IPC_STUB_WRITE_PARCEL_ERR);
1089 WRITEINT32(reply, item.GetAxisType(), IPC_STUB_WRITE_PARCEL_ERR);
1090 WRITEINT32(reply, item.GetFuzz(), IPC_STUB_WRITE_PARCEL_ERR);
1091 WRITEINT32(reply, item.GetFlat(), IPC_STUB_WRITE_PARCEL_ERR);
1092 WRITEINT32(reply, item.GetResolution(), IPC_STUB_WRITE_PARCEL_ERR);
1093 }
1094 return RET_OK;
1095 }
1096
StubRegisterInputDeviceMonitor(MessageParcel & data,MessageParcel & reply)1097 int32_t MultimodalInputConnectStub::StubRegisterInputDeviceMonitor(MessageParcel& data, MessageParcel& reply)
1098 {
1099 CALL_DEBUG_ENTER;
1100 int32_t ret = RegisterDevListener();
1101 if (ret != RET_OK) {
1102 MMI_HILOGE("Call RegisterInputDeviceMonitor failed ret:%{public}d", ret);
1103 }
1104 return ret;
1105 }
1106
StubUnregisterInputDeviceMonitor(MessageParcel & data,MessageParcel & reply)1107 int32_t MultimodalInputConnectStub::StubUnregisterInputDeviceMonitor(MessageParcel& data, MessageParcel& reply)
1108 {
1109 CALL_DEBUG_ENTER;
1110 int32_t ret = UnregisterDevListener();
1111 if (ret != RET_OK) {
1112 MMI_HILOGE("Call UnregisterInputDeviceMonitor failed ret:%{public}d", ret);
1113 }
1114 return ret;
1115 }
1116
StubGetKeyboardType(MessageParcel & data,MessageParcel & reply)1117 int32_t MultimodalInputConnectStub::StubGetKeyboardType(MessageParcel& data, MessageParcel& reply)
1118 {
1119 CALL_DEBUG_ENTER;
1120 int32_t deviceId = -1;
1121 READINT32(data, deviceId, IPC_PROXY_DEAD_OBJECT_ERR);
1122 int32_t keyboardType = 0;
1123 int32_t ret = GetKeyboardType(deviceId, keyboardType);
1124 if (ret != RET_OK) {
1125 MMI_HILOGE("Call GetKeyboardType failed ret:%{public}d", ret);
1126 return RET_ERR;
1127 }
1128 WRITEINT32(reply, keyboardType, IPC_STUB_WRITE_PARCEL_ERR);
1129 return ret;
1130 }
1131
StubAddInputHandler(MessageParcel & data,MessageParcel & reply)1132 int32_t MultimodalInputConnectStub::StubAddInputHandler(MessageParcel& data, MessageParcel& reply)
1133 {
1134 CALL_DEBUG_ENTER;
1135 int32_t handlerType = 0;
1136 READINT32(data, handlerType, IPC_PROXY_DEAD_OBJECT_ERR);
1137 if (!PER_HELPER->VerifySystemApp()) {
1138 if (handlerType == InputHandlerType::MONITOR) {
1139 #ifdef PLAYER_FRAMEWORK_EXISTS
1140 int pid = GetCallingPid();
1141 int capturePid = OHOS::Media::ScreenCaptureMonitor::GetInstance()->IsScreenCaptureWorking();
1142 if (capturePid != pid) {
1143 MMI_HILOGE("Calling pid is: %{public}d, but screen capture pid is: %{public}d", pid, capturePid);
1144 return ERROR_NO_PERMISSION;
1145 }
1146 #else
1147 return ERROR_NOT_SYSAPI;
1148 #endif
1149 } else if (handlerType != InputHandlerType::INTERCEPTOR) {
1150 MMI_HILOGE("Verify system APP failed");
1151 return ERROR_NOT_SYSAPI;
1152 }
1153 }
1154
1155 if (!IsRunning()) {
1156 MMI_HILOGE("Service is not running");
1157 return MMISERVICE_NOT_RUNNING;
1158 }
1159 if ((handlerType == InputHandlerType::INTERCEPTOR) && (!PER_HELPER->CheckInterceptor())) {
1160 MMI_HILOGE("Interceptor permission check failed");
1161 return ERROR_NO_PERMISSION;
1162 }
1163 if ((handlerType == InputHandlerType::MONITOR) && (!PER_HELPER->CheckMonitor())) {
1164 MMI_HILOGE("Monitor permission check failed");
1165 return ERROR_NO_PERMISSION;
1166 }
1167 uint32_t eventType = 0;
1168 READUINT32(data, eventType, IPC_PROXY_DEAD_OBJECT_ERR);
1169 int32_t priority = 0;
1170 READINT32(data, priority, IPC_PROXY_DEAD_OBJECT_ERR);
1171 int32_t deviceTags = 0;
1172 READINT32(data, deviceTags, IPC_PROXY_DEAD_OBJECT_ERR);
1173 int32_t ret = AddInputHandler(static_cast<InputHandlerType>(handlerType), eventType, priority,
1174 deviceTags);
1175 if (ret != RET_OK) {
1176 MMI_HILOGE("Call AddInputHandler failed ret:%{public}d", ret);
1177 return ret;
1178 }
1179 return RET_OK;
1180 }
1181
StubRemoveInputHandler(MessageParcel & data,MessageParcel & reply)1182 int32_t MultimodalInputConnectStub::StubRemoveInputHandler(MessageParcel& data, MessageParcel& reply)
1183 {
1184 CALL_DEBUG_ENTER;
1185 int32_t handlerType = 0;
1186 READINT32(data, handlerType, IPC_PROXY_DEAD_OBJECT_ERR);
1187 if (!PER_HELPER->VerifySystemApp()) {
1188 if (handlerType != InputHandlerType::MONITOR && handlerType != InputHandlerType::INTERCEPTOR) {
1189 MMI_HILOGE("Verify system APP failed");
1190 return ERROR_NOT_SYSAPI;
1191 }
1192 }
1193
1194 if (!IsRunning()) {
1195 MMI_HILOGE("Service is not running");
1196 return MMISERVICE_NOT_RUNNING;
1197 }
1198 if ((handlerType == InputHandlerType::INTERCEPTOR) && (!PER_HELPER->CheckInterceptor())) {
1199 MMI_HILOGE("Interceptor permission check failed");
1200 return ERROR_NO_PERMISSION;
1201 }
1202 if ((handlerType == InputHandlerType::MONITOR) && (!PER_HELPER->CheckMonitor())) {
1203 MMI_HILOGE("Monitor permission check failed");
1204 return ERROR_NO_PERMISSION;
1205 }
1206 uint32_t eventType = 0;
1207 READUINT32(data, eventType, IPC_PROXY_DEAD_OBJECT_ERR);
1208 int32_t priority = 0;
1209 READINT32(data, priority, IPC_PROXY_DEAD_OBJECT_ERR);
1210 int32_t deviceTags = 0;
1211 READINT32(data, deviceTags, IPC_PROXY_DEAD_OBJECT_ERR);
1212 int32_t ret = RemoveInputHandler(static_cast<InputHandlerType>(handlerType), eventType, priority,
1213 deviceTags);
1214 if (ret != RET_OK) {
1215 MMI_HILOGE("Call RemoveInputHandler failed ret:%{public}d", ret);
1216 return ret;
1217 }
1218 return RET_OK;
1219 }
1220
StubMarkEventConsumed(MessageParcel & data,MessageParcel & reply)1221 int32_t MultimodalInputConnectStub::StubMarkEventConsumed(MessageParcel& data, MessageParcel& reply)
1222 {
1223 CALL_DEBUG_ENTER;
1224 if (!PER_HELPER->CheckMonitor()) {
1225 MMI_HILOGE("Permission check failed");
1226 return ERROR_NO_PERMISSION;
1227 }
1228
1229 if (!IsRunning()) {
1230 MMI_HILOGE("Service is not running");
1231 return MMISERVICE_NOT_RUNNING;
1232 }
1233 int32_t eventId = 0;
1234 READINT32(data, eventId, IPC_PROXY_DEAD_OBJECT_ERR);
1235 int32_t ret = MarkEventConsumed(eventId);
1236 if (ret != RET_OK) {
1237 MMI_HILOGE("Call MarkEventConsumed failed ret:%{public}d", ret);
1238 return ret;
1239 }
1240 return RET_OK;
1241 }
1242
StubSubscribeKeyEvent(MessageParcel & data,MessageParcel & reply)1243 int32_t MultimodalInputConnectStub::StubSubscribeKeyEvent(MessageParcel& data, MessageParcel& reply)
1244 {
1245 CALL_DEBUG_ENTER;
1246 if (!PER_HELPER->VerifySystemApp()) {
1247 MMI_HILOGE("Verify system APP failed");
1248 return ERROR_NOT_SYSAPI;
1249 }
1250
1251 if (!IsRunning()) {
1252 MMI_HILOGE("Service is not running");
1253 return MMISERVICE_NOT_RUNNING;
1254 }
1255
1256 int32_t subscribeId = 0;
1257 READINT32(data, subscribeId, IPC_PROXY_DEAD_OBJECT_ERR);
1258
1259 auto keyOption = std::make_shared<KeyOption>();
1260 if (!keyOption->ReadFromParcel(data)) {
1261 MMI_HILOGE("Read keyOption failed");
1262 return IPC_PROXY_DEAD_OBJECT_ERR;
1263 }
1264 int32_t ret = SubscribeKeyEvent(subscribeId, keyOption);
1265 if (ret != RET_OK) {
1266 MMI_HILOGE("SubscribeKeyEvent failed, ret:%{public}d", ret);
1267 return ret;
1268 }
1269 return RET_OK;
1270 }
1271
StubUnsubscribeKeyEvent(MessageParcel & data,MessageParcel & reply)1272 int32_t MultimodalInputConnectStub::StubUnsubscribeKeyEvent(MessageParcel& data, MessageParcel& reply)
1273 {
1274 CALL_DEBUG_ENTER;
1275 if (!PER_HELPER->VerifySystemApp()) {
1276 MMI_HILOGE("Verify system APP failed");
1277 return ERROR_NOT_SYSAPI;
1278 }
1279
1280 if (!IsRunning()) {
1281 MMI_HILOGE("Service is not running");
1282 return MMISERVICE_NOT_RUNNING;
1283 }
1284
1285 int32_t subscribeId = 0;
1286 READINT32(data, subscribeId, IPC_PROXY_DEAD_OBJECT_ERR);
1287
1288 int32_t ret = UnsubscribeKeyEvent(subscribeId);
1289 if (ret != RET_OK) {
1290 MMI_HILOGE("UnsubscribeKeyEvent failed, ret:%{public}d", ret);
1291 return ret;
1292 }
1293 return RET_OK;
1294 }
1295
StubSubscribeSwitchEvent(MessageParcel & data,MessageParcel & reply)1296 int32_t MultimodalInputConnectStub::StubSubscribeSwitchEvent(MessageParcel& data, MessageParcel& reply)
1297 {
1298 CALL_DEBUG_ENTER;
1299 if (!PER_HELPER->VerifySystemApp()) {
1300 MMI_HILOGE("Verify system APP failed");
1301 return ERROR_NOT_SYSAPI;
1302 }
1303
1304 if (!IsRunning()) {
1305 MMI_HILOGE("Service is not running");
1306 return MMISERVICE_NOT_RUNNING;
1307 }
1308
1309 int32_t subscribeId = 0;
1310 int32_t switchType = 0;
1311 READINT32(data, subscribeId, IPC_PROXY_DEAD_OBJECT_ERR);
1312 READINT32(data, switchType, IPC_PROXY_DEAD_OBJECT_ERR);
1313
1314 int32_t ret = SubscribeSwitchEvent(subscribeId, switchType);
1315 if (ret != RET_OK) {
1316 MMI_HILOGE("SubscribeSwitchEvent failed, ret:%{public}d", ret);
1317 }
1318 return ret;
1319 }
1320
StubUnsubscribeSwitchEvent(MessageParcel & data,MessageParcel & reply)1321 int32_t MultimodalInputConnectStub::StubUnsubscribeSwitchEvent(MessageParcel& data, MessageParcel& reply)
1322 {
1323 CALL_DEBUG_ENTER;
1324 if (!PER_HELPER->VerifySystemApp()) {
1325 MMI_HILOGE("Verify system APP failed");
1326 return ERROR_NOT_SYSAPI;
1327 }
1328
1329 if (!IsRunning()) {
1330 MMI_HILOGE("Service is not running");
1331 return MMISERVICE_NOT_RUNNING;
1332 }
1333
1334 int32_t subscribeId = 0;
1335 READINT32(data, subscribeId, IPC_PROXY_DEAD_OBJECT_ERR);
1336
1337 int32_t ret = UnsubscribeSwitchEvent(subscribeId);
1338 if (ret != RET_OK) {
1339 MMI_HILOGE("UnsubscribeSwitchEvent failed, ret:%{public}d", ret);
1340 }
1341 return ret;
1342 }
1343
StubMoveMouseEvent(MessageParcel & data,MessageParcel & reply)1344 int32_t MultimodalInputConnectStub::StubMoveMouseEvent(MessageParcel& data, MessageParcel& reply)
1345 {
1346 CALL_DEBUG_ENTER;
1347 if (!PER_HELPER->VerifySystemApp()) {
1348 MMI_HILOGE("Verify system APP failed");
1349 return ERROR_NOT_SYSAPI;
1350 }
1351 if (!PER_HELPER->CheckMouseCursor()) {
1352 MMI_HILOGE("Mouse cursor permission check failed");
1353 return ERROR_NO_PERMISSION;
1354 }
1355 if (!IsRunning()) {
1356 MMI_HILOGE("Service is not running");
1357 return MMISERVICE_NOT_RUNNING;
1358 }
1359 int32_t offsetX = 0;
1360 READINT32(data, offsetX, IPC_PROXY_DEAD_OBJECT_ERR);
1361 int32_t offsetY = 0;
1362 READINT32(data, offsetY, IPC_PROXY_DEAD_OBJECT_ERR);
1363
1364 int32_t ret = MoveMouseEvent(offsetX, offsetY);
1365 if (ret != RET_OK) {
1366 MMI_HILOGE("MoveMouseEvent failed, ret:%{public}d", ret);
1367 return ret;
1368 }
1369 return RET_OK;
1370 }
1371
StubInjectKeyEvent(MessageParcel & data,MessageParcel & reply)1372 int32_t MultimodalInputConnectStub::StubInjectKeyEvent(MessageParcel& data, MessageParcel& reply)
1373 {
1374 CALL_DEBUG_ENTER;
1375 if (!IsRunning()) {
1376 MMI_HILOGE("Service is not running");
1377 return MMISERVICE_NOT_RUNNING;
1378 }
1379 auto event = KeyEvent::Create();
1380 CHKPR(event, ERROR_NULL_POINTER);
1381 if (!event->ReadFromParcel(data)) {
1382 MMI_HILOGE("Read Key Event failed");
1383 return IPC_PROXY_DEAD_OBJECT_ERR;
1384 }
1385 LogTracer lt(event->GetId(), event->GetEventType(), event->GetKeyAction());
1386 bool isNativeInject { false };
1387 READBOOL(data, isNativeInject, IPC_PROXY_DEAD_OBJECT_ERR);
1388 if (!isNativeInject && !PER_HELPER->VerifySystemApp()) {
1389 MMI_HILOGE("Verify system APP failed");
1390 return ERROR_NOT_SYSAPI;
1391 }
1392 EndLogTraceId(event->GetId());
1393 event->UpdateId();
1394 LogTracer lt1(event->GetId(), event->GetEventType(), event->GetKeyAction());
1395 int32_t ret = InjectKeyEvent(event, isNativeInject);
1396 if (ret != RET_OK) {
1397 MMI_HILOGE("InjectKeyEvent failed, ret:%{public}d", ret);
1398 return ret;
1399 }
1400 return RET_OK;
1401 }
1402
StubInjectPointerEvent(MessageParcel & data,MessageParcel & reply)1403 int32_t MultimodalInputConnectStub::StubInjectPointerEvent(MessageParcel& data, MessageParcel& reply)
1404 {
1405 CALL_DEBUG_ENTER;
1406 if (!IsRunning()) {
1407 MMI_HILOGE("Service is not running");
1408 return MMISERVICE_NOT_RUNNING;
1409 }
1410 auto pointerEvent = PointerEvent::Create();
1411 CHKPR(pointerEvent, ERROR_NULL_POINTER);
1412 if (!pointerEvent->ReadFromParcel(data)) {
1413 MMI_HILOGE("Read Pointer Event failed");
1414 return IPC_PROXY_DEAD_OBJECT_ERR;
1415 }
1416 bool isNativeInject { false };
1417 READBOOL(data, isNativeInject, IPC_PROXY_DEAD_OBJECT_ERR);
1418 if (!isNativeInject && !PER_HELPER->VerifySystemApp()) {
1419 MMI_HILOGE("Verify system APP failed");
1420 return ERROR_NOT_SYSAPI;
1421 }
1422 int32_t ret = InjectPointerEvent(pointerEvent, isNativeInject);
1423 if (ret != RET_OK) {
1424 MMI_HILOGE("Call InjectPointerEvent failed ret:%{public}d", ret);
1425 return ret;
1426 }
1427 return RET_OK;
1428 }
1429
StubSetAnrListener(MessageParcel & data,MessageParcel & reply)1430 int32_t MultimodalInputConnectStub::StubSetAnrListener(MessageParcel& data, MessageParcel& reply)
1431 {
1432 CALL_DEBUG_ENTER;
1433 if (!PER_HELPER->VerifySystemApp()) {
1434 MMI_HILOGE("Verify system APP failed");
1435 return ERROR_NOT_SYSAPI;
1436 }
1437 if (!IsRunning()) {
1438 MMI_HILOGE("Service is not running");
1439 return MMISERVICE_NOT_RUNNING;
1440 }
1441 int32_t ret = SetAnrObserver();
1442 if (ret != RET_OK) {
1443 MMI_HILOGE("Call SetAnrObserver failed, ret:%{public}d", ret);
1444 }
1445 return ret;
1446 }
1447
1448
StubGetDisplayBindInfo(MessageParcel & data,MessageParcel & reply)1449 int32_t MultimodalInputConnectStub::StubGetDisplayBindInfo(MessageParcel& data, MessageParcel& reply)
1450 {
1451 CALL_DEBUG_ENTER;
1452 if (!PER_HELPER->VerifySystemApp()) {
1453 MMI_HILOGE("Verify system APP failed");
1454 return ERROR_NOT_SYSAPI;
1455 }
1456 if (!IsRunning()) {
1457 MMI_HILOGE("Service is not running");
1458 return MMISERVICE_NOT_RUNNING;
1459 }
1460 DisplayBindInfos infos;
1461 int32_t ret = GetDisplayBindInfo(infos);
1462 if (ret != RET_OK) {
1463 MMI_HILOGE("Call GetDisplayBindInfo failed, ret:%{public}d", ret);
1464 return ret;
1465 }
1466 int32_t size = static_cast<int32_t>(infos.size());
1467 WRITEINT32(reply, size, ERR_INVALID_VALUE);
1468 infos.reserve(size);
1469 for (const auto &info : infos) {
1470 WRITEINT32(reply, info.inputDeviceId, ERR_INVALID_VALUE);
1471 WRITESTRING(reply, info.inputDeviceName, ERR_INVALID_VALUE);
1472 WRITEINT32(reply, info.displayId, ERR_INVALID_VALUE);
1473 WRITESTRING(reply, info.displayName, ERR_INVALID_VALUE);
1474 }
1475 return RET_OK;
1476 }
1477
StubGetAllMmiSubscribedEvents(MessageParcel & data,MessageParcel & reply)1478 int32_t MultimodalInputConnectStub::StubGetAllMmiSubscribedEvents(MessageParcel& data, MessageParcel& reply)
1479 {
1480 CALL_DEBUG_ENTER;
1481 if (!PER_HELPER->VerifySystemApp()) {
1482 MMI_HILOGE("Verify system APP failed");
1483 return ERROR_NOT_SYSAPI;
1484 }
1485 if (!IsRunning()) {
1486 MMI_HILOGE("Service is not running");
1487 return MMISERVICE_NOT_RUNNING;
1488 }
1489 std::map<std::tuple<int32_t, int32_t, std::string>, int32_t> datas;
1490 int32_t ret = GetAllMmiSubscribedEvents(datas);
1491 if (ret != RET_OK) {
1492 MMI_HILOGE("Call GetDisplayBindInfo failed, ret:%{public}d", ret);
1493 return ret;
1494 }
1495 int32_t size = static_cast<int32_t>(datas.size());
1496 WRITEINT32(reply, size, ERR_INVALID_VALUE);
1497 for (const auto &data : datas) {
1498 WRITEINT32(reply, std::get<TUPLE_PID>(data.first), ERR_INVALID_VALUE);
1499 WRITEINT32(reply, std::get<TUPLE_UID>(data.first), ERR_INVALID_VALUE);
1500 WRITESTRING(reply, std::get<TUPLE_NAME>(data.first), ERR_INVALID_VALUE);
1501 WRITEINT32(reply, data.second, ERR_INVALID_VALUE);
1502 }
1503 return RET_OK;
1504 }
1505
StubSetDisplayBind(MessageParcel & data,MessageParcel & reply)1506 int32_t MultimodalInputConnectStub::StubSetDisplayBind(MessageParcel& data, MessageParcel& reply)
1507 {
1508 CALL_DEBUG_ENTER;
1509 if (!PER_HELPER->VerifySystemApp()) {
1510 MMI_HILOGE("Verify system APP failed");
1511 return ERROR_NOT_SYSAPI;
1512 }
1513 if (!IsRunning()) {
1514 MMI_HILOGE("Service is not running");
1515 return MMISERVICE_NOT_RUNNING;
1516 }
1517 int32_t inputDeviceId = -1;
1518 READINT32(data, inputDeviceId, ERR_INVALID_VALUE);
1519 int32_t displayId = -1;
1520 READINT32(data, displayId, ERR_INVALID_VALUE);
1521 std::string msg;
1522 int32_t ret = SetDisplayBind(inputDeviceId, displayId, msg);
1523 if (ret != RET_OK) {
1524 MMI_HILOGE("Call SetDisplayBind failed, ret:%{public}d", ret);
1525 }
1526 WRITESTRING(reply, msg, ERR_INVALID_VALUE);
1527 return ret;
1528 }
1529
StubGetFunctionKeyState(MessageParcel & data,MessageParcel & reply)1530 int32_t MultimodalInputConnectStub::StubGetFunctionKeyState(MessageParcel &data, MessageParcel &reply)
1531 {
1532 CALL_DEBUG_ENTER;
1533 if (!PER_HELPER->VerifySystemApp()) {
1534 MMI_HILOGE("Verify system APP failed");
1535 return ERROR_NOT_SYSAPI;
1536 }
1537 if (!IsRunning()) {
1538 MMI_HILOGE("Service is not running");
1539 return MMISERVICE_NOT_RUNNING;
1540 }
1541
1542 int32_t funcKey { 0 };
1543 bool state { false };
1544 READINT32(data, funcKey, IPC_PROXY_DEAD_OBJECT_ERR);
1545 int32_t ret = GetFunctionKeyState(funcKey, state);
1546 if (ret != RET_OK) {
1547 MMI_HILOGE("Call GetKeyboardEnableState failed ret:%{public}d", ret);
1548 return ret;
1549 }
1550
1551 WRITEBOOL(reply, state, IPC_PROXY_DEAD_OBJECT_ERR);
1552 return RET_OK;
1553 }
1554
StubSetFunctionKeyState(MessageParcel & data,MessageParcel & reply)1555 int32_t MultimodalInputConnectStub::StubSetFunctionKeyState(MessageParcel &data, MessageParcel &reply)
1556 {
1557 CALL_DEBUG_ENTER;
1558 if (!PER_HELPER->VerifySystemApp()) {
1559 MMI_HILOGE("Verify system APP failed");
1560 return ERROR_NOT_SYSAPI;
1561 }
1562 if (!IsRunning()) {
1563 MMI_HILOGE("Service is not running");
1564 return MMISERVICE_NOT_RUNNING;
1565 }
1566
1567 int32_t funcKey { 0 };
1568 bool enable { false };
1569 READINT32(data, funcKey, IPC_PROXY_DEAD_OBJECT_ERR);
1570 READBOOL(data, enable, IPC_PROXY_DEAD_OBJECT_ERR);
1571 int32_t ret = SetFunctionKeyState(funcKey, enable);
1572 if (ret != RET_OK) {
1573 MMI_HILOGE("Call SetFunctionKeyState failed ret:%{public}d", ret);
1574 }
1575 return ret;
1576 }
1577
StubSetPointerLocation(MessageParcel & data,MessageParcel & reply)1578 int32_t MultimodalInputConnectStub::StubSetPointerLocation(MessageParcel &data, MessageParcel &reply)
1579 {
1580 CALL_DEBUG_ENTER;
1581 if (!PER_HELPER->VerifySystemApp()) {
1582 MMI_HILOGE("StubSetPointerLocation Verify system APP failed");
1583 return ERROR_NOT_SYSAPI;
1584 }
1585 if (!PER_HELPER->CheckMouseCursor()) {
1586 MMI_HILOGE("Mouse cursor permission check failed");
1587 return ERROR_NO_PERMISSION;
1588 }
1589 if (!IsRunning()) {
1590 MMI_HILOGE("Service is not running");
1591 return MMISERVICE_NOT_RUNNING;
1592 }
1593
1594 int32_t x = 0;
1595 int32_t y = 0;
1596 READINT32(data, x, IPC_PROXY_DEAD_OBJECT_ERR);
1597 READINT32(data, y, IPC_PROXY_DEAD_OBJECT_ERR);
1598 int32_t ret = SetPointerLocation(x, y);
1599 if (ret != RET_OK) {
1600 MMI_HILOGE("Call SetFunctionKeyState failed ret:%{public}d", ret);
1601 }
1602 return ret;
1603 }
1604
StubSetMouseCaptureMode(MessageParcel & data,MessageParcel & reply)1605 int32_t MultimodalInputConnectStub::StubSetMouseCaptureMode(MessageParcel& data, MessageParcel& reply)
1606 {
1607 CALL_DEBUG_ENTER;
1608 if (!PER_HELPER->VerifySystemApp()) {
1609 MMI_HILOGE("Verify system APP failed");
1610 return ERROR_NOT_SYSAPI;
1611 }
1612 int32_t windowId = -1;
1613 bool isCaptureMode = false;
1614 READINT32(data, windowId, IPC_PROXY_DEAD_OBJECT_ERR);
1615 READBOOL(data, isCaptureMode, IPC_PROXY_DEAD_OBJECT_ERR);
1616 int32_t ret = SetMouseCaptureMode(windowId, isCaptureMode);
1617 if (ret != RET_OK) {
1618 MMI_HILOGE("Fail to call SetMouseCaptureMode, ret:%{public}d", ret);
1619 }
1620 return ret;
1621 }
1622
StubGetWindowPid(MessageParcel & data,MessageParcel & reply)1623 int32_t MultimodalInputConnectStub::StubGetWindowPid(MessageParcel& data, MessageParcel& reply)
1624 {
1625 CALL_DEBUG_ENTER;
1626 if (!IsRunning()) {
1627 MMI_HILOGE("Service is not running");
1628 return MMISERVICE_NOT_RUNNING;
1629 }
1630
1631 int32_t windowId = 0;
1632 READINT32(data, windowId, IPC_PROXY_DEAD_OBJECT_ERR);
1633 int32_t ret = GetWindowPid(windowId);
1634 if (ret == RET_ERR) {
1635 MMI_HILOGE("Get window pid failed");
1636 }
1637 WRITEINT32(reply, ret, ERR_INVALID_VALUE);
1638 return RET_OK;
1639 }
1640
StubAppendExtraData(MessageParcel & data,MessageParcel & reply)1641 int32_t MultimodalInputConnectStub::StubAppendExtraData(MessageParcel& data, MessageParcel& reply)
1642 {
1643 CALL_DEBUG_ENTER;
1644 if (!PER_HELPER->VerifySystemApp()) {
1645 MMI_HILOGE("Verify system APP failed");
1646 return ERROR_NOT_SYSAPI;
1647 }
1648 if (!IsRunning()) {
1649 MMI_HILOGE("Service is not running");
1650 return MMISERVICE_NOT_RUNNING;
1651 }
1652 ExtraData extraData;
1653 READBOOL(data, extraData.appended, IPC_PROXY_DEAD_OBJECT_ERR);
1654 int32_t size = 0;
1655 READINT32(data, size, IPC_PROXY_DEAD_OBJECT_ERR);
1656 if (size > ExtraData::MAX_BUFFER_SIZE) {
1657 MMI_HILOGE("Append extra data failed, buffer is oversize:%{public}d", size);
1658 return ERROR_OVER_SIZE_BUFFER;
1659 }
1660 uint8_t buffer = 0;
1661 for (int32_t i = 0; i < size; ++i) {
1662 READUINT8(data, buffer, IPC_PROXY_DEAD_OBJECT_ERR);
1663 extraData.buffer.push_back(buffer);
1664 }
1665 READINT32(data, extraData.sourceType, IPC_PROXY_DEAD_OBJECT_ERR);
1666 READINT32(data, extraData.pointerId, IPC_PROXY_DEAD_OBJECT_ERR);
1667 READINT32(data, extraData.pullId, IPC_PROXY_DEAD_OBJECT_ERR);
1668 int32_t ret = AppendExtraData(extraData);
1669 if (ret != RET_OK) {
1670 MMI_HILOGE("Fail to call AppendExtraData, ret:%{public}d", ret);
1671 }
1672 return ret;
1673 }
1674
StubEnableCombineKey(MessageParcel & data,MessageParcel & reply)1675 int32_t MultimodalInputConnectStub::StubEnableCombineKey(MessageParcel& data, MessageParcel& reply)
1676 {
1677 CALL_DEBUG_ENTER;
1678 if (!PER_HELPER->VerifySystemApp()) {
1679 MMI_HILOGE("Verify system APP failed");
1680 return ERROR_NOT_SYSAPI;
1681 }
1682 if (!IsRunning()) {
1683 MMI_HILOGE("Service is not running");
1684 return MMISERVICE_NOT_RUNNING;
1685 }
1686 bool enable;
1687 READBOOL(data, enable, IPC_PROXY_DEAD_OBJECT_ERR);
1688 int32_t ret = EnableCombineKey(enable);
1689 if (ret != RET_OK) {
1690 MMI_HILOGE("Call EnableCombineKey failed, ret:%{public}d", ret);
1691 }
1692 return ret;
1693 }
1694
StubEnableInputDevice(MessageParcel & data,MessageParcel & reply)1695 int32_t MultimodalInputConnectStub::StubEnableInputDevice(MessageParcel& data, MessageParcel& reply)
1696 {
1697 CALL_DEBUG_ENTER;
1698 MMI_HILOGW("EnableInputDevice is not supported yet");
1699 return RET_OK;
1700 }
1701
StubSetKeyDownDuration(MessageParcel & data,MessageParcel & reply)1702 int32_t MultimodalInputConnectStub::StubSetKeyDownDuration(MessageParcel& data, MessageParcel& reply)
1703 {
1704 CALL_DEBUG_ENTER;
1705 if (!PER_HELPER->VerifySystemApp()) {
1706 MMI_HILOGE("Verify system APP failed");
1707 return ERROR_NOT_SYSAPI;
1708 }
1709 if (!IsRunning()) {
1710 MMI_HILOGE("Service is not running");
1711 return MMISERVICE_NOT_RUNNING;
1712 }
1713 std::string businessId;
1714 READSTRING(data, businessId, IPC_PROXY_DEAD_OBJECT_ERR);
1715 int32_t delay = 0;
1716 READINT32(data, delay, IPC_PROXY_DEAD_OBJECT_ERR);
1717 int32_t ret = SetKeyDownDuration(businessId, delay);
1718 if (ret != RET_OK) {
1719 MMI_HILOGE("Set key down duration failed ret:%{public}d", ret);
1720 return ret;
1721 }
1722 return RET_OK;
1723 }
1724
VerifyTouchPadSetting(void)1725 int32_t MultimodalInputConnectStub::VerifyTouchPadSetting(void)
1726 {
1727 if (!IsRunning()) {
1728 MMI_HILOGE("Service is not running");
1729 return MMISERVICE_NOT_RUNNING;
1730 }
1731
1732 if (!PER_HELPER->VerifySystemApp()) {
1733 MMI_HILOGE("Verify system APP failed");
1734 return ERROR_NOT_SYSAPI;
1735 }
1736
1737 return RET_OK;
1738 }
1739
StubSetTouchpadScrollSwitch(MessageParcel & data,MessageParcel & reply)1740 int32_t MultimodalInputConnectStub::StubSetTouchpadScrollSwitch(MessageParcel& data, MessageParcel& reply)
1741 {
1742 CALL_DEBUG_ENTER;
1743 int32_t ret = VerifyTouchPadSetting();
1744 if (ret != RET_OK) {
1745 MMI_HILOGE("Verify touchpad setting failed");
1746 return ret;
1747 }
1748
1749 bool switchFlag = true;
1750 READBOOL(data, switchFlag, IPC_PROXY_DEAD_OBJECT_ERR);
1751 ret = SetTouchpadScrollSwitch(switchFlag);
1752 if (ret != RET_OK) {
1753 MMI_HILOGE("Set touchpad scroll switch failed ret:%{public}d", ret);
1754 return ret;
1755 }
1756 return RET_OK;
1757 }
1758
StubGetTouchpadScrollSwitch(MessageParcel & data,MessageParcel & reply)1759 int32_t MultimodalInputConnectStub::StubGetTouchpadScrollSwitch(MessageParcel& data, MessageParcel& reply)
1760 {
1761 CALL_DEBUG_ENTER;
1762 int32_t ret = VerifyTouchPadSetting();
1763 if (ret != RET_OK) {
1764 MMI_HILOGE("Verify touchpad setting failed");
1765 return ret;
1766 }
1767
1768 bool switchFlag = true;
1769 ret = GetTouchpadScrollSwitch(switchFlag);
1770 if (ret != RET_OK) {
1771 MMI_HILOGE("Call GetTouchpadScrollSwitch failed ret:%{public}d", ret);
1772 return ret;
1773 }
1774 WRITEBOOL(reply, switchFlag, IPC_STUB_WRITE_PARCEL_ERR);
1775 MMI_HILOGD("Touchpad scroll switch :%{public}d, ret:%{public}d", switchFlag, ret);
1776 return RET_OK;
1777 }
1778
StubSetTouchpadScrollDirection(MessageParcel & data,MessageParcel & reply)1779 int32_t MultimodalInputConnectStub::StubSetTouchpadScrollDirection(MessageParcel& data, MessageParcel& reply)
1780 {
1781 CALL_DEBUG_ENTER;
1782 int32_t ret = VerifyTouchPadSetting();
1783 if (ret != RET_OK) {
1784 MMI_HILOGE("Verify touchpad setting failed");
1785 return ret;
1786 }
1787
1788 bool state = true;
1789 READBOOL(data, state, IPC_PROXY_DEAD_OBJECT_ERR);
1790 ret = SetTouchpadScrollDirection(state);
1791 if (ret != RET_OK) {
1792 MMI_HILOGE("Set touchpad scroll direction switch failed ret:%{public}d", ret);
1793 return ret;
1794 }
1795 return RET_OK;
1796 }
1797
StubGetTouchpadScrollDirection(MessageParcel & data,MessageParcel & reply)1798 int32_t MultimodalInputConnectStub::StubGetTouchpadScrollDirection(MessageParcel& data, MessageParcel& reply)
1799 {
1800 CALL_DEBUG_ENTER;
1801 int32_t ret = VerifyTouchPadSetting();
1802 if (ret != RET_OK) {
1803 MMI_HILOGE("Verify touchpad setting failed");
1804 return ret;
1805 }
1806
1807 bool state = true;
1808 ret = GetTouchpadScrollDirection(state);
1809 if (ret != RET_OK) {
1810 MMI_HILOGE("Call GetTouchpadScrollDirection failed ret:%{public}d", ret);
1811 return ret;
1812 }
1813 WRITEBOOL(reply, state, IPC_STUB_WRITE_PARCEL_ERR);
1814 MMI_HILOGD("Touchpad scroll direction switch state:%{public}d, ret:%{public}d", state, ret);
1815 return RET_OK;
1816 }
1817
StubSetTouchpadTapSwitch(MessageParcel & data,MessageParcel & reply)1818 int32_t MultimodalInputConnectStub::StubSetTouchpadTapSwitch(MessageParcel& data, MessageParcel& reply)
1819 {
1820 CALL_DEBUG_ENTER;
1821 int32_t ret = VerifyTouchPadSetting();
1822 if (ret != RET_OK) {
1823 MMI_HILOGE("Verify touchpad setting failed");
1824 return ret;
1825 }
1826
1827 bool switchFlag = true;
1828 READBOOL(data, switchFlag, IPC_PROXY_DEAD_OBJECT_ERR);
1829 ret = SetTouchpadTapSwitch(switchFlag);
1830 if (ret != RET_OK) {
1831 MMI_HILOGE("Set touchpad tap switch failed ret:%{public}d", ret);
1832 return ret;
1833 }
1834 return RET_OK;
1835 }
1836
StubGetTouchpadTapSwitch(MessageParcel & data,MessageParcel & reply)1837 int32_t MultimodalInputConnectStub::StubGetTouchpadTapSwitch(MessageParcel& data, MessageParcel& reply)
1838 {
1839 CALL_DEBUG_ENTER;
1840 int32_t ret = VerifyTouchPadSetting();
1841 if (ret != RET_OK) {
1842 MMI_HILOGE("Verify touchpad setting failed");
1843 return ret;
1844 }
1845
1846 bool switchFlag = true;
1847 ret = GetTouchpadTapSwitch(switchFlag);
1848 if (ret != RET_OK) {
1849 MMI_HILOGE("Call GetTouchpadTapSwitch failed ret:%{public}d", ret);
1850 return ret;
1851 }
1852 WRITEBOOL(reply, switchFlag, IPC_STUB_WRITE_PARCEL_ERR);
1853 MMI_HILOGD("Touchpad tap switchFlag:%{public}d, ret:%{public}d", switchFlag, ret);
1854 return RET_OK;
1855 }
1856
StubSetTouchpadPointerSpeed(MessageParcel & data,MessageParcel & reply)1857 int32_t MultimodalInputConnectStub::StubSetTouchpadPointerSpeed(MessageParcel& data, MessageParcel& reply)
1858 {
1859 CALL_DEBUG_ENTER;
1860 int32_t ret = VerifyTouchPadSetting();
1861 if (ret != RET_OK) {
1862 MMI_HILOGE("Verify touchpad setting failed");
1863 return ret;
1864 }
1865
1866 int32_t speed = 1;
1867 READINT32(data, speed, IPC_PROXY_DEAD_OBJECT_ERR);
1868 ret = SetTouchpadPointerSpeed(speed);
1869 if (ret != RET_OK) {
1870 MMI_HILOGE("Set touchpad pointer speed failed ret:%{public}d", ret);
1871 return ret;
1872 }
1873 return RET_OK;
1874 }
1875
StubGetTouchpadPointerSpeed(MessageParcel & data,MessageParcel & reply)1876 int32_t MultimodalInputConnectStub::StubGetTouchpadPointerSpeed(MessageParcel& data, MessageParcel& reply)
1877 {
1878 CALL_DEBUG_ENTER;
1879 int32_t ret = VerifyTouchPadSetting();
1880 if (ret != RET_OK) {
1881 MMI_HILOGE("Verify touchpad setting failed");
1882 return ret;
1883 }
1884
1885 int32_t speed = 1;
1886 ret = GetTouchpadPointerSpeed(speed);
1887 if (ret != RET_OK) {
1888 MMI_HILOGE("Call GetTouchpadPointerSpeed failed ret:%{public}d", ret);
1889 return ret;
1890 }
1891 WRITEINT32(reply, speed, IPC_STUB_WRITE_PARCEL_ERR);
1892 MMI_HILOGD("Touchpad pointer speed:%{public}d, ret:%{public}d", speed, ret);
1893 return RET_OK;
1894 }
1895
StubSetKeyboardRepeatDelay(MessageParcel & data,MessageParcel & reply)1896 int32_t MultimodalInputConnectStub::StubSetKeyboardRepeatDelay(MessageParcel& data, MessageParcel& reply)
1897 {
1898 CALL_DEBUG_ENTER;
1899 if (!IsRunning()) {
1900 MMI_HILOGE("Service is not running");
1901 return MMISERVICE_NOT_RUNNING;
1902 }
1903 if (!PER_HELPER->VerifySystemApp()) {
1904 MMI_HILOGE("Verify system APP failed");
1905 return ERROR_NOT_SYSAPI;
1906 }
1907 int32_t delay = 0;
1908 READINT32(data, delay, IPC_PROXY_DEAD_OBJECT_ERR);
1909 int32_t ret = SetKeyboardRepeatDelay(delay);
1910 if (ret != RET_OK) {
1911 MMI_HILOGE("Set keyboard repeat delay failed ret:%{public}d", ret);
1912 return RET_ERR;
1913 }
1914 return RET_OK;
1915 }
1916
StubSetKeyboardRepeatRate(MessageParcel & data,MessageParcel & reply)1917 int32_t MultimodalInputConnectStub::StubSetKeyboardRepeatRate(MessageParcel& data, MessageParcel& reply)
1918 {
1919 CALL_DEBUG_ENTER;
1920 if (!IsRunning()) {
1921 MMI_HILOGE("Service is not running");
1922 return MMISERVICE_NOT_RUNNING;
1923 }
1924 if (!PER_HELPER->VerifySystemApp()) {
1925 MMI_HILOGE("Verify system APP failed");
1926 return ERROR_NOT_SYSAPI;
1927 }
1928 int32_t rate = 0;
1929 READINT32(data, rate, IPC_PROXY_DEAD_OBJECT_ERR);
1930 int32_t ret = SetKeyboardRepeatRate(rate);
1931 if (ret != RET_OK) {
1932 MMI_HILOGE("Set keyboard repeat rate failed ret:%{public}d", ret);
1933 return RET_ERR;
1934 }
1935 return RET_OK;
1936 }
1937
StubGetKeyboardRepeatDelay(MessageParcel & data,MessageParcel & reply)1938 int32_t MultimodalInputConnectStub::StubGetKeyboardRepeatDelay(MessageParcel& data, MessageParcel& reply)
1939 {
1940 CALL_DEBUG_ENTER;
1941 if (!IsRunning()) {
1942 MMI_HILOGE("Service is not running");
1943 return MMISERVICE_NOT_RUNNING;
1944 }
1945 if (!PER_HELPER->VerifySystemApp()) {
1946 MMI_HILOGE("Verify system APP failed");
1947 return ERROR_NOT_SYSAPI;
1948 }
1949 int32_t delay = 0;
1950 int32_t ret = GetKeyboardRepeatDelay(delay);
1951 if (ret != RET_OK) {
1952 MMI_HILOGE("Get keyboard repeat delay failed ret:%{public}d", ret);
1953 return RET_ERR;
1954 }
1955 WRITEINT32(reply, delay, IPC_STUB_WRITE_PARCEL_ERR);
1956 return RET_OK;
1957 }
1958
StubGetKeyboardRepeatRate(MessageParcel & data,MessageParcel & reply)1959 int32_t MultimodalInputConnectStub::StubGetKeyboardRepeatRate(MessageParcel& data, MessageParcel& reply)
1960 {
1961 CALL_DEBUG_ENTER;
1962 if (!IsRunning()) {
1963 MMI_HILOGE("Service is not running");
1964 return MMISERVICE_NOT_RUNNING;
1965 }
1966 if (!PER_HELPER->VerifySystemApp()) {
1967 MMI_HILOGE("Verify system APP failed");
1968 return ERROR_NOT_SYSAPI;
1969 }
1970 int32_t rate = 0;
1971 int32_t ret = GetKeyboardRepeatRate(rate);
1972 if (ret != RET_OK) {
1973 MMI_HILOGE("Get keyboard repeat rate failed ret:%{public}d", ret);
1974 return RET_ERR;
1975 }
1976 WRITEINT32(reply, rate, IPC_STUB_WRITE_PARCEL_ERR);
1977 return RET_OK;
1978 }
1979
StubSetTouchpadPinchSwitch(MessageParcel & data,MessageParcel & reply)1980 int32_t MultimodalInputConnectStub::StubSetTouchpadPinchSwitch(MessageParcel& data, MessageParcel& reply)
1981 {
1982 CALL_DEBUG_ENTER;
1983 int32_t ret = VerifyTouchPadSetting();
1984 if (ret != RET_OK) {
1985 MMI_HILOGE("Verify touchpad setting failed");
1986 return ret;
1987 }
1988
1989 bool switchFlag = true;
1990 READBOOL(data, switchFlag, IPC_PROXY_DEAD_OBJECT_ERR);
1991 ret = SetTouchpadPinchSwitch(switchFlag);
1992 if (ret != RET_OK) {
1993 MMI_HILOGE("Set touchpad pinch switch failed ret:%{public}d", ret);
1994 return ret;
1995 }
1996 return RET_OK;
1997 }
1998
StubGetTouchpadPinchSwitch(MessageParcel & data,MessageParcel & reply)1999 int32_t MultimodalInputConnectStub::StubGetTouchpadPinchSwitch(MessageParcel& data, MessageParcel& reply)
2000 {
2001 CALL_DEBUG_ENTER;
2002 int32_t ret = VerifyTouchPadSetting();
2003 if (ret != RET_OK) {
2004 MMI_HILOGE("Verify touchpad setting failed");
2005 return ret;
2006 }
2007
2008 bool switchFlag = true;
2009 ret = GetTouchpadPinchSwitch(switchFlag);
2010 if (ret != RET_OK) {
2011 MMI_HILOGE("Call GetTouchpadPinchSwitch failed ret:%{public}d", ret);
2012 return ret;
2013 }
2014 WRITEBOOL(reply, switchFlag, IPC_STUB_WRITE_PARCEL_ERR);
2015 MMI_HILOGD("Touchpad pinch switchFlag:%{public}d, ret:%{public}d", switchFlag, ret);
2016 return RET_OK;
2017 }
2018
StubSetTouchpadSwipeSwitch(MessageParcel & data,MessageParcel & reply)2019 int32_t MultimodalInputConnectStub::StubSetTouchpadSwipeSwitch(MessageParcel& data, MessageParcel& reply)
2020 {
2021 CALL_DEBUG_ENTER;
2022 int32_t ret = VerifyTouchPadSetting();
2023 if (ret != RET_OK) {
2024 MMI_HILOGE("Verify touchpad setting failed");
2025 return ret;
2026 }
2027
2028 bool switchFlag = true;
2029 READBOOL(data, switchFlag, IPC_PROXY_DEAD_OBJECT_ERR);
2030 ret = SetTouchpadSwipeSwitch(switchFlag);
2031 if (ret != RET_OK) {
2032 MMI_HILOGE("Set touchpad swipe switch failed ret:%{public}d", ret);
2033 return ret;
2034 }
2035 return RET_OK;
2036 }
2037
StubGetTouchpadSwipeSwitch(MessageParcel & data,MessageParcel & reply)2038 int32_t MultimodalInputConnectStub::StubGetTouchpadSwipeSwitch(MessageParcel& data, MessageParcel& reply)
2039 {
2040 CALL_DEBUG_ENTER;
2041 int32_t ret = VerifyTouchPadSetting();
2042 if (ret != RET_OK) {
2043 MMI_HILOGE("Verify touchpad setting failed");
2044 return ret;
2045 }
2046
2047 bool switchFlag = true;
2048 ret = GetTouchpadSwipeSwitch(switchFlag);
2049 if (ret != RET_OK) {
2050 MMI_HILOGE("Call GetTouchpadSwipeSwitch failed ret:%{public}d", ret);
2051 return ret;
2052 }
2053 WRITEBOOL(reply, switchFlag, IPC_STUB_WRITE_PARCEL_ERR);
2054 MMI_HILOGD("Touchpad swipe switchFlag:%{public}d, ret:%{public}d", switchFlag, ret);
2055 return RET_OK;
2056 }
2057
StubSetTouchpadRightClickType(MessageParcel & data,MessageParcel & reply)2058 int32_t MultimodalInputConnectStub::StubSetTouchpadRightClickType(MessageParcel& data, MessageParcel& reply)
2059 {
2060 CALL_DEBUG_ENTER;
2061 int32_t ret = VerifyTouchPadSetting();
2062 if (ret != RET_OK) {
2063 MMI_HILOGE("Verify touchpad setting failed");
2064 return ret;
2065 }
2066
2067 int32_t type = 1;
2068 READINT32(data, type, IPC_PROXY_DEAD_OBJECT_ERR);
2069 ret = SetTouchpadRightClickType(type);
2070 if (ret != RET_OK) {
2071 MMI_HILOGE("Set touchpad right button menu type failed ret:%{public}d", ret);
2072 return ret;
2073 }
2074 return RET_OK;
2075 }
2076
StubGetTouchpadRightClickType(MessageParcel & data,MessageParcel & reply)2077 int32_t MultimodalInputConnectStub::StubGetTouchpadRightClickType(MessageParcel& data, MessageParcel& reply)
2078 {
2079 CALL_DEBUG_ENTER;
2080 int32_t ret = VerifyTouchPadSetting();
2081 if (ret != RET_OK) {
2082 MMI_HILOGE("Verify touchpad setting failed");
2083 return ret;
2084 }
2085
2086 int32_t type = 1;
2087 ret = GetTouchpadRightClickType(type);
2088 if (ret != RET_OK) {
2089 MMI_HILOGE("Call GetTouchpadRightClickType failed ret:%{public}d", ret);
2090 return ret;
2091 }
2092 WRITEINT32(reply, type, IPC_STUB_WRITE_PARCEL_ERR);
2093 MMI_HILOGD("Touchpad right button menu type:%{public}d, ret:%{public}d", type, ret);
2094 return RET_OK;
2095 }
2096
StubSetTouchpadRotateSwitch(MessageParcel & data,MessageParcel & reply)2097 int32_t MultimodalInputConnectStub::StubSetTouchpadRotateSwitch(MessageParcel& data, MessageParcel& reply)
2098 {
2099 CALL_DEBUG_ENTER;
2100 int32_t ret = VerifyTouchPadSetting();
2101 if (ret != RET_OK) {
2102 MMI_HILOGE("Verify touchpad setting failed");
2103 return ret;
2104 }
2105
2106 bool rotateSwitch = true;
2107 READBOOL(data, rotateSwitch, IPC_PROXY_DEAD_OBJECT_ERR);
2108 ret = SetTouchpadRotateSwitch(rotateSwitch);
2109 if (ret != RET_OK) {
2110 MMI_HILOGE("Set touchpad rotate switch failed ret:%{public}d", ret);
2111 return ret;
2112 }
2113 return RET_OK;
2114 }
2115
StubGetTouchpadRotateSwitch(MessageParcel & data,MessageParcel & reply)2116 int32_t MultimodalInputConnectStub::StubGetTouchpadRotateSwitch(MessageParcel& data, MessageParcel& reply)
2117 {
2118 CALL_DEBUG_ENTER;
2119 int32_t ret = VerifyTouchPadSetting();
2120 if (ret != RET_OK) {
2121 MMI_HILOGE("Verify touchpad setting failed");
2122 return ret;
2123 }
2124
2125 bool rotateSwitch = true;
2126 ret = GetTouchpadRotateSwitch(rotateSwitch);
2127 if (ret != RET_OK) {
2128 MMI_HILOGE("GetTouchpadRotateSwitch failed ret:%{public}d", ret);
2129 return ret;
2130 }
2131 WRITEBOOL(reply, rotateSwitch, IPC_STUB_WRITE_PARCEL_ERR);
2132 MMI_HILOGD("Touchpad rotate switch:%{public}d, ret:%{public}d", rotateSwitch, ret);
2133 return RET_OK;
2134 }
2135
StubSetTouchpadDoubleTapAndDragState(MessageParcel & data,MessageParcel & reply)2136 int32_t MultimodalInputConnectStub::StubSetTouchpadDoubleTapAndDragState(MessageParcel& data, MessageParcel& reply)
2137 {
2138 CALL_DEBUG_ENTER;
2139 int32_t ret = VerifyTouchPadSetting();
2140 if (ret != RET_OK) {
2141 MMI_HILOGE("Verify touchpad setting failed");
2142 return ret;
2143 }
2144
2145 bool switchFlag = true;
2146 READBOOL(data, switchFlag, IPC_PROXY_DEAD_OBJECT_ERR);
2147 ret = SetTouchpadDoubleTapAndDragState(switchFlag);
2148 if (ret != RET_OK) {
2149 MMI_HILOGE("Set touchpad double tap and drag switch failed ret:%{public}d", ret);
2150 return ret;
2151 }
2152 return RET_OK;
2153 }
2154
StubGetTouchpadDoubleTapAndDragState(MessageParcel & data,MessageParcel & reply)2155 int32_t MultimodalInputConnectStub::StubGetTouchpadDoubleTapAndDragState(MessageParcel& data, MessageParcel& reply)
2156 {
2157 CALL_DEBUG_ENTER;
2158 int32_t ret = VerifyTouchPadSetting();
2159 if (ret != RET_OK) {
2160 MMI_HILOGE("Verify touchpad setting failed");
2161 return ret;
2162 }
2163
2164 bool switchFlag = true;
2165 ret = GetTouchpadDoubleTapAndDragState(switchFlag);
2166 if (ret != RET_OK) {
2167 MMI_HILOGE("GetTouchpadDoubleTapAndDragState failed ret:%{public}d", ret);
2168 return ret;
2169 }
2170 WRITEBOOL(reply, switchFlag, IPC_STUB_WRITE_PARCEL_ERR);
2171 return RET_OK;
2172 }
2173
StubSetShieldStatus(MessageParcel & data,MessageParcel & reply)2174 int32_t MultimodalInputConnectStub::StubSetShieldStatus(MessageParcel& data, MessageParcel& reply)
2175 {
2176 CALL_DEBUG_ENTER;
2177 if (!PER_HELPER->VerifySystemApp()) {
2178 MMI_HILOGE("Verify system APP failed");
2179 return ERROR_NOT_SYSAPI;
2180 }
2181 if (!PER_HELPER->CheckDispatchControl()) {
2182 MMI_HILOGE("input dispatch control permission check failed");
2183 return ERROR_NO_PERMISSION;
2184 }
2185 if (!IsRunning()) {
2186 MMI_HILOGE("Service is not running");
2187 return MMISERVICE_NOT_RUNNING;
2188 }
2189
2190 int32_t shieldMode { 0 };
2191 bool isShield { false };
2192 READINT32(data, shieldMode, IPC_PROXY_DEAD_OBJECT_ERR);
2193 READBOOL(data, isShield, IPC_PROXY_DEAD_OBJECT_ERR);
2194 int32_t ret = SetShieldStatus(shieldMode, isShield);
2195 if (ret != RET_OK) {
2196 MMI_HILOGE("Call SetShieldStatus failed, ret:%{public}d", ret);
2197 return ret;
2198 }
2199 MMI_HILOGD("Success shieldMode:%{public}d, isShield:%{public}d", shieldMode, isShield);
2200 return RET_OK;
2201 }
2202
StubGetShieldStatus(MessageParcel & data,MessageParcel & reply)2203 int32_t MultimodalInputConnectStub::StubGetShieldStatus(MessageParcel& data, MessageParcel& reply)
2204 {
2205 CALL_DEBUG_ENTER;
2206 if (!PER_HELPER->VerifySystemApp()) {
2207 MMI_HILOGE("Verify system APP failed");
2208 return ERROR_NOT_SYSAPI;
2209 }
2210 if (!PER_HELPER->CheckDispatchControl()) {
2211 MMI_HILOGE("input dispatch control permission check failed");
2212 return ERROR_NO_PERMISSION;
2213 }
2214 if (!IsRunning()) {
2215 MMI_HILOGE("Service is not running");
2216 return MMISERVICE_NOT_RUNNING;
2217 }
2218
2219 int32_t shieldMode { 0 };
2220 bool state { false };
2221 READINT32(data, shieldMode, IPC_PROXY_DEAD_OBJECT_ERR);
2222 int32_t ret = GetShieldStatus(shieldMode, state);
2223 if (ret != RET_OK) {
2224 MMI_HILOGE("Call GetShieldStatus failed ret:%{public}d", ret);
2225 return ret;
2226 }
2227 WRITEBOOL(reply, state, IPC_PROXY_DEAD_OBJECT_ERR);
2228 return RET_OK;
2229 }
2230
StubGetKeyState(MessageParcel & data,MessageParcel & reply)2231 int32_t MultimodalInputConnectStub::StubGetKeyState(MessageParcel& data, MessageParcel& reply)
2232 {
2233 CALL_DEBUG_ENTER;
2234 std::vector<int32_t> pressedKeys;
2235 std::map<int32_t, int32_t> specialKeysState;
2236 int32_t ret = GetKeyState(pressedKeys, specialKeysState);
2237 if (ret != RET_OK) {
2238 MMI_HILOGE("Call GetKeyState failed ret:%{public}d", ret);
2239 return RET_ERR;
2240 }
2241 if (!reply.WriteInt32Vector(pressedKeys)) {
2242 MMI_HILOGE("Write pressedKeys failed");
2243 return RET_ERR;
2244 }
2245 std::vector<int32_t> specialKeysStateTmp;
2246 for (const auto &item : specialKeysState) {
2247 specialKeysStateTmp.push_back(item.second);
2248 }
2249 if (!reply.WriteInt32Vector(specialKeysStateTmp)) {
2250 MMI_HILOGE("Write specialKeysStateTmp failed");
2251 return RET_ERR;
2252 }
2253 return ret;
2254 }
2255
StubAuthorize(MessageParcel & data,MessageParcel & reply)2256 int32_t MultimodalInputConnectStub::StubAuthorize(MessageParcel& data, MessageParcel& reply)
2257 {
2258 CALL_DEBUG_ENTER;
2259 if (!PER_HELPER->VerifySystemApp()) {
2260 MMI_HILOGE("Verify system APP failed");
2261 return ERROR_NOT_SYSAPI;
2262 }
2263 if (!PER_HELPER->CheckAuthorize()) {
2264 MMI_HILOGE("input authorize permission check failed");
2265 return ERROR_NO_PERMISSION;
2266 }
2267 bool isAuthorize { false };
2268 READBOOL(data, isAuthorize, IPC_PROXY_DEAD_OBJECT_ERR);
2269 int32_t ret = Authorize(isAuthorize);
2270 if (ret != RET_OK) {
2271 MMI_HILOGE("Call Authorize failed ret:%{public}d", ret);
2272 return ret;
2273 }
2274 return RET_OK;
2275 }
2276
StubCancelInjection(MessageParcel & data,MessageParcel & reply)2277 int32_t MultimodalInputConnectStub::StubCancelInjection(MessageParcel& data, MessageParcel& reply)
2278 {
2279 CALL_DEBUG_ENTER;
2280 int32_t ret = CancelInjection();
2281 if (ret != RET_OK) {
2282 MMI_HILOGE("Call CancelInjection failed ret:%{public}d", ret);
2283 return ret;
2284 }
2285 return RET_OK;
2286 }
2287
StubHasIrEmitter(MessageParcel & data,MessageParcel & reply)2288 int32_t MultimodalInputConnectStub::StubHasIrEmitter(MessageParcel& data, MessageParcel& reply)
2289 {
2290 CALL_DEBUG_ENTER;
2291 if (!PER_HELPER->VerifySystemApp()) {
2292 MMI_HILOGE("Verify system APP failed");
2293 return ERROR_NOT_SYSAPI;
2294 }
2295 bool hasIrEmitter = false;
2296 int32_t ret = HasIrEmitter(hasIrEmitter);
2297 if (ret != RET_OK) {
2298 MMI_HILOGE("Call StubHasIrEmitter failed ret:%{public}d", ret);
2299 return ret;
2300 }
2301 WRITEBOOL(reply, hasIrEmitter, IPC_STUB_WRITE_PARCEL_ERR);
2302 return RET_OK;
2303 }
2304
StubGetInfraredFrequencies(MessageParcel & data,MessageParcel & reply)2305 int32_t MultimodalInputConnectStub::StubGetInfraredFrequencies(MessageParcel& data, MessageParcel& reply)
2306 {
2307 CALL_DEBUG_ENTER;
2308 if (!PER_HELPER->VerifySystemApp()) {
2309 MMI_HILOGE("GetInfraredFrequencies Verify system APP failed");
2310 return ERROR_NOT_SYSAPI;
2311 }
2312 if (!PER_HELPER->CheckInfraredEmmit()) {
2313 MMI_HILOGE("Infrared permission check failed");
2314 return ERROR_NO_PERMISSION;
2315 }
2316 std::vector<InfraredFrequency> requencys;
2317 int32_t ret = GetInfraredFrequencies(requencys);
2318 if (ret != RET_OK) {
2319 MMI_HILOGE("Call StubGetInfraredFrequencies failed returnCode:%{public}d", ret);
2320 return ret;
2321 }
2322 WRITEINT64(reply, requencys.size());
2323 for (const auto &item : requencys) {
2324 WRITEINT64(reply, item.max_);
2325 WRITEINT64(reply, item.min_);
2326 }
2327 return RET_OK;
2328 }
2329
StubTransmitInfrared(MessageParcel & data,MessageParcel & reply)2330 int32_t MultimodalInputConnectStub::StubTransmitInfrared(MessageParcel& data, MessageParcel& reply)
2331 {
2332 CALL_DEBUG_ENTER;
2333 if (!PER_HELPER->VerifySystemApp()) {
2334 MMI_HILOGE("StubTransmitInfrared Verify system APP failed");
2335 return ERROR_NOT_SYSAPI;
2336 }
2337 if (!PER_HELPER->CheckInfraredEmmit()) {
2338 MMI_HILOGE("StubTransmitInfrared permission check failed. returnCode:%{public}d", ERROR_NO_PERMISSION);
2339 return ERROR_NO_PERMISSION;
2340 }
2341 int64_t number = 0;
2342 READINT64(data, number, IPC_PROXY_DEAD_OBJECT_ERR);
2343 int32_t patternLen = 0;
2344 std::vector<int64_t> pattern;
2345 READINT32(data, patternLen, IPC_PROXY_DEAD_OBJECT_ERR);
2346 if (patternLen > MAX_N_TRANSMIT_INFRARED_PATTERN || patternLen <= 0) {
2347 MMI_HILOGE("Transmit infrared pattern len is invalid");
2348 return false;
2349 }
2350 for (int32_t i = 0; i < patternLen; i++) {
2351 int64_t value = 0;
2352 READINT64(data, value);
2353 pattern.push_back(value);
2354 }
2355 int32_t ret = TransmitInfrared(number, pattern);
2356 if (ret != RET_OK) {
2357 MMI_HILOGE("Call StubTransmitInfrared failed returnCode:%{public}d", ret);
2358 return ret;
2359 }
2360 WRITEINT32(reply, ret);
2361 return RET_OK;
2362 }
2363
StubSetPixelMapData(MessageParcel & data,MessageParcel & reply)2364 int32_t MultimodalInputConnectStub::StubSetPixelMapData(MessageParcel& data, MessageParcel& reply)
2365 {
2366 CALL_DEBUG_ENTER;
2367 if (!PER_HELPER->VerifySystemApp()) {
2368 MMI_HILOGE("Verify system APP failed");
2369 return ERROR_NOT_SYSAPI;
2370 }
2371 if (!IsRunning()) {
2372 MMI_HILOGE("Service is not running");
2373 return MMISERVICE_NOT_RUNNING;
2374 }
2375 int32_t infoId = -1;
2376 READINT32(data, infoId, IPC_PROXY_DEAD_OBJECT_ERR);
2377 if (infoId <= 0) {
2378 MMI_HILOGE("Invalid infoId:%{public}d", infoId);
2379 return RET_ERR;
2380 }
2381 OHOS::Media::PixelMap* pixelMap = Media::PixelMap::Unmarshalling(data);
2382 CHKPR(pixelMap, RET_ERR);
2383 int32_t ret = SetPixelMapData(infoId, static_cast<void*>(pixelMap));
2384 if (ret != RET_OK) {
2385 MMI_HILOGE("Failed to call SetPixelMapData, ret:%{public}d", ret);
2386 }
2387 return ret;
2388 }
2389
StubSetCurrentUser(MessageParcel & data,MessageParcel & reply)2390 int32_t MultimodalInputConnectStub::StubSetCurrentUser(MessageParcel& data, MessageParcel& reply)
2391 {
2392 CALL_DEBUG_ENTER;
2393 if (!PER_HELPER->VerifySystemApp()) {
2394 MMI_HILOGE("StubSetCurrentUser Verify system APP failed");
2395 return ERROR_NOT_SYSAPI;
2396 }
2397 int32_t userId = 0;
2398 READINT32(data, userId, IPC_PROXY_DEAD_OBJECT_ERR);
2399 std::string callingTokenName;
2400 Security::AccessToken::HapTokenInfo callingTokenInfo;
2401 auto tokenId = IPCSkeleton::GetCallingTokenID();
2402 if (Security::AccessToken::AccessTokenKit::GetHapTokenInfo(tokenId, callingTokenInfo) != 0) {
2403 MMI_HILOGE("GetHapTokenInfo failed");
2404 return RET_ERR;
2405 }
2406 callingTokenName = callingTokenInfo.bundleName;
2407 int32_t callingUid = GetCallingUid();
2408 if (callingUid < UID_TRANSFORM_DIVISOR) {
2409 MMI_HILOGE("CallingUid is not within the range:%{public}d", callingUid);
2410 return RET_ERR;
2411 }
2412 if (callingUid / UID_TRANSFORM_DIVISOR != userId) {
2413 MMI_HILOGE("Invalid CallingUid:%{public}d", callingUid);
2414 return RET_ERR;
2415 }
2416 if (callingTokenName != SCENEBOARD_NAME) {
2417 MMI_HILOGE("Invalid Caller:%{public}s", callingTokenName.c_str());
2418 return RET_ERR;
2419 }
2420 int32_t ret = SetCurrentUser(userId);
2421 if (ret != RET_OK) {
2422 MMI_HILOGE("Failed to call SetCurrentUser ret:%{public}d", ret);
2423 return ret;
2424 }
2425 WRITEINT32(reply, ret);
2426 return RET_OK;
2427 }
2428
StubAddVirtualInputDevice(MessageParcel & data,MessageParcel & reply)2429 int32_t MultimodalInputConnectStub::StubAddVirtualInputDevice(MessageParcel& data, MessageParcel& reply)
2430 {
2431 CALL_DEBUG_ENTER;
2432 if (!PER_HELPER->VerifySystemApp()) {
2433 MMI_HILOGE("Verify system APP failed");
2434 return ERROR_NOT_SYSAPI;
2435 }
2436 auto device = std::make_shared<InputDevice>();
2437 if (g_parseInputDevice(data, device) != RET_OK) {
2438 MMI_HILOGE("ParseInputDevice failed");
2439 return RET_ERR;
2440 }
2441 int32_t deviceId { -1 };
2442 int32_t ret = AddVirtualInputDevice(device, deviceId);
2443 if (ret != RET_OK) {
2444 MMI_HILOGE("AddVirtualInputDevice failed");
2445 return ret;
2446 }
2447 WRITEINT32(reply, deviceId);
2448 return RET_OK;
2449 }
2450
StubRemoveVirtualInputDevice(MessageParcel & data,MessageParcel & reply)2451 int32_t MultimodalInputConnectStub::StubRemoveVirtualInputDevice(MessageParcel& data, MessageParcel& reply)
2452 {
2453 CALL_DEBUG_ENTER;
2454 if (!PER_HELPER->VerifySystemApp()) {
2455 MMI_HILOGE("Verify system APP failed");
2456 return ERROR_NOT_SYSAPI;
2457 }
2458 int32_t deviceId { -1 };
2459 READINT32(data, deviceId, IPC_PROXY_DEAD_OBJECT_ERR);
2460 int32_t ret = RemoveVirtualInputDevice(deviceId);
2461 if (ret != RET_OK) {
2462 MMI_HILOGE("RemoveVirtualInputDevice failed");
2463 return ret;
2464 }
2465 WRITEINT32(reply, ret);
2466 return RET_OK;
2467 }
2468
StubEnableHardwareCursorStats(MessageParcel & data,MessageParcel & reply)2469 int32_t MultimodalInputConnectStub::StubEnableHardwareCursorStats(MessageParcel& data, MessageParcel& reply)
2470 {
2471 CALL_DEBUG_ENTER;
2472 bool enable = false;
2473 READBOOL(data, enable, IPC_PROXY_DEAD_OBJECT_ERR);
2474 int32_t ret = EnableHardwareCursorStats(enable);
2475 if (ret != RET_OK) {
2476 MMI_HILOGE("Call EnableHardwareCursorStats failed ret:%{public}d", ret);
2477 return ret;
2478 }
2479 return RET_OK;
2480 }
2481
StubGetHardwareCursorStats(MessageParcel & data,MessageParcel & reply)2482 int32_t MultimodalInputConnectStub::StubGetHardwareCursorStats(MessageParcel& data, MessageParcel& reply)
2483 {
2484 CALL_DEBUG_ENTER;
2485 uint32_t frameCount = 0;
2486 uint32_t vsyncCount = 0;
2487 int32_t ret = GetHardwareCursorStats(frameCount, vsyncCount);
2488 if (ret != RET_OK) {
2489 MMI_HILOGE("Call GetHardwareCursorStats failed ret:%{public}d", ret);
2490 return ret;
2491 }
2492 WRITEUINT32(reply, frameCount, IPC_PROXY_DEAD_OBJECT_ERR);
2493 WRITEUINT32(reply, vsyncCount, IPC_PROXY_DEAD_OBJECT_ERR);
2494 return RET_OK;
2495 }
2496
2497 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
StubGetPointerSnapshot(MessageParcel & data,MessageParcel & reply)2498 int32_t MultimodalInputConnectStub::StubGetPointerSnapshot(MessageParcel &data, MessageParcel &reply)
2499 {
2500 CALL_DEBUG_ENTER;
2501 if (!IsRunning()) {
2502 MMI_HILOGE("Service is not running");
2503 return MMISERVICE_NOT_RUNNING;
2504 }
2505 if (!PER_HELPER->VerifySystemApp()) {
2506 MMI_HILOGE("Verify system APP failed");
2507 return ERROR_NOT_SYSAPI;
2508 }
2509 std::shared_ptr<Media::PixelMap> pixelMap;
2510 int32_t ret = GetPointerSnapshot(&pixelMap);
2511 if (ret != RET_OK) {
2512 MMI_HILOGE("Call GetPointerSnapshot failed ret:%{public}d", ret);
2513 return ret;
2514 }
2515 CHKPR(pixelMap, ERR_INVALID_VALUE);
2516 if (pixelMap->GetCapacity() == 0) {
2517 MMI_HILOGE("pixelMap is empty, we dont have to pass it to the server");
2518 return ERR_INVALID_VALUE;
2519 }
2520 pixelMap->Marshalling(reply);
2521 return RET_OK;
2522 }
2523 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR
2524
2525 #ifdef OHOS_BUILD_ENABLE_ANCO
StubAncoAddChannel(MessageParcel & data,MessageParcel & reply)2526 int32_t MultimodalInputConnectStub::StubAncoAddChannel(MessageParcel& data, MessageParcel& reply)
2527 {
2528 CALL_DEBUG_ENTER;
2529 if (!PER_HELPER->VerifySystemApp()) {
2530 MMI_HILOGE("Verify system APP failed");
2531 return ERROR_NOT_SYSAPI;
2532 }
2533 sptr<IRemoteObject> remoteObj = data.ReadRemoteObject();
2534 CHKPR(remoteObj, ERR_INVALID_VALUE);
2535 sptr<IAncoChannel> channel = iface_cast<IAncoChannel>(remoteObj);
2536 CHKPR(channel, ERROR_NULL_POINTER);
2537 int32_t ret = AncoAddChannel(channel);
2538 if (ret != RET_OK) {
2539 MMI_HILOGE("AncoAddChannel fail, error:%{public}d", ret);
2540 }
2541 WRITEINT32(reply, ret);
2542 return ret;
2543 }
2544
StubAncoRemoveChannel(MessageParcel & data,MessageParcel & reply)2545 int32_t MultimodalInputConnectStub::StubAncoRemoveChannel(MessageParcel& data, MessageParcel& reply)
2546 {
2547 CALL_DEBUG_ENTER;
2548 if (!PER_HELPER->VerifySystemApp()) {
2549 MMI_HILOGE("Verify system APP failed");
2550 return ERROR_NOT_SYSAPI;
2551 }
2552 sptr<IRemoteObject> remoteObj = data.ReadRemoteObject();
2553 CHKPR(remoteObj, ERR_INVALID_VALUE);
2554 sptr<IAncoChannel> channel = iface_cast<IAncoChannel>(remoteObj);
2555 CHKPR(channel, ERROR_NULL_POINTER);
2556 int32_t ret = AncoRemoveChannel(channel);
2557 if (ret != RET_OK) {
2558 MMI_HILOGE("AncoRemoveChannel fail, error:%{public}d", ret);
2559 }
2560 WRITEINT32(reply, ret);
2561 return ret;
2562 }
2563 #endif // OHOS_BUILD_ENABLE_ANCO
2564
StubTransferBinderClientService(MessageParcel & data,MessageParcel & reply)2565 int32_t MultimodalInputConnectStub::StubTransferBinderClientService(MessageParcel& data, MessageParcel& reply)
2566 {
2567 CALL_DEBUG_ENTER;
2568 sptr<IRemoteObject> remoteObj = data.ReadRemoteObject();
2569 CHKPR(remoteObj, ERROR_NULL_POINTER);
2570 int32_t ret = TransferBinderClientSrv(remoteObj);
2571 if (ret != RET_OK) {
2572 MMI_HILOGE("TransferBinderClientSrv failed");
2573 return ret;
2574 }
2575 WRITEINT32(reply, ret);
2576 return RET_OK;
2577 }
2578
StubSkipPointerLayer(MessageParcel & data,MessageParcel & reply)2579 int32_t MultimodalInputConnectStub::StubSkipPointerLayer(MessageParcel& data, MessageParcel& reply)
2580 {
2581 CALL_DEBUG_ENTER;
2582 bool isSkip = true;
2583 READBOOL(data, isSkip, IPC_PROXY_DEAD_OBJECT_ERR);
2584 int32_t ret = SkipPointerLayer(isSkip);
2585 if (ret != RET_OK) {
2586 MMI_HILOGE("Call SkipPointerLayer failed, ret:%{public}d", ret);
2587 return ret;
2588 }
2589 MMI_HILOGD("Success isSkip:%{public}d, pid:%{public}d", isSkip, GetCallingPid());
2590 return RET_OK;
2591 }
2592
StubGetIntervalSinceLastInput(MessageParcel & data,MessageParcel & reply)2593 int32_t MultimodalInputConnectStub::StubGetIntervalSinceLastInput(MessageParcel& data, MessageParcel& reply)
2594 {
2595 CALL_DEBUG_ENTER;
2596 int64_t timeInterval = 0;
2597 int32_t ret = GetIntervalSinceLastInput(timeInterval);
2598 if (ret != RET_OK) {
2599 MMI_HILOGE("Failed to call StubGetIntervalSinceLastInput ret:%{public}d", ret);
2600 } else {
2601 WRITEINT64(reply, timeInterval);
2602 }
2603 return ret;
2604 }
2605 } // namespace MMI
2606 } // namespace OHOS
2607