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