• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 NAPI_ACCESSIBILITY_ELEMENT_H
17 #define NAPI_ACCESSIBILITY_ELEMENT_H
18 
19 #include "napi_accessibility_def.h"
20 #include "accessibility_event_info.h"
21 #include "accessibility_window_info.h"
22 #include "napi/native_api.h"
23 #include "napi/native_node_api.h"
24 
25 struct AccessibilityElement {
26     AccessibilityElement() = default;
AccessibilityElementAccessibilityElement27     AccessibilityElement(std::shared_ptr<OHOS::Accessibility::AccessibilityElementInfo> elementInfo)
28         : elementInfo_(elementInfo), isElementInfo_(true)
29     {}
AccessibilityElementAccessibilityElement30     AccessibilityElement(std::shared_ptr<OHOS::Accessibility::AccessibilityWindowInfo> windowInfo)
31         : windowInfo_(windowInfo), isElementInfo_(false)
32     {}
33 
34     std::shared_ptr<OHOS::Accessibility::AccessibilityElementInfo> elementInfo_ = nullptr;
35     std::shared_ptr<OHOS::Accessibility::AccessibilityWindowInfo> windowInfo_ = nullptr;
36     bool isElementInfo_ = true;
37 };
38 
39 enum FindElementCondition {
40     FIND_ELEMENT_CONDITION_CONTENT,
41     FIND_ELEMENT_CONDITION_FOCUS_TYPE,
42     FIND_ELEMENT_CONDITION_FOCUS_DIRECTION,
43     FIND_ELEMENT_CONDITION_INVALID
44 };
45 
46 struct NAccessibilityElementData {
47     napi_async_work work_ {};
48     napi_deferred deferred_ {};
49     napi_env env_ {};
50     napi_ref callback_ {};
51     AccessibilityElement accessibilityElement_ = {};
52     std::map<std::string, std::string> actionArguments_;
53     std::vector<OHOS::Accessibility::AccessibilityElementInfo> nodeInfos_ {};
54     OHOS::Accessibility::AccessibilityElementInfo nodeInfo_ {};
55     FindElementCondition conditionId_ = FIND_ELEMENT_CONDITION_INVALID;
56     std::string attribute_ = "";
57     std::string actionName_ = "";
58     std::string condition_ = "";
59     OHOS::Accessibility::RetError ret_ = OHOS::Accessibility::RetError::RET_ERR_FAILED;
60 };
61 
62 class NAccessibilityElement {
63 public:
64     static void DefineJSAccessibilityElement(napi_env env);
65     static napi_value JSConstructor(napi_env env, napi_callback_info info);
66 
67     static void ConvertElementInfoToJS(napi_env env, napi_value result,
68         const OHOS::Accessibility::AccessibilityElementInfo& elementInfo);
69     static void ConvertElementInfosToJS(napi_env env, napi_value result,
70         const std::vector<OHOS::Accessibility::AccessibilityElementInfo>& elementInfos);
71 
72     static napi_value AttributeNames(napi_env env, napi_callback_info info);
73     static napi_value AttributeValue(napi_env env, napi_callback_info info);
74     static napi_value ActionNames(napi_env env, napi_callback_info info);
75     static napi_value PerformAction(napi_env env, napi_callback_info info);
76     static napi_value FindElement(napi_env env, napi_callback_info info);
77     static napi_value ErrorOperation(NAccessibilityElementData *callbackInfo);
78 
79     // Element info
80     static void GetElementInfoComponentId(NAccessibilityElementData *callbackInfo, napi_value &value);
81     static void GetElementInfoPageId(NAccessibilityElementData *callbackInfo, napi_value &value);
82     static void GetElementInfoInspectorKey(NAccessibilityElementData *callbackInfo, napi_value &value);
83     static void GetElementInfoBundleName(NAccessibilityElementData *callbackInfo, napi_value &value);
84     static void GetElementInfoComponentType(NAccessibilityElementData *callbackInfo, napi_value &value);
85     static void GetElementInfoInputType(NAccessibilityElementData *callbackInfo, napi_value &value);
86     static void GetElementInfoText(NAccessibilityElementData *callbackInfo, napi_value &value);
87     static void GetElementInfoHintText(NAccessibilityElementData *callbackInfo, napi_value &value);
88     static void GetElementInfoDescription(NAccessibilityElementData *callbackInfo, napi_value &value);
89     static void GetElementInfoResourceName(NAccessibilityElementData *callbackInfo, napi_value &value);
90     static void GetElementInfoTextLengthLimit(NAccessibilityElementData *callbackInfo, napi_value &value);
91     static void GetElementInfoRect(NAccessibilityElementData *callbackInfo, napi_value &value);
92     static void GetElementInfoCheckable(NAccessibilityElementData *callbackInfo, napi_value &value);
93     static void GetElementInfoChecked(NAccessibilityElementData *callbackInfo, napi_value &value);
94     static void GetElementInfoFocusable(NAccessibilityElementData *callbackInfo, napi_value &value);
95     static void GetElementInfoIsVisible(NAccessibilityElementData *callbackInfo, napi_value &value);
96     static void GetElementInfoAccessibilityFocused(NAccessibilityElementData *callbackInfo, napi_value &value);
97     static void GetElementInfoSelected(NAccessibilityElementData *callbackInfo, napi_value &value);
98     static void GetElementInfoClickable(NAccessibilityElementData *callbackInfo, napi_value &value);
99     static void GetElementInfoLongClickable(NAccessibilityElementData *callbackInfo, napi_value &value);
100     static void GetElementInfoIsEnable(NAccessibilityElementData *callbackInfo, napi_value &value);
101     static void GetElementInfoIsPassword(NAccessibilityElementData *callbackInfo, napi_value &value);
102     static void GetElementInfoScrollable(NAccessibilityElementData *callbackInfo, napi_value &value);
103     static void GetElementInfoEditable(NAccessibilityElementData *callbackInfo, napi_value &value);
104     static void GetElementInfoPluralLineSupported(NAccessibilityElementData *callbackInfo, napi_value &value);
105     static void GetElementInfoIsHint(NAccessibilityElementData *callbackInfo, napi_value &value);
106     static void GetElementInfoItemCount(NAccessibilityElementData *callbackInfo, napi_value &value);
107     static void GetElementInfoCurrentIndex(NAccessibilityElementData *callbackInfo, napi_value &value);
108     static void GetElementInfoStartIndex(NAccessibilityElementData *callbackInfo, napi_value &value);
109     static void GetElementInfoEndIndex(NAccessibilityElementData *callbackInfo, napi_value &value);
110     static void GetElementInfoError(NAccessibilityElementData *callbackInfo, napi_value &value);
111     static void GetElementInfoTextMoveUnit(NAccessibilityElementData *callbackInfo, napi_value &value);
112     static void GetElementInfoParent(NAccessibilityElementData *callbackInfo, napi_value &value);
113     static void GetElementInfoChildren(NAccessibilityElementData *callbackInfo, napi_value &value);
114     static void GetElementInfoTriggerAction(NAccessibilityElementData *callbackInfo, napi_value &value);
115     static void GetElementInfoContents(NAccessibilityElementData *callbackInfo, napi_value &value);
116     static void GetElementInfoLastContent(NAccessibilityElementData *callbackInfo, napi_value &value);
117     static void GetElementInfoWindowId(NAccessibilityElementData *callbackInfo, napi_value &value);
118     static void GetElementInfoIsFocused(NAccessibilityElementData *callbackInfo, napi_value &value);
119     static void GetElementInfoValueMax(NAccessibilityElementData *callbackInfo, napi_value &value);
120     static void GetElementInfoValueMin(NAccessibilityElementData *callbackInfo, napi_value &value);
121     static void GetElementInfoValueNow(NAccessibilityElementData *callbackInfo, napi_value &value);
122 
123     // Window info
124     static void GetWindowInfoIsActive(NAccessibilityElementData *callbackInfo, napi_value &value);
125     static void GetWindowInfoScreenRect(NAccessibilityElementData *callbackInfo, napi_value &value);
126     static void GetWindowInfoLayer(NAccessibilityElementData *callbackInfo, napi_value &value);
127     static void GetWindowInfoType(NAccessibilityElementData *callbackInfo, napi_value &value);
128     static void GetWindowInfoRootElement(NAccessibilityElementData *callbackInfo, napi_value &value);
129     static void GetWindowInfoIsFocused(NAccessibilityElementData *callbackInfo, napi_value &value);
130     static void GetWindowInfoWindowId(NAccessibilityElementData *callbackInfo, napi_value &value);
131 
132     static thread_local napi_ref consRef_;
133 private:
134     static void AttributeNamesComplete(napi_env env, napi_status status, void* data);
135     static void AttributeValueExecute(napi_env env, void* data);
136     static void AttributeValueComplete(napi_env env, napi_status status, void* data);
137     static void ActionNamesComplete(napi_env env, napi_status status, void* data);
138     static void PerformActionExecute(napi_env env, void* data);
139     static void PerformActionComplete(napi_env env, napi_status status, void* data);
140     static void FindElementExecute(napi_env env, void* data);
141     static void FindElementComplete(napi_env env, napi_status status, void* data);
142     static void GetElement(NAccessibilityElementData *callbackInfo, napi_value &value);
143 
144     static FindElementCondition ConvertStringToCondition(const std::string &str);
145     static OHOS::Accessibility::FocusMoveDirection ConvertStringToDirection(const std::string &str);
146     static int32_t ConvertStringToFocusType(const std::string &str);
147 
148     static bool CheckElementInfoParameter(NAccessibilityElementData *callbackInfo, napi_value &value);
149     static bool CheckWindowInfoParameter(NAccessibilityElementData *callbackInfo, napi_value &value);
150 
151     NAccessibilityElement() = default;
152     ~NAccessibilityElement() = default;
153 };
154 #endif // NAPI_ACCESSIBILITY_ELEMENT_H