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