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