• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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_context.h"
17 
18 #include "ability_manager_client.h"
19 #include "accesstoken_kit.h"
20 #include "bundle_constants.h"
21 #include "hilog_wrapper.h"
22 #include "iservice_registry.h"
23 #include "os_account_manager.h"
24 #include "resource_manager.h"
25 #include "sys_mgr_client.h"
26 #include "system_ability_definition.h"
27 
28 namespace OHOS {
29 namespace AppExecFwk {
30 
31 int AbilityContext::ABILITY_CONTEXT_DEFAULT_REQUEST_CODE(0);
32 const std::string GRANT_ABILITY_BUNDLE_NAME = "com.ohos.permissionmanager";
33 const std::string GRANT_ABILITY_ABILITY_NAME = "com.ohos.permissionmanager.GrantAbility";
34 const std::string PERMISSION_KEY = "ohos.user.grant.permission";
35 const std::string STATE_KEY = "ohos.user.grant.permission.state";
36 
StartAbility(const AAFwk::Want & want,int requestCode)37 ErrCode AbilityContext::StartAbility(const AAFwk::Want &want, int requestCode)
38 {
39     HILOG_INFO("AbilityContext::StartAbility called, requestCode = %{public}d", requestCode);
40 
41     AppExecFwk::AbilityType type = GetAbilityInfoType();
42     if (type != AppExecFwk::AbilityType::PAGE && type != AppExecFwk::AbilityType::SERVICE) {
43         HILOG_ERROR("AbilityContext::StartAbility AbilityType = %{public}d", type);
44         return ERR_INVALID_VALUE;
45     }
46 
47     HILOG_INFO("%{public}s. Start calling ams->StartAbility.", __func__);
48     ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, token_, requestCode);
49     HILOG_INFO("%{public}s. End calling ams->StartAbility. ret=%{public}d", __func__, err);
50     if (err != ERR_OK) {
51         HILOG_ERROR("AbilityContext::StartAbility is failed %{public}d", err);
52     }
53     return err;
54 }
55 
StartAbility(const Want & want,int requestCode,const AbilityStartSetting & abilityStartSetting)56 ErrCode AbilityContext::StartAbility(const Want &want, int requestCode, const AbilityStartSetting &abilityStartSetting)
57 {
58     AppExecFwk::AbilityType type = GetAbilityInfoType();
59     if (AppExecFwk::AbilityType::PAGE != type && AppExecFwk::AbilityType::SERVICE != type) {
60         HILOG_ERROR("AbilityContext::StartAbility AbilityType = %{public}d", type);
61         return ERR_INVALID_VALUE;
62     }
63 
64     HILOG_INFO("%{public}s. Start calling ams->StartAbility.", __func__);
65     ErrCode err =
66         AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, abilityStartSetting, token_, requestCode);
67     HILOG_INFO("%{public}s. End calling ams->StartAbility. ret=%{public}d", __func__, err);
68     if (err != ERR_OK) {
69         HILOG_ERROR("AbilityContext::StartAbility is failed %{public}d", err);
70     }
71 
72     return err;
73 }
74 
TerminateAbility(int requestCode)75 ErrCode AbilityContext::TerminateAbility(int requestCode)
76 {
77     HILOG_INFO("%{public}s begin.", __func__);
78     ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->TerminateAbility(token_, requestCode);
79     if (err != ERR_OK) {
80         HILOG_ERROR("AbilityContext::TerminateAbility is failed %{public}d", err);
81     }
82     HILOG_INFO("%{public}s end.", __func__);
83     return err;
84 }
85 
TerminateAbility()86 ErrCode AbilityContext::TerminateAbility()
87 {
88     HILOG_INFO("%{public}s begin.", __func__);
89     std::shared_ptr<AbilityInfo> info = GetAbilityInfo();
90     if (info == nullptr) {
91         HILOG_ERROR("AbilityContext::TerminateAbility info == nullptr");
92         return ERR_NULL_OBJECT;
93     }
94 
95     ErrCode err = ERR_OK;
96 
97     switch (info->type) {
98         case AppExecFwk::AbilityType::PAGE:
99             HILOG_INFO("%{public}s begin ams->TerminateAbility for PAGE.", __func__);
100             err = AAFwk::AbilityManagerClient::GetInstance()->TerminateAbility(token_, resultCode_, &resultWant_);
101             HILOG_INFO("%{public}s end ams->TerminateAbility for PAGE, ret=%{public}d", __func__, err);
102             break;
103         case AppExecFwk::AbilityType::SERVICE:
104             HILOG_INFO("%{public}s begin ams->TerminateAbility for SERVICE.", __func__);
105             err = AAFwk::AbilityManagerClient::GetInstance()->TerminateAbility(token_, -1, nullptr);
106             HILOG_INFO("%{public}s end ams->TerminateAbility for SERVICE, ret=%{public}d", __func__, err);
107             break;
108         default:
109             HILOG_ERROR("AbilityContext::TerminateAbility info type error is %{public}d", info->type);
110             break;
111     }
112 
113     if (err != ERR_OK) {
114         HILOG_ERROR("AbilityContext::TerminateAbility is failed %{public}d", err);
115     }
116     HILOG_INFO("%{public}s end.", __func__);
117     return err;
118 }
119 
GetCallingBundle()120 std::string AbilityContext::GetCallingBundle()
121 {
122     return callingBundleName_;
123 }
124 
GetElementName()125 std::shared_ptr<ElementName> AbilityContext::GetElementName()
126 {
127     HILOG_INFO("%{public}s begin.", __func__);
128     std::shared_ptr<AbilityInfo> info = GetAbilityInfo();
129     if (info == nullptr) {
130         HILOG_ERROR("AbilityContext::GetElementName info == nullptr");
131         return nullptr;
132     }
133 
134     std::shared_ptr<ElementName> elementName = std::make_shared<ElementName>();
135     if (elementName == nullptr) {
136         HILOG_ERROR("AbilityContext::GetElementName elementName == nullptr");
137         return nullptr;
138     }
139     elementName->SetAbilityName(info->name);
140     elementName->SetBundleName(info->bundleName);
141     elementName->SetDeviceID(info->deviceId);
142     HILOG_INFO("%{public}s end.", __func__);
143     return elementName;
144 }
145 
GetCallingAbility()146 std::shared_ptr<ElementName> AbilityContext::GetCallingAbility()
147 {
148     HILOG_INFO("%{public}s begin.", __func__);
149     std::shared_ptr<ElementName> elementName = std::make_shared<ElementName>();
150 
151     if (elementName == nullptr) {
152         HILOG_ERROR("AbilityContext::GetElementName elementName == nullptr");
153         return nullptr;
154     }
155     elementName->SetAbilityName(callingAbilityName_);
156     elementName->SetBundleName(callingBundleName_);
157     elementName->SetDeviceID(callingDeviceId_);
158     HILOG_INFO("%{public}s end.", __func__);
159     return elementName;
160 }
161 
ConnectAbility(const Want & want,const sptr<AAFwk::IAbilityConnection> & conn)162 bool AbilityContext::ConnectAbility(const Want &want, const sptr<AAFwk::IAbilityConnection> &conn)
163 {
164     HILOG_INFO("%{public}s begin.", __func__);
165 
166     AppExecFwk::AbilityType type = GetAbilityInfoType();
167 
168     std::shared_ptr<AbilityInfo> abilityInfo = GetAbilityInfo();
169     if (abilityInfo == nullptr) {
170         HILOG_ERROR("AbilityContext::ConnectAbility info == nullptr");
171         return false;
172     }
173 
174     if (AppExecFwk::AbilityType::PAGE != type && AppExecFwk::AbilityType::SERVICE != type) {
175         HILOG_ERROR("AbilityContext::ConnectAbility AbilityType = %{public}d", type);
176         return false;
177     }
178 
179     ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, conn, token_);
180     HILOG_INFO("%{public}s end ConnectAbility, ret=%{public}d", __func__, ret);
181     bool value = ((ret == ERR_OK) ? true : false);
182     if (!value) {
183         HILOG_ERROR("AbilityContext::ConnectAbility ErrorCode = %{public}d", ret);
184     }
185     HILOG_INFO("%{public}s end.", __func__);
186     return value;
187 }
188 
DisconnectAbility(const sptr<AAFwk::IAbilityConnection> & conn)189 ErrCode AbilityContext::DisconnectAbility(const sptr<AAFwk::IAbilityConnection> &conn)
190 {
191     HILOG_INFO("%{public}s begin.", __func__);
192 
193     AppExecFwk::AbilityType type = GetAbilityInfoType();
194     if (AppExecFwk::AbilityType::PAGE != type && AppExecFwk::AbilityType::SERVICE != type) {
195         HILOG_ERROR("AbilityContext::DisconnectAbility AbilityType = %{public}d", type);
196         return ERR_INVALID_VALUE;
197     }
198 
199     ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(conn);
200     HILOG_INFO("%{public}s end ams->DisconnectAbility, ret=%{public}d", __func__, ret);
201     if (ret != ERR_OK) {
202         HILOG_ERROR("AbilityContext::DisconnectAbility error");
203     }
204     HILOG_DEBUG("AbilityContext::DisconnectAbility end");
205     return ret;
206 }
207 
StopAbility(const AAFwk::Want & want)208 bool AbilityContext::StopAbility(const AAFwk::Want &want)
209 {
210     HILOG_INFO("%{public}s begin.", __func__);
211     AppExecFwk::AbilityType type = GetAbilityInfoType();
212     if (AppExecFwk::AbilityType::PAGE != type && AppExecFwk::AbilityType::SERVICE != type) {
213         HILOG_ERROR("AbilityContext::StopAbility AbilityType = %{public}d", type);
214         return false;
215     }
216 
217     HILOG_INFO("%{public}s begin ams->StopServiceAbility", __func__);
218     ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StopServiceAbility(want);
219     HILOG_INFO("%{public}s end ams->StopServiceAbility, ret=%{public}d", __func__, err);
220     if (err != ERR_OK) {
221         HILOG_ERROR("AbilityContext::StopAbility is failed %{public}d", err);
222         return false;
223     }
224 
225     HILOG_INFO("%{public}s end.", __func__);
226     return true;
227 }
228 
GetToken()229 sptr<IRemoteObject> AbilityContext::GetToken()
230 {
231     return token_;
232 }
233 
GetApplicationInfo() const234 std::shared_ptr<ApplicationInfo> AbilityContext::GetApplicationInfo() const
235 {
236     return ContextContainer::GetApplicationInfo();
237 }
238 
GetCacheDir()239 std::string AbilityContext::GetCacheDir()
240 {
241     return ContextContainer::GetCacheDir();
242 }
243 
GetCodeCacheDir()244 std::string AbilityContext::GetCodeCacheDir()
245 {
246     return ContextContainer::GetCodeCacheDir();
247 }
248 
GetDatabaseDir()249 std::string AbilityContext::GetDatabaseDir()
250 {
251     return ContextContainer::GetDatabaseDir();
252 }
253 
GetDataDir()254 std::string AbilityContext::GetDataDir()
255 {
256     return ContextContainer::GetDataDir();
257 }
258 
GetDir(const std::string & name,int mode)259 std::string AbilityContext::GetDir(const std::string &name, int mode)
260 {
261     return ContextContainer::GetDir(name, mode);
262 }
263 
GetBundleManager() const264 sptr<IBundleMgr> AbilityContext::GetBundleManager() const
265 {
266     return ContextContainer::GetBundleManager();
267 }
268 
GetBundleCodePath()269 std::string AbilityContext::GetBundleCodePath()
270 {
271     return ContextContainer::GetBundleCodePath();
272 }
273 
GetBundleName() const274 std::string AbilityContext::GetBundleName() const
275 {
276     return ContextContainer::GetBundleName();
277 }
278 
GetBundleResourcePath()279 std::string AbilityContext::GetBundleResourcePath()
280 {
281     return ContextContainer::GetBundleResourcePath();
282 }
283 
GetApplicationContext() const284 std::shared_ptr<Context> AbilityContext::GetApplicationContext() const
285 {
286     return ContextContainer::GetApplicationContext();
287 }
288 
GetContext()289 std::shared_ptr<Context> AbilityContext::GetContext()
290 {
291     return ContextContainer::GetContext();
292 }
293 
GetAbilityManager()294 sptr<AAFwk::IAbilityManager> AbilityContext::GetAbilityManager()
295 {
296     return ContextContainer::GetAbilityManager();
297 }
298 
GetProcessInfo() const299 std::shared_ptr<ProcessInfo> AbilityContext::GetProcessInfo() const
300 {
301     return ContextContainer::GetProcessInfo();
302 }
303 
GetAppType()304 std::string AbilityContext::GetAppType()
305 {
306     return ContextContainer::GetAppType();
307 }
308 
GetAbilityInfo()309 const std::shared_ptr<AbilityInfo> AbilityContext::GetAbilityInfo()
310 {
311     return ContextContainer::GetAbilityInfo();
312 }
313 
GetHapModuleInfo()314 std::shared_ptr<HapModuleInfo> AbilityContext::GetHapModuleInfo()
315 {
316     return ContextContainer::GetHapModuleInfo();
317 }
318 
GetAbilityInfoType()319 AppExecFwk::AbilityType AbilityContext::GetAbilityInfoType()
320 {
321     std::shared_ptr<AbilityInfo> info = GetAbilityInfo();
322     if (info == nullptr) {
323         HILOG_ERROR("AbilityContext::GetAbilityInfoType info == nullptr");
324         return AppExecFwk::AbilityType::UNKNOWN;
325     }
326 
327     return info->type;
328 }
329 
CreateBundleContext(std::string bundleName,int flag,int accountId)330 std::shared_ptr<Context> AbilityContext::CreateBundleContext(std::string bundleName, int flag, int accountId)
331 {
332     return ContextContainer::CreateBundleContext(bundleName, flag, accountId);
333 }
334 
GetResourceManager() const335 std::shared_ptr<Global::Resource::ResourceManager> AbilityContext::GetResourceManager() const
336 {
337     HILOG_INFO("%{public}s begin.", __func__);
338     std::shared_ptr<Context> appcontext = GetApplicationContext();
339     if (appcontext == nullptr) {
340         HILOG_ERROR("AbilityContext::GetResourceManager appcontext is nullptr");
341         return nullptr;
342     }
343 
344     HILOG_INFO("%{public}s begin appcontext->GetResourceManager.", __func__);
345     std::shared_ptr<Global::Resource::ResourceManager> resourceManager = appcontext->GetResourceManager();
346     HILOG_INFO("%{public}s end appcontext->GetResourceManager.", __func__);
347     if (resourceManager == nullptr) {
348         HILOG_ERROR("AbilityContext::GetResourceManager resourceManager is nullptr");
349         return nullptr;
350     }
351     HILOG_INFO("%{public}s end.", __func__);
352     return resourceManager;
353 }
354 
VerifyPermission(const std::string & permission,int pid,int uid)355 int AbilityContext::VerifyPermission(const std::string &permission, int pid, int uid)
356 {
357     HILOG_INFO("%{public}s begin. permission=%{public}s, pid=%{public}d, uid=%{public}d",
358         __func__,
359         permission.c_str(),
360         pid,
361         uid);
362     if (permission.empty()) {
363         HILOG_ERROR("VerifyPermission permission invalid");
364         return AppExecFwk::Constants::PERMISSION_NOT_GRANTED;
365     }
366 
367     sptr<IBundleMgr> ptr = GetBundleManager();
368     if (ptr == nullptr) {
369         HILOG_ERROR("VerifyPermission failed to get bundle manager service");
370         return AppExecFwk::Constants::PERMISSION_NOT_GRANTED;
371     }
372 
373     std::string bundle_name;
374     if (!ptr->GetBundleNameForUid(uid, bundle_name)) {
375         HILOG_ERROR("VerifyPermission failed to get bundle name by uid");
376         return AppExecFwk::Constants::PERMISSION_NOT_GRANTED;
377     }
378 
379     int account = -1;
380     if (AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid, account) != 0) {
381         HILOG_ERROR("VerifyPermission failed to get account by uid");
382         return AppExecFwk::Constants::PERMISSION_NOT_GRANTED;
383     }
384 
385     AppExecFwk::ApplicationInfo appInfo;
386     if (!ptr->GetApplicationInfo(bundle_name, AppExecFwk::BundleFlag::GET_BUNDLE_DEFAULT, account, appInfo)) {
387         HILOG_ERROR("VerifyPermission failed to get application info");
388         return AppExecFwk::Constants::PERMISSION_NOT_GRANTED;
389     }
390 
391     int32_t ret = Security::AccessToken::AccessTokenKit::VerifyAccessToken(appInfo.accessTokenId, permission);
392     if (ret == Security::AccessToken::PermissionState::PERMISSION_DENIED) {
393         HILOG_ERROR("VerifyPermission %{public}d: PERMISSION_DENIED", appInfo.accessTokenId);
394         return AppExecFwk::Constants::PERMISSION_NOT_GRANTED;
395     }
396 
397     return 0;
398 }
399 
GetPermissionDes(const std::string & permissionName,std::string & des)400 void AbilityContext::GetPermissionDes(const std::string &permissionName, std::string &des)
401 {
402     Security::AccessToken::PermissionDef permissionDef;
403     int32_t ret = Security::AccessToken::AccessTokenKit::GetDefPermission(permissionName, permissionDef);
404     if (ret == Security::AccessToken::AccessTokenKitRet::RET_SUCCESS) {
405         HILOG_DEBUG("GetPermissionDes %{public}s: RET_SUCCESS", permissionName.c_str());
406         des = permissionDef.description;
407     }
408     HILOG_DEBUG("%{public}s end GetPermissionDef.", __func__);
409 }
410 
RequestPermissionsFromUser(std::vector<std::string> & permissions,std::vector<int> & permissionsState,int requestCode)411 void AbilityContext::RequestPermissionsFromUser(std::vector<std::string> &permissions,
412     std::vector<int> &permissionsState, int requestCode)
413 {
414     HILOG_INFO("%{public}s begin.", __func__);
415     if (permissions.size() == 0) {
416         HILOG_ERROR("AbilityContext::RequestPermissionsFromUser permissions is empty");
417         return;
418     }
419 
420     if (requestCode < 0) {
421         HILOG_ERROR("AbilityContext::RequestPermissionsFromUser requestCode should be >= 0");
422         return;
423     }
424 
425     AAFwk::Want want;
426     want.SetElementName(GRANT_ABILITY_BUNDLE_NAME, GRANT_ABILITY_ABILITY_NAME);
427     want.SetParam(PERMISSION_KEY, permissions);
428     want.SetParam(STATE_KEY, permissionsState);
429     StartAbility(want, requestCode);
430     HILOG_INFO("%{public}s end.", __func__);
431 }
432 
DeleteFile(const std::string & fileName)433 bool AbilityContext::DeleteFile(const std::string &fileName)
434 {
435     return ContextContainer::DeleteFile(fileName);
436 }
437 
SetCallingContext(const std::string & deviceId,const std::string & bundleName,const std::string & abilityName)438 void AbilityContext::SetCallingContext(
439     const std::string &deviceId, const std::string &bundleName, const std::string &abilityName)
440 {
441     callingDeviceId_ = deviceId;
442     callingBundleName_ = bundleName;
443     callingAbilityName_ = abilityName;
444 }
445 
GetCaller()446 Uri AbilityContext::GetCaller()
447 {
448     return ContextContainer::GetCaller();
449 }
450 
AttachBaseContext(const std::shared_ptr<Context> & base)451 void AbilityContext::AttachBaseContext(const std::shared_ptr<Context> &base)
452 {
453     HILOG_INFO("AbilityContext::AttachBaseContext. Start.");
454     ContextContainer::AttachBaseContext(base);
455     HILOG_INFO("AbilityContext::AttachBaseContext. End.");
456 }
457 
GetExternalCacheDir()458 std::string AbilityContext::GetExternalCacheDir()
459 {
460     return ContextContainer::GetExternalCacheDir();
461 }
462 
GetExternalFilesDir(std::string & type)463 std::string AbilityContext::GetExternalFilesDir(std::string &type)
464 {
465     return ContextContainer::GetExternalFilesDir(type);
466 }
467 
GetFilesDir()468 std::string AbilityContext::GetFilesDir()
469 {
470     return ContextContainer::GetFilesDir();
471 }
472 
GetNoBackupFilesDir()473 std::string AbilityContext::GetNoBackupFilesDir()
474 {
475     return ContextContainer::GetNoBackupFilesDir();
476 }
477 
UnauthUriPermission(const std::string & permission,const Uri & uri,int uid)478 void AbilityContext::UnauthUriPermission(const std::string &permission, const Uri &uri, int uid)
479 {
480     ContextContainer::UnauthUriPermission(permission, uri, uid);
481 }
482 
GetDistributedDir()483 std::string AbilityContext::GetDistributedDir()
484 {
485     return ContextContainer::GetDistributedDir();
486 }
487 
SetPattern(int patternId)488 void AbilityContext::SetPattern(int patternId)
489 {
490     ContextContainer::SetPattern(patternId);
491 }
492 
GetAbilityPackageContext()493 std::shared_ptr<Context> AbilityContext::GetAbilityPackageContext()
494 {
495     return ContextContainer::GetAbilityPackageContext();
496 }
497 
GetProcessName()498 std::string AbilityContext::GetProcessName()
499 {
500     return ContextContainer::GetProcessName();
501 }
502 
InitResourceManager(BundleInfo & bundleInfo,std::shared_ptr<ContextDeal> & deal)503 void AbilityContext::InitResourceManager(BundleInfo &bundleInfo, std::shared_ptr<ContextDeal> &deal)
504 {
505     ContextContainer::InitResourceManager(bundleInfo, deal);
506 }
507 
GetString(int resId)508 std::string AbilityContext::GetString(int resId)
509 {
510     return ContextContainer::GetString(resId);
511 }
512 
GetStringArray(int resId)513 std::vector<std::string> AbilityContext::GetStringArray(int resId)
514 {
515     return ContextContainer::GetStringArray(resId);
516 }
517 
GetIntArray(int resId)518 std::vector<int> AbilityContext::GetIntArray(int resId)
519 {
520     return ContextContainer::GetIntArray(resId);
521 }
522 
GetTheme()523 std::map<std::string, std::string> AbilityContext::GetTheme()
524 {
525     return ContextContainer::GetTheme();
526 }
527 
SetTheme(int themeId)528 void AbilityContext::SetTheme(int themeId)
529 {
530     ContextContainer::SetTheme(themeId);
531 }
532 
GetPattern()533 std::map<std::string, std::string> AbilityContext::GetPattern()
534 {
535     return ContextContainer::GetPattern();
536 }
537 
GetColor(int resId)538 int AbilityContext::GetColor(int resId)
539 {
540     return ContextContainer::GetColor(resId);
541 }
542 
GetThemeId()543 int AbilityContext::GetThemeId()
544 {
545     return ContextContainer::GetThemeId();
546 }
547 
TerminateAbilityResult(int startId)548 bool AbilityContext::TerminateAbilityResult(int startId)
549 {
550     HILOG_INFO("%{public}s begin.", __func__);
551     auto abilityClient = AAFwk::AbilityManagerClient::GetInstance();
552     if (abilityClient == nullptr) {
553         HILOG_ERROR("AbilityContext::TerminateAbilityResult abilityClient is nullptr");
554         return false;
555     }
556 
557     HILOG_INFO("%{public}s begin ams->TerminateAbilityResult, startId=%{public}d.", __func__, startId);
558     ErrCode errval = abilityClient->TerminateAbilityResult(token_, startId);
559     HILOG_INFO("%{public}s end ams->TerminateAbilityResult, ret=%{public}d.", __func__, errval);
560     if (errval != ERR_OK) {
561         HILOG_ERROR("AbilityContext::TerminateAbilityResult TerminateAbilityResult retval is %d", errval);
562     }
563 
564     HILOG_INFO("%{public}s end.", __func__);
565     return (errval == ERR_OK) ? true : false;
566 }
567 
GetDisplayOrientation()568 int AbilityContext::GetDisplayOrientation()
569 {
570     return ContextContainer::GetDisplayOrientation();
571 }
572 
GetPreferencesDir()573 std::string AbilityContext::GetPreferencesDir()
574 {
575     return ContextContainer::GetPreferencesDir();
576 }
577 
SetColorMode(int mode)578 void AbilityContext::SetColorMode(int mode)
579 {
580     ContextContainer::SetColorMode(mode);
581 }
582 
GetColorMode()583 int AbilityContext::GetColorMode()
584 {
585     return ContextContainer::GetColorMode();
586 }
587 
GetMissionId()588 int AbilityContext::GetMissionId()
589 {
590     return ContextContainer::GetMissionId();
591 }
592 
TerminateAndRemoveMission()593 void AbilityContext::TerminateAndRemoveMission()
594 {
595     ContextContainer::TerminateAndRemoveMission();
596 }
597 
StartAbilities(const std::vector<AAFwk::Want> & wants)598 void AbilityContext::StartAbilities(const std::vector<AAFwk::Want> &wants)
599 {
600     HILOG_INFO("%{public}s begin.", __func__);
601     for (auto want : wants) {
602         StartAbility(want, ABILITY_CONTEXT_DEFAULT_REQUEST_CODE);
603     }
604     HILOG_INFO("%{public}s end.", __func__);
605 }
606 
IsFirstInMission()607 bool AbilityContext::IsFirstInMission()
608 {
609     HILOG_INFO("%{public}s begin.", __func__);
610     auto abilityClient = AAFwk::AbilityManagerClient::GetInstance();
611     if (abilityClient == nullptr) {
612         HILOG_ERROR("AbilityContext::IsFirstInMission abilityClient is nullptr");
613         return false;
614     }
615     HILOG_INFO("%{public}s begin ams->IsFirstInMission.", __func__);
616     ErrCode errval = abilityClient->IsFirstInMission(token_);
617     HILOG_INFO("%{public}s end ams->IsFirstInMission, ret=%{public}d", __func__, errval);
618     if (errval != ERR_OK) {
619         HILOG_ERROR("AbilityContext::IsFirstInMission IsFirstInMission retval is %d", errval);
620     }
621     HILOG_INFO("%{public}s end.", __func__);
622 
623     return (errval == ERR_OK) ? true : false;
624 }
625 
GetUITaskDispatcher()626 std::shared_ptr<TaskDispatcher> AbilityContext::GetUITaskDispatcher()
627 {
628     return ContextContainer::GetUITaskDispatcher();
629 }
630 
GetMainTaskDispatcher()631 std::shared_ptr<TaskDispatcher> AbilityContext::GetMainTaskDispatcher()
632 {
633     return ContextContainer::GetMainTaskDispatcher();
634 }
635 
CreateParallelTaskDispatcher(const std::string & name,const TaskPriority & priority)636 std::shared_ptr<TaskDispatcher> AbilityContext::CreateParallelTaskDispatcher(
637     const std::string &name, const TaskPriority &priority)
638 {
639     return ContextContainer::CreateParallelTaskDispatcher(name, priority);
640 }
641 
CreateSerialTaskDispatcher(const std::string & name,const TaskPriority & priority)642 std::shared_ptr<TaskDispatcher> AbilityContext::CreateSerialTaskDispatcher(
643     const std::string &name, const TaskPriority &priority)
644 {
645     return ContextContainer::CreateSerialTaskDispatcher(name, priority);
646 }
647 
GetGlobalTaskDispatcher(const TaskPriority & priority)648 std::shared_ptr<TaskDispatcher> AbilityContext::GetGlobalTaskDispatcher(const TaskPriority &priority)
649 {
650     return ContextContainer::GetGlobalTaskDispatcher(priority);
651 }
652 
MoveMissionToEnd(bool nonFirst)653 bool AbilityContext::MoveMissionToEnd(bool nonFirst)
654 {
655     return ContextContainer::MoveMissionToEnd(nonFirst);
656 }
657 
LockMission()658 void AbilityContext::LockMission()
659 {
660     ContextContainer::LockMission();
661 }
662 
UnlockMission()663 void AbilityContext::UnlockMission()
664 {
665     ContextContainer::UnlockMission();
666 }
667 
SetMissionInformation(const MissionInformation & missionInformation)668 bool AbilityContext::SetMissionInformation(const MissionInformation &missionInformation)
669 {
670     return ContextContainer::SetMissionInformation(missionInformation);
671 }
672 
IsUpdatingConfigurations()673 bool AbilityContext::IsUpdatingConfigurations()
674 {
675     return ContextContainer::IsUpdatingConfigurations();
676 }
677 
PrintDrawnCompleted()678 bool AbilityContext::PrintDrawnCompleted()
679 {
680     return ContextContainer::PrintDrawnCompleted();
681 }
682 }  // namespace AppExecFwk
683 }  // namespace OHOS
684