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