1 /*
2  * Copyright (c) 2021-2023 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_ACCESSIBILITY_UTILS_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_UTILS_H
18 
19 #include <cstddef>
20 #include <cstdint>
21 
22 #include "base/geometry/rect.h"
23 
24 namespace OHOS::Ace {
25 
26 // define accessibility node tags
27 extern const char ACCESSIBILITY_TAG_DIV[];
28 extern const char ACCESSIBILITY_TAG_CALENDAR[];
29 extern const char ACCESSIBILITY_TAG_TEXT[];
30 extern const char ACCESSIBILITY_TAG_PICKER[];
31 extern const char ACCESSIBILITY_TAG_OPTION[];
32 extern const char ACCESSIBILITY_TAG_POPUP[];
33 extern const char ACCESSIBILITY_TAG_PROGRESS[];
34 extern const char ACCESSIBILITY_TAG_SELECT[];
35 extern const char ACCESSIBILITY_TAG_MENU[];
36 extern const char ACCESSIBILITY_TAG_SLIDER[];
37 extern const char ACCESSIBILITY_TAG_SPAN[];
38 extern const char ACCESSIBILITY_TAG_STACK[];
39 extern const char ACCESSIBILITY_TAG_SWIPER[];
40 extern const char ACCESSIBILITY_TAG_SWITCH[];
41 extern const char ACCESSIBILITY_TAG_TABS[];
42 extern const char ACCESSIBILITY_TAG_TAB_BAR[];
43 extern const char ACCESSIBILITY_TAG_TAB_CONTENT[];
44 extern const char ACCESSIBILITY_TAG_REFRESH[];
45 extern const char ACCESSIBILITY_TAG_IMAGE[];
46 extern const char ACCESSIBILITY_TAG_LIST[];
47 extern const char ACCESSIBILITY_TAG_LIST_ITEM[];
48 extern const char ACCESSIBILITY_TAG_LIST_ITEM_GROUP[];
49 extern const char ACCESSIBILITY_TAG_VIDEO[];
50 extern const char ACCESSIBILITY_TAG_RATING[];
51 extern const char ACCESSIBILITY_TAG_MARQUEE[];
52 extern const char ACCESSIBILITY_TAG_NAVIGATION_BAR[];
53 extern const char ACCESSIBILITY_TAG_NAVIGATION_MENU[];
54 extern const char ACCESSIBILITY_TAG_TEXTAREA[];
55 extern const char ACCESSIBILITY_TAG_INPUT[];
56 extern const char ACCESSIBILITY_TAG_LABEL[];
57 extern const char ACCESSIBILITY_TAG_DIVIDER[];
58 extern const char ACCESSIBILITY_TAG_CANVAS[];
59 extern const char ACCESSIBILITY_TAG_BUTTON[];
60 extern const char ACCESSIBILITY_TAG_CHART[];
61 extern const char ACCESSIBILITY_TAG_CLOCK[];
62 extern const char ACCESSIBILITY_TAG_DIALOG[];
63 extern const char ACCESSIBILITY_TAG_SEARCH[];
64 
65 extern const int32_t FOCUS_DIRECTION_UP;
66 extern const int32_t FOCUS_DIRECTION_DOWN;
67 extern const int32_t FOCUS_DIRECTION_LEFT;
68 extern const int32_t FOCUS_DIRECTION_RIGHT;
69 extern const int32_t FOCUS_DIRECTION_FORWARD;
70 extern const int32_t FOCUS_DIRECTION_BACKWARD;
71 
72 enum class AccessibilityEventType : size_t {
73     CLICK = 0x00000001,
74     LONG_PRESS = 0x00000002,
75     SELECTED = 0x00000004,
76     BLUR = 0x00000007,
77     FOCUS = 0x00000008,
78     TEXT_CHANGE = 0x00000010,
79     EJECT_DISMISS = 0x00000020,
80     MOUSE = 149,
81     KEYBOARD_BACK = 150,
82     KEYBOARD_UP = 151,
83     KEYBOARD_DOWN = 152,
84     KEYBOARD_LEFT = 153,
85     KEYBOARD_RIGHT = 154,
86     KEYBOARD_CENTER = 155,
87     HANDLE_A = 156,
88     HANDLE_SELECT = 157,
89     KEYBOARD_TAB = 158,
90     KEYBOARD_SPACE = 159,
91     KEYBOARD_ENTER = 160,
92     KEYBOARD_ESCAPE = 161,
93     KEYBOARD_NUMBER_ENTER = 162,
94     TV_CONTROL_MEDIA_PLAY = 163,
95     PAGE_CHANGE = 200,
96     HOVER_ENTER_EVENT = 0x0000080,
97     HOVER_EXIT_EVENT = 0x0000100,
98     TOUCH_START = 0x00000200,
99     TOUCH_MOVE = 0x00000201,
100     TOUCH_CANCEL = 0x00000202,
101     TOUCH_END = 0x00000400,
102     CHANGE = 0x00000800,
103     COMPONENT_CHANGE = 0x00000801,
104     SCROLL_END = 0x00001000,
105     TEXT_SELECTION_UPDATE = 0x000002000,
106     ACCESSIBILITY_FOCUSED = 0x00008000,
107     ACCESSIBILITY_FOCUS_CLEARED = 0x00010000,
108     TEXT_MOVE_UNIT = 0x00020000,
109     REQUEST_FOCUS = 0x00800000,
110     SCROLL_START = 0x01000000,
111     PAGE_CLOSE = 0x08000000,
112     ANNOUNCE_FOR_ACCESSIBILITY = 0x10000000,
113     PAGE_OPEN = 0x20000000,
114     ELEMENT_INFO_CHANGE = 0x40000000,
115     UNKNOWN,
116 };
117 
118 enum WindowUpdateType : int32_t {
119     WINDOW_UPDATE_INVALID = 0,
120     WINDOW_UPDATE_ACCESSIBILITY_FOCUSED = 0x00000001,
121     WINDOW_UPDATE_FOCUSED = 0x00000002,
122     WINDOW_UPDATE_ACTIVE = 0x00000004,
123     WINDOW_UPDATE_ADDED = 0x00000008,
124     WINDOW_UPDATE_REMOVED = 0x00000010,
125     WINDOW_UPDATE_BOUNDS = 0x00000020,
126     WINDOW_UPDATE_TITLE = 0x00000040,
127     WINDOW_UPDATE_LAYER = 0x00000080,
128     WINDOW_UPDATE_PARENT = 0x00000100,
129     WINDOW_UPDATE_CHILDREN = 0x00000200,
130     WINDOW_UPDATE_PIP = 0x00000400,
131 };
132 
133 enum WindowsContentChangeTypes : int32_t {
134     CONTENT_CHANGE_TYPE_INVALID = 0,
135     CONTENT_CHANGE_TYPE_SUBTREE = 0x00000001,
136     CONTENT_CHANGE_TYPE_TEXT = 0x00000002,
137     CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 0x00000004,
138 };
139 
140 struct OperableInfo {
141     bool checkable = false;
142     bool clickable = false;
143     bool scrollable = false;
144     bool longClickable = false;
145     bool focusable = false;
146 };
147 
148 enum class AceAction : uint32_t {
149     ACTION_NONE = 0,
150     GLOBAL_ACTION_BACK,
151     CUSTOM_ACTION,
152     ACTION_CLICK = 10,
153     ACTION_LONG_CLICK,
154     ACTION_SCROLL_FORWARD,
155     ACTION_SCROLL_BACKWARD,
156     ACTION_FOCUS,
157     ACTION_CLEAR_FOCUS,
158     ACTION_ACCESSIBILITY_FOCUS,
159     ACTION_CLEAR_ACCESSIBILITY_FOCUS,
160     ACTION_NEXT_AT_MOVEMENT_GRANULARITY,
161     ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY,
162     ACTION_SET_TEXT,
163     ACTION_COPY,
164     ACTION_PASTE,
165     ACTION_CUT,
166     ACTION_SELECT,
167     ACTION_SET_SELECTION,
168     ACTION_CLEAR_SELECTION,
169     ACTION_SET_CURSOR_POSITION,
170     ACTION_EXEC_SUB_COMPONENT,
171 };
172 
173 struct AccessibilityValue {
174     double min = 0.0;
175     double max = 0.0;
176     double current = 0.0;
177 };
178 
179 enum class AceTextCategory {
180     INPUT_TYPE_DEFAULT = 0,
181     INPUT_TYPE_TEXT,
182     INPUT_TYPE_EMAIL,
183     INPUT_TYPE_DATE,
184     INPUT_TYPE_TIME,
185     INPUT_TYPE_NUMBER,
186     INPUT_TYPE_PASSWORD,
187     INPUT_TYPE_PHONENUMBER,
188     INPUT_TYPE_USER_NAME,
189     INPUT_TYPE_NEW_PASSWORD,
190 };
191 
192 struct AceCollectionInfo {
193     int32_t rows = 0;
194     int32_t columns = 0;
195     int32_t selectMode = 0;
196 };
197 
198 struct AceCollectionItemInfo {
199     bool heading = false;
200     int32_t row = 0;
201     int32_t column = 0;
202     int32_t rowSpan = 0;
203     int32_t columnSpan = 0;
204 };
205 
206 enum class AccessibilityScrollType : int32_t {
207     SCROLL_DEFAULT = -1, // no parameter trans, do not add enum before
208     SCROLL_HALF = 0,
209     SCROLL_FULL = 1,
210     SCROLL_MAX_TYPE = SCROLL_FULL, // for check parameter, do not add enum after
211 };
212 
213 struct SubComponentInfo {
214     int32_t spanId = 0;
215     std::string spanText = "";
216     std::string accessibilityText = "";
217     std::string accessibilityDescription = "";
218     std::string accessibilityLevel = "";
219 };
220 
221 bool CheckBetterRect(const Rect& nodeRect, int direction, const Rect& itemRect, const Rect& tempBest);
222 
223 } // namespace OHOS::Ace
224 
225 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_UTILS_H
226