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 ACCESSIBILITY_COMMON_UTILS_H
17#define ACCESSIBILITY_COMMON_UTILS_H
18
19#include <map>
20#include "accessibility_ability_info.h"
21#include "accessibility_caption.h"
22#include "accessibility_element_info.h"
23#include "accessibility_event_info.h"
24#include "accessibility_gesture_inject_path.h"
25#include "accessibility_window_info.h"
26#include "key_event.h"
27#include "napi/native_api.h"
28#include "napi/native_node_api.h"
29#include "accessibility_def.h"
30
31namespace OHOS {
32namespace AccessibilityNapi {
33// key action
34enum KeyAction : int32_t {
35    CANCEL = 0,
36    DOWN = 1,
37    UP = 2,
38    UNKNOWN = 0xff,
39};
40
41std::string GetStringFromNAPI(napi_env env, napi_value value);
42bool ParseBool(napi_env env, bool& param, napi_value args);
43bool ParseString(napi_env env, std::string& param, napi_value args);
44bool ParseNumber(napi_env env, napi_value args);
45bool ParseInt32(napi_env env, int32_t& param, napi_value args);
46bool ParseInt64(napi_env env, int64_t& param, napi_value args);
47bool ParseDouble(napi_env env, double& param, napi_value args);
48bool CheckJsFunction(napi_env env, napi_value args);
49NAccessibilityErrMsg QueryRetMsg(OHOS::Accessibility::RetError errorCode);
50napi_value CreateBusinessError(napi_env env, OHOS::Accessibility::RetError errCode);
51napi_value GetErrorValue(napi_env env, int errCode);
52bool CheckObserverEqual(napi_env env, napi_value observer, napi_env iterEnv, napi_ref iterRef);
53std::string ConvertWindowTypeToString(OHOS::Accessibility::AccessibilityWindowType type);
54std::string ConvertDaltonizationTypeToString(OHOS::AccessibilityConfig::DALTONIZATION_TYPE type);
55std::string ConvertClickResponseTimeTypeToString(OHOS::AccessibilityConfig::CLICK_RESPONSE_TIME type);
56std::string ConvertIgnoreRepeatClickTimeTypeToString(OHOS::AccessibilityConfig::IGNORE_REPEAT_CLICK_TIME type);
57void ConvertRectToJS(napi_env env, napi_value result, const OHOS::Accessibility::Rect& rect);
58void ConvertGridItemToJS(napi_env env, napi_value result, const Accessibility::GridItemInfo& gridItem);
59void ConvertAccessibleAbilityInfosToJS(napi_env env, napi_value& result,
60    std::vector<OHOS::Accessibility::AccessibilityAbilityInfo>& accessibleAbilityInfos);
61void ConvertAccessibleAbilityInfoToJS(
62    napi_env env, napi_value& result, OHOS::Accessibility::AccessibilityAbilityInfo& info);
63void ConvertAccessibleAbilityInfoToJSPart1(
64    napi_env env, napi_value& result, OHOS::Accessibility::AccessibilityAbilityInfo& info);
65void ConvertAccessibleAbilityInfoToJSPart2(
66    napi_env env, napi_value& result, OHOS::Accessibility::AccessibilityAbilityInfo& info);
67void ConvertAccessibleAbilityInfoToJSPart3(
68    napi_env env, napi_value& result, OHOS::Accessibility::AccessibilityAbilityInfo& info);
69bool ConvertEventInfoJSToNAPI(
70    napi_env env, napi_value object, OHOS::Accessibility::AccessibilityEventInfo& eventInfo);
71bool ConvertEventInfoJSToNAPIPart1(
72    napi_env env, napi_value object, OHOS::Accessibility::AccessibilityEventInfo& eventInfo);
73bool ConvertEventInfoJSToNAPIPart2(
74    napi_env env, napi_value object, OHOS::Accessibility::AccessibilityEventInfo& eventInfo);
75bool ConvertEventInfoJSToNAPIPart3(
76    napi_env env, napi_value object, OHOS::Accessibility::AccessibilityEventInfo& eventInfo);
77OHOS::AccessibilityConfig::DALTONIZATION_TYPE ConvertStringToDaltonizationTypes(std::string& type);
78OHOS::AccessibilityConfig::CLICK_RESPONSE_TIME ConvertStringToClickResponseTimeTypes(std::string& type);
79OHOS::AccessibilityConfig::IGNORE_REPEAT_CLICK_TIME ConvertStringToIgnoreRepeatClickTimeTypes(std::string& type);
80void ConvertActionArgsJSToNAPI(
81    napi_env env, napi_value object, std::map<std::string, std::string>& args, OHOS::Accessibility::ActionType action);
82
83KeyAction TransformKeyActionValue(int32_t keyAction);
84bool HasKeyCode(const std::vector<int32_t>& pressedKeys, int32_t keyCode);
85void GetKeyValue(napi_env env, napi_value keyObject, const OHOS::MMI::KeyEvent::KeyItem* keyItem);
86void SetInputEventProperty(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent);
87void SetKeyPropertyPart1(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent);
88void SetKeyPropertyPart2(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent);
89void ConvertKeyEventToJS(napi_env env, napi_value result, const std::shared_ptr<OHOS::MMI::KeyEvent> &keyEvent);
90void ConvertCaptionPropertyToJS(napi_env env, napi_value& result,
91    OHOS::AccessibilityConfig::CaptionProperty captionProperty);
92bool ConvertObjToCaptionProperty(
93    napi_env env, napi_value object, OHOS::AccessibilityConfig::CaptionProperty* ptrCaptionProperty);
94bool ConvertObjToCaptionPropertyPart1(
95    napi_env env, napi_value object, OHOS::AccessibilityConfig::CaptionProperty* ptrCaptionProperty);
96bool ConvertObjToCaptionPropertyPart2(
97    napi_env env, napi_value object, OHOS::AccessibilityConfig::CaptionProperty* ptrCaptionProperty);
98std::string ConvertCaptionPropertyJSToNAPI(
99    napi_env env, napi_value object, napi_value propertyNameValue, bool &hasProperty);
100bool ConvertJSToStringVec(napi_env env, napi_value arrayValue, std::vector<std::string> &values);
101void ConvertStringVecToJS(napi_env env, napi_value &result, std::vector<std::string> values);
102void ConvertJSToEventTypes(napi_env env, napi_value arrayValue, uint32_t &eventTypes);
103bool ConvertJSToCapabilities(napi_env env, napi_value arrayValue, uint32_t &capabilities);
104uint32_t GetColorValue(napi_env env, napi_value object, napi_value propertyNameValue);
105uint32_t GetColorValue(napi_env env, napi_value value);
106uint32_t ConvertColorStringToNumer(std::string colorStr);
107bool ColorRegexMatch(std::string colorStr, uint32_t &color);
108std::string ConvertColorToString(uint32_t color);
109std::string ConvertStringJSToNAPI(napi_env env, napi_value object, napi_value propertyNameValue, bool &hasProperty);
110int32_t ConvertIntJSToNAPI(napi_env env, napi_value object, napi_value propertyNameValue, bool &hasProperty);
111bool ConvertBoolJSToNAPI(napi_env env, napi_value object, napi_value propertyNameValue, bool &hasProperty);
112void ConvertStringArrayJSToNAPI(napi_env env, napi_value object,
113    napi_value propertyNameValue, bool &hasProperty, std::vector<std::string> &stringArray);
114void ConvertStringArrayJSToNAPICommon(napi_env env, napi_value object, std::vector<std::string> &stringArray);
115void ConvertSpanToJS(napi_env env, napi_value result, const Accessibility::SpanInfo& span);
116
117OHOS::Accessibility::ActionType ConvertStringToAccessibleOperationType(const std::string &type);
118OHOS::Accessibility::AccessibilityAbilityTypes ConvertStringToAccessibilityAbilityTypes(const std::string &type);
119OHOS::Accessibility::AbilityStateType ConvertStringToAbilityStateType(const std::string &type);
120OHOS::Accessibility::TextMoveUnit ConvertStringToTextMoveUnit(const std::string &type);
121
122std::string ConvertTextMoveUnitToString(OHOS::Accessibility::TextMoveUnit type);
123std::string ConvertOperationTypeToString(OHOS::Accessibility::ActionType type);
124std::string CoverGestureTypeToString(OHOS::Accessibility::GestureType type);
125const std::string ConvertWindowUpdateTypeToString(OHOS::Accessibility::WindowUpdateType type);
126const std::string ConvertAccessibilityEventTypeToString(OHOS::Accessibility::EventType type);
127void ConvertEventTypeToString(const OHOS::Accessibility::AccessibilityEventInfo &eventInfo,
128    std::string &eventTypeString);
129bool ConvertGesturePathJSToNAPI(napi_env env, napi_value object,
130    std::shared_ptr<OHOS::Accessibility::AccessibilityGestureInjectPath>& gesturePath);
131bool ConvertGesturePathJSToNAPIPart1(napi_env env, napi_value object,
132    std::shared_ptr<OHOS::Accessibility::AccessibilityGestureInjectPath>& gesturePath);
133bool ConvertGesturePathJSToNAPIPart2(napi_env env, napi_value object,
134    std::shared_ptr<OHOS::Accessibility::AccessibilityGestureInjectPath>& gesturePath);
135
136struct AccessibilityCallbackInfo {
137    napi_env env_;
138    napi_ref ref_;
139};
140
141struct StateCallbackInfo: public AccessibilityCallbackInfo {
142    bool state_;
143    std::string stringValue_;
144    uint32_t uint32Value_;
145    int32_t int32Value_;
146    float   floatValue_;
147    std::vector<std::string> stringVector_;
148};
149
150struct CaptionCallbackInfo: public AccessibilityCallbackInfo {
151    OHOS::AccessibilityConfig::CaptionProperty caption_;
152};
153} // namespace AccessibilityNapi
154} // OHOS
155#endif // ACCESSIBILITY_COMMON_UTILS_H