• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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_APP_EXIT_REASON_DATA_MANAGER_H
17 #define OHOS_ABILITY_RUNTIME_APP_EXIT_REASON_DATA_MANAGER_H
18 
19 #include <mutex>
20 #include <string>
21 #include <vector>
22 
23 #include "ability_util.h"
24 #include "distributed_kv_data_manager.h"
25 #include "singleton.h"
26 
27 namespace OHOS {
28 namespace AbilityRuntime {
29 class AppExitReasonDataManager : public DelayedSingleton<AppExitReasonDataManager> {
30 public:
31     AppExitReasonDataManager();
32 
33     virtual ~AppExitReasonDataManager();
34 
35     int32_t SetAppExitReason(
36         const std::string &bundleName, const std::vector<std::string> &abilityList, const AAFwk::Reason &reason);
37 
38     int32_t GetAppExitReason(
39         const std::string &bundleName, const std::string &abilityName, bool &isSetReason, AAFwk::Reason &reason);
40 
41     int32_t DeleteAppExitReason(const std::string &bundleName);
42 
43     int32_t AddAbilityRecoverInfo(const std::string &bundleName,
44         const std::string &moduleName, const std::string &abilityName, const int &sessionId);
45 
46     int32_t DeleteAbilityRecoverInfo(
47         const std::string &bundleName, const std::string &moduleName, const std::string &abilityName);
48 
49     int32_t GetAbilityRecoverInfo(const std::string &bundleName,
50         const std::string &moduleName, const std::string &abilityName, bool &hasRecoverInfo);
51 
52     int32_t GetAbilitySessionId(const std::string &bundleName,
53         const std::string &moduleName, const std::string &abilityName, int &sessionId);
54 
55 private:
56     DistributedKv::Status GetKvStore();
57     bool CheckKvStore();
58     DistributedKv::Value ConvertAppExitReasonInfoToValue(
59         const std::vector<std::string> &abilityList, const AAFwk::Reason &reason);
60     void ConvertAppExitReasonInfoFromValue(const DistributedKv::Value &value, AAFwk::Reason &reason,
61         int64_t &time_stamp, std::vector<std::string> &abilityList);
62     void UpdateAppExitReason(
63         const std::string &bundleName, const std::vector<std::string> &abilityList, const AAFwk::Reason &reason);
64     void InnerDeleteAppExitReason(const std::string &bundleName);
65 
66     void UpdateAbilityRecoverInfo(const std::string &bundleName,
67         const std::vector<std::string> &recoverInfoList, const std::vector<int> &sessionIdList);
68     DistributedKv::Value ConvertAbilityRecoverInfoToValue(
69         const std::vector<std::string> &recoverInfoList, const std::vector<int> &sessionIdList);
70     void ConvertAbilityRecoverInfoFromValue(
71         const DistributedKv::Value &value, std::vector<std::string> &recoverInfoList, std::vector<int> &sessionIdList);
72     void InnerDeleteAbilityRecoverInfo(const std::string &bundleName);
73 
74     const DistributedKv::AppId appId_ { "app_exit_reason_storage" };
75     const DistributedKv::StoreId storeId_ { "app_exit_reason_infos" };
76     DistributedKv::DistributedKvDataManager dataManager_;
77     std::shared_ptr<DistributedKv::SingleKvStore> kvStorePtr_;
78     mutable std::mutex kvStorePtrMutex_;
79 };
80 } // namespace AbilityRuntime
81 } // namespace OHOS
82 #endif // OHOS_ABILITY_RUNTIME_APP_EXIT_REASON_DATA_MANAGER_H