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