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