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 = nullptr;
40 napi_status status = napi_get_reference_value(env, g_constructor, &constructor);
41 if (status != napi_ok || constructor == nullptr) {
42 return nullptr;
43 }
44 napi_value result = nullptr;
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 status = napi_create_reference(env, constructor, 1, &g_constructor);
138 if (status != napi_ok) {
139 return false;
140 }
141 return true;
142 }
143
New(napi_env env,napi_callback_info info)144 napi_value ResourceManagerAddon::New(napi_env env, napi_callback_info info)
145 {
146 return nullptr;
147 }
148
Release(napi_env env,napi_callback_info info)149 napi_value ResourceManagerAddon::Release(napi_env env, napi_callback_info info)
150 {
151 napi_value undefined;
152 if (napi_get_undefined(env, &undefined) != napi_ok) {
153 return nullptr;
154 }
155 return undefined;
156 }
157
GetString(napi_env env,napi_callback_info info)158 napi_value ResourceManagerAddon::GetString(napi_env env, napi_callback_info info)
159 {
160 return nullptr;
161 }
162
GetStringArray(napi_env env,napi_callback_info info)163 napi_value ResourceManagerAddon::GetStringArray(napi_env env, napi_callback_info info)
164 {
165 return nullptr;
166 }
167
GetMedia(napi_env env,napi_callback_info info)168 napi_value ResourceManagerAddon::GetMedia(napi_env env, napi_callback_info info)
169 {
170 return nullptr;
171 }
172
GetMediaBase64(napi_env env,napi_callback_info info)173 napi_value ResourceManagerAddon::GetMediaBase64(napi_env env, napi_callback_info info)
174 {
175 return nullptr;
176 }
177
GetConfiguration(napi_env env,napi_callback_info info)178 napi_value ResourceManagerAddon::GetConfiguration(napi_env env, napi_callback_info info)
179 {
180 return nullptr;
181 }
182
GetDeviceCapability(napi_env env,napi_callback_info info)183 napi_value ResourceManagerAddon::GetDeviceCapability(napi_env env, napi_callback_info info)
184 {
185 return nullptr;
186 }
187
GetPluralString(napi_env env,napi_callback_info info)188 napi_value ResourceManagerAddon::GetPluralString(napi_env env, napi_callback_info info)
189 {
190 return nullptr;
191 }
192
GetRawFile(napi_env env,napi_callback_info info)193 napi_value ResourceManagerAddon::GetRawFile(napi_env env, napi_callback_info info)
194 {
195 return nullptr;
196 }
197
GetRawFileDescriptor(napi_env env,napi_callback_info info)198 napi_value ResourceManagerAddon::GetRawFileDescriptor(napi_env env, napi_callback_info info)
199 {
200 return nullptr;
201 }
202
CloseRawFileDescriptor(napi_env env,napi_callback_info info)203 napi_value ResourceManagerAddon::CloseRawFileDescriptor(napi_env env, napi_callback_info info)
204 {
205 return nullptr;
206 }
207
GetPluralStringByName(napi_env env,napi_callback_info info)208 napi_value ResourceManagerAddon::GetPluralStringByName(napi_env env, napi_callback_info info)
209 {
210 return nullptr;
211 }
212
GetMediaBase64ByName(napi_env env,napi_callback_info info)213 napi_value ResourceManagerAddon::GetMediaBase64ByName(napi_env env, napi_callback_info info)
214 {
215 return nullptr;
216 }
217
GetMediaByName(napi_env env,napi_callback_info info)218 napi_value ResourceManagerAddon::GetMediaByName(napi_env env, napi_callback_info info)
219 {
220 return nullptr;
221 }
222
GetStringArrayByName(napi_env env,napi_callback_info info)223 napi_value ResourceManagerAddon::GetStringArrayByName(napi_env env, napi_callback_info info)
224 {
225 return nullptr;
226 }
227
GetStringByName(napi_env env,napi_callback_info info)228 napi_value ResourceManagerAddon::GetStringByName(napi_env env, napi_callback_info info)
229 {
230 return nullptr;
231 }
232
GetStringValue(napi_env env,napi_callback_info info)233 napi_value ResourceManagerAddon::GetStringValue(napi_env env, napi_callback_info info)
234 {
235 return nullptr;
236 }
237
GetStringArrayValue(napi_env env,napi_callback_info info)238 napi_value ResourceManagerAddon::GetStringArrayValue(napi_env env, napi_callback_info info)
239 {
240 return nullptr;
241 }
242
GetMediaContent(napi_env env,napi_callback_info info)243 napi_value ResourceManagerAddon::GetMediaContent(napi_env env, napi_callback_info info)
244 {
245 return nullptr;
246 }
247
GetMediaContentBase64(napi_env env,napi_callback_info info)248 napi_value ResourceManagerAddon::GetMediaContentBase64(napi_env env, napi_callback_info info)
249 {
250 return nullptr;
251 }
252
GetPluralStringValue(napi_env env,napi_callback_info info)253 napi_value ResourceManagerAddon::GetPluralStringValue(napi_env env, napi_callback_info info)
254 {
255 return nullptr;
256 }
257
GetRawFileContent(napi_env env,napi_callback_info info)258 napi_value ResourceManagerAddon::GetRawFileContent(napi_env env, napi_callback_info info)
259 {
260 return nullptr;
261 }
262
GetRawFd(napi_env env,napi_callback_info info)263 napi_value ResourceManagerAddon::GetRawFd(napi_env env, napi_callback_info info)
264 {
265 return nullptr;
266 }
267
CloseRawFd(napi_env env,napi_callback_info info)268 napi_value ResourceManagerAddon::CloseRawFd(napi_env env, napi_callback_info info)
269 {
270 return nullptr;
271 }
272
GetRawFileList(napi_env env,napi_callback_info info)273 napi_value ResourceManagerAddon::GetRawFileList(napi_env env, napi_callback_info info)
274 {
275 return nullptr;
276 }
277
GetColor(napi_env env,napi_callback_info info)278 napi_value ResourceManagerAddon::GetColor(napi_env env, napi_callback_info info)
279 {
280 return nullptr;
281 }
282
GetColorByName(napi_env env,napi_callback_info info)283 napi_value ResourceManagerAddon::GetColorByName(napi_env env, napi_callback_info info)
284 {
285 return nullptr;
286 }
287
GetStringSync(napi_env env,napi_callback_info info)288 napi_value ResourceManagerAddon::GetStringSync(napi_env env, napi_callback_info info)
289 {
290 return nullptr;
291 }
292
GetStringByNameSync(napi_env env,napi_callback_info info)293 napi_value ResourceManagerAddon::GetStringByNameSync(napi_env env, napi_callback_info info)
294 {
295 return nullptr;
296 }
297
GetBoolean(napi_env env,napi_callback_info info)298 napi_value ResourceManagerAddon::GetBoolean(napi_env env, napi_callback_info info)
299 {
300 return nullptr;
301 }
302
GetNumber(napi_env env,napi_callback_info info)303 napi_value ResourceManagerAddon::GetNumber(napi_env env, napi_callback_info info)
304 {
305 return nullptr;
306 }
307
GetNumberByName(napi_env env,napi_callback_info info)308 napi_value ResourceManagerAddon::GetNumberByName(napi_env env, napi_callback_info info)
309 {
310 return nullptr;
311 }
312
GetBooleanByName(napi_env env,napi_callback_info info)313 napi_value ResourceManagerAddon::GetBooleanByName(napi_env env, napi_callback_info info)
314 {
315 return nullptr;
316 }
317
GetDrawableDescriptor(napi_env env,napi_callback_info info)318 napi_value ResourceManagerAddon::GetDrawableDescriptor(napi_env env, napi_callback_info info)
319 {
320 return nullptr;
321 }
322
GetDrawableDescriptorByName(napi_env env,napi_callback_info info)323 napi_value ResourceManagerAddon::GetDrawableDescriptorByName(napi_env env, napi_callback_info info)
324 {
325 return nullptr;
326 }
327
GetColorSync(napi_env env,napi_callback_info info)328 napi_value ResourceManagerAddon::GetColorSync(napi_env env, napi_callback_info info)
329 {
330 return nullptr;
331 }
332
GetColorByNameSync(napi_env env,napi_callback_info info)333 napi_value ResourceManagerAddon::GetColorByNameSync(napi_env env, napi_callback_info info)
334 {
335 return nullptr;
336 }
337
AddResource(napi_env env,napi_callback_info info)338 napi_value ResourceManagerAddon::AddResource(napi_env env, napi_callback_info info)
339 {
340 return nullptr;
341 }
342
RemoveResource(napi_env env,napi_callback_info info)343 napi_value ResourceManagerAddon::RemoveResource(napi_env env, napi_callback_info info)
344 {
345 return nullptr;
346 }
347 } // namespace Resource
348 } // namespace Global
349 } // namespace OHOS