1 /* 2 * Copyright (c) 2021-2023 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 RESOURCE_MANAGER_ADDON_H 17 #define RESOURCE_MANAGER_ADDON_H 18 19 #include "foundation/ability/ability_runtime/interfaces/kits/native/appkit/ability_runtime/context/context.h" 20 #include "napi/native_api.h" 21 #include "napi/native_node_api.h" 22 #include "resource_manager.h" 23 #include "resource_manager_napi_context.h" 24 namespace OHOS { 25 namespace Global { 26 namespace Resource { 27 class ResourceManagerAddon { 28 #define GET_PARAMS(env, info, num) \ 29 size_t argc = num; \ 30 napi_value argv[num] = {nullptr}; \ 31 napi_value thisVar = nullptr; \ 32 void *data = nullptr; \ 33 napi_get_cb_info(env, info, &argc, argv, &thisVar, &data) 34 public: 35 static napi_value Create( 36 napi_env env, const std::string& bundleName, 37 const std::shared_ptr<ResourceManager>& resMgr, std::shared_ptr<AbilityRuntime::Context> context); 38 39 static bool Init(napi_env env); 40 41 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 42 43 ResourceManagerAddon(const std::string& bundleName, const std::shared_ptr<ResourceManager>& resMgr, 44 const std::shared_ptr<AbilityRuntime::Context>& context, bool isSystem = false); 45 46 ResourceManagerAddon(const std::shared_ptr<ResourceManager>& resMgr, bool isSystem = false); 47 48 static napi_value GetSystemResMgr(napi_env env); 49 50 ~ResourceManagerAddon(); 51 GetResMgr()52 inline std::shared_ptr<ResourceManager> GetResMgr() 53 { 54 return resMgr_; 55 } 56 GetContext()57 inline std::shared_ptr<AbilityRuntime::Context> GetContext() 58 { 59 return context_; 60 } 61 IsSystem()62 inline bool IsSystem() 63 { 64 return isSystem_; 65 } 66 67 napi_value CreateOverrideAddon(napi_env env, const std::shared_ptr<ResourceManager>& resMgr); 68 isOverrideAddon()69 bool isOverrideAddon() 70 { 71 return isOverrideAddon_; 72 } 73 74 private: 75 static napi_value AddonGetResource(napi_env env, napi_callback_info info, const std::string& name, 76 FunctionType type); 77 78 static napi_value GetString(napi_env env, napi_callback_info info); 79 80 static napi_value GetStringArray(napi_env env, napi_callback_info info); 81 82 static napi_value GetMedia(napi_env env, napi_callback_info info); 83 84 static napi_value GetMediaBase64(napi_env env, napi_callback_info info); 85 86 static napi_value ProcessNoParam(napi_env env, napi_callback_info info, const std::string &name, 87 napi_async_execute_callback execute); 88 89 static napi_value GetConfiguration(napi_env env, napi_callback_info info); 90 91 static napi_value GetDeviceCapability(napi_env env, napi_callback_info info); 92 93 static napi_value GetPluralString(napi_env env, napi_callback_info info); 94 95 static napi_value New(napi_env env, napi_callback_info info); 96 97 static napi_value GetRawFile(napi_env env, napi_callback_info info); 98 99 static std::string GetResNameOrPath(napi_env env, size_t argc, napi_value *argv); 100 101 static napi_value GetRawFileDescriptor(napi_env env, napi_callback_info info); 102 103 static napi_value CloseRawFileDescriptor(napi_env env, napi_callback_info info); 104 105 static napi_value Release(napi_env env, napi_callback_info info); 106 107 static std::string GetResName(napi_env env, size_t argc, napi_value *argv); 108 109 static napi_value GetMediaByName(napi_env env, napi_callback_info info); 110 111 static napi_value GetMediaBase64ByName(napi_env env, napi_callback_info info); 112 113 static napi_value GetStringByName(napi_env env, napi_callback_info info); 114 115 static napi_value GetStringArrayByName(napi_env env, napi_callback_info info); 116 117 static napi_value GetPluralStringByName(napi_env env, napi_callback_info info); 118 119 static napi_value GetNumber(napi_env env, napi_callback_info info); 120 121 static napi_value GetNumberByName(napi_env env, napi_callback_info info); 122 123 static napi_value GetBoolean(napi_env env, napi_callback_info info); 124 125 static napi_value GetBooleanByName(napi_env env, napi_callback_info info); 126 127 static napi_value GetStringSync(napi_env env, napi_callback_info info); 128 129 static napi_value GetStringByNameSync(napi_env env, napi_callback_info info); 130 131 static napi_value GetStringValue(napi_env env, napi_callback_info info); 132 133 static napi_value GetStringArrayValue(napi_env env, napi_callback_info info); 134 135 static napi_value GetPluralStringValue(napi_env env, napi_callback_info info); 136 137 static napi_value GetMediaContent(napi_env env, napi_callback_info info); 138 139 static napi_value GetMediaContentBase64(napi_env env, napi_callback_info info); 140 141 static napi_value GetRawFileContent(napi_env env, napi_callback_info info); 142 143 static napi_value GetRawFd(napi_env env, napi_callback_info info); 144 145 static napi_value CloseRawFd(napi_env env, napi_callback_info info); 146 147 static napi_value GetDrawableDescriptor(napi_env env, napi_callback_info info); 148 149 static napi_value GetDrawableDescriptorByName(napi_env env, napi_callback_info info); 150 151 static napi_value GetRawFileList(napi_env env, napi_callback_info info); 152 153 static napi_value GetColorByNameSync(napi_env env, napi_callback_info info); 154 155 static napi_value GetColorSync(napi_env env, napi_callback_info info); 156 157 static napi_value GetColor(napi_env env, napi_callback_info info); 158 159 static napi_value GetColorByName(napi_env env, napi_callback_info info); 160 161 static napi_value WrapResourceManager(napi_env env, std::shared_ptr<ResourceManagerAddon> &addon); 162 163 static napi_value AddResource(napi_env env, napi_callback_info info); 164 165 static napi_value RemoveResource(napi_env env, napi_callback_info info); 166 167 static napi_value GetMediaContentBase64Sync(napi_env env, napi_callback_info info); 168 169 static napi_value GetMediaContentSync(napi_env env, napi_callback_info info); 170 171 static napi_value GetPluralStringValueSync(napi_env env, napi_callback_info info); 172 173 static napi_value GetStringArrayValueSync(napi_env env, napi_callback_info info); 174 175 static napi_value GetRawFileContentSync(napi_env env, napi_callback_info info); 176 177 static napi_value GetRawFdSync(napi_env env, napi_callback_info info); 178 179 static napi_value CloseRawFdSync(napi_env env, napi_callback_info info); 180 181 static napi_value GetRawFileListSync(napi_env env, napi_callback_info info); 182 183 static napi_value GetPluralStringByNameSync(napi_env env, napi_callback_info info); 184 185 static napi_value GetMediaBase64ByNameSync(napi_env env, napi_callback_info info); 186 187 static napi_value GetMediaByNameSync(napi_env env, napi_callback_info info); 188 189 static napi_value GetStringArrayByNameSync(napi_env env, napi_callback_info info); 190 191 static napi_value GetConfigurationSync(napi_env env, napi_callback_info info); 192 193 static napi_value GetDeviceCapabilitySync(napi_env env, napi_callback_info info); 194 195 static napi_value GetLocales(napi_env env, napi_callback_info info); 196 197 static napi_value GetSymbol(napi_env env, napi_callback_info info); 198 199 static napi_value GetSymbolByName(napi_env env, napi_callback_info info); 200 201 static napi_value IsRawDir(napi_env env, napi_callback_info info); 202 203 static napi_value GetOverrideResourceManager(napi_env env, napi_callback_info info); 204 205 static napi_value GetOverrideConfiguration(napi_env env, napi_callback_info info); 206 207 static napi_value UpdateOverrideConfiguration(napi_env env, napi_callback_info info); 208 209 std::string bundleName_; 210 std::shared_ptr<ResourceManager> resMgr_; 211 std::shared_ptr<AbilityRuntime::Context> context_; 212 bool isSystem_; 213 std::shared_ptr<ResourceManagerNapiContext> napiContext_; 214 static napi_property_descriptor properties[]; 215 bool isOverrideAddon_ = false; 216 }; 217 } // namespace Resource 218 } // namespace Global 219 } // namespace OHOS 220 #endif