• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "lock_mission_container.h"
17 
18 #include "hilog_wrapper.h"
19 
20 namespace OHOS {
21 namespace AAFwk {
IsLockedMissionState() const22 bool LockMissionContainer::IsLockedMissionState() const
23 {
24     return lockState_ != LockMissionState::LOCK_MISSION_STATE_NONE;
25 }
26 
GetLockedMissionState() const27 int LockMissionContainer::GetLockedMissionState() const
28 {
29     return lockState_;
30 }
31 
SetLockedMission(const std::shared_ptr<MissionRecord> & mission,int lockerUid,bool isSystemApp)32 bool LockMissionContainer::SetLockedMission(
33     const std::shared_ptr<MissionRecord> &mission, int lockerUid, bool isSystemApp)
34 {
35     auto lockMission = lockMission_.lock();
36     if (lockMission) {
37         HILOG_WARN("It already exists lock mission , deny lock request. locked mission id :%{public}d, name : "
38                    "%{public}s ,request mission id :%{public}d, name : %{public}s",
39             lockMission->GetMissionRecordId(),
40             lockMission->GetName().c_str(),
41             mission->GetMissionRecordId(),
42             mission->GetName().c_str());
43         return false;
44     }
45 
46     HILOG_INFO("lock mission ID: %{public}d , name : %{public}s lockerUid : %{public}d",
47         mission->GetMissionRecordId(),
48         mission->GetName().c_str(),
49         lockerUid);
50     lockMission_ = mission;
51     lockerUid_ = lockerUid;
52     lockState_ =
53         isSystemApp ? LockMissionState::LOCK_MISSION_STATE_PINNED : LockMissionState::LOCK_MISSION_STATE_LOCKED;
54     return true;
55 }
56 
ReleaseLockedMission(const std::shared_ptr<MissionRecord> & mission,int callerUid,bool isForce)57 bool LockMissionContainer::ReleaseLockedMission(
58     const std::shared_ptr<MissionRecord> &mission, int callerUid, bool isForce)
59 {
60     auto lockMission = lockMission_.lock();
61     if (lockMission == nullptr) {
62         HILOG_WARN("There is no locked mission. release locked mission fail.");
63         return false;
64     }
65 
66     if (isForce && lockMission == mission) {
67         HILOG_INFO("release lock mission ID: %{public}d , name : %{public}s lockerUid : %{public}d",
68             lockMission->GetMissionRecordId(),
69             lockMission->GetName().c_str(),
70             lockerUid_);
71         Clear();
72         return true;
73     }
74 
75     if (callerUid != lockerUid_) {
76         HILOG_WARN("caller uid not equal to locker uid. release locked mission fail.");
77         return false;
78     }
79 
80     if (mission != lockMission) {
81         HILOG_WARN("unlock mission not equal to locked mission. release locked mission fail.");
82         return false;
83     }
84 
85     HILOG_INFO("Normal release lock mission ID: %{public}d , name : %{public}s lockerUid : %{public}d",
86         lockMission->GetMissionRecordId(),
87         lockMission->GetName().c_str(),
88         lockerUid_);
89 
90     Clear();
91     return true;
92 }
93 
IsSameLockedMission(std::string bundleName) const94 bool LockMissionContainer::IsSameLockedMission(std::string bundleName) const
95 {
96     auto lockMission = lockMission_.lock();
97     if (lockMission == nullptr) {
98         HILOG_WARN("There is no locked mission. release locked mission fail.");
99         return false;
100     }
101     return lockMission->GetName() == bundleName;
102 }
103 
Clear()104 void LockMissionContainer::Clear()
105 {
106     lockMission_.reset();
107     lockerUid_ = -1;
108     lockState_ = LockMissionState::LOCK_MISSION_STATE_NONE;
109 }
110 
GetLockMission()111 std::shared_ptr<MissionRecord> LockMissionContainer::GetLockMission()
112 {
113     return lockMission_.lock();
114 }
115 }  // namespace AAFwk
116 }  // namespace OHOS