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