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 "device_base.h"
17
18 namespace OHOS {
19 namespace MMI {
20 namespace {
21 constexpr int32_t FIRST_FINGER { 1 };
22 constexpr int32_t SECOND_FINGER { 2 };
23 constexpr int32_t THIRD_FINGER { 3 };
24 constexpr int32_t FOURTH_FINGER { 4 };
25 constexpr int32_t FIFTH_FINGER { 5 };
26 constexpr int32_t EV_ABS_MISC_DEFAULT_VALUE { 15 };
27 } // namespace
28
SetTimeToLibinputEvent(InjectEvent & injectEvent)29 void DeviceBase::SetTimeToLibinputEvent(InjectEvent &injectEvent)
30 {
31 struct timeval tm;
32 gettimeofday(&tm, 0);
33 injectEvent.event.input_event_sec = tm.tv_sec;
34 injectEvent.event.input_event_usec = tm.tv_usec;
35 }
36
SetSynConfigReport(InputEventArray & inputEventArray,int64_t blockTime)37 void DeviceBase::SetSynConfigReport(InputEventArray &inputEventArray, int64_t blockTime)
38 {
39 InjectEvent injectEvent = {};
40 injectEvent.blockTime = blockTime;
41 injectEvent.event.type = EV_SYN;
42 injectEvent.event.code = SYN_REPORT;
43 injectEvent.event.value = SYN_CONFIG;
44 SetTimeToLibinputEvent(injectEvent);
45 inputEventArray.events.push_back(injectEvent);
46 }
47
SetKeyLongPressEvent(InputEventArray & inputEventArray,int64_t blockTime,int32_t code)48 void DeviceBase::SetKeyLongPressEvent(InputEventArray& inputEventArray, int64_t blockTime, int32_t code)
49 {
50 InjectEvent injectEvent = {};
51 injectEvent.blockTime = blockTime;
52 injectEvent.event.type = EV_KEY;
53 injectEvent.event.code = static_cast<uint16_t>(code);
54 injectEvent.event.value = LONG_PRESS;
55 SetTimeToLibinputEvent(injectEvent);
56 inputEventArray.events.push_back(injectEvent);
57 }
58
SetSynReport(InputEventArray & inputEventArray,int64_t blockTime)59 void DeviceBase::SetSynReport(InputEventArray& inputEventArray, int64_t blockTime)
60 {
61 InjectEvent injectEvent = {};
62 injectEvent.blockTime = blockTime;
63 injectEvent.event.type = EV_SYN;
64 injectEvent.event.code = SYN_REPORT;
65 injectEvent.event.value = 0;
66 SetTimeToLibinputEvent(injectEvent);
67 inputEventArray.events.push_back(injectEvent);
68 }
69
SetKeyPressEvent(InputEventArray & inputEventArray,int64_t blockTime,uint16_t code)70 void DeviceBase::SetKeyPressEvent(InputEventArray& inputEventArray, int64_t blockTime, uint16_t code)
71 {
72 InjectEvent injectEvent = {};
73 injectEvent.blockTime = blockTime;
74 injectEvent.event.type = EV_KEY;
75 injectEvent.event.code = code;
76 injectEvent.event.value = 1;
77 SetTimeToLibinputEvent(injectEvent);
78 inputEventArray.events.push_back(injectEvent);
79 }
80
SetKeyReleaseEvent(InputEventArray & inputEventArray,int64_t blockTime,uint16_t code)81 void DeviceBase::SetKeyReleaseEvent(InputEventArray& inputEventArray, int64_t blockTime, uint16_t code)
82 {
83 InjectEvent injectEvent = {};
84 injectEvent.blockTime = blockTime;
85 injectEvent.event.type = EV_KEY;
86 injectEvent.event.code = code;
87 injectEvent.event.value = 0;
88 SetTimeToLibinputEvent(injectEvent);
89 inputEventArray.events.push_back(injectEvent);
90 }
91
SetMtSlot(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)92 void DeviceBase::SetMtSlot(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
93 {
94 InjectEvent injectEvent = {};
95 injectEvent.blockTime = blockTime;
96 injectEvent.event.type = EV_ABS;
97 injectEvent.event.code = ABS_MT_SLOT;
98 injectEvent.event.value = value;
99 SetTimeToLibinputEvent(injectEvent);
100 inputEventArray.events.push_back(injectEvent);
101 }
102
SetTrackingId(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)103 void DeviceBase::SetTrackingId(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
104 {
105 InjectEvent injectEvent = {};
106 injectEvent.blockTime = blockTime;
107 injectEvent.event.type = EV_ABS;
108 injectEvent.event.code = ABS_MT_TRACKING_ID;
109 static int32_t trackingId = 0;
110 injectEvent.event.value = ((value == 0) ? trackingId++ : value);
111 SetTimeToLibinputEvent(injectEvent);
112 inputEventArray.events.push_back(injectEvent);
113 }
114
SetPositionX(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)115 void DeviceBase::SetPositionX(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
116 {
117 InjectEvent injectEvent = {};
118 injectEvent.blockTime = blockTime;
119 injectEvent.event.type = EV_ABS;
120 injectEvent.event.code = ABS_MT_POSITION_X;
121 injectEvent.event.value = value;
122 SetTimeToLibinputEvent(injectEvent);
123 inputEventArray.events.push_back(injectEvent);
124 }
125
SetPositionY(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)126 void DeviceBase::SetPositionY(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
127 {
128 InjectEvent injectEvent = {};
129 injectEvent.blockTime = blockTime;
130 injectEvent.event.type = EV_ABS;
131 injectEvent.event.code = ABS_MT_POSITION_Y;
132 injectEvent.event.value = value;
133 SetTimeToLibinputEvent(injectEvent);
134 inputEventArray.events.push_back(injectEvent);
135 }
136
SetMtTouchMajor(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)137 void DeviceBase::SetMtTouchMajor(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
138 {
139 InjectEvent injectEvent = {};
140 injectEvent.blockTime = blockTime;
141 injectEvent.event.type = EV_ABS;
142 injectEvent.event.code = ABS_MT_TOUCH_MAJOR;
143 injectEvent.event.value = value;
144 SetTimeToLibinputEvent(injectEvent);
145 inputEventArray.events.push_back(injectEvent);
146 }
147
SetMtTouchMinor(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)148 void DeviceBase::SetMtTouchMinor(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
149 {
150 InjectEvent injectEvent = {};
151 injectEvent.blockTime = blockTime;
152 injectEvent.event.type = EV_ABS;
153 injectEvent.event.code = ABS_MT_TOUCH_MINOR;
154 injectEvent.event.value = value;
155 SetTimeToLibinputEvent(injectEvent);
156 inputEventArray.events.push_back(injectEvent);
157 }
158
SetMtOrientation(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)159 void DeviceBase::SetMtOrientation(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
160 {
161 InjectEvent injectEvent = {};
162 injectEvent.blockTime = blockTime;
163 injectEvent.event.type = EV_ABS;
164 injectEvent.event.code = ABS_MT_ORIENTATION;
165 injectEvent.event.value = value;
166 SetTimeToLibinputEvent(injectEvent);
167 inputEventArray.events.push_back(injectEvent);
168 }
169
SetBtnTouch(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)170 void DeviceBase::SetBtnTouch(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
171 {
172 InjectEvent injectEvent = {};
173 injectEvent.blockTime = blockTime;
174 injectEvent.event.type = EV_KEY;
175 injectEvent.event.code = BTN_TOUCH;
176 injectEvent.event.value = value;
177 SetTimeToLibinputEvent(injectEvent);
178 inputEventArray.events.push_back(injectEvent);
179 }
180
SetEvAbsX(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)181 void DeviceBase::SetEvAbsX(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
182 {
183 InjectEvent injectEvent = {};
184 injectEvent.blockTime = blockTime;
185 injectEvent.event.type = EV_ABS;
186 injectEvent.event.code = ABS_X;
187 injectEvent.event.value = value;
188 SetTimeToLibinputEvent(injectEvent);
189 inputEventArray.events.push_back(injectEvent);
190 }
191
SetEvAbsY(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)192 void DeviceBase::SetEvAbsY(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
193 {
194 InjectEvent injectEvent = {};
195 injectEvent.blockTime = blockTime;
196 injectEvent.event.type = EV_ABS;
197 injectEvent.event.code = ABS_Y;
198 injectEvent.event.value = value;
199 SetTimeToLibinputEvent(injectEvent);
200 inputEventArray.events.push_back(injectEvent);
201 }
202
SetMtTouchFingerType(InputEventArray & inputEventArray,int64_t blockTime,int32_t value,int32_t status)203 void DeviceBase::SetMtTouchFingerType(InputEventArray& inputEventArray, int64_t blockTime,
204 int32_t value, int32_t status)
205 {
206 InjectEvent injectEvent = {};
207 injectEvent.blockTime = blockTime;
208 injectEvent.event.type = EV_KEY;
209 if (value == FIRST_FINGER) {
210 injectEvent.event.code = BTN_TOOL_FINGER;
211 } else if (value == SECOND_FINGER) {
212 injectEvent.event.code = BTN_TOOL_DOUBLETAP;
213 } else if (value == THIRD_FINGER) {
214 injectEvent.event.code = BTN_TOOL_TRIPLETAP;
215 } else if (value == FOURTH_FINGER) {
216 injectEvent.event.code = BTN_TOOL_QUADTAP;
217 } else if (value == FIFTH_FINGER) {
218 injectEvent.event.code = BTN_TOOL_QUINTTAP;
219 } else {
220 injectEvent.event.code = BTN_TOOL_FINGER;
221 }
222 injectEvent.event.value = status;
223 SetTimeToLibinputEvent(injectEvent);
224 inputEventArray.events.push_back(injectEvent);
225 }
226
SetEvAbsZ(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)227 void DeviceBase::SetEvAbsZ(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
228 {
229 InjectEvent injectEvent = {};
230 injectEvent.blockTime = blockTime;
231 injectEvent.event.type = EV_ABS;
232 injectEvent.event.code = ABS_Z;
233 injectEvent.event.value = value;
234 SetTimeToLibinputEvent(injectEvent);
235 inputEventArray.events.push_back(injectEvent);
236 }
237
SetEvAbsRx(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)238 void DeviceBase::SetEvAbsRx(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
239 {
240 InjectEvent injectEvent = {};
241 injectEvent.blockTime = blockTime;
242 injectEvent.event.type = EV_ABS;
243 injectEvent.event.code = ABS_RX;
244 injectEvent.event.value = value;
245 SetTimeToLibinputEvent(injectEvent);
246 inputEventArray.events.push_back(injectEvent);
247 }
248
SetEvAbsRy(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)249 void DeviceBase::SetEvAbsRy(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
250 {
251 InjectEvent injectEvent = {};
252 injectEvent.blockTime = blockTime;
253 injectEvent.event.type = EV_ABS;
254 injectEvent.event.code = ABS_RY;
255 injectEvent.event.value = value;
256 SetTimeToLibinputEvent(injectEvent);
257 inputEventArray.events.push_back(injectEvent);
258 }
259
SetEvAbsHat0X(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)260 void DeviceBase::SetEvAbsHat0X(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
261 {
262 InjectEvent injectEvent = {};
263 injectEvent.blockTime = blockTime;
264 injectEvent.event.type = EV_ABS;
265 injectEvent.event.code = ABS_HAT0X;
266 injectEvent.event.value = value;
267 SetTimeToLibinputEvent(injectEvent);
268 inputEventArray.events.push_back(injectEvent);
269 }
270
SetEvAbsHat0Y(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)271 void DeviceBase::SetEvAbsHat0Y(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
272 {
273 InjectEvent injectEvent = {};
274 injectEvent.blockTime = blockTime;
275 injectEvent.event.type = EV_ABS;
276 injectEvent.event.code = ABS_HAT0Y;
277 injectEvent.event.value = value;
278 SetTimeToLibinputEvent(injectEvent);
279 inputEventArray.events.push_back(injectEvent);
280 }
281
SetEvAbsRz(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)282 void DeviceBase::SetEvAbsRz(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
283 {
284 InjectEvent injectEvent = {};
285 injectEvent.blockTime = blockTime;
286 injectEvent.event.type = EV_ABS;
287 injectEvent.event.code = ABS_RZ;
288 injectEvent.event.value = value;
289 SetTimeToLibinputEvent(injectEvent);
290 inputEventArray.events.push_back(injectEvent);
291 }
292
SetEvAbs(InputEventArray & inputEventArray,int64_t blockTime,uint16_t code,int32_t value)293 void DeviceBase::SetEvAbs(InputEventArray& inputEventArray, int64_t blockTime, uint16_t code, int32_t value)
294 {
295 InjectEvent injectEvent = {};
296 injectEvent.blockTime = blockTime;
297 injectEvent.event.type = EV_ABS;
298 injectEvent.event.code = code;
299 injectEvent.event.value = value;
300 SetTimeToLibinputEvent(injectEvent);
301 inputEventArray.events.push_back(injectEvent);
302 }
303
SetRelX(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)304 void DeviceBase::SetRelX(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
305 {
306 InjectEvent injectEvent = {};
307 injectEvent.blockTime = blockTime;
308 injectEvent.event.type = EV_REL;
309 injectEvent.event.code = REL_X;
310 injectEvent.event.value = value;
311 SetTimeToLibinputEvent(injectEvent);
312 inputEventArray.events.push_back(injectEvent);
313 }
314
SetRelY(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)315 void DeviceBase::SetRelY(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
316 {
317 InjectEvent injectEvent = {};
318 injectEvent.blockTime = blockTime;
319 injectEvent.event.type = EV_REL;
320 injectEvent.event.code = REL_Y;
321 injectEvent.event.value = value;
322 SetTimeToLibinputEvent(injectEvent);
323 inputEventArray.events.push_back(injectEvent);
324 }
325
SetRelWheel(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)326 void DeviceBase::SetRelWheel(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
327 {
328 InjectEvent injectEvent = {};
329 injectEvent.blockTime = blockTime;
330 injectEvent.event.type = EV_REL;
331 injectEvent.event.code = REL_WHEEL;
332 injectEvent.event.value = value;
333 SetTimeToLibinputEvent(injectEvent);
334 inputEventArray.events.push_back(injectEvent);
335 }
336
SetRelHwheel(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)337 void DeviceBase::SetRelHwheel(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
338 {
339 InjectEvent injectEvent = {};
340 injectEvent.blockTime = blockTime;
341 injectEvent.event.type = EV_REL;
342 injectEvent.event.code = REL_HWHEEL;
343 injectEvent.event.value = value;
344 SetTimeToLibinputEvent(injectEvent);
345 inputEventArray.events.push_back(injectEvent);
346 }
347
SetEvAbsWheel(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)348 void DeviceBase::SetEvAbsWheel(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
349 {
350 InjectEvent injectEvent = {};
351 injectEvent.blockTime = blockTime;
352 injectEvent.event.type = EV_ABS;
353 injectEvent.event.code = ABS_WHEEL;
354 injectEvent.event.value = value;
355 SetTimeToLibinputEvent(injectEvent);
356 inputEventArray.events.push_back(injectEvent);
357 }
358
SetAbsMisc(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)359 void DeviceBase::SetAbsMisc(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
360 {
361 InjectEvent injectEvent = {};
362 injectEvent.blockTime = blockTime;
363 injectEvent.event.type = EV_ABS;
364 injectEvent.event.code = ABS_MISC;
365 if (value == 1) {
366 injectEvent.event.value = EV_ABS_MISC_DEFAULT_VALUE;
367 } else {
368 injectEvent.event.value = 0;
369 }
370 SetTimeToLibinputEvent(injectEvent);
371 inputEventArray.events.push_back(injectEvent);
372 }
373
SetAbsTiltX(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)374 void DeviceBase::SetAbsTiltX(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
375 {
376 InjectEvent injectEvent = {};
377 injectEvent.blockTime = blockTime;
378 injectEvent.event.type = EV_ABS;
379 injectEvent.event.code = ABS_TILT_X;
380 injectEvent.event.value = value;
381 SetTimeToLibinputEvent(injectEvent);
382 inputEventArray.events.push_back(injectEvent);
383 }
384
SetAbsTiltY(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)385 void DeviceBase::SetAbsTiltY(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
386 {
387 InjectEvent injectEvent = {};
388 injectEvent.blockTime = blockTime;
389 injectEvent.event.type = EV_ABS;
390 injectEvent.event.code = ABS_TILT_Y;
391 injectEvent.event.value = value;
392 SetTimeToLibinputEvent(injectEvent);
393 inputEventArray.events.push_back(injectEvent);
394 }
395
SetAbsPressure(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)396 void DeviceBase::SetAbsPressure(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
397 {
398 InjectEvent injectEvent = {};
399 injectEvent.blockTime = blockTime;
400 injectEvent.event.type = EV_ABS;
401 injectEvent.event.code = ABS_PRESSURE;
402 injectEvent.event.value = value;
403 SetTimeToLibinputEvent(injectEvent);
404 inputEventArray.events.push_back(injectEvent);
405 }
406
SetAbsDistance(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)407 void DeviceBase::SetAbsDistance(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
408 {
409 InjectEvent injectEvent = {};
410 injectEvent.blockTime = blockTime;
411 injectEvent.event.type = EV_ABS;
412 injectEvent.event.code = ABS_DISTANCE;
413 injectEvent.event.value = value;
414 SetTimeToLibinputEvent(injectEvent);
415 inputEventArray.events.push_back(injectEvent);
416 }
417
SetBtnPen(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)418 void DeviceBase::SetBtnPen(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
419 {
420 InjectEvent injectEvent = {};
421 injectEvent.blockTime = blockTime;
422 injectEvent.event.type = EV_KEY;
423 injectEvent.event.code = BTN_TOOL_PEN;
424 injectEvent.event.value = value;
425 SetTimeToLibinputEvent(injectEvent);
426 inputEventArray.events.push_back(injectEvent);
427 }
428
SetBtnStylus(InputEventArray & inputEventArray,int64_t blockTime,uint16_t code,int32_t value)429 void DeviceBase::SetBtnStylus(InputEventArray& inputEventArray, int64_t blockTime, uint16_t code,
430 int32_t value)
431 {
432 InjectEvent injectEvent = {};
433 injectEvent.blockTime = blockTime;
434 injectEvent.event.type = EV_KEY;
435 injectEvent.event.code = code;
436 injectEvent.event.value = value;
437 SetTimeToLibinputEvent(injectEvent);
438 inputEventArray.events.push_back(injectEvent);
439 }
440
SetBtnRubber(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)441 void DeviceBase::SetBtnRubber(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
442 {
443 InjectEvent injectEvent = {};
444 injectEvent.blockTime = blockTime;
445 injectEvent.event.type = EV_KEY;
446 injectEvent.event.code = BTN_TOOL_RUBBER;
447 injectEvent.event.value = value;
448 SetTimeToLibinputEvent(injectEvent);
449 inputEventArray.events.push_back(injectEvent);
450 }
451
SetMscSerial(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)452 void DeviceBase::SetMscSerial(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
453 {
454 InjectEvent injectEvent = {};
455 injectEvent.blockTime = blockTime;
456 injectEvent.event.type = EV_MSC;
457 injectEvent.event.code = MSC_SERIAL;
458 injectEvent.event.value = value;
459 SetTimeToLibinputEvent(injectEvent);
460 inputEventArray.events.push_back(injectEvent);
461 }
462
SetSynMtReport(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)463 void DeviceBase::SetSynMtReport(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
464 {
465 InjectEvent injectEvent = {};
466 injectEvent.blockTime = blockTime;
467 injectEvent.event.type = EV_SYN;
468 injectEvent.event.code = SYN_MT_REPORT;
469 injectEvent.event.value = value;
470 SetTimeToLibinputEvent(injectEvent);
471 inputEventArray.events.push_back(injectEvent);
472 }
473
SetThrottle(InputEventArray & inputEventArray,int64_t blockTime,int32_t value)474 void DeviceBase::SetThrottle(InputEventArray& inputEventArray, int64_t blockTime, int32_t value)
475 {
476 InjectEvent injectEvent = {};
477 injectEvent.blockTime = blockTime;
478 injectEvent.event.type = EV_ABS;
479 injectEvent.event.code = ABS_THROTTLE;
480 injectEvent.event.value = value;
481 SetTimeToLibinputEvent(injectEvent);
482 inputEventArray.events.push_back(injectEvent);
483 }
484 } // namespace MMI
485 } // namespace OHOS