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_BRIDGE_COMMON_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERATION_OPERATION_UTILS_H
17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERATION_OPERATION_UTILS_H
18
19 #include "accessibility_element_info.h"
20 #include "accessibility_event_info.h"
21 #include "base/utils/utils.h"
22 #include "frameworks/core/accessibility/native_interface_accessibility_impl.h"
23
24 namespace OHOS::Ace::Framework {
TransformAccessbilityElementInfo(const ArkUI_AccessibilityElementInfo & nativeInfo,OHOS::Accessibility::AccessibilityElementInfo & accessibilityElementInfo)25 void TransformAccessbilityElementInfo(
26 const ArkUI_AccessibilityElementInfo& nativeInfo,
27 OHOS::Accessibility::AccessibilityElementInfo& accessibilityElementInfo)
28 {
29 accessibilityElementInfo.SetParent(nativeInfo.GetParentId());
30 accessibilityElementInfo.SetComponentType(nativeInfo.GetComponentType());
31 accessibilityElementInfo.SetContent(nativeInfo.GetContents());
32 accessibilityElementInfo.SetHint(nativeInfo.GetHintText());
33 accessibilityElementInfo.SetAccessibilityText(nativeInfo.GetAccessibilityText());
34 accessibilityElementInfo.SetDescriptionInfo(nativeInfo.GetAccessibilityDescription());
35
36 auto nodeList = nativeInfo.GetChildNodeIds();
37 for (const auto& node : nodeList) {
38 accessibilityElementInfo.AddChild(node);
39 }
40
41 auto actionList = nativeInfo.GetOperationActions();
42 for (const auto& actionItem : actionList) {
43 auto action = OHOS::Accessibility::AccessibleAction(
44 static_cast<OHOS::Accessibility::ActionType>(actionItem.actionType),
45 actionItem.description);
46 accessibilityElementInfo.AddAction(action);
47 }
48
49 auto rect = nativeInfo.GetScreenRect();
50 auto transformedRect = OHOS::Accessibility::Rect(
51 rect.leftTopX, rect.leftTopY, rect.rightBottomX, rect.rightBottomY);
52 accessibilityElementInfo.SetRectInScreen(transformedRect);
53 accessibilityElementInfo.SetCheckable(nativeInfo.IsCheckable());
54 accessibilityElementInfo.SetChecked(nativeInfo.IsChecked());
55 accessibilityElementInfo.SetFocusable(nativeInfo.IsFocusable());
56 accessibilityElementInfo.SetFocused(nativeInfo.IsFocused());
57 accessibilityElementInfo.SetVisible(nativeInfo.IsVisible());
58 accessibilityElementInfo.SetAccessibilityFocus(nativeInfo.IsAccessibilityFocused());
59 accessibilityElementInfo.SetSelected(nativeInfo.IsSelected());
60 accessibilityElementInfo.SetClickable(nativeInfo.IsClickable());
61 accessibilityElementInfo.SetLongClickable(nativeInfo.IsLongClickable());
62 accessibilityElementInfo.SetEnabled(nativeInfo.IsEnabled());
63 accessibilityElementInfo.SetPassword(nativeInfo.IsPassword());
64 accessibilityElementInfo.SetScrollable(nativeInfo.IsScrollable());
65 accessibilityElementInfo.SetEditable(nativeInfo.IsEditable());
66 accessibilityElementInfo.SetHinting(nativeInfo.IsHint());
67
68 auto range = nativeInfo.GetRangeInfo();
69 auto transformedRange = OHOS::Accessibility::RangeInfo(range.min, range.max, range.current);
70 accessibilityElementInfo.SetRange(transformedRange);
71
72 auto grid = nativeInfo.GetGridInfo();
73 auto transformedGrid = OHOS::Accessibility::GridInfo(
74 grid.rowCount, grid.columnCount, grid.selectionMode);
75 accessibilityElementInfo.SetGrid(transformedGrid);
76
77 auto girdItem = nativeInfo.GetGridItemInfo();
78 auto transformedGirdItemInfo = OHOS::Accessibility::GridItemInfo(
79 girdItem.rowIndex, girdItem.rowSpan, girdItem.columnIndex,
80 girdItem.columnSpan, girdItem.heading, girdItem.selected);
81 accessibilityElementInfo.SetGridItem(transformedGirdItemInfo);
82 accessibilityElementInfo.SetSelectedBegin(nativeInfo.GetTextBeginSelected());
83 accessibilityElementInfo.SetSelectedEnd(nativeInfo.GetTextEndSelected());
84 accessibilityElementInfo.SetCurrentIndex(nativeInfo.GetCurrentIndex());
85 accessibilityElementInfo.SetBeginIndex(nativeInfo.GetBeginIndex());
86 accessibilityElementInfo.SetEndIndex(nativeInfo.GetEndIndex());
87 accessibilityElementInfo.SetItemCounts(nativeInfo.GetItemCount());
88 accessibilityElementInfo.SetOffset(nativeInfo.GetOffset());
89 accessibilityElementInfo.SetAccessibilityGroup(nativeInfo.GetAccessibilityGroup());
90 accessibilityElementInfo.SetAccessibilityLevel(nativeInfo.GetAccessibilityLevel());
91 accessibilityElementInfo.SetZIndex(nativeInfo.GetZIndex());
92 accessibilityElementInfo.SetOpacity(nativeInfo.GetOpacity());
93 accessibilityElementInfo.SetBackgroundColor(nativeInfo.GetBackgroundColor());
94 accessibilityElementInfo.SetBackgroundImage(nativeInfo.GetBackgroundImage());
95 accessibilityElementInfo.SetBlur(nativeInfo.GetBlur());
96 accessibilityElementInfo.SetHitTestBehavior(nativeInfo.GetHitTestBehavior());
97 accessibilityElementInfo.SetAccessibilityId(nativeInfo.GetElementId());
98 }
99
TransformAccessbilityEventInfo(const ArkUI_AccessibilityEventInfo & nativeEventInfo,OHOS::Accessibility::AccessibilityEventInfo & accessibilityEventInfo)100 void TransformAccessbilityEventInfo(
101 const ArkUI_AccessibilityEventInfo& nativeEventInfo,
102 OHOS::Accessibility::AccessibilityEventInfo& accessibilityEventInfo)
103 {
104 accessibilityEventInfo.SetEventType(
105 static_cast<OHOS::Accessibility::EventType>(nativeEventInfo.GetEventType()));
106 OHOS::Accessibility::AccessibilityElementInfo elementInfo;
107 auto info = nativeEventInfo.GetElementInfo();
108 if (info != nullptr) {
109 TransformAccessbilityElementInfo(*info, elementInfo);
110 }
111
112 accessibilityEventInfo.SetElementInfo(elementInfo);
113 accessibilityEventInfo.SetTextAnnouncedForAccessibility(
114 nativeEventInfo.GetTextAnnouncedForAccessibility());
115 accessibilityEventInfo.SetRequestFocusElementId(nativeEventInfo.GetRequestFocusId());
116 }
117 } // namespace OHOS::Ace::Framework
118 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERATION_OPERATION_UTILS_H