• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "status_mgr_center/form_render_status_table.h"
17 #include <unordered_map>
18 #include "fms_log_wrapper.h"
19 #include "form_status_print.h"
20 
21 namespace OHOS {
22 namespace AppExecFwk {
23 namespace {
24 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_INIT = {
25     // INIT
26     {
27         FormFsmStatus::INIT,
28         FormFsmEvent::RENDER_FORM,
29         FormFsmStatus::RENDERING,
30         FormFsmProcessType::PROCESS_TASK_DIRECT,
31     },
32     {
33         FormFsmStatus::INIT,
34         FormFsmEvent::RECYCLE_DATA,
35         FormFsmStatus::RECYCLING_DATA,
36         FormFsmProcessType::PROCESS_TASK_DIRECT,
37     },
38     {
39         FormFsmStatus::INIT,
40         FormFsmEvent::RECYCLE_FORM,
41         FormFsmStatus::RECYCLING,
42         FormFsmProcessType::PROCESS_TASK_DIRECT,
43     },
44     {
45         FormFsmStatus::INIT,
46         FormFsmEvent::DELETE_FORM,
47         FormFsmStatus::DELETING,
48         FormFsmProcessType::PROCESS_TASK_DIRECT,
49     },
50 };
51 
52 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_RENDERING = {
53     // RENDERING
54     {
55         FormFsmStatus::RENDERING,
56         FormFsmEvent::RENDER_FORM_DONE,
57         FormFsmStatus::RENDERED,
58         FormFsmProcessType::PROCESS_TASK_DIRECT,
59     },
60     {
61         FormFsmStatus::RENDERING,
62         FormFsmEvent::RENDER_FORM_FAIL,
63         FormFsmStatus::UNPROCESSABLE,
64         FormFsmProcessType::PROCESS_TASK_DIRECT,
65     },
66 };
67 
68 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_RENDERED = {
69     // RENDERED
70     {
71         FormFsmStatus::RENDERED,
72         FormFsmEvent::RENDER_FORM,
73         FormFsmStatus::RENDERING,
74         FormFsmProcessType::PROCESS_TASK_DIRECT,
75     },
76     {
77         FormFsmStatus::RENDERED,
78         FormFsmEvent::RECYCLE_DATA,
79         FormFsmStatus::RECYCLING_DATA,
80         FormFsmProcessType::PROCESS_TASK_DIRECT,
81     },
82     {
83         FormFsmStatus::RENDERED,
84         FormFsmEvent::RECYCLE_FORM,
85         FormFsmStatus::RECYCLING,
86         FormFsmProcessType::PROCESS_TASK_DIRECT,
87     },
88     {
89         FormFsmStatus::RENDERED,
90         FormFsmEvent::DELETE_FORM,
91         FormFsmStatus::DELETING,
92         FormFsmProcessType::PROCESS_TASK_DIRECT,
93     },
94 };
95 
96 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_RECYCLED = {
97     // RECYCLED
98     {
99         FormFsmStatus::RECYCLED,
100         FormFsmEvent::RENDER_FORM,
101         FormFsmStatus::RENDERING,
102         FormFsmProcessType::PROCESS_TASK_DIRECT,
103     },
104     {
105         FormFsmStatus::RECYCLED,
106         FormFsmEvent::RECYCLE_FORM,
107         FormFsmStatus::RECYCLING,
108         FormFsmProcessType::PROCESS_TASK_DIRECT,
109     },
110     {
111         FormFsmStatus::RECYCLED,
112         FormFsmEvent::RECOVER_FORM,
113         FormFsmStatus::RECOVERING,
114         FormFsmProcessType::PROCESS_TASK_DIRECT,
115     },
116     {
117         FormFsmStatus::RECYCLED,
118         FormFsmEvent::DELETE_FORM,
119         FormFsmStatus::DELETING,
120         FormFsmProcessType::PROCESS_TASK_DIRECT,
121     },
122 };
123 
124 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_RECYCLING_DATA = {
125     // RECYCLING_DATA
126     {
127         FormFsmStatus::RECYCLING_DATA,
128         FormFsmEvent::RECYCLE_DATA_DONE,
129         FormFsmStatus::RECYCLING_DATA,
130         FormFsmProcessType::PROCESS_TASK_DIRECT,
131     },
132     {
133         FormFsmStatus::RECYCLING_DATA,
134         FormFsmEvent::RECYCLE_DATA_FAIL,
135         FormFsmStatus::RENDERED,
136         FormFsmProcessType::PROCESS_TASK_DIRECT,
137     },
138     {
139         FormFsmStatus::RECYCLING_DATA,
140         FormFsmEvent::RECYCLE_FORM,
141         FormFsmStatus::RECYCLING,
142         FormFsmProcessType::PROCESS_TASK_DIRECT,
143     },
144 };
145 
146 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_RECYCLING = {
147     // RECYCLING
148     {
149         FormFsmStatus::RECYCLING,
150         FormFsmEvent::RECYCLE_FORM_DONE,
151         FormFsmStatus::RECYCLED,
152         FormFsmProcessType::PROCESS_TASK_DIRECT,
153     },
154     {
155         FormFsmStatus::RECYCLING,
156         FormFsmEvent::RECYCLE_FORM_FAIL,
157         FormFsmStatus::UNPROCESSABLE,
158         FormFsmProcessType::PROCESS_TASK_DIRECT,
159     },
160 };
161 
162 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_RECOVERING = {
163     // RECOVERING
164     {
165         FormFsmStatus::RECOVERING,
166         FormFsmEvent::RECOVER_FORM_DONE,
167         FormFsmStatus::RENDERED,
168         FormFsmProcessType::PROCESS_TASK_DIRECT,
169     },
170     {
171         FormFsmStatus::RECOVERING,
172         FormFsmEvent::RECOVER_FORM_FAIL,
173         FormFsmStatus::UNPROCESSABLE,
174         FormFsmProcessType::PROCESS_TASK_DIRECT,
175     },
176 };
177 
178 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_DELETING = {
179     // DELETING
180     {
181         FormFsmStatus::DELETING,
182         FormFsmEvent::DELETE_FORM_DONE,
183         FormFsmStatus::RENDERED,
184         FormFsmProcessType::PROCESS_TASK_DIRECT,
185     },
186     {
187         FormFsmStatus::DELETING,
188         FormFsmEvent::DELETE_FORM_FAIL,
189         FormFsmStatus::UNPROCESSABLE,
190         FormFsmProcessType::PROCESS_TASK_DIRECT,
191     },
192     {
193         FormFsmStatus::DELETING,
194         FormFsmEvent::DELETE_FORM_FINISH,
195         FormFsmStatus::UNPROCESSABLE,
196         FormFsmProcessType::PROCESS_TASK_DIRECT,
197     },
198 };
199 
200 const std::vector<FormRenderStatusMachineInfo> FORM_STATUS_TABLE_UNPROCESSABLE = {
201     // UNPROCESSABLE
202     {
203         FormFsmStatus::UNPROCESSABLE,
204         FormFsmEvent::RENDER_FORM,
205         FormFsmStatus::RENDERING,
206         FormFsmProcessType::PROCESS_TASK_DIRECT,
207     },
208     {
209         FormFsmStatus::UNPROCESSABLE,
210         FormFsmEvent::RECYCLE_DATA,
211         FormFsmStatus::RECYCLING_DATA,
212         FormFsmProcessType::PROCESS_TASK_DIRECT,
213     },
214     {
215         FormFsmStatus::UNPROCESSABLE,
216         FormFsmEvent::RECYCLE_FORM,
217         FormFsmStatus::RECYCLING,
218         FormFsmProcessType::PROCESS_TASK_DIRECT,
219     },
220     {
221         FormFsmStatus::UNPROCESSABLE,
222         FormFsmEvent::RECOVER_FORM,
223         FormFsmStatus::RECOVERING,
224         FormFsmProcessType::PROCESS_TASK_DIRECT,
225     },
226     {
227         FormFsmStatus::UNPROCESSABLE,
228         FormFsmEvent::DELETE_FORM,
229         FormFsmStatus::DELETING,
230         FormFsmProcessType::PROCESS_TASK_DIRECT,
231     },
232 };
233 
234 const std::unordered_map<FormFsmStatus, std::vector<FormRenderStatusMachineInfo>> FORM_STATUS_TABLE = {
235     {FormFsmStatus::INIT, FORM_STATUS_TABLE_INIT},
236     {FormFsmStatus::RENDERING, FORM_STATUS_TABLE_RENDERING},
237     {FormFsmStatus::RENDERED, FORM_STATUS_TABLE_RENDERED},
238     {FormFsmStatus::RECYCLED, FORM_STATUS_TABLE_RECYCLED},
239     {FormFsmStatus::RECYCLING_DATA, FORM_STATUS_TABLE_RECYCLING_DATA},
240     {FormFsmStatus::RECYCLING, FORM_STATUS_TABLE_RECYCLING},
241     {FormFsmStatus::RECOVERING, FORM_STATUS_TABLE_RECOVERING},
242     {FormFsmStatus::DELETING, FORM_STATUS_TABLE_DELETING},
243     {FormFsmStatus::UNPROCESSABLE, FORM_STATUS_TABLE_UNPROCESSABLE},
244 };
245 }  // namespace
246 
FormRenderStatusTable()247 FormRenderStatusTable::FormRenderStatusTable()
248 {
249     HILOG_INFO("create FormRenderStatusTable");
250 }
251 
~FormRenderStatusTable()252 FormRenderStatusTable::~FormRenderStatusTable()
253 {
254     HILOG_DEBUG("destroy FormRenderStatusTable");
255 }
256 
GetFormStatusInfo(FormFsmStatus curStatus,FormFsmEvent event,FormRenderStatusMachineInfo & info)257 bool FormRenderStatusTable::GetFormStatusInfo(
258     FormFsmStatus curStatus, FormFsmEvent event, FormRenderStatusMachineInfo &info)
259 {
260     auto iter = FORM_STATUS_TABLE.find(curStatus);
261     if (iter == FORM_STATUS_TABLE.end()) {
262         HILOG_ERROR("not find table, curStatus is %{public}s, event is %{public}s.",
263             FormStatusPrint::FormStatusToString(curStatus).c_str(),
264             FormStatusPrint::FormEventToString(event).c_str());
265         return false;
266     }
267 
268     auto tableInfo = iter->second;
269     for (size_t i = 0; i < tableInfo.size(); i++) {
270         if (tableInfo[i].event == event) {
271             info = tableInfo[i];
272             return true;
273         }
274     }
275 
276     HILOG_ERROR("form status error, curStatus is %{public}s, event is %{public}s.",
277         FormStatusPrint::FormStatusToString(curStatus).c_str(),
278         FormStatusPrint::FormEventToString(event).c_str());
279     return false;
280 }
281 }  // namespace AppExecFwk
282 }  // namespace OHOS
283