1 /*
2  * Copyright (c) 2021-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 #ifndef OHOS_ABILITY_RUNTIME_MISSION_LIST_MANAGER_H
17 #define OHOS_ABILITY_RUNTIME_MISSION_LIST_MANAGER_H
18 
19 #include <list>
20 #include <mutex>
21 #include <queue>
22 #include <memory>
23 #include "cpp/mutex.h"
24 
25 #include "ability_running_info.h"
26 #include "mission_list.h"
27 #include "mission_list_manager_interface.h"
28 #include "mission_listener_controller.h"
29 #include "mission_info.h"
30 #include "mission_snapshot.h"
31 #include "snapshot.h"
32 #include "start_options.h"
33 #include "want.h"
34 #include "iability_info_callback.h"
35 
36 namespace OHOS {
37 namespace AAFwk {
38 class MissionListManager : public MissionListManagerInterface,
39                            public std::enable_shared_from_this<MissionListManager> {
40 public:
41     explicit MissionListManager(int userId);
42     virtual ~MissionListManager();
43 
44     /**
45      * init ability mission manager.
46      *
47      */
48     void Init() override;
49 
50     /**
51      * StartAbility with request.
52      *
53      * @param abilityRequest, the request of the service ability to start.
54      * @return Returns ERR_OK on success, others on failure.
55      */
56     int StartAbility(AbilityRequest &abilityRequest) override;
57 
58     /**
59      * MinimizeAbility, minimize the special ability.
60      *
61      * @param token, ability token.
62      * @param fromUser mark the minimize operation source.
63      * @return Returns ERR_OK on success, others on failure.
64      */
65     int MinimizeAbility(const sptr<IRemoteObject> &token, bool fromUser) override;
66 
67     int RegisterMissionListener(const sptr<IMissionListener> &listener) override;
68 
69     int UnRegisterMissionListener(const sptr<IMissionListener> &listener) override;
70 
71     int GetMissionInfos(int32_t numMax, std::vector<MissionInfo> &missionInfos) override;
72 
73     int GetMissionInfo(int32_t missionId, MissionInfo &missionInfo) override;
74 
75     int MoveMissionToFront(int32_t missionId, std::shared_ptr<StartOptions> startOptions = nullptr) override;
76 
77     int MoveMissionToFront(int32_t missionId, bool isCallerFromLauncher, bool isRecent,
78         std::shared_ptr<AbilityRecord> callerAbility, std::shared_ptr<StartOptions> startOptions = nullptr) override;
79 
80     void NotifyMissionFocused(int32_t missionId) override;
81 
82     void NotifyMissionUnfocused(int32_t missionId) override;
83 
84     /**
85      * OnAbilityRequestDone, app manager service call this interface after ability request done.
86      *
87      * @param token,ability's token.
88      * @param state,the state of ability lift cycle.
89      */
90     void OnAbilityRequestDone(const sptr<IRemoteObject> &token, int32_t state) override;
91 
92     void OnAppStateChanged(const AppInfo &info) override;
93 
94     /**
95      * attach ability thread ipc object.
96      *
97      * @param scheduler, ability thread ipc object.
98      * @param token, the token of ability.
99      * @return Returns ERR_OK on success, others on failure.
100      */
101     int AttachAbilityThread(const sptr<AAFwk::IAbilityScheduler> &scheduler,
102         const sptr<IRemoteObject> &token) override;
103 
104     /**
105      * start waiting ability.
106      */
107     void StartWaitingAbility();
108 
109     /**
110      * @brief Get the Ability Record By Token object
111      *
112      * @param token the search token
113      * @return std::shared_ptr<AbilityRecord> the AbilityRecord of the token
114      */
115     std::shared_ptr<AbilityRecord> GetAbilityRecordByToken(const sptr<IRemoteObject> &token) override;
116 
117     /**
118      * @brief Get the Mission By Id object
119      *
120      * @param missionId the given missionId
121      * @return the mission of the given id
122      */
123     std::shared_ptr<Mission> GetMissionById(int missionId) const;
124 
125     /**
126      * @brief Move ability to background with the given abilityRecord
127      *
128      * @param abilityRecord the ability to move
129      * @return int error code
130      */
131     int MoveAbilityToBackground(const std::shared_ptr<AbilityRecord> &abilityRecord) override;
132 
133     /**
134      * @brief Back to caller ability with result
135      *
136      * @param abilityRecord the ability to move
137      * @param resultCode result code
138      * @param resultWant result want
139      * @param callerRequestCode request code of caller
140      * @return int error code
141      */
142     int32_t BackToCallerAbilityWithResult(std::shared_ptr<AbilityRecord> abilityRecord,
143         int32_t resultCode, const Want *resultWant, int64_t callerRequestCode) override;
144 
145     /**
146      * @brief Terminate ability with the given abilityRecord
147      *
148      * @param abilityRecord the ability to terminate
149      * @param resultCode the terminate data
150      * @param resultWant the terminate data
151      * @param flag mark terminate flag
152      * @return int error code
153      */
154     int TerminateAbility(const std::shared_ptr<AbilityRecord> &abilityRecord,
155         int resultCode, const Want *resultWant, bool flag) override;
156 
157     /**
158      * @brief remove the mission list from the mission list manager
159      *
160      * @param MissionList the mission list need to remove
161      */
162     void RemoveMissionList(const std::shared_ptr<MissionList> &MissionList);
163 
164     /**
165      * @brief execute after the ability schedule the lifecycle
166      *
167      * @param token the ability token
168      * @param state the ability state
169      * @param saveData the saved data
170      * @return execute error code
171      */
172     int AbilityTransactionDone(const sptr<IRemoteObject> &token, int state, const PacMap &saveData) override;
173 
174     /**
175      * @brief search the ability from terminating list
176      *
177      * @param token the ability token
178      * @return the ability need to terminate
179      */
180     std::shared_ptr<AbilityRecord> GetAbilityFromTerminateList(const sptr<IRemoteObject> &token) override;
181 
182     /**
183      * @brief clear the mission with the given id
184      *
185      * @param missionId the mission need to delete
186      * @return int error code
187      */
188     int ClearMission(int missionId) override;
189 
190     /**
191      * @brief clear all the missions
192      *
193      * @return int error code
194      */
195     int ClearAllMissions() override;
196 
197     void ClearAllMissionsLocked(std::list<std::shared_ptr<Mission>> &missionList,
198         std::list<std::shared_ptr<Mission>> &foregroundAbilities, bool searchActive);
199 
200     /**
201      * @brief Set the Mission Locked State object
202      *
203      * @param missionId the id of the mission
204      * @return int error code
205      */
206     int SetMissionLockedState(int missionId, bool lockedState) override;
207 
208     /**
209      * @brief schedule to background
210      *
211      * @param abilityRecord the ability to move
212      */
213     void MoveToBackgroundTask(const std::shared_ptr<AbilityRecord> &abilityRecord, bool isClose = false);
214 
215     /**
216      * @brief handle time out event
217      *
218      * @param msgId the msg id in ability record
219      * @param abilityRecordId the id of ability record
220      * @param isHalf is half
221      */
222     void OnTimeOut(uint32_t msgId, int64_t abilityRecordId, bool isHalf = false) override;
223 
224     /**
225      * @brief handle when ability died
226      *
227      * @param abilityRecord the died ability
228      */
229     void OnAbilityDied(std::shared_ptr<AbilityRecord> abilityRecord, int32_t currentUserId) override;
230 
231     /**
232      * @brief handle when call connection died
233      *
234      * @param callRecord the died call connection
235      */
236     void OnCallConnectDied(const std::shared_ptr<CallRecord> &callRecord) override;
237 
238      /**
239      * Get mission id by target ability token.
240      *
241      * @param token target ability token.
242      * @return the missionId of target mission.
243      */
244     int32_t GetMissionIdByAbilityToken(const sptr<IRemoteObject> &token) override;
245 
246     /**
247      * Get ability token by target mission id.
248      *
249      * @param missionId target missionId.
250      * @return the ability token of target mission.
251      */
252     sptr<IRemoteObject> GetAbilityTokenByMissionId(int32_t missionId) override;
253     std::shared_ptr<AbilityRecord> GetAbilityRecordByMissionId(int32_t missionId) override;
254 
255     /**
256      * @brief dump all abilities
257      *
258      * @param info dump result.
259      */
260     void Dump(std::vector<std::string>& info) override;
261 
262     /**
263      * @brief dump mission list
264      *
265      * @param info dump result.
266      */
267     void DumpMissionList(std::vector<std::string> &info, bool isClient, const std::string &args = "") override;
268 
269     /**
270      * @brief dump mission list by id with params
271      *
272      * @param info dump result.
273      * @param params dump params.
274      */
275     void DumpMissionListByRecordId(std::vector<std::string>& info, bool isClient, int32_t abilityRecordId,
276         const std::vector<std::string>& params) override;
277 
278     /**
279      * @brief dump mission by id
280      *
281      * @param info dump result.
282      */
283     void DumpMission(int missionId, std::vector<std::string> &info) override;
284 
285     /**
286      * @brief dump mission infos
287      *
288      * @param info dump result.
289      */
290     void DumpMissionInfos(std::vector<std::string> &info) override;
291 
292     void OnAcceptWantResponse(const AAFwk::Want &want, const std::string &flag) override;
293 
294     void OnStartSpecifiedAbilityTimeoutResponse(const AAFwk::Want &want) override;
295     /**
296      * resolve the call ipc of ability for scheduling oncall.
297      *
298      * @param abilityRequest, target ability request.
299      */
300     int ResolveLocked(const AbilityRequest &abilityRequest) override;
301 
302     /**
303      * release the connection of this call.
304      *
305      * @param connect, caller callback ipc.
306      * @param element, target ability name.
307      */
308     int ReleaseCallLocked(const sptr<IAbilityConnection> &connect, const AppExecFwk::ElementName &element) override;
309     /**
310      * @brief register snapshotHandler
311      * @param handler the snapshotHandler
312      */
313     void RegisterSnapshotHandler(const sptr<ISnapshotHandler>& handler) override;
314 
315     /**
316      * @brief Get the Mission Snapshot object
317      * @param missionId mission id
318      * @param abilityToken abilityToken to get current mission snapshot
319      * @param missionSnapshot result of snapshot
320      * @param isLowResolution low resolution.
321      * @return Returns true on success, false on failure.
322      */
323     bool GetMissionSnapshot(int32_t missionId, const sptr<IRemoteObject>& abilityToken,
324         MissionSnapshot& missionSnapshot, bool isLowResolution) override;
325     void GetAbilityRunningInfos(std::vector<AbilityRunningInfo> &info, bool isPerm) override;
326 
327     /**
328      * Called to update mission snapshot.
329      * @param token The target ability.
330      * @param pixelMap The snapshot.
331      */
332     void UpdateSnapShot(const sptr<IRemoteObject> &token, const std::shared_ptr<Media::PixelMap> &pixelMap) override;
333 
334     /**
335      * Get ability number.
336      * @param element type of ElementName.
337      * @return ability number.
338      */
339     int32_t GetAbilityNumber(const AppExecFwk::ElementName &element) const;
340 
341     void EnableRecoverAbility(int32_t missionId) override;
342 
343     void UninstallApp(const std::string &bundleName, int32_t uid) override;
344 
345     bool IsStarted() override;
346     void PauseManager() override;
347     void ResumeManager() override;
348 
349     void SetMissionANRStateByTokens(const std::vector<sptr<IRemoteObject>> &tokens);
350 
351     int32_t IsValidMissionIds(const std::vector<int32_t> &missionIds,
352         std::vector<MissionValidResult> &results) override;
353 
354     int DoAbilityForeground(std::shared_ptr<AbilityRecord> &abilityRecord, uint32_t flag) override;
355 
356     void GetActiveAbilityList(int32_t uid, std::vector<std::string> &abilityList, int32_t pid = NO_PID) override;
357 
358     void CallRequestDone(const std::shared_ptr<AbilityRecord> &abilityRecord,
359         const sptr<IRemoteObject> &callStub) override;
360 
361     int SetMissionContinueState(const sptr<IRemoteObject> &token, int32_t missionId,
362         const AAFwk::ContinueState &state) override;
363 
364     bool IsAbilityStarted(AbilityRequest &abilityRequest, std::shared_ptr<AbilityRecord> &targetRecord) override;
365 
366     void SignRestartAppFlag(int32_t uid) override;
367 
368     void SetAnimationFlag(bool IsAnimationEnabled);
369 #ifdef SUPPORT_GRAPHICS
370 public:
371     /**
372      * Set mission label of this ability.
373      *
374      * @param abilityToken target ability token.
375      * @param label target label.
376      * @return Return 0 if success.
377      */
378     int SetMissionLabel(const sptr<IRemoteObject> &abilityToken, const std::string &label) override;
379 
380     /**
381      * Set mission icon of this ability.
382      *
383      * @param token target ability token.
384      * @param icon target label.
385      * @return Return 0 if success.
386      */
387     int SetMissionIcon(const sptr<IRemoteObject> &token, const std::shared_ptr<Media::PixelMap> &icon) override;
388 
389     void CompleteFirstFrameDrawing(const sptr<IRemoteObject> &abilityToken) override;
390 
391     void PostMissionLabelUpdateTask(int missionId) const;
392 
393     void UpdateAbilityRecordColdStartFlag(const AppInfo& info, bool isColdStart);
394 
395 private:
396     Closure GetCancelStartingWindowTask(const std::shared_ptr<AbilityRecord> &abilityRecord) const;
397     void PostCancelStartingWindowTask(const std::shared_ptr<AbilityRecord> &abilityRecord) const;
398     void InitPrepareTerminateConfig();
399 #endif
400 
401 private:
402     void AddRecord(const AbilityRequest &abilityRequest, std::shared_ptr<AbilityRecord> &targetAbilityRecord);
403     int GetTargetMission(const AbilityRequest &abilityRequest, std::shared_ptr<Mission> &targetMission,
404         std::shared_ptr<AbilityRecord> &targetAbilityRecord);
405     int StartAbilityLocked(const std::shared_ptr<AbilityRecord> &currentTopAbility,
406         const std::shared_ptr<AbilityRecord> &callerAbility, const AbilityRequest &abilityRequest);
407     int StartAbility(const std::shared_ptr<AbilityRecord> &currentTopAbility,
408         const std::shared_ptr<AbilityRecord> &callerAbility, const AbilityRequest &abilityRequest);
409     int MinimizeAbilityLocked(const std::shared_ptr<AbilityRecord> &abilityRecord, bool fromUser);
410     std::shared_ptr<AbilityRecord> GetCurrentTopAbilityLocked() const;
411     std::shared_ptr<MissionList> GetTargetMissionList(
412         const std::shared_ptr<AbilityRecord> &callerAbility, const AbilityRequest &abilityRequest);
413     std::shared_ptr<MissionList> GetTargetMissionListByLauncher(const AbilityRequest &abilityRequest);
414     std::shared_ptr<MissionList> GetTargetMissionListByDefault(
415         const std::shared_ptr<AbilityRecord> &callerAbility, const AbilityRequest &abilityRequest);
416     std::shared_ptr<Mission> GetReusedMission(const AbilityRequest &abilityRequest);
417     std::shared_ptr<Mission> GetReusedSpecifiedMission(const AbilityRequest &abilityRequest);
418     std::shared_ptr<Mission> GetReusedStandardMission(const AbilityRequest &abilityRequest);
419     void GetTargetMissionAndAbility(const AbilityRequest &abilityRequest, std::shared_ptr<Mission> &targetMission,
420         std::shared_ptr<AbilityRecord> &targetRecord, bool &isReachToLimit);
421     bool HandleReusedMissionAndAbility(const AbilityRequest &abilityRequest, std::shared_ptr<Mission> &targetMission,
422         std::shared_ptr<AbilityRecord> &targetRecord);
423     std::string GetMissionName(const AbilityRequest &abilityRequest) const;
424     bool CreateOrReusedMissionInfo(const AbilityRequest &abilityRequest, InnerMissionInfo &info) const;
425     void MoveMissionToTargetList(bool isCallFromLauncher,
426         const std::shared_ptr<MissionList> &targetMissionList,
427         const std::shared_ptr<Mission> &mission);
428     void MoveMissionListToTop(const std::shared_ptr<MissionList> &missionList);
429     void MoveNoneTopMissionToDefaultList(const std::shared_ptr<Mission> &mission);
430     void PrintTimeOutLog(const std::shared_ptr<AbilityRecord> &ability, uint32_t msgId, bool isHalf = false);
431 
432     int DispatchState(const std::shared_ptr<AbilityRecord> &abilityRecord, int state);
433     int DispatchForeground(const std::shared_ptr<AbilityRecord> &abilityRecord, bool success,
434         AbilityState state = AbilityState::INITIAL);
435     int DispatchTerminate(const std::shared_ptr<AbilityRecord> &abilityRecord);
436     int DispatchBackground(const std::shared_ptr<AbilityRecord> &abilityRecord);
437     void CompleteForegroundSuccess(const std::shared_ptr<AbilityRecord> &abilityRecord);
438     void CompleteTerminate(const std::shared_ptr<AbilityRecord> &abilityRecord);
439     void DelayCompleteTerminate(const std::shared_ptr<AbilityRecord> &abilityRecord);
440     void CompleteBackground(const std::shared_ptr<AbilityRecord> &abilityRecord);
441     void CompleteTerminateAndUpdateMission(const std::shared_ptr<AbilityRecord> &abilityRecord);
442     bool RemoveMissionList(const std::list<std::shared_ptr<MissionList>> lists,
443         const std::shared_ptr<MissionList> &list);
444     int ClearMissionLocked(int missionId, const std::shared_ptr<Mission> &mission);
445     int ClearMissionLocking(int missionId, const std::shared_ptr<Mission> &mission);
446     int MoveAbilityToBackgroundLocked(const std::shared_ptr<AbilityRecord> &abilityRecord,
447         const std::shared_ptr<AbilityRecord> &specifiedNextRecord = nullptr);
448     void RemoveBackgroundingAbility(const std::shared_ptr<AbilityRecord> &abilityRecord);
449     int TerminateAbilityLocked(const std::shared_ptr<AbilityRecord> &abilityRecord, bool flag);
450     /**
451      * @brief remove the mission from the mission list
452      *
453      * @param abilityRecord the ability need to remove
454      * @param flag mark is terminate or close
455      */
456     void RemoveTerminatingAbility(const std::shared_ptr<AbilityRecord> &abilityRecord, bool flag);
457     std::shared_ptr<AbilityRecord> GetAbilityRecordById(int64_t abilityRecordId) const;
458     std::shared_ptr<AbilityRecord> GetAbilityRecordByCaller(
459         const std::shared_ptr<AbilityRecord> &caller, int requestCode);
460     std::shared_ptr<MissionList> GetTargetMissionList(int missionId, std::shared_ptr<Mission> &mission,
461         bool &isReachToLimit);
462     void PostStartWaitingAbility();
463     void HandleAbilityDied(std::shared_ptr<AbilityRecord> abilityRecord);
464     void HandleLauncherDied(std::shared_ptr<AbilityRecord> ability);
465     void HandleAbilityDiedByDefault(std::shared_ptr<AbilityRecord> abilityRecord);
466     void DelayedStartLauncher();
467     void BackToLauncher();
468     void GetAllForegroundAbilities(std::list<std::shared_ptr<AbilityRecord>>& foregroundList);
469     void GetForegroundAbilities(const std::shared_ptr<MissionList>& missionList,
470         std::list<std::shared_ptr<AbilityRecord>>& foregroundList);
471     std::shared_ptr<Mission> GetMissionBySpecifiedFlag(const AAFwk::Want &want, const std::string &flag) const;
472     bool IsReachToSingleLimitLocked(const int32_t uid) const;
473     bool IsReachToLimitLocked() const;
474     bool CheckSingleLimit(const AbilityRequest &abilityRequest);
475     bool CheckLimit();
476     std::shared_ptr<Mission> FindEarliestMission() const;
477     int32_t GetMissionCount() const;
478 
479     // handle timeout event
480     void HandleLoadTimeout(const std::shared_ptr<AbilityRecord> &ability);
481     void HandleForegroundTimeout(const std::shared_ptr<AbilityRecord> &ability,
482         AbilityState state = AbilityState::INITIAL);
483     void HandleTimeoutAndResumeAbility(const std::shared_ptr<AbilityRecord> &ability,
484         AbilityState state = AbilityState::INITIAL);
485     void MoveToTerminateList(const std::shared_ptr<AbilityRecord> &ability);
486     void DelayedResumeTimeout(const std::shared_ptr<AbilityRecord> &callerAbility);
487     void BackToCaller(const std::shared_ptr<AbilityRecord> &callerAbility);
488 
489     // new version for call inner function.
490     void CompleteForegroundFailed(const std::shared_ptr<AbilityRecord> &abilityRecord, AbilityState state);
491     int ResolveAbility(const std::shared_ptr<AbilityRecord> &targetAbility, const AbilityRequest &abilityRequest);
492     std::shared_ptr<AbilityRecord> GetAbilityRecordByName(const AppExecFwk::ElementName &element);
493     std::shared_ptr<AbilityRecord> GetAbilityRecordByNameFromCurrentMissionLists(
494         const AppExecFwk::ElementName &element) const;
495     std::vector<std::shared_ptr<AbilityRecord>> GetAbilityRecordsByName(const AppExecFwk::ElementName &element);
496     int CallAbilityLocked(const AbilityRequest &abilityRequest);
497     void UpdateMissionSnapshot(const std::shared_ptr<AbilityRecord> &abilityRecord) const;
498     void AddUninstallTags(const std::string &bundleName, int32_t uid);
499     void EraseWaitingAbility(const std::string &bundleName, int32_t uid);
500     void RemoveMissionLocked(int32_t missionId, bool excludeFromMissions);
501     void TerminatePreviousAbility(const std::shared_ptr<AbilityRecord> &abilityRecord);
502     void NotifyMissionCreated(const std::shared_ptr<AbilityRecord> &abilityRecord) const;
503     bool IsExcludeFromMissions(const std::shared_ptr<Mission> &mission);
504     void BuildInnerMissionInfo(InnerMissionInfo &info, const std::string &missionName,
505         const AbilityRequest &abilityRequest) const;
506     void NotifyStartSpecifiedAbility(AbilityRequest &request, const AAFwk::Want &want);
507     void NotifyRestartSpecifiedAbility(AbilityRequest &request, const sptr<IRemoteObject> &token);
508     void ProcessPreload(const std::shared_ptr<AbilityRecord> &record) const;
509     bool UpdateAbilityRecordLaunchReason(
510         const AbilityRequest &abilityRequest, std::shared_ptr<AbilityRecord> &targetAbilityRecord);
511     std::shared_ptr<AbilityRecord> GetAliveAbilityRecordByToken(const sptr<IRemoteObject> &token) const;
512     void NotifyAbilityToken(const sptr<IRemoteObject> &token, const AbilityRequest &abilityRequest);
513     void NotifyStartAbilityResult(const AbilityRequest &abilityRequest, int result);
514     int MoveMissionToFrontInner(int32_t missionId, bool isCallerFromLauncher, bool isRecent,
515         std::shared_ptr<AbilityRecord> callerAbility, std::shared_ptr<StartOptions> startOptions = nullptr);
516     /**
517      * push waiting ability to queue.
518      *
519      * @param abilityRequest, the request of ability.
520      */
521     void EnqueueWaitingAbility(const AbilityRequest &abilityRequest);
522 
523     /**
524      * push front waiting ability to queue.
525      *
526      * @param abilityRequest, the request of ability.
527      */
528     void EnqueueWaitingAbilityToFront(const AbilityRequest &abilityRequest);
529     std::shared_ptr<AbilityRecord> GetAbilityRecordByTokenInner(const sptr<IRemoteObject> &token) const;
530     int TerminateAbilityInner(const std::shared_ptr<AbilityRecord> &abilityRecord,
531         int resultCode, const Want *resultWant, bool flag);
532     int32_t GetMissionIdByAbilityTokenInner(const sptr<IRemoteObject> &token);
533     std::shared_ptr<AbilityRecord> GetAbilityFromTerminateListInner(const sptr<IRemoteObject> &token);
534     void SetLastExitReason(std::shared_ptr<AbilityRecord> &abilityRecord);
535     bool IsAppLastAbility(const std::shared_ptr<AbilityRecord> &abilityRecord);
536     std::shared_ptr<MissionList> GetMissionList(int32_t missionId);
537     int PrepareClearMissionLocked(int missionId, const std::shared_ptr<Mission> &mission);
538 
539     bool CheckPrepareTerminateEnable(const std::shared_ptr<Mission> &mission);
540 
541     bool GetContentAndTypeId(uint32_t msgId, std::string &msgContent, int &typeId) const;
542 
543     void SendKeyEvent(const AbilityRequest &abilityRequest);
544 
545     int userId_;
546     mutable ffrt::mutex managerLock_;
547     // launcher list is also in currentMissionLists_
548     std::list<std::shared_ptr<MissionList>> currentMissionLists_;
549     // only manager the ability of standard in the default list
550     std::shared_ptr<MissionList> defaultStandardList_;
551     // only manager the ability of singleton in the default list for the fast search
552     std::shared_ptr<MissionList> defaultSingleList_;
553     std::shared_ptr<MissionList> launcherList_;
554     std::list<std::shared_ptr<AbilityRecord>> terminateAbilityList_;
555 
556     std::queue<AbilityRequest> waitingAbilityQueue_;
557     std::shared_ptr<MissionListenerController> listenerController_;
558     bool isPrepareTerminateEnable_ = false;
559 };
560 }  // namespace AAFwk
561 }  // namespace OHOS
562 #endif  // OHOS_ABILITY_RUNTIME_MISSION_LIST_MANAGER_H
563