1 /*
2 * Copyright (c) 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 #include "resource_manager_addon.h"
17
18 namespace OHOS {
19 namespace Global {
20 namespace Resource {
21 static thread_local napi_ref* g_constructor = nullptr;
22 static std::shared_ptr<ResourceManager> sysResMgr = nullptr;
23 static std::mutex sysMgrMutex;
24
Create(napi_env env,const std::string & bundleName,const std::shared_ptr<ResourceManager> & resMgr,std::shared_ptr<AbilityRuntime::Context> context)25 napi_value ResourceManagerAddon::Create(
26 napi_env env, const std::string &bundleName, const std::shared_ptr<ResourceManager> &resMgr,
27 std::shared_ptr<AbilityRuntime::Context> context)
28 {
29 std::shared_ptr<ResourceManagerAddon> addon = std::make_shared<ResourceManagerAddon>(bundleName, resMgr, context);
30 return WrapResourceManager(env, addon);
31 }
32
WrapResourceManager(napi_env env,std::shared_ptr<ResourceManagerAddon> & addon)33 napi_value ResourceManagerAddon::WrapResourceManager(napi_env env, std::shared_ptr<ResourceManagerAddon> &addon)
34 {
35 if (!Init(env)) {
36 return nullptr;
37 }
38
39 napi_value constructor;
40 napi_status status = napi_get_reference_value(env, *g_constructor, &constructor);
41 if (status != napi_ok) {
42 return nullptr;
43 }
44 napi_value result;
45 status = napi_new_instance(env, constructor, 0, nullptr, &result);
46 if (status != napi_ok) {
47 return nullptr;
48 }
49
50 auto addonPtr = std::make_unique<std::shared_ptr<ResourceManagerAddon>>(addon);
51 status = napi_wrap(env, result, reinterpret_cast<void *>(addonPtr.get()), ResourceManagerAddon::Destructor,
52 nullptr, nullptr);
53 if (status != napi_ok) {
54 return nullptr;
55 }
56 addonPtr.release();
57 return result;
58 }
59
ResourceManagerAddon(const std::string & bundleName,const std::shared_ptr<ResourceManager> & resMgr,const std::shared_ptr<AbilityRuntime::Context> & context,bool isSystem)60 ResourceManagerAddon::ResourceManagerAddon(
61 const std::string &bundleName, const std::shared_ptr<ResourceManager> &resMgr,
62 const std::shared_ptr<AbilityRuntime::Context> &context, bool isSystem)
63 : bundleName_(bundleName), resMgr_(resMgr), context_(context), isSystem_(isSystem)
64 {
65 }
66
ResourceManagerAddon(const std::shared_ptr<ResourceManager> & resMgr,bool isSystem)67 ResourceManagerAddon::ResourceManagerAddon(const std::shared_ptr<ResourceManager> &resMgr, bool isSystem)
68 : resMgr_(resMgr), isSystem_(isSystem)
69 {
70 }
71
~ResourceManagerAddon()72 ResourceManagerAddon::~ResourceManagerAddon()
73 {
74 }
75
Destructor(napi_env env,void * nativeObject,void * hint)76 void ResourceManagerAddon::Destructor(napi_env env, void *nativeObject, void *hint)
77 {
78 std::unique_ptr<std::shared_ptr<ResourceManagerAddon>> addonPtr;
79 addonPtr.reset(static_cast<std::shared_ptr<ResourceManagerAddon>*>(nativeObject));
80 }
81
Init(napi_env env)82 bool ResourceManagerAddon::Init(napi_env env)
83 {
84 if (g_constructor != nullptr) {
85 return true;
86 }
87
88 napi_property_descriptor properties[] = {
89 DECLARE_NAPI_FUNCTION("getString", GetString),
90 DECLARE_NAPI_FUNCTION("getStringByName", GetStringByName),
91 DECLARE_NAPI_FUNCTION("getStringArray", GetStringArray),
92 DECLARE_NAPI_FUNCTION("getStringArrayByName", GetStringArrayByName),
93 DECLARE_NAPI_FUNCTION("getMedia", GetMedia),
94 DECLARE_NAPI_FUNCTION("getMediaByName", GetMediaByName),
95 DECLARE_NAPI_FUNCTION("getMediaBase64", GetMediaBase64),
96 DECLARE_NAPI_FUNCTION("getMediaBase64ByName", GetMediaBase64ByName),
97 DECLARE_NAPI_FUNCTION("getConfiguration", GetConfiguration),
98 DECLARE_NAPI_FUNCTION("getDeviceCapability", GetDeviceCapability),
99 DECLARE_NAPI_FUNCTION("getPluralString", GetPluralString),
100 DECLARE_NAPI_FUNCTION("getPluralStringByName", GetPluralStringByName),
101 DECLARE_NAPI_FUNCTION("getRawFile", GetRawFile),
102 DECLARE_NAPI_FUNCTION("getRawFileDescriptor", GetRawFileDescriptor),
103 DECLARE_NAPI_FUNCTION("closeRawFileDescriptor", CloseRawFileDescriptor),
104 DECLARE_NAPI_FUNCTION("getStringSync", GetStringSync),
105 DECLARE_NAPI_FUNCTION("getStringByNameSync", GetStringByNameSync),
106 DECLARE_NAPI_FUNCTION("getBoolean", GetBoolean),
107 DECLARE_NAPI_FUNCTION("getNumber", GetNumber),
108 DECLARE_NAPI_FUNCTION("getBooleanByName", GetBooleanByName),
109 DECLARE_NAPI_FUNCTION("getNumberByName", GetNumberByName),
110 DECLARE_NAPI_FUNCTION("release", Release),
111 DECLARE_NAPI_FUNCTION("getStringValue", GetStringValue),
112 DECLARE_NAPI_FUNCTION("getStringArrayValue", GetStringArrayValue),
113 DECLARE_NAPI_FUNCTION("getPluralStringValue", GetPluralStringValue),
114 DECLARE_NAPI_FUNCTION("getMediaContent", GetMediaContent),
115 DECLARE_NAPI_FUNCTION("getMediaContentBase64", GetMediaContentBase64),
116 DECLARE_NAPI_FUNCTION("getRawFileContent", GetRawFileContent),
117 DECLARE_NAPI_FUNCTION("getRawFd", GetRawFd),
118 DECLARE_NAPI_FUNCTION("closeRawFd", CloseRawFd),
119 DECLARE_NAPI_FUNCTION("getDrawableDescriptor", GetDrawableDescriptor),
120 DECLARE_NAPI_FUNCTION("getDrawableDescriptorByName", GetDrawableDescriptorByName),
121 DECLARE_NAPI_FUNCTION("getRawFileList", GetRawFileList),
122 DECLARE_NAPI_FUNCTION("getColor", GetColor),
123 DECLARE_NAPI_FUNCTION("getColorByName", GetColorByName),
124 DECLARE_NAPI_FUNCTION("getColorSync", GetColorSync),
125 DECLARE_NAPI_FUNCTION("getColorByNameSync", GetColorByNameSync),
126 DECLARE_NAPI_FUNCTION("addResource", AddResource),
127 DECLARE_NAPI_FUNCTION("removeResource", RemoveResource)
128 };
129
130 napi_value constructor;
131 napi_status status = napi_define_class(env, "ResourceManager", NAPI_AUTO_LENGTH, New, nullptr,
132 sizeof(properties) / sizeof(napi_property_descriptor), properties, &constructor);
133 if (status != napi_ok) {
134 return false;
135 }
136
137 g_constructor = new (std::nothrow) napi_ref;
138 if (g_constructor == nullptr) {
139 return false;
140 }
141 status = napi_create_reference(env, constructor, 1, g_constructor);
142 if (status != napi_ok) {
143 return false;
144 }
145 return true;
146 }
147
New(napi_env env,napi_callback_info info)148 napi_value ResourceManagerAddon::New(napi_env env, napi_callback_info info)
149 {
150 return nullptr;
151 }
152
Release(napi_env env,napi_callback_info info)153 napi_value ResourceManagerAddon::Release(napi_env env, napi_callback_info info)
154 {
155 napi_value undefined;
156 if (napi_get_undefined(env, &undefined) != napi_ok) {
157 return nullptr;
158 }
159 return undefined;
160 }
161
GetString(napi_env env,napi_callback_info info)162 napi_value ResourceManagerAddon::GetString(napi_env env, napi_callback_info info)
163 {
164 return nullptr;
165 }
166
GetStringArray(napi_env env,napi_callback_info info)167 napi_value ResourceManagerAddon::GetStringArray(napi_env env, napi_callback_info info)
168 {
169 return nullptr;
170 }
171
GetMedia(napi_env env,napi_callback_info info)172 napi_value ResourceManagerAddon::GetMedia(napi_env env, napi_callback_info info)
173 {
174 return nullptr;
175 }
176
GetMediaBase64(napi_env env,napi_callback_info info)177 napi_value ResourceManagerAddon::GetMediaBase64(napi_env env, napi_callback_info info)
178 {
179 return nullptr;
180 }
181
GetConfiguration(napi_env env,napi_callback_info info)182 napi_value ResourceManagerAddon::GetConfiguration(napi_env env, napi_callback_info info)
183 {
184 return nullptr;
185 }
186
GetDeviceCapability(napi_env env,napi_callback_info info)187 napi_value ResourceManagerAddon::GetDeviceCapability(napi_env env, napi_callback_info info)
188 {
189 return nullptr;
190 }
191
GetPluralString(napi_env env,napi_callback_info info)192 napi_value ResourceManagerAddon::GetPluralString(napi_env env, napi_callback_info info)
193 {
194 return nullptr;
195 }
196
GetRawFile(napi_env env,napi_callback_info info)197 napi_value ResourceManagerAddon::GetRawFile(napi_env env, napi_callback_info info)
198 {
199 return nullptr;
200 }
201
GetRawFileDescriptor(napi_env env,napi_callback_info info)202 napi_value ResourceManagerAddon::GetRawFileDescriptor(napi_env env, napi_callback_info info)
203 {
204 return nullptr;
205 }
206
CloseRawFileDescriptor(napi_env env,napi_callback_info info)207 napi_value ResourceManagerAddon::CloseRawFileDescriptor(napi_env env, napi_callback_info info)
208 {
209 return nullptr;
210 }
211
GetPluralStringByName(napi_env env,napi_callback_info info)212 napi_value ResourceManagerAddon::GetPluralStringByName(napi_env env, napi_callback_info info)
213 {
214 return nullptr;
215 }
216
GetMediaBase64ByName(napi_env env,napi_callback_info info)217 napi_value ResourceManagerAddon::GetMediaBase64ByName(napi_env env, napi_callback_info info)
218 {
219 return nullptr;
220 }
221
GetMediaByName(napi_env env,napi_callback_info info)222 napi_value ResourceManagerAddon::GetMediaByName(napi_env env, napi_callback_info info)
223 {
224 return nullptr;
225 }
226
GetStringArrayByName(napi_env env,napi_callback_info info)227 napi_value ResourceManagerAddon::GetStringArrayByName(napi_env env, napi_callback_info info)
228 {
229 return nullptr;
230 }
231
GetStringByName(napi_env env,napi_callback_info info)232 napi_value ResourceManagerAddon::GetStringByName(napi_env env, napi_callback_info info)
233 {
234 return nullptr;
235 }
236
GetStringValue(napi_env env,napi_callback_info info)237 napi_value ResourceManagerAddon::GetStringValue(napi_env env, napi_callback_info info)
238 {
239 return nullptr;
240 }
241
GetStringArrayValue(napi_env env,napi_callback_info info)242 napi_value ResourceManagerAddon::GetStringArrayValue(napi_env env, napi_callback_info info)
243 {
244 return nullptr;
245 }
246
GetMediaContent(napi_env env,napi_callback_info info)247 napi_value ResourceManagerAddon::GetMediaContent(napi_env env, napi_callback_info info)
248 {
249 return nullptr;
250 }
251
GetMediaContentBase64(napi_env env,napi_callback_info info)252 napi_value ResourceManagerAddon::GetMediaContentBase64(napi_env env, napi_callback_info info)
253 {
254 return nullptr;
255 }
256
GetPluralStringValue(napi_env env,napi_callback_info info)257 napi_value ResourceManagerAddon::GetPluralStringValue(napi_env env, napi_callback_info info)
258 {
259 return nullptr;
260 }
261
GetRawFileContent(napi_env env,napi_callback_info info)262 napi_value ResourceManagerAddon::GetRawFileContent(napi_env env, napi_callback_info info)
263 {
264 return nullptr;
265 }
266
GetRawFd(napi_env env,napi_callback_info info)267 napi_value ResourceManagerAddon::GetRawFd(napi_env env, napi_callback_info info)
268 {
269 return nullptr;
270 }
271
CloseRawFd(napi_env env,napi_callback_info info)272 napi_value ResourceManagerAddon::CloseRawFd(napi_env env, napi_callback_info info)
273 {
274 return nullptr;
275 }
276
GetRawFileList(napi_env env,napi_callback_info info)277 napi_value ResourceManagerAddon::GetRawFileList(napi_env env, napi_callback_info info)
278 {
279 return nullptr;
280 }
281
GetColor(napi_env env,napi_callback_info info)282 napi_value ResourceManagerAddon::GetColor(napi_env env, napi_callback_info info)
283 {
284 return nullptr;
285 }
286
GetColorByName(napi_env env,napi_callback_info info)287 napi_value ResourceManagerAddon::GetColorByName(napi_env env, napi_callback_info info)
288 {
289 return nullptr;
290 }
291
GetStringSync(napi_env env,napi_callback_info info)292 napi_value ResourceManagerAddon::GetStringSync(napi_env env, napi_callback_info info)
293 {
294 return nullptr;
295 }
296
GetStringByNameSync(napi_env env,napi_callback_info info)297 napi_value ResourceManagerAddon::GetStringByNameSync(napi_env env, napi_callback_info info)
298 {
299 return nullptr;
300 }
301
GetBoolean(napi_env env,napi_callback_info info)302 napi_value ResourceManagerAddon::GetBoolean(napi_env env, napi_callback_info info)
303 {
304 return nullptr;
305 }
306
GetNumber(napi_env env,napi_callback_info info)307 napi_value ResourceManagerAddon::GetNumber(napi_env env, napi_callback_info info)
308 {
309 return nullptr;
310 }
311
GetNumberByName(napi_env env,napi_callback_info info)312 napi_value ResourceManagerAddon::GetNumberByName(napi_env env, napi_callback_info info)
313 {
314 return nullptr;
315 }
316
GetBooleanByName(napi_env env,napi_callback_info info)317 napi_value ResourceManagerAddon::GetBooleanByName(napi_env env, napi_callback_info info)
318 {
319 return nullptr;
320 }
321
GetDrawableDescriptor(napi_env env,napi_callback_info info)322 napi_value ResourceManagerAddon::GetDrawableDescriptor(napi_env env, napi_callback_info info)
323 {
324 return nullptr;
325 }
326
GetDrawableDescriptorByName(napi_env env,napi_callback_info info)327 napi_value ResourceManagerAddon::GetDrawableDescriptorByName(napi_env env, napi_callback_info info)
328 {
329 return nullptr;
330 }
331
GetColorSync(napi_env env,napi_callback_info info)332 napi_value ResourceManagerAddon::GetColorSync(napi_env env, napi_callback_info info)
333 {
334 return nullptr;
335 }
336
GetColorByNameSync(napi_env env,napi_callback_info info)337 napi_value ResourceManagerAddon::GetColorByNameSync(napi_env env, napi_callback_info info)
338 {
339 return nullptr;
340 }
341
AddResource(napi_env env,napi_callback_info info)342 napi_value ResourceManagerAddon::AddResource(napi_env env, napi_callback_info info)
343 {
344 return nullptr;
345 }
346
RemoveResource(napi_env env,napi_callback_info info)347 napi_value ResourceManagerAddon::RemoveResource(napi_env env, napi_callback_info info)
348 {
349 return nullptr;
350 }
351 } // namespace Resource
352 } // namespace Global
353 } // namespace OHOS