• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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