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 "napi_accessibility_utils.h" 23 #include "napi_accessibility_config_observer.h" 24 #include "napi/native_api.h" 25 #include "napi/native_node_api.h" 26 #include "accessibility_config.h" 27 28 struct EnableAbilityListsObserver { EnableAbilityListsObserverEnableAbilityListsObserver29 EnableAbilityListsObserver(napi_env env, napi_ref callback) : env_(env), callback_(callback) {}; 30 void OnEnableAbilityListsStateChanged(); 31 napi_env env_ = nullptr; 32 napi_ref callback_ = nullptr; 33 }; 34 35 class EnableAbilityListsObserverImpl : public OHOS::AccessibilityConfig::AccessibilityEnableAbilityListsObserver, 36 public std::enable_shared_from_this<EnableAbilityListsObserverImpl> { 37 public: 38 EnableAbilityListsObserverImpl() = default; 39 void OnEnableAbilityListsStateChanged() override; 40 void SubscribeToFramework(); 41 void SubscribeObserver(napi_env env, napi_value observer); 42 void UnsubscribeObserver(napi_env env, napi_value observer); 43 void UnsubscribeObservers(); 44 45 private: 46 std::mutex mutex_; 47 std::vector<std::shared_ptr<EnableAbilityListsObserver>> enableAbilityListsObservers_ = {}; 48 }; 49 50 struct NAccessibilityConfigData { 51 napi_async_work work_ {}; 52 napi_deferred deferred_ {}; 53 napi_ref callback_ {}; 54 std::string abilityName_ = ""; 55 uint32_t capabilities_ = 0; 56 std::string stringConfig_ = ""; 57 uint32_t uint32Config_ = 0; 58 int32_t int32Config_ = 0; 59 float floatConfig_ = 0; 60 OHOS::AccessibilityConfig::CaptionProperty captionProperty_ {}; 61 OHOS::AccessibilityConfig::CONFIG_ID id_ = OHOS::AccessibilityConfig::CONFIG_ID::CONFIG_ID_MAX; 62 bool boolConfig_ = false; 63 OHOS::Accessibility::RetError ret_ = OHOS::Accessibility::RET_ERR_FAILED; 64 }; 65 66 class NAccessibilityConfigClass { 67 public: NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_ID id)68 NAccessibilityConfigClass(OHOS::AccessibilityConfig::CONFIG_ID id) 69 : id_(id) {} ~NAccessibilityConfigClass()70 ~NAccessibilityConfigClass() 71 { 72 napi_delete_reference(env_, wrapper_); 73 } 74 Destructor(napi_env env,void * nativeObject,void *)75 static void Destructor(napi_env env, void* nativeObject, void*) 76 { 77 reinterpret_cast<NAccessibilityConfigClass*>(nativeObject)->~NAccessibilityConfigClass(); 78 } 79 GetConfigId()80 OHOS::AccessibilityConfig::CONFIG_ID GetConfigId() const 81 { 82 return id_; 83 } 84 SetEnv(const napi_env env)85 void SetEnv(const napi_env env) 86 { 87 env_ = env; 88 } 89 GetEnv()90 napi_env GetEnv() const 91 { 92 return env_; 93 } 94 GetWrapper()95 napi_ref* GetWrapper() 96 { 97 return &wrapper_; 98 } 99 private: 100 OHOS::AccessibilityConfig::CONFIG_ID id_; 101 napi_env env_ = nullptr; 102 napi_ref wrapper_ = nullptr; 103 }; 104 105 class NAccessibilityConfig { 106 public: 107 static napi_value EnableAbility(napi_env env, napi_callback_info info); 108 static napi_value DisableAbility(napi_env env, napi_callback_info info); 109 static napi_value SubscribeState(napi_env env, napi_callback_info info); 110 static napi_value UnsubscribeState(napi_env env, napi_callback_info info); 111 static napi_value SetConfig(napi_env env, napi_callback_info info); 112 static napi_value GetConfig(napi_env env, napi_callback_info info); 113 static napi_value SubscribeConfigObserver(napi_env env, napi_callback_info info); 114 static napi_value UnSubscribeConfigObserver(napi_env env, napi_callback_info info); 115 static std::shared_ptr<NAccessibilityConfigObserverImpl> configObservers_; 116 static std::shared_ptr<EnableAbilityListsObserverImpl> enableAbilityListsObservers_; 117 private: 118 static void AsyncWorkComplete(napi_env env, napi_status status, void* data); 119 static void SetConfigExecute(napi_env env, void* data); 120 static void GetConfigComplete(napi_env env, napi_status status, void* data); 121 static void GetConfigExecute(napi_env env, void* data); 122 NAccessibilityConfig() = default; 123 ~NAccessibilityConfig() = default; 124 }; 125 126 #endif // NAPI_ACCESSIBILITY_CONFIG_H