1 /*
2  * Copyright (c) 2024 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 "ability_stage_context.h"
17 
18 #include "context.h"
19 #include "context_impl.h"
20 #include "hilog_tag_wrapper.h"
21 
22 namespace OHOS {
23 namespace AbilityRuntime {
24 const size_t AbilityStageContext::CONTEXT_TYPE_ID(std::hash<const char*> {} ("AbilityStageContext"));
25 
AbilityStageContext()26 AbilityStageContext::AbilityStageContext()
27 {
28     contextImpl_ = std::make_shared<ContextImpl>();
29 }
30 
SetParentContext(const std::shared_ptr<Context> & context)31 void AbilityStageContext::SetParentContext(const std::shared_ptr<Context> &context)
32 {
33     if (contextImpl_ == nullptr) {
34         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
35         return;
36     }
37 
38     contextImpl_->SetParentContext(context);
39 }
40 
InitHapModuleInfo(const std::shared_ptr<AppExecFwk::AbilityInfo> & abilityInfo)41 void AbilityStageContext::InitHapModuleInfo(const std::shared_ptr<AppExecFwk::AbilityInfo> &abilityInfo)
42 {
43     if (contextImpl_ == nullptr) {
44         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
45         return;
46     }
47 
48     contextImpl_->InitHapModuleInfo(abilityInfo);
49 }
50 
InitHapModuleInfo(const AppExecFwk::HapModuleInfo & hapModuleInfo)51 void AbilityStageContext::InitHapModuleInfo(const AppExecFwk::HapModuleInfo &hapModuleInfo)
52 {
53     if (contextImpl_ == nullptr) {
54         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
55         return;
56     }
57 
58     contextImpl_->InitHapModuleInfo(hapModuleInfo);
59 }
60 
GetHapModuleInfo() const61 std::shared_ptr<AppExecFwk::HapModuleInfo> AbilityStageContext::GetHapModuleInfo() const
62 {
63     if (contextImpl_ == nullptr) {
64         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
65         return nullptr;
66     }
67 
68     return contextImpl_->GetHapModuleInfo();
69 }
70 
SetConfiguration(const std::shared_ptr<AppExecFwk::Configuration> & config)71 void AbilityStageContext::SetConfiguration(const std::shared_ptr<AppExecFwk::Configuration> &config)
72 {
73     if (contextImpl_ == nullptr) {
74         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
75         return;
76     }
77 
78     contextImpl_->SetConfiguration(config);
79 }
80 
GetConfiguration() const81 std::shared_ptr<AppExecFwk::Configuration> AbilityStageContext::GetConfiguration() const
82 {
83     if (contextImpl_ == nullptr) {
84         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
85         return nullptr;
86     }
87 
88     return contextImpl_->GetConfiguration();
89 }
90 
SetResourceManager(const std::shared_ptr<Global::Resource::ResourceManager> & resourceManager)91 void AbilityStageContext::SetResourceManager(const std::shared_ptr<Global::Resource::ResourceManager> &resourceManager)
92 {
93     if (contextImpl_ == nullptr) {
94         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
95         return;
96     }
97 
98     contextImpl_->SetResourceManager(resourceManager);
99 }
100 
GetResourceManager() const101 std::shared_ptr<Global::Resource::ResourceManager> AbilityStageContext::GetResourceManager() const
102 {
103     if (contextImpl_ == nullptr) {
104         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
105         return nullptr;
106     }
107 
108     return contextImpl_->GetResourceManager();
109 }
110 
GetBundleName() const111 std::string AbilityStageContext::GetBundleName() const
112 {
113     if (contextImpl_ == nullptr) {
114         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
115         return {};
116     }
117 
118     return contextImpl_->GetBundleName();
119 }
120 
GetApplicationInfo() const121 std::shared_ptr<AppExecFwk::ApplicationInfo> AbilityStageContext::GetApplicationInfo() const
122 {
123     if (contextImpl_ == nullptr) {
124         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
125         return nullptr;
126     }
127 
128     return contextImpl_->GetApplicationInfo();
129 }
130 
CreateBundleContext(const std::string & bundleName)131 std::shared_ptr<Context> AbilityStageContext::CreateBundleContext(const std::string &bundleName)
132 {
133     if (contextImpl_ == nullptr) {
134         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
135         return nullptr;
136     }
137 
138     return contextImpl_->CreateBundleContext(bundleName);
139 }
140 
CreateModuleContext(const std::string & moduleName)141 std::shared_ptr<Context> AbilityStageContext::CreateModuleContext(const std::string &moduleName)
142 {
143     if (contextImpl_ == nullptr) {
144         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
145         return nullptr;
146     }
147 
148     return contextImpl_->CreateModuleContext(moduleName);
149 }
150 
CreateModuleContext(const std::string & bundleName,const std::string & moduleName)151 std::shared_ptr<Context> AbilityStageContext::CreateModuleContext(const std::string &bundleName,
152     const std::string &moduleName)
153 {
154     if (contextImpl_ == nullptr) {
155         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
156         return nullptr;
157     }
158 
159     return contextImpl_->CreateModuleContext(bundleName, moduleName);
160 }
161 
CreateModuleResourceManager(const std::string & bundleName,const std::string & moduleName)162 std::shared_ptr<Global::Resource::ResourceManager> AbilityStageContext::CreateModuleResourceManager(
163     const std::string &bundleName, const std::string &moduleName)
164 {
165     if (contextImpl_ == nullptr) {
166         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
167         return nullptr;
168     }
169 
170     return contextImpl_->CreateModuleResourceManager(bundleName, moduleName);
171 }
172 
CreateSystemHspModuleResourceManager(const std::string & bundleName,const std::string & moduleName,std::shared_ptr<Global::Resource::ResourceManager> & resourceManager)173 int32_t AbilityStageContext::CreateSystemHspModuleResourceManager(const std::string &bundleName,
174     const std::string &moduleName, std::shared_ptr<Global::Resource::ResourceManager> &resourceManager)
175 {
176     if (contextImpl_ == nullptr) {
177         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
178         return ERR_INVALID_VALUE;
179     }
180 
181     return contextImpl_->CreateSystemHspModuleResourceManager(bundleName, moduleName, resourceManager);
182 }
183 
GetBundleCodePath() const184 std::string AbilityStageContext::GetBundleCodePath() const
185 {
186     if (contextImpl_ == nullptr) {
187         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
188         return {};
189     }
190 
191     return contextImpl_->GetBundleCodePath();
192 }
193 
GetBundleCodeDir()194 std::string AbilityStageContext::GetBundleCodeDir()
195 {
196     if (contextImpl_ == nullptr) {
197         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
198         return {};
199     }
200 
201     return contextImpl_->GetBundleCodeDir();
202 }
203 
GetCacheDir()204 std::string AbilityStageContext::GetCacheDir()
205 {
206     if (contextImpl_ == nullptr) {
207         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
208         return {};
209     }
210 
211     return contextImpl_->GetCacheDir();
212 }
213 
GetTempDir()214 std::string AbilityStageContext::GetTempDir()
215 {
216     if (contextImpl_ == nullptr) {
217         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
218         return {};
219     }
220 
221     return contextImpl_->GetTempDir();
222 }
223 
GetFilesDir()224 std::string AbilityStageContext::GetFilesDir()
225 {
226     if (contextImpl_ == nullptr) {
227         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
228         return {};
229     }
230 
231     return contextImpl_->GetFilesDir();
232 }
233 
GetResourceDir()234 std::string AbilityStageContext::GetResourceDir()
235 {
236     if (contextImpl_ == nullptr) {
237         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
238         return {};
239     }
240 
241     return contextImpl_->GetResourceDir();
242 }
243 
GetDatabaseDir()244 std::string AbilityStageContext::GetDatabaseDir()
245 {
246     if (contextImpl_ == nullptr) {
247         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
248         return {};
249     }
250 
251     return contextImpl_->GetDatabaseDir();
252 }
253 
GetPreferencesDir()254 std::string AbilityStageContext::GetPreferencesDir()
255 {
256     if (contextImpl_ == nullptr) {
257         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
258         return {};
259     }
260 
261     return contextImpl_->GetPreferencesDir();
262 }
263 
GetGroupDir(std::string groupId)264 std::string AbilityStageContext::GetGroupDir(std::string groupId)
265 {
266     if (contextImpl_ == nullptr) {
267         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
268         return {};
269     }
270 
271     return contextImpl_->GetGroupDir(groupId);
272 }
273 
GetSystemDatabaseDir(const std::string & groupId,bool checkExist,std::string & databaseDir)274 int32_t AbilityStageContext::GetSystemDatabaseDir(const std::string &groupId, bool checkExist, std::string &databaseDir)
275 {
276     if (contextImpl_ == nullptr) {
277         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
278         return ERR_INVALID_VALUE;
279     }
280 
281     return contextImpl_->GetSystemDatabaseDir(groupId, checkExist, databaseDir);
282 }
283 
GetSystemPreferencesDir(const std::string & groupId,bool checkExist,std::string & preferencesDir)284 int32_t AbilityStageContext::GetSystemPreferencesDir(const std::string &groupId, bool checkExist,
285     std::string &preferencesDir)
286 {
287     if (contextImpl_ == nullptr) {
288         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
289         return ERR_INVALID_VALUE;
290     }
291 
292     return contextImpl_->GetSystemPreferencesDir(groupId, checkExist, preferencesDir);
293 }
294 
GetDistributedFilesDir()295 std::string AbilityStageContext::GetDistributedFilesDir()
296 {
297     if (contextImpl_ == nullptr) {
298         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
299         return {};
300     }
301 
302     return contextImpl_->GetDistributedFilesDir();
303 }
304 
GetCloudFileDir()305 std::string AbilityStageContext::GetCloudFileDir()
306 {
307     if (contextImpl_ == nullptr) {
308         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
309         return {};
310     }
311 
312     return contextImpl_->GetCloudFileDir();
313 }
314 
GetBaseDir() const315 std::string AbilityStageContext::GetBaseDir() const
316 {
317     if (contextImpl_ == nullptr) {
318         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
319         return {};
320     }
321 
322     return contextImpl_->GetBaseDir();
323 }
324 
IsUpdatingConfigurations()325 bool AbilityStageContext::IsUpdatingConfigurations()
326 {
327     if (contextImpl_ == nullptr) {
328         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
329         return false;
330     }
331 
332     return contextImpl_->IsUpdatingConfigurations();
333 }
334 
PrintDrawnCompleted()335 bool AbilityStageContext::PrintDrawnCompleted()
336 {
337     if (contextImpl_ == nullptr) {
338         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
339         return false;
340     }
341 
342     return contextImpl_->PrintDrawnCompleted();
343 }
344 
GetToken()345 sptr<IRemoteObject> AbilityStageContext::GetToken()
346 {
347     if (contextImpl_ == nullptr) {
348         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
349         return nullptr;
350     }
351 
352     return contextImpl_->GetToken();
353 }
354 
SetToken(const sptr<IRemoteObject> & token)355 void AbilityStageContext::SetToken(const sptr<IRemoteObject> &token)
356 {
357     if (contextImpl_ == nullptr) {
358         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
359         return;
360     }
361 
362     contextImpl_->SetToken(token);
363 }
364 
SwitchArea(int mode)365 void AbilityStageContext::SwitchArea(int mode)
366 {
367     if (contextImpl_ == nullptr) {
368         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
369         return;
370     }
371 
372     contextImpl_->SwitchArea(mode);
373 }
374 
GetArea()375 int AbilityStageContext::GetArea()
376 {
377     if (contextImpl_ == nullptr) {
378         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
379         return ContextImpl::EL_DEFAULT;
380     }
381 
382     return contextImpl_->GetArea();
383 }
384 
GetDeviceType() const385 Global::Resource::DeviceType AbilityStageContext::GetDeviceType() const
386 {
387     if (contextImpl_ == nullptr) {
388         TAG_LOGE(AAFwkTag::APPKIT, "Invalid contextImpl");
389         return Global::Resource::DeviceType::DEVICE_PHONE;
390     }
391 
392     return contextImpl_->GetDeviceType();
393 }
394 } // namespace AbilityRuntime
395 } // namespace OHOS
396