• 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_CONFIG_H
17 #define NAPI_ACCESSIBILITY_CONFIG_H
18 
19 #include <vector>
20 #include <map>
21 #include <mutex>
22 #include "accessibility_utils.h"
23 #include "accessibility_config_observer.h"
24 #include "napi/native_api.h"
25 #include "napi/native_node_api.h"
26 #include "accessibility_config.h"
27 
28 namespace OHOS {
29 namespace Accessibility {
30 napi_handle_scope TmpOpenScope(napi_env env);
31 } // namespace Accessibility
32 } // namespace OHOS
33 
34 struct EnableAbilityListsObserver {
EnableAbilityListsObserverEnableAbilityListsObserver35     EnableAbilityListsObserver(napi_env env, napi_ref callback) : env_(env), callback_(callback) {};
36     void OnEnableAbilityListsStateChanged();
37     int OnEnableAbilityListsStateChangedWork(uv_work_t *work);
38     napi_env env_ = nullptr;
39     napi_ref callback_ = nullptr;
40 };
41 
42 class EnableAbilityListsObserverImpl : public OHOS::AccessibilityConfig::AccessibilityEnableAbilityListsObserver,
43     public std::enable_shared_from_this<EnableAbilityListsObserverImpl> {
44 public:
45     EnableAbilityListsObserverImpl() = default;
46     void OnEnableAbilityListsStateChanged() override;
47     void OnInstallAbilityListsStateChanged() override;
48     void SubscribeToFramework();
49     void SubscribeObserver(napi_env env, napi_value observer);
50     void SubscribeInstallObserver(napi_env env, napi_value observer);
51     void UnsubscribeObserver(napi_env env, napi_value observer);
52     void UnsubscribeObservers();
53     void UnsubscribeInstallObserver(napi_env env, napi_value observer);
54     void UnsubscribeInstallObservers();
55 
56 private:
57     std::mutex mutex_;
58     std::vector<std::shared_ptr<EnableAbilityListsObserver>> enableAbilityListsObservers_ = {};
59     std::vector<std::shared_ptr<EnableAbilityListsObserver>> installAbilityListsObservers_ = {};
60 };
61 
62 struct NAccessibilityConfigData {
63     napi_async_work work_ {};
64     napi_deferred deferred_ {};
65     napi_ref callback_ {};
66     std::string abilityName_ = "";
67     uint32_t capabilities_ = 0;
68     std::string stringConfig_ = "";
69     uint32_t uint32Config_ = 0;
70     int32_t int32Config_ = 0;
71     float floatConfig_ = 0;
72     std::vector<std::string> stringVectorConfig_ {};
73     OHOS::AccessibilityConfig::CaptionProperty captionProperty_ {};
74     OHOS::AccessibilityConfig::CONFIG_ID id_ = OHOS::AccessibilityConfig::CONFIG_ID::CONFIG_ID_MAX;
75     bool boolConfig_ = false;
76     OHOS::Accessibility::RetError ret_ = OHOS::Accessibility::RET_ERR_FAILED;
77 };
78 
79 class NAccessibilityConfigClass {
80 public:
NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_ID id)81     NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_ID id)
82         : id_(id) {}
~NAccessibilityConfigClass()83     ~NAccessibilityConfigClass()
84     {
85         napi_delete_reference(env_, wrapper_);
86     }
87 
Destructor(napi_env env,void * nativeObject,void *)88     static void Destructor(napi_env env, void* nativeObject, void*)
89     {
90         reinterpret_cast<NAccessibilityConfigClass*>(nativeObject)->~NAccessibilityConfigClass();
91     }
92 
GetConfigId()93     OHOS::AccessibilityConfig::CONFIG_ID GetConfigId() const
94     {
95         return id_;
96     }
97 
SetEnv(const napi_env env)98     void SetEnv(const napi_env env)
99     {
100         env_ = env;
101     }
102 
GetEnv()103     napi_env GetEnv() const
104     {
105         return env_;
106     }
107 
GetWrapper()108     napi_ref* GetWrapper()
109     {
110         return &wrapper_;
111     }
112 private:
113     OHOS::AccessibilityConfig::CONFIG_ID id_;
114     napi_env env_ = nullptr;
115     napi_ref wrapper_ = nullptr;
116 };
117 
118 class NAccessibilityConfig {
119 public:
120     static napi_value EnableAbility(napi_env env, napi_callback_info info);
121     static napi_value DisableAbility(napi_env env, napi_callback_info info);
122     static napi_value SubscribeState(napi_env env, napi_callback_info info);
123     static napi_value UnsubscribeState(napi_env env, napi_callback_info info);
124     static napi_value SetConfig(napi_env env, napi_callback_info info);
125     static napi_value GetConfig(napi_env env, napi_callback_info info);
126     static napi_value SubscribeConfigObserver(napi_env env, napi_callback_info info);
127     static napi_value UnSubscribeConfigObserver(napi_env env, napi_callback_info info);
128     static std::shared_ptr<NAccessibilityConfigObserverImpl> configObservers_;
129     static std::shared_ptr<EnableAbilityListsObserverImpl> enableAbilityListsObservers_;
130 private:
131     static void AsyncWorkComplete(napi_env env, napi_status status, void* data);
132     static void SetConfigExecute(napi_env env, void* data);
133     static void SetScreenTouchConfigExecute(NAccessibilityConfigData* callbackInfo);
134     static void GetConfigComplete(napi_env env, napi_status status, void* data);
135     static void GetConfigExecute(napi_env env, void* data);
136     static bool CheckReadPermission(const std::string &permission);
137     static bool IsAvailable(napi_env env, napi_callback_info info);
138     static void GetScreenTouchConfigExecute(NAccessibilityConfigData* callbackInfo);
139     static void EnableAbilityError(size_t& argc, OHOS::Accessibility::RetError& errCode,
140         napi_env env, napi_value* parameters, NAccessibilityConfigData* callbackInfo);
141     static void DisableAbilityError(size_t& argc, OHOS::Accessibility::RetError& errCode,
142         napi_env env, napi_value* parameters, NAccessibilityConfigData* callbackInfo);
143     static void ConfigCompleteInfoById(napi_env env, NAccessibilityConfigData* callbackInfo,
144         napi_value* result, size_t len);
145     static NAccessibilityConfigData* GetCallbackInfo(napi_env env, napi_callback_info info,
146         napi_value* parameters, size_t& argc, NAccessibilityConfigClass*& obj);
147     static bool ParseConnectTimeoutData(napi_env env, NAccessibilityConfigData* callbackInfo,
148         napi_value* parameters);
149     static bool ParseMouseAutoClickData(napi_env env, NAccessibilityConfigData* callbackInfo,
150         napi_value* parameters);
151     static bool SetConfigParseBoolData(napi_env env, NAccessibilityConfigData* callbackInfo,
152         napi_value* parameters);
153     static bool SetConfigParseData(napi_env env, NAccessibilityConfigClass* obj,
154         NAccessibilityConfigData* callbackInfo, napi_value* parameters, size_t argc);
155     NAccessibilityConfig() = default;
156     ~NAccessibilityConfig() = default;
157 };
158 
159 #endif // NAPI_ACCESSIBILITY_CONFIG_H