1 /*
2  * Copyright (c) 2020 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_terminate_task.h"
17 
18 #include "ability_stack_manager.h"
19 
20 namespace OHOS {
AbilityTerminateTask(AbilityMgrContext * context,uint64_t token)21 AbilityTerminateTask::AbilityTerminateTask(AbilityMgrContext *context, uint64_t token)
22     : AbilityTask(context), token_(token)
23 {
24 }
25 
Execute()26 AbilityMsStatus AbilityTerminateTask::Execute()
27 {
28     PRINTD("AbilityTerminateTask", "start");
29     if (abilityMgrContext_ == nullptr) {
30         return AbilityMsStatus::TaskStatus("ability terminate", "invalid argument");
31     }
32     // Step1: Get ability record from stack
33     AbilityStackManager &stackManager = AbilityStackManager::GetInstance();
34     PageAbilityRecord *terminateAbility = stackManager.FindPageAbility(*abilityMgrContext_, token_);
35     if (terminateAbility == nullptr) {
36         return AbilityMsStatus::TaskStatus("ability terminate", "ability record not find");
37     }
38     if (terminateAbility->GetAbilityInfo().abilityType == AbilityType::SERVICE) {
39         return terminateAbility->ForceStopServiceAbility();
40     } else {
41         // Step2: Inactive ability record
42         return terminateAbility->InactiveAbility();
43     }
44 }
45 }  // namespace OHOS
46