• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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