• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-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 #include "form_status_mgr.h"
17 #include "form_status_queue.h"
18 #include "fms_log_wrapper.h"
19 
20 namespace OHOS {
21 namespace AppExecFwk {
FormStatusMgr()22 FormStatusMgr::FormStatusMgr()
23 {
24     HILOG_DEBUG("create FormStatusMgr");
25 }
26 
~FormStatusMgr()27 FormStatusMgr::~FormStatusMgr()
28 {
29     HILOG_DEBUG("destroy FormStatusMgr");
30 }
31 
AddFormStatus(const int64_t formId,FormStatus formStatus)32 void FormStatusMgr::AddFormStatus(const int64_t formId, FormStatus formStatus)
33 {
34     std::unique_lock<std::shared_mutex> lock(formStatusMutex_);
35     formStatusMap_[formId] = formStatus;
36     HILOG_INFO("AddFormStatus formId:%{public}" PRId64 ", formStatus is %{public}d.", formId, (int)formStatus);
37 }
38 
DeleteFormStatus(const int64_t formId)39 void FormStatusMgr::DeleteFormStatus(const int64_t formId)
40 {
41     std::unique_lock<std::shared_mutex> lock(formStatusMutex_);
42     formStatusMap_.erase(formId);
43     HILOG_INFO("formStatusMap_ erase, formId:%{public}" PRId64 ". ", formId);
44 }
45 
GetFormStatus(const int64_t formId,FormStatus & formStatus)46 bool FormStatusMgr::GetFormStatus(const int64_t formId, FormStatus &formStatus)
47 {
48     FormStatus currentFormStatus;
49     {
50         std::shared_lock<std::shared_mutex> lock(formStatusMutex_);
51         auto iter = formStatusMap_.find(formId);
52         if (iter == formStatusMap_.end()) {
53             HILOG_ERROR("formStatusMap_ do not exist, formId:%{public}" PRId64 ". ", formId);
54             return false;
55         }
56         currentFormStatus = iter->second;
57     }
58     formStatus = currentFormStatus;
59     HILOG_INFO("GetFormStatus formId:%{public}" PRId64 ", formStatus is %{public}d.", formId, (int)formStatus);
60     return true;
61 }
62 
SetFormStatus(const int64_t formId,FormStatus formStatus)63 bool FormStatusMgr::SetFormStatus(const int64_t formId, FormStatus formStatus)
64 {
65     std::unique_lock<std::shared_mutex> lock(formStatusMutex_);
66     auto iter = formStatusMap_.find(formId);
67     if (iter == formStatusMap_.end()) {
68         HILOG_ERROR("formStatusMap_ do not exist, formId:%{public}" PRId64 ". ", formId);
69         return false;
70     }
71     iter->second = formStatus;
72     HILOG_INFO("SetFormStatus formId:%{public}" PRId64 ", formStatus is %{public}d.", formId, (int)formStatus);
73     return true;
74 }
75 
isProcessableFormStatus(const int64_t formId)76 bool FormStatusMgr::isProcessableFormStatus(const int64_t formId)
77 {
78     std::shared_lock<std::shared_mutex> lock(formStatusMutex_);
79     if (formStatusMap_.find(formId) == formStatusMap_.end()) {
80         HILOG_ERROR("formStatusMap_ do not exist, formId:%{public}" PRId64 ". ", formId);
81         return false;
82     }
83     if (formStatusMap_[formId] == FormStatus::RECOVERED) {
84         return true;
85     } else if (formStatusMap_[formId] == FormStatus::RECYCLED) {
86         return true;
87     } else {
88         return false;
89     }
90 }
91 
ResetFormStatus(const int64_t & formId)92 void FormStatusMgr::ResetFormStatus(const int64_t &formId)
93 {
94     if (isProcessableFormStatus(formId)) {
95         return;
96     }
97     HILOG_INFO("Reset formId:%{public}" PRId64 " status.", formId);
98     SetFormStatus(formId, FormStatus::RECOVERED);
99 }
100 
OnRenderFormDone(const int64_t & formId)101 void FormStatusMgr::OnRenderFormDone(const int64_t &formId)
102 {
103     SetFormStatus(formId, FormStatus::RECOVERED);
104     FormStatusQueue::GetInstance().PostFormCommandTaskByFormId(formId);
105 }
106 
OnRecoverFormDone(const int64_t & formId)107 void FormStatusMgr::OnRecoverFormDone(const int64_t &formId)
108 {
109     SetFormStatus(formId, FormStatus::RECOVERED);
110     FormStatusQueue::GetInstance().PostFormCommandTaskByFormId(formId);
111 }
112 
OnRecycleFormDone(const int64_t & formId)113 void FormStatusMgr::OnRecycleFormDone(const int64_t &formId)
114 {
115     SetFormStatus(formId, FormStatus::RECYCLED);
116     FormStatusQueue::GetInstance().PostFormCommandTaskByFormId(formId);
117 }
118 } // namespace AppExecFwk
119 } // namespace OHOS
120