/* * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef OHOS_ABILITY_RUNTIME_MISSION_INFO_MGR_H #define OHOS_ABILITY_RUNTIME_MISSION_INFO_MGR_H #include #include #include #include "cpp/mutex.h" #include "cpp/condition_variable.h" #include "ability_state.h" #include "inner_mission_info.h" #include "mission_listener_controller.h" #include "mission_snapshot.h" #include "snapshot.h" #include "task_data_persistence_mgr.h" namespace OHOS { namespace AAFwk { const int MIN_MISSION_ID = 1; const int MAX_MISSION_ID = INT_MAX; class MissionInfoMgr : public std::enable_shared_from_this { DECLARE_DELAYED_SINGLETON(MissionInfoMgr) public: /** * @brief generate mission id of mission info object. * @param missionId Indicates the missionInfo object of user to operate. * @return Returns true if the missionId is successfully generated; returns false otherwise. */ bool GenerateMissionId(int32_t &missionId); /** * @brief initialization of mission info manager. * @param userId Indicates the missionInfo object of user to operate. * @return Returns true if init successfully, returns false otherwise. */ bool Init(int userId); /** * @brief Add the mission info. * @param missionInfo Indicates the missionInfo object to be Added. * @return Returns true if the data is successfully saved; returns false otherwise. */ bool AddMissionInfo(const InnerMissionInfo &missionInfo); /** * @brief Update the mission info. * @param missionInfo Indicates the missionInfo object to be updated. * @return Returns true if the data is successfully saved; returns false otherwise. */ bool UpdateMissionInfo(const InnerMissionInfo &missionInfo); /** * @brief Delete the mission info corresponding to the mission Id. * @param missionId Indicates this mission id. * @return Returns true if the data is successfully deleted; returns false otherwise. */ bool DeleteMissionInfo(int missionId); /** * @brief Get all mission infos,sorted by time stamp. * @param numMax max num of missions. * @return ERR_OK if get success. */ int GetMissionInfos(int32_t numMax, std::vector &missionInfos); /** * @brief Get mission info by mission id. * @param missionId indicates this mission id. * @param missionInfo indicates the missionInfo object related to the missionId. * @return ERR_OK if get success; return else otherwise. */ int GetMissionInfoById(int32_t missionId, MissionInfo &missionInfo); /** * @brief Get inner mission info by mission id. * @param missionId indicates this mission id. * @param innerMissionInfo indicates the inner missionInfo object related to the missionId. * @return ERR_OK if get success; return else otherwise. */ int GetInnerMissionInfoById(int32_t missionId, InnerMissionInfo &innerMissionInfo); /** * @brief Try find reused mission info. * * @param missionName name of mission. * @param flag name of specified mission flag. * @param isFindRecentStandard find recent standard mission. * @param info found mission info. * @return true if success. */ bool FindReusedMissionInfo(const std::string &missionName, const std::string &flag, bool isFindRecentStandard, InnerMissionInfo &info); /** * @brief Delete all the mission info. * * @param listenerController The mission listener controller. */ bool DeleteAllMissionInfos(const std::shared_ptr &listenerController); /** * @brief Update mission continue state. * * @param missionId indicates this mission id. * @param state indicates this mission label. * @return 0 if success. */ int UpdateMissionContinueState(int32_t missionId, const AAFwk::ContinueState &state); /** * @brief Update mission label. * * @param missionId indicates this mission id. * @param label indicates this mission label. * @return 0 if success. */ int UpdateMissionLabel(int32_t missionId, const std::string& label); /** * @brief Set mission abilityState. * * @param missionId indicates this mission id. * @param abilityState indicates this mission abilityState. * @return 0 if success. */ void SetMissionAbilityState(int32_t missionId, AbilityState state); /** * @brief dump mission info * * @param info dump result. */ void Dump(std::vector &info); /** * @brief update mission snapshot * @param missionId mission id * @param abilityToken abilityToken to get current mission snapshot * @param missionSnapshot result of snapshot * @param isLowResolution low resolution snapshot. * @return return true if update mission snapshot success, else false */ bool UpdateMissionSnapshot(int32_t missionId, const sptr& abilityToken, MissionSnapshot& missionSnapshot, bool isLowResolution = false); /** * @brief update mission snapshot * @param missionId mission id * @param pixelMap The snapshot. * @param isPrivate Indicates whether the window is private window. */ void UpdateMissionSnapshot(int32_t missionId, const std::shared_ptr &pixelMap, bool isPrivate); #ifdef SUPPORT_GRAPHICS /** * @brief Get the Snapshot object * @param missionId Indicates this mission id. * @return Returns PixelMap of snapshot. */ std::shared_ptr GetSnapshot(int32_t missionId) const; #endif /** * @brief get the mission snapshot object * @param missionId mission id * @param abilityToken abilityToken to get current mission snapshot * @param missionSnapshot result of snapshot # @param isLowResolution low resolution. * @param force force get snapshot from window manager service. * @return true return true if get mission snapshot success, else false */ bool GetMissionSnapshot(int32_t missionId, const sptr& abilityToken, MissionSnapshot& missionSnapshot, bool isLowResolution, bool force = false); /** * @brief register snapshotHandler * @param handler the snapshotHandler */ void RegisterSnapshotHandler(const sptr& handler); void HandleUnInstallApp(const std::string &bundleName, int32_t uid, std::list &missions); void CompleteSaveSnapshot(int32_t missionId); private: /** * @brief Boot query mission info. * @return Returns true if this function is successfully called; returns false otherwise. */ bool LoadAllMissionInfo(); bool AddMissionInfoInner(const InnerMissionInfo &missionInfo); void GetMatchedMission(const std::string &bundleName, int32_t uid, std::list &missions); #ifdef SUPPORT_GRAPHICS void CreateWhitePixelMap(Snapshot &snapshot) const; #endif private: int32_t currentMissionId_ = MIN_MISSION_ID; std::unordered_map missionIdMap_; // key:distributed missionid, vaule: has been saved std::list missionInfoList_; std::shared_ptr taskDataPersistenceMgr_; sptr snapshotHandler_; mutable ffrt::mutex mutex_; std::unordered_map savingSnapshot_; ffrt::mutex savingSnapshotLock_; ffrt::condition_variable waitSavingCondition_; }; } // namespace AAFwk } // namespace OHOS #endif // OHOS_ABILITY_RUNTIME_MISSION_INFO_MGR_H