• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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