1 /*
2 * Copyright (C) 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 "accessibility_element_info_parcel.h"
17 #include "hilog_wrapper.h"
18 #include "parcel_util.h"
19
20 namespace OHOS {
21 namespace Accessibility {
22 /* AccessibilityElementInfoParcel Parcel struct */
AccessibilityElementInfoParcel(const AccessibilityElementInfo & elementInfo)23 AccessibilityElementInfoParcel::AccessibilityElementInfoParcel(const AccessibilityElementInfo &elementInfo)
24 {
25 HILOG_DEBUG();
26
27 AccessibilityElementInfo *self = this;
28 *self = elementInfo;
29 }
30
ReadFromParcelFirstPart(Parcel & parcel)31 bool AccessibilityElementInfoParcel::ReadFromParcelFirstPart(Parcel &parcel)
32 {
33 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, pageId_);
34 int32_t textMoveStep = STEP_CHARACTER;
35 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, textMoveStep);
36 textMoveStep_ = static_cast<TextMoveUnit>(textMoveStep);
37 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, itemCounts_);
38 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, windowId_);
39 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, elementId_);
40 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, parentId_);
41 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, bundleName_);
42 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, componentType_);
43 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, text_);
44 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, hintText_);
45 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, contentDescription_);
46 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, resourceName_);
47 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32Vector, parcel, &childNodeIds_);
48 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, childCount_);
49 return true;
50 }
51
ReadFromParcelSecondPart(Parcel & parcel)52 bool AccessibilityElementInfoParcel::ReadFromParcelSecondPart(Parcel &parcel)
53 {
54 int32_t operationsSize = 0;
55 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, operationsSize);
56 ContainerSecurityVerify(parcel, operationsSize, operations_.max_size());
57 for (int32_t i = 0; i < operationsSize; i++) {
58 sptr<AccessibleActionParcel> accessibleOperation = parcel.ReadStrongParcelable<AccessibleActionParcel>();
59 if (!accessibleOperation) {
60 HILOG_ERROR("ReadStrongParcelable<accessibleOperation> failed");
61 return false;
62 }
63 operations_.emplace_back(*accessibleOperation);
64 }
65
66 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, textLengthLimit_);
67 sptr<RectParcel> rect = parcel.ReadStrongParcelable<RectParcel>();
68 if (!rect) {
69 return false;
70 }
71 bounds_ = *rect;
72
73 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, checkable_);
74 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, checked_);
75 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, focusable_);
76 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, focused_);
77 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, visible_);
78 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, accessibilityFocused_);
79 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, selected_);
80 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, clickable_);
81 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, longClickable_);
82 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, enable_);
83 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isPassword_);
84 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, scrollable_);
85 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, editable_);
86 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, popupSupported_);
87 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, multiLine_);
88 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, deletable_);
89 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, hint_);
90 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isEssential_);
91 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, currentIndex_);
92 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, beginIndex_);
93 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, endIndex_);
94 return true;
95 }
96
ReadFromParcelThirdPart(Parcel & parcel)97 bool AccessibilityElementInfoParcel::ReadFromParcelThirdPart(Parcel &parcel)
98 {
99 sptr<RangeInfoParcel> rangeInfo = parcel.ReadStrongParcelable<RangeInfoParcel>();
100 if (!rangeInfo) {
101 return false;
102 }
103 rangeInfo_ = *rangeInfo;
104
105 sptr<GridInfoParcel> grid = parcel.ReadStrongParcelable<GridInfoParcel>();
106 if (!grid) {
107 return false;
108 }
109 grid_ = *grid;
110
111 sptr<GridItemInfoParcel> gridItem = parcel.ReadStrongParcelable<GridItemInfoParcel>();
112 if (!gridItem) {
113 return false;
114 }
115 gridItem_ = *gridItem;
116
117 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, liveRegion_);
118 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, contentInvalid_);
119 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, error_);
120 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, labeled_);
121 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, beginSelected_);
122 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, endSelected_);
123 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, inputType_);
124 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, validElement_);
125 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, inspectorKey_);
126 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, pagePath_);
127 return true;
128 }
129
ReadFromParcel(Parcel & parcel)130 bool AccessibilityElementInfoParcel::ReadFromParcel(Parcel &parcel)
131 {
132 HILOG_DEBUG();
133 if (!ReadFromParcelFirstPart(parcel)) {
134 return false;
135 }
136 if (!ReadFromParcelSecondPart(parcel)) {
137 return false;
138 }
139 if (!ReadFromParcelThirdPart(parcel)) {
140 return false;
141 }
142 return true;
143 }
144
MarshallingFirstPart(Parcel & parcel) const145 bool AccessibilityElementInfoParcel::MarshallingFirstPart(Parcel &parcel) const
146 {
147 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, pageId_);
148 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(textMoveStep_));
149 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, itemCounts_);
150 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, windowId_);
151 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, elementId_);
152 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, parentId_);
153 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, bundleName_);
154 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, componentType_);
155 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, text_);
156 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, hintText_);
157 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, contentDescription_);
158 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, resourceName_);
159 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32Vector, parcel, childNodeIds_);
160 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, childCount_);
161 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, operations_.size());
162 for (auto &operations : operations_) {
163 AccessibleActionParcel action(operations);
164 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &action);
165 }
166 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, textLengthLimit_);
167 return true;
168 }
169
MarshallingSecondPart(Parcel & parcel) const170 bool AccessibilityElementInfoParcel::MarshallingSecondPart(Parcel &parcel) const
171 {
172 RectParcel boundsParcel(bounds_);
173 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &boundsParcel);
174 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, checkable_);
175 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, checked_);
176 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, focusable_);
177 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, focused_);
178 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, visible_);
179 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, accessibilityFocused_);
180 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, selected_);
181 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, clickable_);
182 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, longClickable_);
183 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, enable_);
184 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isPassword_);
185 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, scrollable_);
186 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, editable_);
187 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, popupSupported_);
188 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, multiLine_);
189 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, deletable_);
190 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, hint_);
191 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isEssential_);
192 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, currentIndex_);
193 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, beginIndex_);
194 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, endIndex_);
195 RangeInfoParcel rangeInfoParcel(rangeInfo_);
196 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &rangeInfoParcel);
197 GridInfoParcel gridParcel(grid_);
198 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &gridParcel);
199 GridItemInfoParcel gridItemParcel(gridItem_);
200 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &gridItemParcel);
201 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, liveRegion_);
202 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, contentInvalid_);
203 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, error_);
204 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, labeled_);
205 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, beginSelected_);
206 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, endSelected_);
207 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, inputType_);
208 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, validElement_);
209 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, inspectorKey_);
210 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, pagePath_);
211 return true;
212 }
213
Marshalling(Parcel & parcel) const214 bool AccessibilityElementInfoParcel::Marshalling(Parcel &parcel) const
215 {
216 HILOG_DEBUG();
217 if (!MarshallingFirstPart(parcel)) {
218 return false;
219 }
220 if (!MarshallingSecondPart(parcel)) {
221 return false;
222 }
223 return true;
224 }
225
Unmarshalling(Parcel & parcel)226 sptr<AccessibilityElementInfoParcel> AccessibilityElementInfoParcel::Unmarshalling(Parcel& parcel)
227 {
228 HILOG_DEBUG();
229
230 sptr<AccessibilityElementInfoParcel> accessibilityInfo = new(std::nothrow) AccessibilityElementInfoParcel();
231 if (!accessibilityInfo) {
232 HILOG_ERROR("Failed to create accessibilityInfo.");
233 return nullptr;
234 }
235 if (!accessibilityInfo->ReadFromParcel(parcel)) {
236 HILOG_ERROR("read from parcel failed");
237 return nullptr;
238 }
239 return accessibilityInfo;
240 }
241
AccessibleActionParcel(const AccessibleAction & action)242 AccessibleActionParcel::AccessibleActionParcel(const AccessibleAction &action)
243 {
244 HILOG_DEBUG();
245
246 AccessibleAction *self = this;
247 *self = action;
248 }
249
ReadFromParcel(Parcel & parcel)250 bool AccessibleActionParcel::ReadFromParcel(Parcel &parcel)
251 {
252 HILOG_DEBUG();
253 int32_t type = ActionType::ACCESSIBILITY_ACTION_INVALID;
254 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, type);
255 actionType_ = static_cast<ActionType>(type);
256 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, description_);
257 return true;
258 }
259
Marshalling(Parcel & parcel) const260 bool AccessibleActionParcel::Marshalling(Parcel &parcel) const
261 {
262 HILOG_DEBUG();
263 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(actionType_));
264 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, description_);
265
266 return true;
267 }
268
Unmarshalling(Parcel & parcel)269 sptr<AccessibleActionParcel> AccessibleActionParcel::Unmarshalling(Parcel& parcel)
270 {
271 HILOG_DEBUG();
272 sptr<AccessibleActionParcel> accessibleOperation = new(std::nothrow) AccessibleActionParcel();
273 if (!accessibleOperation) {
274 HILOG_ERROR("Failed to create accessibleOperation.");
275 return nullptr;
276 }
277 if (!accessibleOperation->ReadFromParcel(parcel)) {
278 HILOG_ERROR("read from parcel failed");
279 return nullptr;
280 }
281 return accessibleOperation;
282 }
283
RangeInfoParcel(const RangeInfo & rangeInfo)284 RangeInfoParcel::RangeInfoParcel(const RangeInfo &rangeInfo)
285 {
286 HILOG_DEBUG();
287
288 RangeInfo *self = this;
289 *self = rangeInfo;
290 }
291
ReadFromParcel(Parcel & parcel)292 bool RangeInfoParcel::ReadFromParcel(Parcel &parcel)
293 {
294 HILOG_DEBUG();
295 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, min_);
296 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, max_);
297 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, current_);
298
299 return true;
300 }
301
Marshalling(Parcel & parcel) const302 bool RangeInfoParcel::Marshalling(Parcel &parcel) const
303 {
304 HILOG_DEBUG();
305 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, min_);
306 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, max_);
307 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, current_);
308
309 return true;
310 }
311
Unmarshalling(Parcel & parcel)312 sptr<RangeInfoParcel> RangeInfoParcel::Unmarshalling(Parcel& parcel)
313 {
314 HILOG_DEBUG();
315 sptr<RangeInfoParcel> rangeInfo = new(std::nothrow) RangeInfoParcel();
316 if (!rangeInfo) {
317 HILOG_ERROR("Failed to create rangeInfo.");
318 return nullptr;
319 }
320 if (!rangeInfo->ReadFromParcel(parcel)) {
321 HILOG_ERROR("read from parcel failed");
322 return nullptr;
323 }
324 return rangeInfo;
325 }
326
GridInfoParcel(const GridInfo & gridInfo)327 GridInfoParcel::GridInfoParcel(const GridInfo &gridInfo)
328 {
329 HILOG_DEBUG();
330
331 GridInfo *self = this;
332 *self = gridInfo;
333 }
334
ReadFromParcel(Parcel & parcel)335 bool GridInfoParcel::ReadFromParcel(Parcel &parcel)
336 {
337 HILOG_DEBUG();
338 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rowCount_);
339 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, columnCount_);
340 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, selectionMode_);
341
342 return true;
343 }
344
Marshalling(Parcel & parcel) const345 bool GridInfoParcel::Marshalling(Parcel &parcel) const
346 {
347 HILOG_DEBUG();
348 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rowCount_);
349 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, columnCount_);
350 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, selectionMode_);
351
352 return true;
353 }
354
Unmarshalling(Parcel & parcel)355 sptr<GridInfoParcel> GridInfoParcel::Unmarshalling(Parcel& parcel)
356 {
357 HILOG_DEBUG();
358 sptr<GridInfoParcel> grid = new(std::nothrow) GridInfoParcel();
359 if (!grid) {
360 HILOG_ERROR("Failed to create grid.");
361 return nullptr;
362 }
363 if (!grid->ReadFromParcel(parcel)) {
364 HILOG_ERROR("read from parcel failed");
365 return nullptr;
366 }
367 return grid;
368 }
369
GridItemInfoParcel(const GridItemInfo & itemInfo)370 GridItemInfoParcel::GridItemInfoParcel(const GridItemInfo &itemInfo)
371 {
372 HILOG_DEBUG();
373
374 GridItemInfo *self = this;
375 *self = itemInfo;
376 }
377
ReadFromParcel(Parcel & parcel)378 bool GridItemInfoParcel::ReadFromParcel(Parcel &parcel)
379 {
380 HILOG_DEBUG();
381 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, heading_);
382 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, columnIndex_);
383 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rowIndex_);
384 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, columnSpan_);
385 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rowSpan_);
386 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, selected_);
387
388 return true;
389 }
390
Marshalling(Parcel & parcel) const391 bool GridItemInfoParcel::Marshalling(Parcel &parcel) const
392 {
393 HILOG_DEBUG();
394 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, heading_);
395 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, columnIndex_);
396 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rowIndex_);
397 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, columnSpan_);
398 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rowSpan_);
399 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, selected_);
400
401 return true;
402 }
403
Unmarshalling(Parcel & parcel)404 sptr<GridItemInfoParcel> GridItemInfoParcel::Unmarshalling(Parcel& parcel)
405 {
406 HILOG_DEBUG();
407 sptr<GridItemInfoParcel> gridItem = new(std::nothrow) GridItemInfoParcel();
408 if (!gridItem) {
409 HILOG_ERROR("Failed to create gridItem.");
410 return nullptr;
411 }
412 if (!gridItem->ReadFromParcel(parcel)) {
413 HILOG_ERROR("read from parcel failed");
414 return nullptr;
415 }
416 return gridItem;
417 }
418
RectParcel(const Rect & rect)419 RectParcel::RectParcel(const Rect &rect)
420 {
421 HILOG_DEBUG();
422
423 Rect *self = this;
424 *self = rect;
425 }
426
ReadFromParcel(Parcel & parcel)427 bool RectParcel::ReadFromParcel(Parcel &parcel)
428 {
429 HILOG_DEBUG();
430 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, leftTopX_);
431 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, leftTopY_);
432 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rightBottomX_);
433 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rightBottomY_);
434 return true;
435 }
436
Marshalling(Parcel & parcel) const437 bool RectParcel::Marshalling(Parcel &parcel) const
438 {
439 HILOG_DEBUG();
440 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, leftTopX_);
441 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, leftTopY_);
442 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rightBottomX_);
443 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, rightBottomY_);
444 return true;
445 }
446
Unmarshalling(Parcel & parcel)447 sptr<RectParcel> RectParcel::Unmarshalling(Parcel& parcel)
448 {
449 HILOG_DEBUG();
450 sptr<RectParcel> rect = new(std::nothrow) RectParcel();
451 if (!rect) {
452 HILOG_ERROR("Failed to create rect.");
453 return nullptr;
454 }
455 if (!rect->ReadFromParcel(parcel)) {
456 HILOG_ERROR("read from parcel failed");
457 return nullptr;
458 }
459 return rect;
460 }
461 } // namespace Accessibility
462 } // namespace OHOS