• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 <cinttypes>
17 
18 #include "form_constants.h"
19 #include "form_data_mgr.h"
20 #include "form_host_interface.h"
21 #include "form_item_info.h"
22 #include "form_mgr_adapter.h"
23 #include "form_provider_interface.h"
24 #include "form_supply_callback.h"
25 #include "form_task_mgr.h"
26 #include "form_util.h"
27 #include "hilog_wrapper.h"
28 
29 namespace OHOS {
30 namespace AppExecFwk {
31 const int FORM_TASK_DELAY_TIME = 20; // ms
FormTaskMgr()32 FormTaskMgr::FormTaskMgr() {}
~FormTaskMgr()33 FormTaskMgr::~FormTaskMgr() {}
34 /**
35  * @brief Acquire form data from form provider(task).
36  * @param formId The Id of the form.
37  * @param want The want of the request.
38  * @param remoteObject Form provider proxy object.
39  */
PostAcquireTask(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)40 void FormTaskMgr::PostAcquireTask(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
41 {
42     if (eventHandler_ == nullptr) {
43         HILOG_ERROR("%{public}s fail, eventhandler invalidate", __func__);
44         return;
45     }
46     std::function<void()> acquireProviderFormInfoFunc = std::bind(&FormTaskMgr::AcquireProviderFormInfo,
47         this, formId, want, remoteObject);
48     eventHandler_->PostTask(acquireProviderFormInfoFunc, FORM_TASK_DELAY_TIME);
49 }
50 /**
51  * @brief Delete form data from form provider(task).
52  * @param formId The Id of the form.
53  * @param want The want of the request.
54  * @param remoteObject Form provider proxy object.
55  */
PostDeleteTask(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)56 void FormTaskMgr::PostDeleteTask(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
57 {
58     if (eventHandler_ == nullptr) {
59         HILOG_ERROR("%{public}s fail, eventhandler invalidate", __func__);
60         return;
61     }
62     std::function<void()> notifyFormDeleteFunc = std::bind(&FormTaskMgr::NotifyFormDelete,
63         this, formId, want, remoteObject);
64     eventHandler_->PostTask(notifyFormDeleteFunc, FORM_TASK_DELAY_TIME);
65 }
66 
67 /**
68  * @brief Refresh form data from form provider(task).
69  *
70  * @param formId The Id of the form.
71  * @param want The want of the form.
72  * @param remoteObject Form provider proxy object.
73  * @return none.
74  */
PostRefreshTask(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)75 void FormTaskMgr::PostRefreshTask(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
76 {
77     if (eventHandler_ == nullptr) {
78         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
79         return;
80     }
81     std::function<void()> notifyFormUpdateFunc = std::bind(&FormTaskMgr::NotifyFormUpdate,
82         this, formId, want, remoteObject);
83     eventHandler_->PostTask(notifyFormUpdateFunc, FORM_TASK_DELAY_TIME);
84 }
85 
86 /**
87  * @brief Cast temp form data from form provider(task).
88  *
89  * @param formId The Id of the form.
90  * @param want The want of the form.
91  * @param remoteObject Form provider proxy object.
92  * @return none.
93  */
PostCastTempTask(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)94 void FormTaskMgr::PostCastTempTask(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
95 {
96     if (eventHandler_ == nullptr) {
97         HILOG_ERROR("%{public}s fail, eventhandler invalidate", __func__);
98         return;
99     }
100     std::function<void()> notifyCastTempFunc = std::bind(&FormTaskMgr::NotifyCastTemp,
101         this, formId, want, remoteObject);
102     eventHandler_->PostTask(notifyCastTempFunc, FORM_TASK_DELAY_TIME);
103 }
104 
105 /**
106  * @brief Post form data to form host(task) when acquire form.
107  * @param formId The Id of the form.
108  * @param callingUid Calling uid.
109  * @param info Form configure info.
110  * @param wantParams WantParams of the request.
111  * @param remoteObject Form provider proxx object.
112  */
PostAcquireTaskToHost(const int64_t formId,const FormRecord & record,const sptr<IRemoteObject> & remoteObject)113 void FormTaskMgr::PostAcquireTaskToHost(const int64_t formId, const FormRecord &record,
114     const sptr<IRemoteObject> &remoteObject)
115 {
116     if (eventHandler_ == nullptr) {
117         HILOG_ERROR("%{public}s fail, eventhandler invalidate", __func__);
118         return;
119     }
120     std::function<void()> acquireTaskToHostFunc = std::bind(&FormTaskMgr::AcquireTaskToHost,
121         this, formId, record, remoteObject);
122     eventHandler_->PostTask(acquireTaskToHostFunc, FORM_TASK_DELAY_TIME);
123 }
124 
125 /**
126  * @brief Post form data to form host(task) when update form.
127  * @param formId The Id of the form.
128  * @param callingUid Calling uid.
129  * @param info Form configure info.
130  * @param wantParams WantParams of the request.
131  * @param remoteObject Form provider proxx object.
132  */
PostUpdateTaskToHost(const int64_t formId,const FormRecord & record,const sptr<IRemoteObject> & remoteObject)133 void FormTaskMgr::PostUpdateTaskToHost(const int64_t formId, const FormRecord &record,
134     const sptr<IRemoteObject> &remoteObject)
135 {
136     HILOG_INFO("%{public}s called.", __func__);
137 
138     if (eventHandler_ == nullptr) {
139         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
140         return;
141     }
142 
143     HILOG_DEBUG("%{public}s, post the task of updateTaskToHostFunc.", __func__);
144     std::function<void()> updateTaskToHostFunc = std::bind(&FormTaskMgr::UpdateTaskToHost,
145         this, formId, record, remoteObject);
146     eventHandler_->PostTask(updateTaskToHostFunc, FORM_TASK_DELAY_TIME);
147 }
148 
149 /**
150  * @brief Acquire form data from form provider.
151  * @param formId The Id of the form.
152  * @param info Form configure info.
153  * @param wantParams WantParams of the request.
154  * @param remoteObject Form provider proxx object.
155  */
156 /**
157  * @brief Handle form host died(task).
158  * @param remoteHost Form host proxy object.
159  */
PostHostDiedTask(const sptr<IRemoteObject> & remoteHost)160 void FormTaskMgr::PostHostDiedTask(const sptr<IRemoteObject> &remoteHost)
161 {
162     if (eventHandler_ == nullptr) {
163         HILOG_ERROR("%{public}s fail, eventhandler invalidate", __func__);
164         return;
165     }
166     std::function<void()> postTaskFunc = std::bind(&FormTaskMgr::HostDied,
167         this, remoteHost);
168     eventHandler_->PostTask(postTaskFunc, FORM_TASK_DELAY_TIME);
169 }
170 
171 /**
172  * @brief Post event notify to form provider.
173  *
174  * @param formEvent The vector of form ids.
175  * @param formVisibleType The form visible type, including FORM_VISIBLE and FORM_INVISIBLE.
176  * @param want The want of the form.
177  * @param remoteObject The form provider proxy object.
178  * @return none.
179  */
PostEventNotifyTask(const std::vector<int64_t> & formEvent,const int32_t formVisibleType,const Want & want,const sptr<IRemoteObject> & remoteObject)180 void FormTaskMgr::PostEventNotifyTask(const std::vector<int64_t> &formEvent, const int32_t formVisibleType,
181     const Want &want, const sptr<IRemoteObject> &remoteObject)
182 {
183     if (eventHandler_ == nullptr) {
184         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
185         return;
186     }
187     std::function<void()> eventNotifyFunc = std::bind(&FormTaskMgr::EventNotify,
188         this, formEvent, formVisibleType, want, remoteObject);
189     eventHandler_->PostTask(eventNotifyFunc, FORM_TASK_DELAY_TIME);
190 }
191 /**
192  * @brief Post provider batch delete.
193  * @param formIds The Id list.
194  * @param want The want of the request.
195  * @param remoteObject Form provider proxy object.
196  */
PostProviderBatchDeleteTask(std::set<int64_t> & formIds,const Want & want,const sptr<IRemoteObject> & remoteObject)197 void FormTaskMgr::PostProviderBatchDeleteTask(std::set<int64_t> &formIds, const Want &want,
198     const sptr<IRemoteObject> &remoteObject)
199 {
200     if (eventHandler_ == nullptr) {
201         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
202         return;
203     }
204     std::function<void()> batchDeleteFunc = std::bind(&FormTaskMgr::ProviderBatchDelete,
205         this, formIds, want, remoteObject);
206     eventHandler_->PostTask(batchDeleteFunc, FORM_TASK_DELAY_TIME);
207 }
208 /**
209  * @brief Post message event to form provider.
210  * @param formId The Id of the from.
211  * @param message Event message.
212  * @param want The want of the request.
213  * @param remoteObject Form provider proxy object.
214  */
PostFormEventTask(const int64_t formId,const std::string & message,const Want & want,const sptr<IRemoteObject> & remoteObject)215 void FormTaskMgr::PostFormEventTask(const int64_t formId, const std::string &message,
216     const Want &want, const sptr<IRemoteObject> &remoteObject)
217 {
218     if (eventHandler_ == nullptr) {
219         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
220         return;
221     }
222     std::function<void()> formEventFunc = std::bind(&FormTaskMgr::FireFormEvent,
223         this, formId, message, want, remoteObject);
224     eventHandler_->PostTask(formEventFunc, FORM_TASK_DELAY_TIME);
225 }
226 
227 /**
228 * @brief Post acquire state to form provider.
229 * @param wantArg The want of onAcquireFormState.
230 * @param provider The provider info.
231 * @param want The want of the request.
232 * @param remoteObject Form provider proxy object.
233 */
PostAcquireStateTask(const Want & wantArg,const std::string & provider,const Want & want,const sptr<IRemoteObject> & remoteObject)234 void FormTaskMgr::PostAcquireStateTask(const Want &wantArg, const std::string &provider, const Want &want,
235                                        const sptr<IRemoteObject> &remoteObject)
236 {
237     if (eventHandler_ == nullptr) {
238         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
239         return;
240     }
241     std::function<void()> acquireStateFunc = std::bind(&FormTaskMgr::AcquireState,
242         this, wantArg, provider, want, remoteObject);
243     eventHandler_->PostTask(acquireStateFunc, FORM_TASK_DELAY_TIME);
244 }
245 
246 /**
247  * @brief Post uninstall message to form host(task).
248  * @param formIds The Id list of the forms.
249  * @param remoteObject Form provider proxy object.
250  */
PostUninstallTaskToHost(const std::vector<int64_t> & formIds,const sptr<IRemoteObject> & remoteObject)251 void FormTaskMgr::PostUninstallTaskToHost(const std::vector<int64_t> &formIds, const sptr<IRemoteObject> &remoteObject)
252 {
253     HILOG_INFO("%{public}s start", __func__);
254     if (eventHandler_ == nullptr) {
255         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
256         return;
257     }
258     std::function<void()> uninstallFunc = std::bind(&FormTaskMgr::FormUninstall,
259         this, formIds, remoteObject);
260     eventHandler_->PostTask(uninstallFunc, FORM_TASK_DELAY_TIME);
261     HILOG_INFO("%{public}s end", __func__);
262 }
263 
264 /**
265 * @brief Post acquire form state message to form host(task).
266 * @param state The form state.
267 * @param want The want of onAcquireFormState.
268 * @param remoteObject Form provider proxy object.
269 */
PostAcquireStateTaskToHost(AppExecFwk::FormState state,const AAFwk::Want & want,const sptr<IRemoteObject> & remoteObject)270 void FormTaskMgr::PostAcquireStateTaskToHost(AppExecFwk::FormState state, const AAFwk::Want &want,
271                                              const sptr<IRemoteObject> &remoteObject)
272 {
273     HILOG_INFO("%{public}s start", __func__);
274     if (eventHandler_ == nullptr) {
275         HILOG_ERROR("%{public}s fail, eventhandler invalidate.", __func__);
276         return;
277     }
278     std::function<void()> acquireStateFunc = std::bind(&FormTaskMgr::AcquireStateBack,
279         this, state, want, remoteObject);
280     eventHandler_->PostTask(acquireStateFunc, FORM_TASK_DELAY_TIME);
281     HILOG_INFO("%{public}s end", __func__);
282 }
283 
284 /**
285  * @brief Acquire form data from form provider.
286  * @param formId The Id of the from.
287  * @param want The want of the request.
288  * @param remoteObject Form provider proxy object.
289  */
AcquireProviderFormInfo(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)290 void FormTaskMgr::AcquireProviderFormInfo(const int64_t formId, const Want &want,
291     const sptr<IRemoteObject> &remoteObject)
292 {
293     FormMgrAdapter::GetInstance().AcquireProviderFormInfo(formId, want, remoteObject);
294 }
295 
296 /**
297  * @brief Notify form provider for delete form.
298  *
299  * @param formId The Id of the from.
300  * @param want The want of the form.
301  * @param remoteObject Form provider proxy object.
302  * @return none.
303  */
NotifyFormDelete(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)304 void FormTaskMgr::NotifyFormDelete(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
305 {
306     FormMgrAdapter::GetInstance().NotifyFormDelete(formId, want, remoteObject);
307 }
308 
309 /**
310  * @brief Notify form provider for updating form.
311  *
312  * @param formId The Id of the from.
313  * @param want The want of the form.
314  * @param remoteObject Form provider proxy object.
315  * @return none.
316  */
NotifyFormUpdate(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)317 void FormTaskMgr::NotifyFormUpdate(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
318 {
319     HILOG_INFO("%{public}s called.", __func__);
320 
321     long connectId = want.GetLongParam(Constants::FORM_CONNECT_ID, 0);
322     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
323     if (formProviderProxy == nullptr) {
324         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
325         HILOG_ERROR("%{public}s fail, failed to get formProviderProxy", __func__);
326         return;
327     }
328     int error = formProviderProxy->NotifyFormUpdate(formId, want, FormSupplyCallback::GetInstance());
329     if (error != ERR_OK) {
330         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
331         HILOG_ERROR("%{public}s fail, Failed to notify form update.", __func__);
332     }
333 }
334 
335 /**
336  * @brief Event notify to form provider.
337  *
338  * @param formEvents The vector of form ids.
339  * @param formVisibleType The form visible type, including FORM_VISIBLE and FORM_INVISIBLE.
340  * @param want The want of the form.
341  * @param remoteObject The form provider proxy object.
342  * @return none.
343  */
EventNotify(const std::vector<int64_t> & formEvents,const int32_t formVisibleType,const Want & want,const sptr<IRemoteObject> & remoteObject)344 void FormTaskMgr::EventNotify(const std::vector<int64_t> &formEvents, const int32_t formVisibleType,
345     const Want &want, const sptr<IRemoteObject> &remoteObject)
346 {
347     HILOG_INFO("%{public}s called.", __func__);
348 
349     long connectId = want.GetLongParam(Constants::FORM_CONNECT_ID, 0);
350     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
351     if (formProviderProxy == nullptr) {
352         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
353         HILOG_ERROR("%{public}s fail, failed to get formProviderProxy", __func__);
354         return;
355     }
356 
357     int error = formProviderProxy->EventNotify(formEvents, formVisibleType, want, FormSupplyCallback::GetInstance());
358     if (error != ERR_OK) {
359         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
360         HILOG_ERROR("%{public}s fail, Failed to send event notify.", __func__);
361     }
362 }
363 
364 /**
365  * @brief Notify form provider for cast temp form.
366  *
367  * @param formId The Id of the from.
368  * @param want The want of the form.
369  * @param remoteObject Form provider proxy object.
370  * @return none.
371  */
NotifyCastTemp(const int64_t formId,const Want & want,const sptr<IRemoteObject> & remoteObject)372 void FormTaskMgr::NotifyCastTemp(const int64_t formId, const Want &want, const sptr<IRemoteObject> &remoteObject)
373 {
374     HILOG_INFO("%{public}s called.", __func__);
375 
376     long connectId = want.GetLongParam(Constants::FORM_CONNECT_ID, 0);
377     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
378     if (formProviderProxy == nullptr) {
379         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
380         HILOG_ERROR("%{public}s fail, failed to get formProviderProxy", __func__);
381         return;
382     }
383 
384     int error = formProviderProxy->NotifyFormCastTempForm(formId, want, FormSupplyCallback::GetInstance());
385     if (error != ERR_OK) {
386         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
387         HILOG_ERROR("%{public}s fail, Failed to get acquire provider form info", __func__);
388     }
389 }
390 
391 /**
392  * @brief Post form data to form host when acquire form.
393  * @param formId The Id of the form.
394  * @param callingUid Calling uid.
395  * @param info Form configure info.
396  * @param wantParams WantParams of the request.
397  * @param remoteObject Form provider proxx object.
398  */
AcquireTaskToHost(const int64_t formId,const FormRecord & record,const sptr<IRemoteObject> & remoteObject)399 void FormTaskMgr::AcquireTaskToHost(const int64_t formId, const FormRecord &record,
400     const sptr<IRemoteObject> &remoteObject)
401 {
402     HILOG_INFO("FormTaskMgr AcquireTaskToHost, formId:%{public}" PRId64 "", formId);
403 
404     sptr<IFormHost> remoteFormHost = iface_cast<IFormHost>(remoteObject);
405     if (remoteFormHost == nullptr) {
406         HILOG_ERROR("%{public}s fail, Failed to get form host proxy", __func__);
407         return;
408     }
409 
410     HILOG_DEBUG("FormTaskMgr remoteFormHost OnAcquired");
411     remoteFormHost->OnAcquired(CreateFormJsInfo(formId, record));
412 }
413 
414 /**
415  * @brief Post form data to form host when update form.
416  * @param formId The Id of the form.
417  * @param callingUid Calling uid.
418  * @param info Form configure info.
419  * @param wantParams WantParams of the request.
420  * @param remoteObject Form provider proxx object.
421  */
UpdateTaskToHost(const int64_t formId,const FormRecord & record,const sptr<IRemoteObject> & remoteObject)422 void FormTaskMgr::UpdateTaskToHost(const int64_t formId, const FormRecord &record,
423     const sptr<IRemoteObject> &remoteObject)
424 {
425     HILOG_INFO("%{public}s start.", __func__);
426 
427     sptr<IFormHost> remoteFormHost = iface_cast<IFormHost>(remoteObject);
428     if (remoteFormHost == nullptr) {
429         HILOG_ERROR("%{public}s fail, Failed to get form host proxy.", __func__);
430         return;
431     }
432 
433     HILOG_DEBUG("%{public}s, FormTaskMgr remoteFormHost OnUpdate.", __func__);
434     remoteFormHost->OnUpdate(CreateFormJsInfo(formId, record));
435 
436     HILOG_INFO("%{public}s end.", __func__);
437 }
438 
439 /**
440  * @brief Handle form host died.
441  * @param remoteHost Form host proxy object.
442  */
HostDied(const sptr<IRemoteObject> & remoteHost)443 void FormTaskMgr::HostDied(const sptr<IRemoteObject> &remoteHost)
444 {
445     HILOG_INFO("%{public}s, remote client died event", __func__);
446     if (remoteHost == nullptr) {
447         HILOG_INFO("%{public}s, remote client died, invalid param", __func__);
448         return;
449     }
450     FormDataMgr::GetInstance().HandleHostDied(remoteHost);
451 }
452 /**
453  * @brief Post provider batch delete.
454  * @param formIds The Id list.
455  * @param want The want of the request.
456  * @param remoteObject Form provider proxy object.
457  */
ProviderBatchDelete(std::set<int64_t> & formIds,const Want & want,const sptr<IRemoteObject> & remoteObject)458 void FormTaskMgr::ProviderBatchDelete(std::set<int64_t> &formIds, const Want &want,
459     const sptr<IRemoteObject> &remoteObject)
460 {
461     HILOG_INFO("%{public}s called.", __func__);
462     long connectId = want.GetLongParam(Constants::FORM_CONNECT_ID, 0);
463     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
464     if (formProviderProxy == nullptr) {
465         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
466         HILOG_ERROR("%{public}s fail, Failed to get formProviderProxy", __func__);
467         return;
468     }
469     std::vector<int64_t> vFormIds;
470     vFormIds.assign(formIds.begin(), formIds.end());
471     int error = formProviderProxy->NotifyFormsDelete(vFormIds, want, FormSupplyCallback::GetInstance());
472     if (error != ERR_OK) {
473         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
474         HILOG_ERROR("%{public}s failed", __func__);
475     }
476 }
477 /**
478  * @brief Fire message event to form provider.
479  * @param formId The Id of the from.
480  * @param message Event message.
481  * @param want The want of the request.
482  * @param remoteObject Form provider proxy object.
483  */
FireFormEvent(const int64_t formId,const std::string & message,const Want & want,const sptr<IRemoteObject> & remoteObject)484 void FormTaskMgr::FireFormEvent(const int64_t formId, const std::string &message, const Want &want,
485     const sptr<IRemoteObject> &remoteObject)
486 {
487     HILOG_INFO("%{public}s start", __func__);
488     long connectId = want.GetLongParam(Constants::FORM_CONNECT_ID, 0);
489     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
490     if (formProviderProxy == nullptr) {
491         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
492         HILOG_ERROR("%{public}s, Failed to get formProviderProxy", __func__);
493         return;
494     }
495 
496     int error = formProviderProxy->FireFormEvent(formId, message, want, FormSupplyCallback::GetInstance());
497     if (error != ERR_OK) {
498         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
499         HILOG_ERROR("%{public}s, Failed to fire message event to form provider", __func__);
500     }
501     HILOG_INFO("%{public}s end", __func__);
502 }
503 
504 /**
505  * @brief Acquire form state to form provider.
506  * @param wantArg The want of onAcquireFormState.
507  * @param provider The provider info.
508  * @param want The want of the request.
509  * @param remoteObject Form provider proxy object.
510  */
AcquireState(const Want & wantArg,const std::string & provider,const Want & want,const sptr<IRemoteObject> & remoteObject)511 void FormTaskMgr::AcquireState(const Want &wantArg, const std::string &provider, const Want &want,
512                                const sptr<IRemoteObject> &remoteObject)
513 {
514     HILOG_INFO("%{public}s start", __func__);
515     long connectId = want.GetLongParam(Constants::FORM_CONNECT_ID, 0);
516     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
517     if (formProviderProxy == nullptr) {
518         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
519         HILOG_ERROR("%{public}s, Failed to get formProviderProxy", __func__);
520         return;
521     }
522 
523     int error = formProviderProxy->AcquireState(wantArg, provider, want, FormSupplyCallback::GetInstance());
524     if (error != ERR_OK) {
525         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
526         HILOG_ERROR("%{public}s, Failed to acquire form state to form provider", __func__);
527     }
528     HILOG_INFO("%{public}s end", __func__);
529 }
530 
531 /**
532  * @brief Handle uninstall message.
533  * @param formIds The Id list of the forms.
534  * @param remoteObject Form provider proxy object.
535  */
FormUninstall(const std::vector<int64_t> & formIds,const sptr<IRemoteObject> & remoteObject)536 void FormTaskMgr::FormUninstall(const std::vector<int64_t> &formIds,
537     const sptr<IRemoteObject> &remoteObject)
538 {
539     HILOG_INFO("%{public}s start", __func__);
540     sptr<IFormHost> remoteFormHost = iface_cast<IFormHost>(remoteObject);
541     if (remoteFormHost == nullptr) {
542         HILOG_ERROR("%{public}s fail, Failed to get form host proxy.", __func__);
543         return;
544     }
545 
546     remoteFormHost->OnUninstall(formIds);
547 
548     HILOG_INFO("%{public}s end", __func__);
549 }
550 
551 /**
552  * @brief Handle acquire state.
553  * @param state the form state.
554  * @param want The want of onAcquireFormState.
555  * @param remoteObject Form provider proxy object.
556  */
AcquireStateBack(AppExecFwk::FormState state,const AAFwk::Want & want,const sptr<IRemoteObject> & remoteObject)557 void FormTaskMgr::AcquireStateBack(AppExecFwk::FormState state, const AAFwk::Want &want,
558                                    const sptr<IRemoteObject> &remoteObject)
559 {
560     HILOG_INFO("%{public}s start", __func__);
561     sptr<IFormHost> remoteFormHost = iface_cast<IFormHost>(remoteObject);
562     if (remoteFormHost == nullptr) {
563         HILOG_ERROR("%{public}s fail, Failed to get form host proxy.", __func__);
564         return;
565     }
566 
567     remoteFormHost->OnAcquireState(state, want);
568 
569     HILOG_INFO("%{public}s end", __func__);
570 }
571 
572 /**
573  * @brief Create form data for form host.
574  * @param formId The Id of the form.
575  * @param record Form record.
576  * @return Form data.
577  */
CreateFormJsInfo(const int64_t formId,const FormRecord & record)578 FormJsInfo FormTaskMgr::CreateFormJsInfo(const int64_t formId, const FormRecord &record)
579 {
580     HILOG_INFO("%{public}s start", __func__);
581     FormJsInfo form;
582     form.formId = formId;
583     form.bundleName = record.bundleName;
584     form.abilityName = record.abilityName;
585     form.formName = record.formName;
586     form.formTempFlg = record.formTempFlg;
587     form.jsFormCodePath = record.jsFormCodePath;
588     form.formData = record.formProviderInfo.GetFormDataString();
589     form.formProviderData = record.formProviderInfo.GetFormData();
590     form.formSrc = record.formSrc;
591     form.formWindow = record.formWindow;
592     HILOG_INFO("%{public}s end, jsPath: %{public}s, data: %{public}s", __func__,
593         form.jsFormCodePath.c_str(), form.formData.c_str());
594     return form;
595 }
596 }  // namespace AppExecFwk
597 }  // namespace OHOS
598