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