• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H
18 
19 #include <map>
20 #include <mutex>
21 #include <string>
22 #include <unordered_set>
23 #include <vector>
24 
25 #include "interfaces/native/native_interface_accessibility.h"
26 
27 #include "base/utils/singleton.h"
28 
29 struct ArkUI_AccessibilityElementInfo {
30     explicit ArkUI_AccessibilityElementInfo();
SetPageIdArkUI_AccessibilityElementInfo31     void SetPageId(int32_t pageId)
32     {
33         this->pageId = pageId;
34     }
35 
GetPageIdArkUI_AccessibilityElementInfo36     int32_t GetPageId() const
37     {
38         return pageId;
39     }
40 
SetParentIdArkUI_AccessibilityElementInfo41     void SetParentId(int64_t parentId)
42     {
43         this->parentId = parentId;
44     }
45 
GetParentIdArkUI_AccessibilityElementInfo46     int64_t GetParentId() const
47     {
48         return parentId;
49     }
50 
GetElementIdArkUI_AccessibilityElementInfo51     int32_t GetElementId() const
52     {
53         return elementId;
54     }
55 
SetElementIdArkUI_AccessibilityElementInfo56     void SetElementId(int64_t elementId)
57     {
58         this->elementId = elementId;
59     }
60 
SetTextBeginSelectedArkUI_AccessibilityElementInfo61     void SetTextBeginSelected(int32_t textBeginSelected)
62     {
63         this->textBeginSelected = textBeginSelected;
64     }
65 
GetTextBeginSelectedArkUI_AccessibilityElementInfo66     int32_t GetTextBeginSelected() const
67     {
68         return textBeginSelected;
69     }
70 
SetTextEndSelectedArkUI_AccessibilityElementInfo71     void SetTextEndSelected(int32_t textEndSelected)
72     {
73         this->textEndSelected = textEndSelected;
74     }
75 
GetTextEndSelectedArkUI_AccessibilityElementInfo76     int32_t GetTextEndSelected() const
77     {
78         return textEndSelected;
79     }
80 
SetCurrentIndexArkUI_AccessibilityElementInfo81     void SetCurrentIndex(int32_t currentIndex)
82     {
83         this->currentIndex = currentIndex;
84     }
85 
GetCurrentIndexArkUI_AccessibilityElementInfo86     int32_t GetCurrentIndex() const
87     {
88         return currentIndex;
89     }
90 
SetBeginIndexArkUI_AccessibilityElementInfo91     void SetBeginIndex(int32_t beginIndex)
92     {
93         this->beginIndex = beginIndex;
94     }
95 
GetBeginIndexArkUI_AccessibilityElementInfo96     int32_t GetBeginIndex() const
97     {
98         return beginIndex;
99     }
100 
SetEndIndexArkUI_AccessibilityElementInfo101     void SetEndIndex(int32_t endIndex)
102     {
103         this->endIndex = endIndex;
104     }
105 
GetEndIndexArkUI_AccessibilityElementInfo106     int32_t GetEndIndex() const
107     {
108         return endIndex;
109     }
110 
SetItemCountArkUI_AccessibilityElementInfo111     void SetItemCount(int32_t itemCount)
112     {
113         this->itemCount = itemCount;
114     }
115 
GetItemCountArkUI_AccessibilityElementInfo116     int32_t GetItemCount() const
117     {
118         return itemCount;
119     }
120 
SetOffsetArkUI_AccessibilityElementInfo121     void SetOffset(int32_t offset)
122     {
123         this->offset = offset;
124     }
125 
GetOffsetArkUI_AccessibilityElementInfo126     int32_t GetOffset() const
127     {
128         return offset;
129     }
130 
SetZIndexArkUI_AccessibilityElementInfo131     void SetZIndex(int32_t zIndex)
132     {
133         this->zIndex = zIndex;
134     }
135 
GetZIndexArkUI_AccessibilityElementInfo136     int32_t GetZIndex() const
137     {
138         return zIndex;
139     }
140 
SetOpacityArkUI_AccessibilityElementInfo141     void SetOpacity(float opacity)
142     {
143         this->opacity = opacity;
144     }
145 
GetOpacityArkUI_AccessibilityElementInfo146     float GetOpacity() const
147     {
148         return opacity;
149     }
150 
SetCheckableArkUI_AccessibilityElementInfo151     void SetCheckable(bool checkable)
152     {
153         this->checkable = checkable;
154     }
155 
IsCheckableArkUI_AccessibilityElementInfo156     bool IsCheckable() const
157     {
158         return checkable;
159     }
160 
SetCheckedArkUI_AccessibilityElementInfo161     void SetChecked(bool checked)
162     {
163         this->checked = checked;
164     }
165 
IsCheckedArkUI_AccessibilityElementInfo166     bool IsChecked() const
167     {
168         return checked;
169     }
170 
SetFocusableArkUI_AccessibilityElementInfo171     void SetFocusable(bool focusable)
172     {
173         this->focusable = focusable;
174     }
175 
IsFocusableArkUI_AccessibilityElementInfo176     bool IsFocusable() const
177     {
178         return focusable;
179     }
180 
SetFocusedArkUI_AccessibilityElementInfo181     void SetFocused(bool focused)
182     {
183         this->focused = focused;
184     }
185 
IsFocusedArkUI_AccessibilityElementInfo186     bool IsFocused() const
187     {
188         return focused;
189     }
190 
SetVisibleArkUI_AccessibilityElementInfo191     void SetVisible(bool visible)
192     {
193         this->visible = visible;
194     }
195 
IsVisibleArkUI_AccessibilityElementInfo196     bool IsVisible() const
197     {
198         return visible;
199     }
200 
SetAccessibilityFocusedArkUI_AccessibilityElementInfo201     void SetAccessibilityFocused(bool accessibilityFocused)
202     {
203         this->accessibilityFocused = accessibilityFocused;
204     }
205 
IsAccessibilityFocusedArkUI_AccessibilityElementInfo206     bool IsAccessibilityFocused() const
207     {
208         return accessibilityFocused;
209     }
210 
SetSelectedArkUI_AccessibilityElementInfo211     void SetSelected(bool selected)
212     {
213         this->selected = selected;
214     }
215 
IsSelectedArkUI_AccessibilityElementInfo216     bool IsSelected() const
217     {
218         return selected;
219     }
220 
SetClickableArkUI_AccessibilityElementInfo221     void SetClickable(bool clickable)
222     {
223         this->clickable = clickable;
224     }
225 
IsClickableArkUI_AccessibilityElementInfo226     bool IsClickable() const
227     {
228         return clickable;
229     }
230 
SetLongClickableArkUI_AccessibilityElementInfo231     void SetLongClickable(bool longClickable)
232     {
233         this->longClickable = longClickable;
234     }
235 
IsLongClickableArkUI_AccessibilityElementInfo236     bool IsLongClickable() const
237     {
238         return longClickable;
239     }
240 
SetEnabledArkUI_AccessibilityElementInfo241     void SetEnabled(bool enabled)
242     {
243         this->enabled = enabled;
244     }
245 
IsEnabledArkUI_AccessibilityElementInfo246     bool IsEnabled() const
247     {
248         return enabled;
249     }
250 
SetPasswordArkUI_AccessibilityElementInfo251     void SetPassword(bool isPassword)
252     {
253         this->password = isPassword;
254     }
255 
IsPasswordArkUI_AccessibilityElementInfo256     bool IsPassword() const
257     {
258         return password;
259     }
260 
SetScrollableArkUI_AccessibilityElementInfo261     void SetScrollable(bool scrollable)
262     {
263         this->scrollable = scrollable;
264     }
265 
IsScrollableArkUI_AccessibilityElementInfo266     bool IsScrollable() const
267     {
268         return scrollable;
269     }
270 
SetEditableArkUI_AccessibilityElementInfo271     void SetEditable(bool editable)
272     {
273         this->editable = editable;
274     }
275 
IsEditableArkUI_AccessibilityElementInfo276     bool IsEditable() const
277     {
278         return editable;
279     }
280 
SetHintArkUI_AccessibilityElementInfo281     void SetHint(bool hint)
282     {
283         this->hint = hint;
284     }
285 
IsHintArkUI_AccessibilityElementInfo286     bool IsHint() const
287     {
288         return hint;
289     }
290 
SetAccessibilityGroupArkUI_AccessibilityElementInfo291     void SetAccessibilityGroup(bool accessibilityGroup)
292     {
293         this->accessibilityGroup = accessibilityGroup;
294     }
295 
GetAccessibilityGroupArkUI_AccessibilityElementInfo296     bool GetAccessibilityGroup() const
297     {
298         return accessibilityGroup;
299     }
300 
301     void SetRect(const ArkUI_AccessibleRect& rect);
GetScreenRectArkUI_AccessibilityElementInfo302     ArkUI_AccessibleRect GetScreenRect() const
303     {
304         return screenRect;
305     }
306 
307     void SetRangeInfo(const ArkUI_AccessibleRangeInfo& rangeInfo);
GetRangeInfoArkUI_AccessibilityElementInfo308     ArkUI_AccessibleRangeInfo GetRangeInfo() const
309     {
310         return rangeInfo;
311     }
312 
313     void SetGridInfo(const ArkUI_AccessibleGridInfo& gridInfo);
GetGridInfoArkUI_AccessibilityElementInfo314     ArkUI_AccessibleGridInfo GetGridInfo() const
315     {
316         return grid;
317     }
318 
319     void SetGridItemInfo(const ArkUI_AccessibleGridItemInfo& gridItemInfo);
GetGridItemInfoArkUI_AccessibilityElementInfo320     ArkUI_AccessibleGridItemInfo GetGridItemInfo() const
321     {
322         return gridItem;
323     }
324 
325     void ClearChildNodeIds();
326     void AddChildNodeId(int64_t childNodeId);
GetChildNodeIdsArkUI_AccessibilityElementInfo327     const std::vector<int64_t>& GetChildNodeIds() const
328     {
329         return childNodeIds;
330     }
331 
332     void ClearOperationActions();
333     void AddOperationAction(const ArkUI_AccessibleAction& action);
GetOperationActionsArkUI_AccessibilityElementInfo334     const std::vector<ArkUI_AccessibleAction>& GetOperationActions() const
335     {
336         return operationActions;
337     }
338 
SetComponentTypeArkUI_AccessibilityElementInfo339     void SetComponentType(const std::string& componentType)
340     {
341         this->componentType = componentType;
342     }
343 
GetComponentTypeArkUI_AccessibilityElementInfo344     std::string GetComponentType() const
345     {
346         return componentType;
347     }
348 
SetContentsArkUI_AccessibilityElementInfo349     void SetContents(const std::string& contents)
350     {
351         this->contents = contents;
352     }
353 
GetContentsArkUI_AccessibilityElementInfo354     std::string GetContents() const
355     {
356         return contents;
357     }
358 
SetHintTextArkUI_AccessibilityElementInfo359     void SetHintText(const std::string& hintText)
360     {
361         this->hintText = hintText;
362     }
363 
GetHintTextArkUI_AccessibilityElementInfo364     std::string GetHintText() const
365     {
366         return hintText;
367     }
368 
SetAccessibilityTextArkUI_AccessibilityElementInfo369     void SetAccessibilityText(const std::string& accessibilityText)
370     {
371         this->accessibilityText = accessibilityText;
372     }
373 
GetAccessibilityTextArkUI_AccessibilityElementInfo374     std::string GetAccessibilityText() const
375     {
376         return accessibilityText;
377     }
378 
SetAccessibilityDescriptionArkUI_AccessibilityElementInfo379     void SetAccessibilityDescription(const std::string& accessibilityDescription)
380     {
381         this->accessibilityDescription = accessibilityDescription;
382     }
383 
GetAccessibilityDescriptionArkUI_AccessibilityElementInfo384     std::string GetAccessibilityDescription() const
385     {
386         return accessibilityDescription;
387     }
388 
SetAccessibilityLevelArkUI_AccessibilityElementInfo389     void SetAccessibilityLevel(const std::string& accessibilityLevel)
390     {
391         this->accessibilityLevel = accessibilityLevel;
392     }
393 
GetAccessibilityLevelArkUI_AccessibilityElementInfo394     std::string GetAccessibilityLevel() const
395     {
396         return accessibilityLevel;
397     }
398 
SetBackgroundColorArkUI_AccessibilityElementInfo399     void SetBackgroundColor(const std::string& backgroundColor)
400     {
401         this->backgroundColor = backgroundColor;
402     }
403 
GetBackgroundColorArkUI_AccessibilityElementInfo404     std::string GetBackgroundColor() const
405     {
406         return backgroundColor;
407     }
408 
SetBackgroundImageArkUI_AccessibilityElementInfo409     void SetBackgroundImage(const std::string& backgroundImage)
410     {
411         this->backgroundImage = backgroundImage;
412     }
413 
GetBackgroundImageArkUI_AccessibilityElementInfo414     std::string GetBackgroundImage() const
415     {
416         return backgroundImage;
417     }
418 
SetBlurArkUI_AccessibilityElementInfo419     void SetBlur(const std::string& blur)
420     {
421         this->blur = blur;
422     }
423 
GetBlurArkUI_AccessibilityElementInfo424     std::string GetBlur() const
425     {
426         return blur;
427     }
428 
SetHitTestBehaviorArkUI_AccessibilityElementInfo429     void SetHitTestBehavior(const std::string& hitTestBehavior)
430     {
431         this->hitTestBehavior = hitTestBehavior;
432     }
433 
GetHitTestBehaviorArkUI_AccessibilityElementInfo434     std::string GetHitTestBehavior() const
435     {
436         return hitTestBehavior;
437     }
438 
439 private:
440     int32_t pageId = 0;
441     int32_t textBeginSelected = 0;
442     int32_t textEndSelected = 0;
443     int32_t currentIndex = 0;
444     int32_t beginIndex = 0;
445     int32_t endIndex = 0;
446     int32_t itemCount = 0;
447     int32_t offset = 0;
448     int32_t zIndex = 0;
449     float opacity = 0.0f;
450 
451     int64_t parentId = 0;
452     int32_t elementId = 0;
453 
454     bool checkable = false;
455     bool checked = false;
456     bool focusable = false;
457     bool focused = false;
458     bool visible = false;
459     bool accessibilityFocused = false;
460     bool selected = false;
461     bool clickable = false;
462     bool longClickable = false;
463     bool enabled = false;
464     bool password = false;
465     bool scrollable = false;
466     bool editable = false;
467     bool hint = false;
468     bool accessibilityGroup = false;
469 
470     ArkUI_AccessibleRect screenRect;
471     ArkUI_AccessibleRangeInfo rangeInfo;
472     ArkUI_AccessibleGridInfo grid;
473     ArkUI_AccessibleGridItemInfo gridItem;
474 
475     std::vector<int64_t> childNodeIds;
476     std::vector<ArkUI_AccessibleAction> operationActions;
477 
478     std::string componentType;
479     std::string contents;
480     std::string hintText;
481     std::string accessibilityText;
482     std::string accessibilityDescription;
483 
484     std::string accessibilityLevel;
485     std::string backgroundColor;
486     std::string backgroundImage;
487     std::string blur;
488     std::string hitTestBehavior;
489 };
490 
491 struct ArkUI_AccessibilityEventInfo {
492 public:
493     ArkUI_AccessibilityEventInfo() = default;
494 
GetEventTypeArkUI_AccessibilityEventInfo495     ArkUI_AccessibilityEventType GetEventType() const
496     {
497         return eventType;
498     }
499 
SetEventTypeArkUI_AccessibilityEventInfo500     void SetEventType(ArkUI_AccessibilityEventType eventType_)
501     {
502         eventType = eventType_;
503     }
504 
GetPageIdArkUI_AccessibilityEventInfo505     int32_t GetPageId() const
506     {
507         return pageId;
508     }
509 
SetPageIdArkUI_AccessibilityEventInfo510     void SetPageId(int32_t pageId)
511     {
512         this->pageId = pageId;
513     }
514 
GetRequestFocusIdArkUI_AccessibilityEventInfo515     int32_t GetRequestFocusId() const
516     {
517         return requestFocusId;
518     }
519 
SetRequestFocusIdArkUI_AccessibilityEventInfo520     void SetRequestFocusId(int32_t requestFocusId)
521     {
522         this->requestFocusId = requestFocusId;
523     }
524 
GetElementInfoArkUI_AccessibilityEventInfo525     ArkUI_AccessibilityElementInfo* GetElementInfo() const
526     {
527         return elementInfo;
528     }
529 
SetElementInfoArkUI_AccessibilityEventInfo530     void SetElementInfo(ArkUI_AccessibilityElementInfo* elementInfo)
531     {
532         this->elementInfo = elementInfo;
533     }
534 
GetTextAnnouncedForAccessibilityArkUI_AccessibilityEventInfo535     std::string GetTextAnnouncedForAccessibility() const
536     {
537         return textAnnouncedForAccessibility;
538     }
539 
SetTextAnnouncedForAccessibilityArkUI_AccessibilityEventInfo540     void SetTextAnnouncedForAccessibility(const std::string& textAnnouncedForAccessibility)
541     {
542         this->textAnnouncedForAccessibility = textAnnouncedForAccessibility;
543     }
544 
545 private:
546     ArkUI_AccessibilityEventType eventType = ARKUI_ACCESSIBILITY_NATIVE_EVENT_TYPE_INVALID;
547     int32_t pageId = 0;
548     int32_t requestFocusId = 0;
549     ArkUI_AccessibilityElementInfo* elementInfo = nullptr;
550     std::string textAnnouncedForAccessibility;
551 };
552 
553 // suport multithreads
554 struct ArkUI_AccessibilityElementInfoList {
555 public:
556     ArkUI_AccessibilityElementInfoList() = default;
557     ArkUI_AccessibilityElementInfo* AddAndGetElementInfo();
558     bool CopyAccessibilityElementInfo(std::vector<ArkUI_AccessibilityElementInfo>& infos);
559 
560 private:
561     std::mutex mutex_;
562     std::vector<ArkUI_AccessibilityElementInfo> elementInfos_;
563 };
564 
565 struct ArkUI_AccessibilityActionArguments {
566 public:
ArkUI_AccessibilityActionArgumentsArkUI_AccessibilityActionArguments567     ArkUI_AccessibilityActionArguments(std::map<std::string, std::string> actionArguments)
568     {
569         actionArguments_.swap(actionArguments);
570     }
571     const char* FindValueByKey(const char* key);
572 
573 private:
574     std::map<std::string, std::string> actionArguments_;
575 };
576 
577 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H