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