1 /*
2 * Copyright (c) 2021 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 "adapter/ohos/entrance/pa_container.h"
17
18 #include "adapter/ohos/entrance/file_asset_provider_impl.h"
19 #include "adapter/ohos/entrance/hap_asset_provider_impl.h"
20 #include "adapter/ohos/entrance/pa_engine/engine/common/js_backend_engine_loader.h"
21 #include "adapter/ohos/entrance/pa_engine/pa_backend.h"
22 #include "base/subwindow/subwindow_manager.h"
23 #include "core/common/ace_engine.h"
24
25 namespace OHOS::Ace::Platform {
26 namespace {
27
28 constexpr char ARK_PA_ENGINE_SHARED_LIB[] = "libace_engine_pa_ark.z.so";
29
GetPaEngineSharedLibrary()30 const char* GetPaEngineSharedLibrary()
31 {
32 return ARK_PA_ENGINE_SHARED_LIB;
33 }
34
35 } // namespace
36
PaContainer(int32_t instanceId,void * paAbility,const PaContainerOptions & options,std::unique_ptr<PlatformEventCallback> callback)37 PaContainer::PaContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options,
38 std::unique_ptr<PlatformEventCallback> callback)
39 : instanceId_(instanceId), paAbility_(paAbility)
40 {
41 ACE_DCHECK(callback);
42 type_ = options.type;
43 hapPath_ = options.hapPath;
44 workerPath_ = options.workerPath;
45 InitializeBackend(options.language);
46 platformEventCallback_ = std::move(callback);
47 }
48
InitializeBackend(SrcLanguage language)49 void PaContainer::InitializeBackend(SrcLanguage language)
50 {
51 // create backend
52 backend_ = Backend::Create();
53 auto paBackend = AceType::DynamicCast<PaBackend>(backend_);
54 CHECK_NULL_VOID(paBackend);
55
56 // set JS engine, init in JS thread
57 auto& loader = JsBackendEngineLoader::Get(GetPaEngineSharedLibrary());
58 auto jsEngine = loader.CreateJsBackendEngine(instanceId_);
59 jsEngine->AddExtraNativeObject("ability", paAbility_);
60 jsEngine->SetNeedDebugBreakPoint(AceApplicationInfo::GetInstance().IsNeedDebugBreakPoint());
61 jsEngine->SetDebugVersion(AceApplicationInfo::GetInstance().IsDebugVersion());
62 jsEngine->SetHapPath(hapPath_);
63 jsEngine->SetWorkerPath(workerPath_);
64 paBackend->SetJsEngine(jsEngine);
65
66 ACE_DCHECK(backend_);
67 backend_->Initialize(type_, language);
68 }
69
GetContainer(int32_t instanceId)70 RefPtr<PaContainer> PaContainer::GetContainer(int32_t instanceId)
71 {
72 auto container = AceEngine::Get().GetContainer(instanceId);
73 CHECK_NULL_RETURN(container, nullptr);
74 return AceType::DynamicCast<PaContainer>(container);
75 }
76
CreateContainer(int32_t instanceId,void * paAbility,const PaContainerOptions & options,std::unique_ptr<PlatformEventCallback> callback)77 void PaContainer::CreateContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options,
78 std::unique_ptr<PlatformEventCallback> callback)
79 {
80 auto aceContainer = AceType::MakeRefPtr<PaContainer>(instanceId, paAbility, options, std::move(callback));
81 AceEngine::Get().AddContainer(instanceId, aceContainer);
82
83 auto back = aceContainer->GetBackend();
84 CHECK_NULL_VOID(back);
85 back->UpdateState(Backend::State::ON_CREATE);
86 }
87
RunPa(int32_t instanceId,const std::string & content,const OHOS::AAFwk::Want & want)88 bool PaContainer::RunPa(int32_t instanceId, const std::string& content, const OHOS::AAFwk::Want& want)
89 {
90 LOGI("PA: PaContainer RunPa start");
91 auto container = AceEngine::Get().GetContainer(instanceId);
92 CHECK_NULL_RETURN(container, false);
93 ContainerScope scope(instanceId);
94 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
95 CHECK_NULL_RETURN(aceContainer, false);
96 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
97 CHECK_NULL_RETURN(paBackend, false);
98 paBackend->RunPa(content, want);
99 return true;
100 }
101
OnCreate(int32_t instanceId,const OHOS::AAFwk::Want & want)102 bool PaContainer::OnCreate(int32_t instanceId, const OHOS::AAFwk::Want& want)
103 {
104 LOGI("PA: PaContainer OnCreate start");
105 auto container = AceEngine::Get().GetContainer(instanceId);
106 CHECK_NULL_RETURN(container, false);
107 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
108 CHECK_NULL_RETURN(aceContainer, false);
109 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
110 CHECK_NULL_RETURN(paBackend, false);
111 paBackend->OnCreate(want);
112 return true;
113 }
114
OnDelete(int32_t instanceId,int64_t formId)115 bool PaContainer::OnDelete(int32_t instanceId, int64_t formId)
116 {
117 LOGI("PA: PaContainer OnDelete start");
118 auto container = AceEngine::Get().GetContainer(instanceId);
119 CHECK_NULL_RETURN(container, false);
120 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
121 CHECK_NULL_RETURN(aceContainer, false);
122 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
123 CHECK_NULL_RETURN(paBackend, false);
124 paBackend->OnDelete(formId);
125 return true;
126 }
127
OnTriggerEvent(int32_t instanceId,int64_t formId,const std::string & message)128 bool PaContainer::OnTriggerEvent(int32_t instanceId, int64_t formId, const std::string& message)
129 {
130 LOGI("PA: PaContainer OnTriggerEvent start");
131 auto container = AceEngine::Get().GetContainer(instanceId);
132 CHECK_NULL_RETURN(container, false);
133 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
134 CHECK_NULL_RETURN(aceContainer, false);
135 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
136 CHECK_NULL_RETURN(paBackend, false);
137 paBackend->OnTriggerEvent(formId, message);
138 return true;
139 }
140
OnAcquireFormState(int32_t instanceId,const OHOS::AAFwk::Want & want)141 int32_t PaContainer::OnAcquireFormState(int32_t instanceId, const OHOS::AAFwk::Want& want)
142 {
143 LOGI("PA: PaContainer OnAcquireFormState start");
144 auto container = AceEngine::Get().GetContainer(instanceId);
145 CHECK_NULL_RETURN(container, -1);
146 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
147 CHECK_NULL_RETURN(aceContainer, -1);
148 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
149 CHECK_NULL_RETURN(paBackend, -1);
150 int32_t formState = paBackend->OnAcquireFormState(want);
151 return formState;
152 }
153
OnUpdate(int32_t instanceId,int64_t formId)154 bool PaContainer::OnUpdate(int32_t instanceId, int64_t formId)
155 {
156 LOGI("PA: PaContainer OnUpdate start");
157 auto container = AceEngine::Get().GetContainer(instanceId);
158 CHECK_NULL_RETURN(container, false);
159 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
160 CHECK_NULL_RETURN(aceContainer, false);
161 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
162 CHECK_NULL_RETURN(paBackend, false);
163 paBackend->OnUpdate(formId);
164 return true;
165 }
166
OnCastTemptoNormal(int32_t instanceId,int64_t formId)167 bool PaContainer::OnCastTemptoNormal(int32_t instanceId, int64_t formId)
168 {
169 LOGI("PA: PaContainer OnCastTemptoNormal start");
170 auto container = AceEngine::Get().GetContainer(instanceId);
171 CHECK_NULL_RETURN(container, false);
172 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
173 CHECK_NULL_RETURN(aceContainer, false);
174 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
175 CHECK_NULL_RETURN(paBackend, false);
176 paBackend->OnCastTemptoNormal(formId);
177 return true;
178 }
179
OnVisibilityChanged(int32_t instanceId,const std::map<int64_t,int32_t> & formEventsMap)180 bool PaContainer::OnVisibilityChanged(int32_t instanceId, const std::map<int64_t, int32_t>& formEventsMap)
181 {
182 LOGI("PA: PaContainer OnVisibilityChanged start");
183 auto container = AceEngine::Get().GetContainer(instanceId);
184 CHECK_NULL_RETURN(container, false);
185 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
186 CHECK_NULL_RETURN(aceContainer, false);
187 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
188 CHECK_NULL_RETURN(paBackend, false);
189 paBackend->OnVisibilityChanged(formEventsMap);
190 return true;
191 }
192
GetFormData(int32_t instanceId)193 AppExecFwk::FormProviderData PaContainer::GetFormData(int32_t instanceId)
194 {
195 LOGI("PA: PaContainer GetFormData start");
196 auto container = AceEngine::Get().GetContainer(instanceId);
197 CHECK_NULL_RETURN(container, AppExecFwk::FormProviderData());
198 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
199 CHECK_NULL_RETURN(aceContainer, AppExecFwk::FormProviderData());
200 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
201 CHECK_NULL_RETURN(paBackend, AppExecFwk::FormProviderData());
202 return paBackend->GetFormData();
203 }
204
Destroy()205 void PaContainer::Destroy()
206 {
207 RefPtr<Backend> backend;
208 backend_.Swap(backend);
209 CHECK_NULL_VOID(backend);
210 backend->UpdateState(Backend::State::ON_DESTROY);
211 }
212
DestroyContainer(int32_t instanceId)213 void PaContainer::DestroyContainer(int32_t instanceId)
214 {
215 LOGI("DestroyContainer with id %{private}d", instanceId);
216 SubwindowManager::GetInstance()->CloseDialog(instanceId);
217 auto container = AceEngine::Get().GetContainer(instanceId);
218 CHECK_NULL_VOID(container);
219 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
220 CHECK_NULL_VOID(aceContainer);
221 aceContainer->Destroy();
222 }
223
AddAssetPath(int32_t instanceId,const std::string & packagePath,const std::string & hapPath,const std::vector<std::string> & paths)224 void PaContainer::AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath,
225 const std::vector<std::string>& paths)
226 {
227 auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId));
228 CHECK_NULL_VOID(container);
229 RefPtr<AssetManagerImpl> assetManagerImpl;
230 if (container->assetManager_) {
231 assetManagerImpl = AceType::DynamicCast<AssetManagerImpl>(container->assetManager_);
232 } else {
233 assetManagerImpl = Referenced::MakeRefPtr<AssetManagerImpl>();
234 container->assetManager_ = assetManagerImpl;
235 AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(assetManagerImpl);
236 }
237 CHECK_NULL_VOID(assetManagerImpl);
238 if (!hapPath.empty()) {
239 auto assetProvider = AceType::MakeRefPtr<HapAssetProviderImpl>();
240 if (assetProvider->Initialize(hapPath, paths)) {
241 LOGI("Push AssetProvider to queue.");
242 assetManagerImpl->PushBack(std::move(assetProvider));
243 }
244 }
245 if (!packagePath.empty()) {
246 auto assetProvider = AceType::MakeRefPtr<FileAssetProviderImpl>();
247 if (assetProvider->Initialize(packagePath, paths)) {
248 LOGI("Push AssetProvider to queue.");
249 assetManagerImpl->PushBack(std::move(assetProvider));
250 }
251 }
252 }
253
AddLibPath(int32_t instanceId,const std::vector<std::string> & libPath)254 void PaContainer::AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath)
255 {
256 auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId));
257 CHECK_NULL_VOID(container);
258 RefPtr<AssetManager> assetManagerImpl;
259 if (container->assetManager_) {
260 assetManagerImpl = AceType::DynamicCast<AssetManagerImpl>(container->assetManager_);
261 } else {
262 assetManagerImpl = Referenced::MakeRefPtr<AssetManagerImpl>();
263 container->assetManager_ = assetManagerImpl;
264 AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(assetManagerImpl);
265 }
266 CHECK_NULL_VOID(assetManagerImpl);
267 assetManagerImpl->SetLibPath("default", libPath);
268 }
269
Insert(int32_t instanceId,const Uri & uri,const OHOS::NativeRdb::ValuesBucket & value)270 int32_t PaContainer::Insert(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value)
271 {
272 LOGI("Insert with id %{public}d", instanceId);
273 int32_t ret = 0;
274 auto container = AceEngine::Get().GetContainer(instanceId);
275 CHECK_NULL_RETURN(container, ret);
276 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
277 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
278 CHECK_NULL_RETURN(back, ret);
279 ret = back->Insert(uri, value);
280 return ret;
281 }
282
Query(int32_t instanceId,const Uri & uri,const std::vector<std::string> & columns,const OHOS::NativeRdb::DataAbilityPredicates & predicates)283 std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> PaContainer::Query(int32_t instanceId, const Uri& uri,
284 const std::vector<std::string>& columns, const OHOS::NativeRdb::DataAbilityPredicates& predicates)
285 {
286 LOGI("Query with id %{public}d", instanceId);
287 std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> ret;
288 auto container = AceEngine::Get().GetContainer(instanceId);
289 CHECK_NULL_RETURN(container, ret);
290 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
291 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
292 CHECK_NULL_RETURN(back, ret);
293 ret = back->Query(uri, columns, predicates);
294 return ret;
295 }
296
Update(int32_t instanceId,const Uri & uri,const OHOS::NativeRdb::ValuesBucket & value,const OHOS::NativeRdb::DataAbilityPredicates & predicates)297 int32_t PaContainer::Update(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value,
298 const OHOS::NativeRdb::DataAbilityPredicates& predicates)
299 {
300 LOGI("Update with id %{public}d", instanceId);
301 int32_t ret = 0;
302 auto container = AceEngine::Get().GetContainer(instanceId);
303 CHECK_NULL_RETURN(container, ret);
304 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
305 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
306 CHECK_NULL_RETURN(back, ret);
307 ret = back->Update(uri, value, predicates);
308 return ret;
309 }
310
Delete(int32_t instanceId,const Uri & uri,const OHOS::NativeRdb::DataAbilityPredicates & predicates)311 int32_t PaContainer::Delete(
312 int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::DataAbilityPredicates& predicates)
313 {
314 LOGI("Delete with id %{public}d", instanceId);
315 int32_t ret = 0;
316 auto container = AceEngine::Get().GetContainer(instanceId);
317 CHECK_NULL_RETURN(container, ret);
318 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
319 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
320 CHECK_NULL_RETURN(back, ret);
321 ret = back->Delete(uri, predicates);
322 return ret;
323 }
324
BatchInsert(int32_t instanceId,const Uri & uri,const std::vector<OHOS::NativeRdb::ValuesBucket> & values)325 int32_t PaContainer::BatchInsert(
326 int32_t instanceId, const Uri& uri, const std::vector<OHOS::NativeRdb::ValuesBucket>& values)
327 {
328 LOGI("BatchInsert with id %{public}d", instanceId);
329 int32_t ret = 0;
330 auto container = AceEngine::Get().GetContainer(instanceId);
331 CHECK_NULL_RETURN(container, ret);
332 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
333 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
334 CHECK_NULL_RETURN(back, ret);
335 ret = back->BatchInsert(uri, values);
336 return ret;
337 }
338
GetType(int32_t instanceId,const Uri & uri)339 std::string PaContainer::GetType(int32_t instanceId, const Uri& uri)
340 {
341 LOGI("GetType with id %{public}d", instanceId);
342 std::string ret;
343 auto container = AceEngine::Get().GetContainer(instanceId);
344 CHECK_NULL_RETURN(container, ret);
345 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
346 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
347 CHECK_NULL_RETURN(back, ret);
348 ret = back->GetType(uri);
349 return ret;
350 }
351
GetFileTypes(int32_t instanceId,const Uri & uri,const std::string & mimeTypeFilter)352 std::vector<std::string> PaContainer::GetFileTypes(
353 int32_t instanceId, const Uri& uri, const std::string& mimeTypeFilter)
354 {
355 LOGI("GetFileTypes with id %{public}d", instanceId);
356 std::vector<std::string> ret;
357 auto container = AceEngine::Get().GetContainer(instanceId);
358 CHECK_NULL_RETURN(container, ret);
359 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
360 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
361 CHECK_NULL_RETURN(back, ret);
362 ret = back->GetFileTypes(uri, mimeTypeFilter);
363 return ret;
364 }
365
OpenFile(int32_t instanceId,const Uri & uri,const std::string & mode)366 int32_t PaContainer::OpenFile(int32_t instanceId, const Uri& uri, const std::string& mode)
367 {
368 LOGI("OpenFile with id %{public}d", instanceId);
369 int32_t ret = 0;
370 auto container = AceEngine::Get().GetContainer(instanceId);
371 CHECK_NULL_RETURN(container, ret);
372 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
373 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
374 CHECK_NULL_RETURN(back, ret);
375 ret = back->OpenFile(uri, mode);
376 return ret;
377 }
378
OpenRawFile(int32_t instanceId,const Uri & uri,const std::string & mode)379 int32_t PaContainer::OpenRawFile(int32_t instanceId, const Uri& uri, const std::string& mode)
380 {
381 LOGI("OpenRawFile with id %{public}d", instanceId);
382 int32_t ret = 0;
383 auto container = AceEngine::Get().GetContainer(instanceId);
384 CHECK_NULL_RETURN(container, ret);
385 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
386 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
387 CHECK_NULL_RETURN(back, ret);
388 ret = back->OpenRawFile(uri, mode);
389 return ret;
390 }
391
NormalizeUri(int32_t instanceId,const Uri & uri)392 Uri PaContainer::NormalizeUri(int32_t instanceId, const Uri& uri)
393 {
394 LOGI("NormalizeUri with id %{public}d", instanceId);
395 Uri ret("");
396 auto container = AceEngine::Get().GetContainer(instanceId);
397 CHECK_NULL_RETURN(container, ret);
398 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
399 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
400 CHECK_NULL_RETURN(back, ret);
401 ret = back->NormalizeUri(uri);
402 return ret;
403 }
404
DenormalizeUri(int32_t instanceId,const Uri & uri)405 Uri PaContainer::DenormalizeUri(int32_t instanceId, const Uri& uri)
406 {
407 LOGI("DenormalizeUri with id %{public}d", instanceId);
408 Uri ret("");
409 auto container = AceEngine::Get().GetContainer(instanceId);
410 CHECK_NULL_RETURN(container, ret);
411 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
412 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
413 CHECK_NULL_RETURN(back, ret);
414 ret = back->DenormalizeUri(uri);
415 return ret;
416 }
417
OnConnect(int32_t instanceId,const OHOS::AAFwk::Want & want)418 sptr<IRemoteObject> PaContainer::OnConnect(int32_t instanceId, const OHOS::AAFwk::Want& want)
419 {
420 LOGI("OnConnect with id %{private}d", instanceId);
421 auto container = AceEngine::Get().GetContainer(instanceId);
422 CHECK_NULL_RETURN(container, nullptr);
423 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
424 auto back = aceContainer->GetBackend();
425 CHECK_NULL_RETURN(back, nullptr);
426 auto paBackend = AceType::DynamicCast<PaBackend>(back);
427 CHECK_NULL_RETURN(paBackend, nullptr);
428 return paBackend->OnConnect(want);
429 return nullptr;
430 }
431
OnDisConnect(int32_t instanceId,const OHOS::AAFwk::Want & want)432 void PaContainer::OnDisConnect(int32_t instanceId, const OHOS::AAFwk::Want& want)
433 {
434 LOGI("OnDisConnect with id %{private}d", instanceId);
435 auto container = AceEngine::Get().GetContainer(instanceId);
436 CHECK_NULL_VOID(container);
437 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
438 auto back = aceContainer->GetBackend();
439 CHECK_NULL_VOID(back);
440 auto paBackend = AceType::DynamicCast<PaBackend>(back);
441 CHECK_NULL_VOID(paBackend);
442 paBackend->OnDisConnect(want);
443 }
444
OnCommand(const OHOS::AAFwk::Want & want,int startId,int32_t instanceId)445 void PaContainer::OnCommand(const OHOS::AAFwk::Want &want, int startId, int32_t instanceId)
446 {
447 LOGI("OnCommand with id %{private}d", instanceId);
448 auto container = AceEngine::Get().GetContainer(instanceId);
449 CHECK_NULL_VOID(container);
450 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
451 auto back = aceContainer->GetBackend();
452 CHECK_NULL_VOID(back);
453 auto paBackend = AceType::DynamicCast<PaBackend>(back);
454 CHECK_NULL_VOID(paBackend);
455 paBackend->OnCommand(want, startId);
456 }
457
OnShare(int32_t instanceId,int64_t formId,OHOS::AAFwk::WantParams & wantParams)458 bool PaContainer::OnShare(int32_t instanceId, int64_t formId, OHOS::AAFwk::WantParams &wantParams)
459 {
460 auto container = AceEngine::Get().GetContainer(instanceId);
461 CHECK_NULL_RETURN(container, false);
462 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
463 CHECK_NULL_RETURN(aceContainer, false);
464 auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
465 CHECK_NULL_RETURN(paBackend, false);
466 return paBackend->OnShare(formId, wantParams);
467 }
468
Call(int32_t instanceId,const Uri & uri,const std::string & method,const std::string & arg,const AppExecFwk::PacMap & pacMap)469 std::shared_ptr<AppExecFwk::PacMap> PaContainer::Call(int32_t instanceId, const Uri& uri,
470 const std::string& method, const std::string& arg, const AppExecFwk::PacMap& pacMap)
471 {
472 std::shared_ptr<AppExecFwk::PacMap> ret = nullptr;
473 auto container = AceEngine::Get().GetContainer(instanceId);
474 CHECK_NULL_RETURN(container, ret);
475 auto aceContainer = AceType::DynamicCast<PaContainer>(container);
476 auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend());
477 CHECK_NULL_RETURN(back, ret);
478 ret = back->Call(uri, method, arg, pacMap);
479 return ret;
480 }
481 } // namespace OHOS::Ace::Platform
482