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