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 #ifndef ACCESSIBILITY_ELEMENT_INFO_PARCEL_H
17 #define ACCESSIBILITY_ELEMENT_INFO_PARCEL_H
18 
19 #include "accessibility_element_info.h"
20 #include "parcel.h"
21 
22 namespace OHOS {
23 namespace Accessibility {
24 /*
25 * class define the action on Accessibility info
26 */
27 class AccessibleActionParcel : public AccessibleAction, public Parcelable {
28 public:
29     /**
30      * @brief Construct
31      */
32     AccessibleActionParcel() = default;
33 
34     /**
35      * @brief Construct
36      * @param action The object of AccessibleAction
37      */
38     explicit AccessibleActionParcel(const AccessibleAction &action);
39 
40     /**
41      * @brief Used for IPC communication
42      * @param parcel
43      * @return true: Read parcel date successfully; otherwise is not
44      */
45     bool ReadFromParcel(Parcel &parcel);
46 
47     /**
48      * @brief Used for IPC communication
49      * @param parcel
50      */
51     bool Marshalling(Parcel &parcel) const override;
52 
53     /**
54      * @brief Used for IPC communication
55      * @param parcel
56      * @return Read AccessibleActionParcel from parcel data
57      */
58     static sptr<AccessibleActionParcel> Unmarshalling(Parcel &parcel);
59 };
60 
61 /**
62  * @brief  Define the RangInfo for progress bar
63  * @note
64  * @retval None
65  */
66 class RangeInfoParcel : public RangeInfo, public Parcelable {
67 public:
68     /**
69      * @brief Construct
70      */
71     RangeInfoParcel() = default;
72 
73     /**
74      * @brief Construct
75      * @param rangeInfo The object of RangeInfo.
76      */
77     explicit RangeInfoParcel(const RangeInfo &rangeInfo);
78 
79     /**
80      * @brief Used for IPC communication
81      * @param parcel
82      */
83     bool ReadFromParcel(Parcel &parcel);
84 
85     /**
86      * @brief Used for IPC communication
87      * @param parcel
88      */
89     bool Marshalling(Parcel &parcel) const override;
90 
91     /**
92      * @brief Used for IPC communication
93      * @param parcel
94      */
95     static sptr<RangeInfoParcel> Unmarshalling(Parcel &parcel);
96 };
97 
98 /**
99  * @brief  Define the list/grid component
100  * @note
101  * @retval None
102  */
103 class GridInfoParcel : public GridInfo, public Parcelable {
104 public:
105     /**
106      * @brief Construct
107      * @since 3
108      * @sysCap Accessibility
109      */
110     GridInfoParcel() = default;
111 
112     /**
113      * @brief Construct
114      * @param gridInfo The object of GridInfo.
115      * @since 3
116      * @sysCap Accessibility
117      */
118     explicit GridInfoParcel(const GridInfo &gridInfo);
119 
120     /**
121      * @brief Used for IPC communication
122      * @param parcel
123      * @since 3
124      * @sysCap Accessibility
125      */
126     bool ReadFromParcel(Parcel &parcel);
127 
128     /**
129      * @brief Used for IPC communication
130      * @param parcel
131      * @since 3
132      * @sysCap Accessibility
133      */
134     bool Marshalling(Parcel &parcel) const override;
135 
136     /**
137      * @brief Used for IPC communication
138      * @param parcel
139      * @since 3
140      * @sysCap Accessibility
141      */
142     static sptr<GridInfoParcel> Unmarshalling(Parcel &parcel);
143 };
144 
145 class ExtraElementInfoParcel : public ExtraElementInfo, public Parcelable {
146 public:
147     /**
148      * @brief Construct
149      * @sysCap Accessibility
150      */
151     ExtraElementInfoParcel() = default;
152 
153     /**
154      * @brief Construct
155      * @param gridInfo The object of GridInfo.
156      * @sysCap Accessibility
157      */
158     explicit ExtraElementInfoParcel(const ExtraElementInfo &extraElementInfo);
159 
160     /**
161      * @brief Used for IPC communication
162      * @param parcel
163      * @sysCap Accessibility
164      */
165     bool ReadFromParcel(Parcel &parcel);
166 
167     /**
168      * @brief Used for IPC communication
169      * @param parcel
170      * @sysCap Accessibility
171      */
172     virtual bool Marshalling(Parcel &parcel) const override;
173 
174     /**
175      * @brief Used for IPC communication
176      * @param parcel
177      * @sysCap Accessibility
178      */
179     static sptr<ExtraElementInfoParcel> Unmarshalling(Parcel &parcel);
180 };
181 
182 class GridItemInfoParcel : public GridItemInfo, public Parcelable {
183 public:
184     /**
185      * @brief Construct
186      * @since 3
187      * @sysCap Accessibility
188      */
189     GridItemInfoParcel() = default;
190 
191     /**
192      * @brief Construct
193      * @param itemInfo The object of GridItemInfo.
194      * @since 3
195      * @sysCap Accessibility
196      */
197     explicit GridItemInfoParcel(const GridItemInfo &itemInfo);
198 
199     /**
200      * @brief Used for IPC communication
201      * @param parcel
202      * @since 3
203      * @sysCap Accessibility
204      */
205     bool ReadFromParcel(Parcel &parcel);
206 
207     /**
208      * @brief Used for IPC communication
209      * @param parcel
210      * @since 3
211      * @sysCap Accessibility
212      */
213     bool Marshalling(Parcel &parcel) const override;
214 
215     /**
216      * @brief Used for IPC communication
217      * @param parcel
218      * @since 3
219      * @sysCap Accessibility
220      */
221     static sptr<GridItemInfoParcel> Unmarshalling(Parcel &parcel);
222 };
223 
224 class RectParcel : public Rect, public Parcelable {
225 public:
226     /**
227      * @brief Construct
228      * @since 3
229      * @sysCap Accessibility
230      */
231     RectParcel() = default;
232 
233     /**
234      * @brief Construct
235      * @param rect The object of Rect.
236      * @since 3
237      * @sysCap Accessibility
238      */
239     explicit RectParcel(const Rect &rect);
240 
241     /**
242      * @brief Used for IPC communication
243      * @param parcel
244      * @since 3
245      * @sysCap Accessibility
246      */
247     bool ReadFromParcel(Parcel &parcel);
248 
249     /**
250      * @brief Used for IPC communication
251      * @param parcel
252      * @since 3
253      * @sysCap Accessibility
254      */
255     bool Marshalling(Parcel &parcel) const override;
256 
257     /**
258      * @brief Used for IPC communication
259      * @param parcel
260      * @since 3
261      * @sysCap Accessibility
262      */
263     static sptr<RectParcel> Unmarshalling(Parcel &parcel);
264 };
265 
266 /*
267 * class define the span info
268 */
269 class SpanInfoParcel : public SpanInfo, public Parcelable {
270 public:
271     /**
272      * @brief Construct
273      */
274     SpanInfoParcel() = default;
275 
276     /**
277      * @brief Construct
278      * @param rangeInfo The object of SpanInfo.
279      */
280     explicit SpanInfoParcel(const SpanInfo &spanInfo);
281 
282     /**
283      * @brief Used for IPC communication
284      * @param parcel
285      */
286     bool ReadFromParcel(Parcel &parcel);
287 
288     /**
289      * @brief Used for IPC communication
290      * @param parcel
291      */
292     virtual bool Marshalling(Parcel &parcel) const override;
293 
294     /**
295      * @brief Used for IPC communication
296      * @param parcel
297      */
298     static sptr<SpanInfoParcel> Unmarshalling(Parcel &parcel);
299 };
300 
301 /*
302 * The class supply the api to set/get ui component property
303 */
304 class AccessibilityElementInfoParcel : public AccessibilityElementInfo, public Parcelable {
305 public:
306     /**
307      * @brief Construct
308      * @since 3
309      * @sysCap Accessibility
310      */
311     AccessibilityElementInfoParcel() = default;
312 
313     /**
314      * @brief Construct
315      * @param elementInfo The object of AccessibilityElementInfo.
316      * @since 3
317      * @sysCap Accessibility
318      */
319     explicit AccessibilityElementInfoParcel(const AccessibilityElementInfo &elementInfo);
320 
321     /**
322      * @brief Used for IPC communication
323      * @param parcel
324      * @return true: Read parcel data successfully; ohterwise is not.
325      * @since 3
326      * @sysCap Accessibility
327      */
328     bool ReadFromParcel(Parcel &parcel);
329 
330     /**
331      * @brief Used for IPC communication
332      * @param parcel
333      * @return true: Write parcel data successfully; ohterwise is not.
334      * @since 3
335      * @sysCap Accessibility
336      */
337     bool Marshalling(Parcel &parcel) const override;
338 
339     /**
340      * @brief Used for IPC communication
341      * @param parcel
342      * @return Read AccessibilityElementInfoParcel from parcel data
343      * @since 3
344      * @sysCap Accessibility
345      */
346     static sptr<AccessibilityElementInfoParcel> Unmarshalling(Parcel &parcel);
347 
348 private:
349      /**
350      * @brief Used for IPC communication first part
351      * @param parcel
352      * @sysCap Accessibility
353      */
354     bool ReadFromParcelFirstPart(Parcel &parcel);
355 
356      /**
357      * @brief Used for IPC communication second part
358      * @param parcel
359      * @sysCap Accessibility
360      */
361     bool ReadFromParcelSecondPart(Parcel &parcel);
362 
363      /**
364      * @brief Used for IPC communication third part
365      * @param parcel
366      * @sysCap Accessibility
367      */
368     bool ReadFromParcelThirdPart(Parcel &parcel);
369 
370      /**
371      * @brief Used for IPC communication fourth part
372      * @param parcel
373      * @sysCap Accessibility
374      */
375     bool ReadFromParcelFourthPart(Parcel &parcel);
376 
377     /**
378      * @brief Used for IPC communication first part
379      * @param parcel
380      * @sysCap Accessibility
381      */
382     bool MarshallingFirstPart(Parcel &parcel) const;
383 
384     /**
385      * @brief Used for IPC communication second part
386      * @param parcel
387      * @sysCap Accessibility
388      */
389     bool MarshallingSecondPart(Parcel &parcel) const;
390 
391     /**
392      * @brief Used for IPC communication second part
393      * @param parcel
394      * @sysCap Accessibility
395      */
396     bool MarshallingThirdPart(Parcel &parcel) const;
397 };
398 } // namespace Accessibility
399 } // namespace OHOS
400 #endif