1eace7efcSopenharmony_ci/* 2eace7efcSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3eace7efcSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4eace7efcSopenharmony_ci * you may not use this file except in compliance with the License. 5eace7efcSopenharmony_ci * You may obtain a copy of the License at 6eace7efcSopenharmony_ci * 7eace7efcSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8eace7efcSopenharmony_ci * 9eace7efcSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10eace7efcSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11eace7efcSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12eace7efcSopenharmony_ci * See the License for the specific language governing permissions and 13eace7efcSopenharmony_ci * limitations under the License. 14eace7efcSopenharmony_ci */ 15eace7efcSopenharmony_ci 16eace7efcSopenharmony_ci#include "mission.h" 17eace7efcSopenharmony_ci 18eace7efcSopenharmony_ci#include "mission_list.h" 19eace7efcSopenharmony_ci 20eace7efcSopenharmony_cinamespace OHOS { 21eace7efcSopenharmony_cinamespace AAFwk { 22eace7efcSopenharmony_ciMission::Mission(int32_t id, const std::shared_ptr<AbilityRecord> abilityRecord, const std::string &missionName, 23eace7efcSopenharmony_ci int32_t startMethod) 24eace7efcSopenharmony_ci : missionId_(id), startMethod_(startMethod), abilityRecord_(abilityRecord), missionName_(missionName) 25eace7efcSopenharmony_ci{ 26eace7efcSopenharmony_ci} 27eace7efcSopenharmony_ci 28eace7efcSopenharmony_ciMission::Mission(const std::shared_ptr<Mission> &mission) 29eace7efcSopenharmony_ci{ 30eace7efcSopenharmony_ci if (!mission) { 31eace7efcSopenharmony_ci return; 32eace7efcSopenharmony_ci } 33eace7efcSopenharmony_ci 34eace7efcSopenharmony_ci missionId_ = mission->missionId_; 35eace7efcSopenharmony_ci startMethod_ = mission->startMethod_; 36eace7efcSopenharmony_ci abilityRecord_ = mission->abilityRecord_; 37eace7efcSopenharmony_ci missionName_ = mission->missionName_; 38eace7efcSopenharmony_ci lockedState_ = mission->lockedState_; 39eace7efcSopenharmony_ci ownerMissionList_ = mission->ownerMissionList_; 40eace7efcSopenharmony_ci unclearable_ = mission->unclearable_; 41eace7efcSopenharmony_ci} 42eace7efcSopenharmony_ci 43eace7efcSopenharmony_ciMission::~Mission() 44eace7efcSopenharmony_ci{} 45eace7efcSopenharmony_ci 46eace7efcSopenharmony_cistd::shared_ptr<AbilityRecord> Mission::GetAbilityRecord() const 47eace7efcSopenharmony_ci{ 48eace7efcSopenharmony_ci return abilityRecord_; 49eace7efcSopenharmony_ci} 50eace7efcSopenharmony_ci 51eace7efcSopenharmony_ciint32_t Mission::GetMissionId() const 52eace7efcSopenharmony_ci{ 53eace7efcSopenharmony_ci return missionId_; 54eace7efcSopenharmony_ci} 55eace7efcSopenharmony_ci 56eace7efcSopenharmony_cibool Mission::IsSingletonAbility() const 57eace7efcSopenharmony_ci{ 58eace7efcSopenharmony_ci if (abilityRecord_) { 59eace7efcSopenharmony_ci return abilityRecord_->GetAbilityInfo().launchMode == AppExecFwk::LaunchMode::SINGLETON; 60eace7efcSopenharmony_ci } 61eace7efcSopenharmony_ci 62eace7efcSopenharmony_ci return false; 63eace7efcSopenharmony_ci} 64eace7efcSopenharmony_ci 65eace7efcSopenharmony_cibool Mission::IsSpecifiedAbility() const 66eace7efcSopenharmony_ci{ 67eace7efcSopenharmony_ci if (abilityRecord_) { 68eace7efcSopenharmony_ci return abilityRecord_->GetAbilityInfo().launchMode == AppExecFwk::LaunchMode::SPECIFIED; 69eace7efcSopenharmony_ci } 70eace7efcSopenharmony_ci 71eace7efcSopenharmony_ci return false; 72eace7efcSopenharmony_ci} 73eace7efcSopenharmony_ci 74eace7efcSopenharmony_cibool Mission::IsStandardAbility() const 75eace7efcSopenharmony_ci{ 76eace7efcSopenharmony_ci if (abilityRecord_) { 77eace7efcSopenharmony_ci return abilityRecord_->GetAbilityInfo().launchMode == AppExecFwk::LaunchMode::STANDARD; 78eace7efcSopenharmony_ci } 79eace7efcSopenharmony_ci 80eace7efcSopenharmony_ci return false; 81eace7efcSopenharmony_ci} 82eace7efcSopenharmony_ci 83eace7efcSopenharmony_civoid Mission::SetSpecifiedFlag(const std::string &flag) 84eace7efcSopenharmony_ci{ 85eace7efcSopenharmony_ci specifiedFlag_ = flag; 86eace7efcSopenharmony_ci} 87eace7efcSopenharmony_ci 88eace7efcSopenharmony_cistd::string Mission::GetSpecifiedFlag() const 89eace7efcSopenharmony_ci{ 90eace7efcSopenharmony_ci return specifiedFlag_; 91eace7efcSopenharmony_ci} 92eace7efcSopenharmony_ci 93eace7efcSopenharmony_cistd::shared_ptr<MissionList> Mission::GetMissionList() 94eace7efcSopenharmony_ci{ 95eace7efcSopenharmony_ci return ownerMissionList_.lock(); 96eace7efcSopenharmony_ci} 97eace7efcSopenharmony_ci 98eace7efcSopenharmony_cistd::string Mission::GetMissionName() const 99eace7efcSopenharmony_ci{ 100eace7efcSopenharmony_ci return missionName_; 101eace7efcSopenharmony_ci} 102eace7efcSopenharmony_ci 103eace7efcSopenharmony_civoid Mission::SetMissionList(const std::shared_ptr<MissionList> &missionList) 104eace7efcSopenharmony_ci{ 105eace7efcSopenharmony_ci ownerMissionList_ = missionList; 106eace7efcSopenharmony_ci} 107eace7efcSopenharmony_ci 108eace7efcSopenharmony_civoid Mission::SetLockedState(bool lockedState) 109eace7efcSopenharmony_ci{ 110eace7efcSopenharmony_ci lockedState_ = lockedState; 111eace7efcSopenharmony_ci} 112eace7efcSopenharmony_ci 113eace7efcSopenharmony_cibool Mission::IsLockedState() const 114eace7efcSopenharmony_ci{ 115eace7efcSopenharmony_ci return lockedState_; 116eace7efcSopenharmony_ci} 117eace7efcSopenharmony_ci 118eace7efcSopenharmony_civoid Mission::SetMovingState(bool movingState) 119eace7efcSopenharmony_ci{ 120eace7efcSopenharmony_ci isMovingToFront_ = movingState; 121eace7efcSopenharmony_ci} 122eace7efcSopenharmony_ci 123eace7efcSopenharmony_cibool Mission::IsMovingState() const 124eace7efcSopenharmony_ci{ 125eace7efcSopenharmony_ci return isMovingToFront_; 126eace7efcSopenharmony_ci} 127eace7efcSopenharmony_ci 128eace7efcSopenharmony_civoid Mission::SetANRState(bool state) 129eace7efcSopenharmony_ci{ 130eace7efcSopenharmony_ci isANRState_ = state; 131eace7efcSopenharmony_ci} 132eace7efcSopenharmony_ci 133eace7efcSopenharmony_cibool Mission::IsANRState() const 134eace7efcSopenharmony_ci{ 135eace7efcSopenharmony_ci return isANRState_; 136eace7efcSopenharmony_ci} 137eace7efcSopenharmony_ci 138eace7efcSopenharmony_civoid Mission::Dump(std::vector<std::string> &info) 139eace7efcSopenharmony_ci{ 140eace7efcSopenharmony_ci std::string dumpInfo = " Mission ID #" + std::to_string(missionId_); 141eace7efcSopenharmony_ci dumpInfo += " mission name #[" + missionName_ + "]" + " lockedState #" + std::to_string(lockedState_) 142eace7efcSopenharmony_ci + " ANR State #" + std::to_string(isANRState_); 143eace7efcSopenharmony_ci info.push_back(dumpInfo); 144eace7efcSopenharmony_ci if (abilityRecord_) { 145eace7efcSopenharmony_ci abilityRecord_->Dump(info); 146eace7efcSopenharmony_ci } 147eace7efcSopenharmony_ci} 148eace7efcSopenharmony_ci 149eace7efcSopenharmony_cibool Mission::IsStartByCall() 150eace7efcSopenharmony_ci{ 151eace7efcSopenharmony_ci return static_cast<int32_t>(StartMethod::START_CALL) == startMethod_; 152eace7efcSopenharmony_ci} 153eace7efcSopenharmony_ci 154eace7efcSopenharmony_cibool Mission::UpdateMissionId(int32_t id, int32_t method) 155eace7efcSopenharmony_ci{ 156eace7efcSopenharmony_ci if (method == startMethod_ && id > 0) { 157eace7efcSopenharmony_ci return false; 158eace7efcSopenharmony_ci } 159eace7efcSopenharmony_ci 160eace7efcSopenharmony_ci startMethod_ = method; 161eace7efcSopenharmony_ci missionId_ = id; 162eace7efcSopenharmony_ci return true; 163eace7efcSopenharmony_ci} 164eace7efcSopenharmony_ci} // namespace AAFwk 165eace7efcSopenharmony_ci} // namespace OHOS 166