123b3eb3cSopenharmony_ci/* 223b3eb3cSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 323b3eb3cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 423b3eb3cSopenharmony_ci * you may not use this file except in compliance with the License. 523b3eb3cSopenharmony_ci * You may obtain a copy of the License at 623b3eb3cSopenharmony_ci * 723b3eb3cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 823b3eb3cSopenharmony_ci * 923b3eb3cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1023b3eb3cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1123b3eb3cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1223b3eb3cSopenharmony_ci * See the License for the specific language governing permissions and 1323b3eb3cSopenharmony_ci * limitations under the License. 1423b3eb3cSopenharmony_ci */ 1523b3eb3cSopenharmony_ci 1623b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/pa_container.h" 1723b3eb3cSopenharmony_ci 1823b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/file_asset_provider_impl.h" 1923b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/hap_asset_provider_impl.h" 2023b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/pa_engine/engine/common/js_backend_engine_loader.h" 2123b3eb3cSopenharmony_ci#include "adapter/ohos/entrance/pa_engine/pa_backend.h" 2223b3eb3cSopenharmony_ci#include "base/log/ace_trace.h" 2323b3eb3cSopenharmony_ci#include "base/log/event_report.h" 2423b3eb3cSopenharmony_ci#include "base/log/log.h" 2523b3eb3cSopenharmony_ci#include "base/subwindow/subwindow_manager.h" 2623b3eb3cSopenharmony_ci#include "base/utils/system_properties.h" 2723b3eb3cSopenharmony_ci#include "base/utils/utils.h" 2823b3eb3cSopenharmony_ci#include "core/common/ace_engine.h" 2923b3eb3cSopenharmony_ci#include "core/common/asset_manager_impl.h" 3023b3eb3cSopenharmony_ci#include "core/common/platform_window.h" 3123b3eb3cSopenharmony_ci 3223b3eb3cSopenharmony_cinamespace OHOS::Ace::Platform { 3323b3eb3cSopenharmony_cinamespace { 3423b3eb3cSopenharmony_ci 3523b3eb3cSopenharmony_ciconstexpr char ARK_PA_ENGINE_SHARED_LIB[] = "libace_engine_pa_ark.z.so"; 3623b3eb3cSopenharmony_ci 3723b3eb3cSopenharmony_ciconst char* GetPaEngineSharedLibrary() 3823b3eb3cSopenharmony_ci{ 3923b3eb3cSopenharmony_ci return ARK_PA_ENGINE_SHARED_LIB; 4023b3eb3cSopenharmony_ci} 4123b3eb3cSopenharmony_ci 4223b3eb3cSopenharmony_ci} // namespace 4323b3eb3cSopenharmony_ci 4423b3eb3cSopenharmony_ciPaContainer::PaContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options, 4523b3eb3cSopenharmony_ci std::unique_ptr<PlatformEventCallback> callback) 4623b3eb3cSopenharmony_ci : instanceId_(instanceId), paAbility_(paAbility) 4723b3eb3cSopenharmony_ci{ 4823b3eb3cSopenharmony_ci ACE_DCHECK(callback); 4923b3eb3cSopenharmony_ci type_ = options.type; 5023b3eb3cSopenharmony_ci hapPath_ = options.hapPath; 5123b3eb3cSopenharmony_ci workerPath_ = options.workerPath; 5223b3eb3cSopenharmony_ci InitializeBackend(options.language); 5323b3eb3cSopenharmony_ci platformEventCallback_ = std::move(callback); 5423b3eb3cSopenharmony_ci} 5523b3eb3cSopenharmony_ci 5623b3eb3cSopenharmony_civoid PaContainer::InitializeBackend(SrcLanguage language) 5723b3eb3cSopenharmony_ci{ 5823b3eb3cSopenharmony_ci // create backend 5923b3eb3cSopenharmony_ci backend_ = Backend::Create(); 6023b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(backend_); 6123b3eb3cSopenharmony_ci CHECK_NULL_VOID(paBackend); 6223b3eb3cSopenharmony_ci 6323b3eb3cSopenharmony_ci // set JS engine, init in JS thread 6423b3eb3cSopenharmony_ci auto& loader = JsBackendEngineLoader::Get(GetPaEngineSharedLibrary()); 6523b3eb3cSopenharmony_ci auto jsEngine = loader.CreateJsBackendEngine(instanceId_); 6623b3eb3cSopenharmony_ci jsEngine->AddExtraNativeObject("ability", paAbility_); 6723b3eb3cSopenharmony_ci jsEngine->SetNeedDebugBreakPoint(AceApplicationInfo::GetInstance().IsNeedDebugBreakPoint()); 6823b3eb3cSopenharmony_ci jsEngine->SetDebugVersion(AceApplicationInfo::GetInstance().IsDebugVersion()); 6923b3eb3cSopenharmony_ci jsEngine->SetHapPath(hapPath_); 7023b3eb3cSopenharmony_ci jsEngine->SetWorkerPath(workerPath_); 7123b3eb3cSopenharmony_ci paBackend->SetJsEngine(jsEngine); 7223b3eb3cSopenharmony_ci 7323b3eb3cSopenharmony_ci ACE_DCHECK(backend_); 7423b3eb3cSopenharmony_ci backend_->Initialize(type_, language); 7523b3eb3cSopenharmony_ci} 7623b3eb3cSopenharmony_ci 7723b3eb3cSopenharmony_ciRefPtr<PaContainer> PaContainer::GetContainer(int32_t instanceId) 7823b3eb3cSopenharmony_ci{ 7923b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 8023b3eb3cSopenharmony_ci return AceType::DynamicCast<PaContainer>(container); 8123b3eb3cSopenharmony_ci} 8223b3eb3cSopenharmony_ci 8323b3eb3cSopenharmony_civoid PaContainer::CreateContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options, 8423b3eb3cSopenharmony_ci std::unique_ptr<PlatformEventCallback> callback) 8523b3eb3cSopenharmony_ci{ 8623b3eb3cSopenharmony_ci auto aceContainer = AceType::MakeRefPtr<PaContainer>(instanceId, paAbility, options, std::move(callback)); 8723b3eb3cSopenharmony_ci AceEngine::Get().AddContainer(instanceId, aceContainer); 8823b3eb3cSopenharmony_ci 8923b3eb3cSopenharmony_ci auto back = aceContainer->GetBackend(); 9023b3eb3cSopenharmony_ci CHECK_NULL_VOID(back); 9123b3eb3cSopenharmony_ci back->UpdateState(Backend::State::ON_CREATE); 9223b3eb3cSopenharmony_ci} 9323b3eb3cSopenharmony_ci 9423b3eb3cSopenharmony_cibool PaContainer::RunPa(int32_t instanceId, const std::string& content, const OHOS::AAFwk::Want& want) 9523b3eb3cSopenharmony_ci{ 9623b3eb3cSopenharmony_ci LOGI("PA: PaContainer RunPa start"); 9723b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 9823b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 9923b3eb3cSopenharmony_ci ContainerScope scope(instanceId); 10023b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 10123b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 10223b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 10323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 10423b3eb3cSopenharmony_ci paBackend->RunPa(content, want); 10523b3eb3cSopenharmony_ci return true; 10623b3eb3cSopenharmony_ci} 10723b3eb3cSopenharmony_ci 10823b3eb3cSopenharmony_cibool PaContainer::OnCreate(int32_t instanceId, const OHOS::AAFwk::Want& want) 10923b3eb3cSopenharmony_ci{ 11023b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnCreate start"); 11123b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 11223b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 11323b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 11423b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 11523b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 11623b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 11723b3eb3cSopenharmony_ci paBackend->OnCreate(want); 11823b3eb3cSopenharmony_ci return true; 11923b3eb3cSopenharmony_ci} 12023b3eb3cSopenharmony_ci 12123b3eb3cSopenharmony_cibool PaContainer::OnDelete(int32_t instanceId, int64_t formId) 12223b3eb3cSopenharmony_ci{ 12323b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnDelete start"); 12423b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 12523b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 12623b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 12723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 12823b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 12923b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 13023b3eb3cSopenharmony_ci paBackend->OnDelete(formId); 13123b3eb3cSopenharmony_ci return true; 13223b3eb3cSopenharmony_ci} 13323b3eb3cSopenharmony_ci 13423b3eb3cSopenharmony_cibool PaContainer::OnTriggerEvent(int32_t instanceId, int64_t formId, const std::string& message) 13523b3eb3cSopenharmony_ci{ 13623b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnTriggerEvent start"); 13723b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 13823b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 13923b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 14023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 14123b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 14223b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 14323b3eb3cSopenharmony_ci paBackend->OnTriggerEvent(formId, message); 14423b3eb3cSopenharmony_ci return true; 14523b3eb3cSopenharmony_ci} 14623b3eb3cSopenharmony_ci 14723b3eb3cSopenharmony_ciint32_t PaContainer::OnAcquireFormState(int32_t instanceId, const OHOS::AAFwk::Want& want) 14823b3eb3cSopenharmony_ci{ 14923b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnAcquireFormState start"); 15023b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 15123b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, -1); 15223b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 15323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, -1); 15423b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 15523b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, -1); 15623b3eb3cSopenharmony_ci int32_t formState = paBackend->OnAcquireFormState(want); 15723b3eb3cSopenharmony_ci return formState; 15823b3eb3cSopenharmony_ci} 15923b3eb3cSopenharmony_ci 16023b3eb3cSopenharmony_cibool PaContainer::OnUpdate(int32_t instanceId, int64_t formId) 16123b3eb3cSopenharmony_ci{ 16223b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnUpdate start"); 16323b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 16423b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 16523b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 16623b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 16723b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 16823b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 16923b3eb3cSopenharmony_ci paBackend->OnUpdate(formId); 17023b3eb3cSopenharmony_ci return true; 17123b3eb3cSopenharmony_ci} 17223b3eb3cSopenharmony_ci 17323b3eb3cSopenharmony_cibool PaContainer::OnCastTemptoNormal(int32_t instanceId, int64_t formId) 17423b3eb3cSopenharmony_ci{ 17523b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnCastTemptoNormal start"); 17623b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 17723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 17823b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 17923b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 18023b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 18123b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 18223b3eb3cSopenharmony_ci paBackend->OnCastTemptoNormal(formId); 18323b3eb3cSopenharmony_ci return true; 18423b3eb3cSopenharmony_ci} 18523b3eb3cSopenharmony_ci 18623b3eb3cSopenharmony_cibool PaContainer::OnVisibilityChanged(int32_t instanceId, const std::map<int64_t, int32_t>& formEventsMap) 18723b3eb3cSopenharmony_ci{ 18823b3eb3cSopenharmony_ci LOGI("PA: PaContainer OnVisibilityChanged start"); 18923b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 19023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 19123b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 19223b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 19323b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 19423b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 19523b3eb3cSopenharmony_ci paBackend->OnVisibilityChanged(formEventsMap); 19623b3eb3cSopenharmony_ci return true; 19723b3eb3cSopenharmony_ci} 19823b3eb3cSopenharmony_ci 19923b3eb3cSopenharmony_ciAppExecFwk::FormProviderData PaContainer::GetFormData(int32_t instanceId) 20023b3eb3cSopenharmony_ci{ 20123b3eb3cSopenharmony_ci LOGI("PA: PaContainer GetFormData start"); 20223b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 20323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, AppExecFwk::FormProviderData()); 20423b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 20523b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, AppExecFwk::FormProviderData()); 20623b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 20723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, AppExecFwk::FormProviderData()); 20823b3eb3cSopenharmony_ci return paBackend->GetFormData(); 20923b3eb3cSopenharmony_ci} 21023b3eb3cSopenharmony_ci 21123b3eb3cSopenharmony_civoid PaContainer::Destroy() 21223b3eb3cSopenharmony_ci{ 21323b3eb3cSopenharmony_ci RefPtr<Backend> backend; 21423b3eb3cSopenharmony_ci backend_.Swap(backend); 21523b3eb3cSopenharmony_ci CHECK_NULL_VOID(backend); 21623b3eb3cSopenharmony_ci backend->UpdateState(Backend::State::ON_DESTROY); 21723b3eb3cSopenharmony_ci} 21823b3eb3cSopenharmony_ci 21923b3eb3cSopenharmony_civoid PaContainer::DestroyContainer(int32_t instanceId) 22023b3eb3cSopenharmony_ci{ 22123b3eb3cSopenharmony_ci LOGI("DestroyContainer with id %{private}d", instanceId); 22223b3eb3cSopenharmony_ci SubwindowManager::GetInstance()->CloseDialog(instanceId); 22323b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 22423b3eb3cSopenharmony_ci CHECK_NULL_VOID(container); 22523b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 22623b3eb3cSopenharmony_ci CHECK_NULL_VOID(aceContainer); 22723b3eb3cSopenharmony_ci aceContainer->Destroy(); 22823b3eb3cSopenharmony_ci} 22923b3eb3cSopenharmony_ci 23023b3eb3cSopenharmony_civoid PaContainer::AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath, 23123b3eb3cSopenharmony_ci const std::vector<std::string>& paths) 23223b3eb3cSopenharmony_ci{ 23323b3eb3cSopenharmony_ci auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId)); 23423b3eb3cSopenharmony_ci CHECK_NULL_VOID(container); 23523b3eb3cSopenharmony_ci RefPtr<AssetManagerImpl> assetManagerImpl; 23623b3eb3cSopenharmony_ci if (container->assetManager_) { 23723b3eb3cSopenharmony_ci assetManagerImpl = AceType::DynamicCast<AssetManagerImpl>(container->assetManager_); 23823b3eb3cSopenharmony_ci } else { 23923b3eb3cSopenharmony_ci assetManagerImpl = Referenced::MakeRefPtr<AssetManagerImpl>(); 24023b3eb3cSopenharmony_ci container->assetManager_ = assetManagerImpl; 24123b3eb3cSopenharmony_ci AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(assetManagerImpl); 24223b3eb3cSopenharmony_ci } 24323b3eb3cSopenharmony_ci CHECK_NULL_VOID(assetManagerImpl); 24423b3eb3cSopenharmony_ci if (!hapPath.empty()) { 24523b3eb3cSopenharmony_ci auto assetProvider = AceType::MakeRefPtr<HapAssetProviderImpl>(); 24623b3eb3cSopenharmony_ci if (assetProvider->Initialize(hapPath, paths)) { 24723b3eb3cSopenharmony_ci LOGI("Push AssetProvider to queue."); 24823b3eb3cSopenharmony_ci assetManagerImpl->PushBack(std::move(assetProvider)); 24923b3eb3cSopenharmony_ci } 25023b3eb3cSopenharmony_ci } 25123b3eb3cSopenharmony_ci if (!packagePath.empty()) { 25223b3eb3cSopenharmony_ci auto assetProvider = AceType::MakeRefPtr<FileAssetProviderImpl>(); 25323b3eb3cSopenharmony_ci if (assetProvider->Initialize(packagePath, paths)) { 25423b3eb3cSopenharmony_ci LOGI("Push AssetProvider to queue."); 25523b3eb3cSopenharmony_ci assetManagerImpl->PushBack(std::move(assetProvider)); 25623b3eb3cSopenharmony_ci } 25723b3eb3cSopenharmony_ci } 25823b3eb3cSopenharmony_ci} 25923b3eb3cSopenharmony_ci 26023b3eb3cSopenharmony_civoid PaContainer::AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath) 26123b3eb3cSopenharmony_ci{ 26223b3eb3cSopenharmony_ci auto container = AceType::DynamicCast<PaContainer>(AceEngine::Get().GetContainer(instanceId)); 26323b3eb3cSopenharmony_ci CHECK_NULL_VOID(container); 26423b3eb3cSopenharmony_ci RefPtr<AssetManager> assetManagerImpl; 26523b3eb3cSopenharmony_ci if (container->assetManager_) { 26623b3eb3cSopenharmony_ci assetManagerImpl = AceType::DynamicCast<AssetManagerImpl>(container->assetManager_); 26723b3eb3cSopenharmony_ci } else { 26823b3eb3cSopenharmony_ci assetManagerImpl = Referenced::MakeRefPtr<AssetManagerImpl>(); 26923b3eb3cSopenharmony_ci container->assetManager_ = assetManagerImpl; 27023b3eb3cSopenharmony_ci AceType::DynamicCast<PaBackend>(container->GetBackend())->SetAssetManager(assetManagerImpl); 27123b3eb3cSopenharmony_ci } 27223b3eb3cSopenharmony_ci CHECK_NULL_VOID(assetManagerImpl); 27323b3eb3cSopenharmony_ci assetManagerImpl->SetLibPath("default", libPath); 27423b3eb3cSopenharmony_ci} 27523b3eb3cSopenharmony_ci 27623b3eb3cSopenharmony_ciint32_t PaContainer::Insert(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value) 27723b3eb3cSopenharmony_ci{ 27823b3eb3cSopenharmony_ci LOGI("Insert with id %{public}d", instanceId); 27923b3eb3cSopenharmony_ci int32_t ret = 0; 28023b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 28123b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 28223b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 28323b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 28423b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 28523b3eb3cSopenharmony_ci ret = back->Insert(uri, value); 28623b3eb3cSopenharmony_ci return ret; 28723b3eb3cSopenharmony_ci} 28823b3eb3cSopenharmony_ci 28923b3eb3cSopenharmony_cistd::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> PaContainer::Query(int32_t instanceId, const Uri& uri, 29023b3eb3cSopenharmony_ci const std::vector<std::string>& columns, const OHOS::NativeRdb::DataAbilityPredicates& predicates) 29123b3eb3cSopenharmony_ci{ 29223b3eb3cSopenharmony_ci LOGI("Query with id %{public}d", instanceId); 29323b3eb3cSopenharmony_ci std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> ret; 29423b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 29523b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 29623b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 29723b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 29823b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 29923b3eb3cSopenharmony_ci ret = back->Query(uri, columns, predicates); 30023b3eb3cSopenharmony_ci return ret; 30123b3eb3cSopenharmony_ci} 30223b3eb3cSopenharmony_ci 30323b3eb3cSopenharmony_ciint32_t PaContainer::Update(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value, 30423b3eb3cSopenharmony_ci const OHOS::NativeRdb::DataAbilityPredicates& predicates) 30523b3eb3cSopenharmony_ci{ 30623b3eb3cSopenharmony_ci LOGI("Update with id %{public}d", instanceId); 30723b3eb3cSopenharmony_ci int32_t ret = 0; 30823b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 30923b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 31023b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 31123b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 31223b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 31323b3eb3cSopenharmony_ci ret = back->Update(uri, value, predicates); 31423b3eb3cSopenharmony_ci return ret; 31523b3eb3cSopenharmony_ci} 31623b3eb3cSopenharmony_ci 31723b3eb3cSopenharmony_ciint32_t PaContainer::Delete( 31823b3eb3cSopenharmony_ci int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::DataAbilityPredicates& predicates) 31923b3eb3cSopenharmony_ci{ 32023b3eb3cSopenharmony_ci LOGI("Delete with id %{public}d", instanceId); 32123b3eb3cSopenharmony_ci int32_t ret = 0; 32223b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 32323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 32423b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 32523b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 32623b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 32723b3eb3cSopenharmony_ci ret = back->Delete(uri, predicates); 32823b3eb3cSopenharmony_ci return ret; 32923b3eb3cSopenharmony_ci} 33023b3eb3cSopenharmony_ci 33123b3eb3cSopenharmony_ciint32_t PaContainer::BatchInsert( 33223b3eb3cSopenharmony_ci int32_t instanceId, const Uri& uri, const std::vector<OHOS::NativeRdb::ValuesBucket>& values) 33323b3eb3cSopenharmony_ci{ 33423b3eb3cSopenharmony_ci LOGI("BatchInsert with id %{public}d", instanceId); 33523b3eb3cSopenharmony_ci int32_t ret = 0; 33623b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 33723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 33823b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 33923b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 34023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 34123b3eb3cSopenharmony_ci ret = back->BatchInsert(uri, values); 34223b3eb3cSopenharmony_ci return ret; 34323b3eb3cSopenharmony_ci} 34423b3eb3cSopenharmony_ci 34523b3eb3cSopenharmony_cistd::string PaContainer::GetType(int32_t instanceId, const Uri& uri) 34623b3eb3cSopenharmony_ci{ 34723b3eb3cSopenharmony_ci LOGI("GetType with id %{public}d", instanceId); 34823b3eb3cSopenharmony_ci std::string ret; 34923b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 35023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 35123b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 35223b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 35323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 35423b3eb3cSopenharmony_ci ret = back->GetType(uri); 35523b3eb3cSopenharmony_ci return ret; 35623b3eb3cSopenharmony_ci} 35723b3eb3cSopenharmony_ci 35823b3eb3cSopenharmony_cistd::vector<std::string> PaContainer::GetFileTypes( 35923b3eb3cSopenharmony_ci int32_t instanceId, const Uri& uri, const std::string& mimeTypeFilter) 36023b3eb3cSopenharmony_ci{ 36123b3eb3cSopenharmony_ci LOGI("GetFileTypes with id %{public}d", instanceId); 36223b3eb3cSopenharmony_ci std::vector<std::string> ret; 36323b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 36423b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 36523b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 36623b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 36723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 36823b3eb3cSopenharmony_ci ret = back->GetFileTypes(uri, mimeTypeFilter); 36923b3eb3cSopenharmony_ci return ret; 37023b3eb3cSopenharmony_ci} 37123b3eb3cSopenharmony_ci 37223b3eb3cSopenharmony_ciint32_t PaContainer::OpenFile(int32_t instanceId, const Uri& uri, const std::string& mode) 37323b3eb3cSopenharmony_ci{ 37423b3eb3cSopenharmony_ci LOGI("OpenFile with id %{public}d", instanceId); 37523b3eb3cSopenharmony_ci int32_t ret = 0; 37623b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 37723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 37823b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 37923b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 38023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 38123b3eb3cSopenharmony_ci ret = back->OpenFile(uri, mode); 38223b3eb3cSopenharmony_ci return ret; 38323b3eb3cSopenharmony_ci} 38423b3eb3cSopenharmony_ci 38523b3eb3cSopenharmony_ciint32_t PaContainer::OpenRawFile(int32_t instanceId, const Uri& uri, const std::string& mode) 38623b3eb3cSopenharmony_ci{ 38723b3eb3cSopenharmony_ci LOGI("OpenRawFile with id %{public}d", instanceId); 38823b3eb3cSopenharmony_ci int32_t ret = 0; 38923b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 39023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 39123b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 39223b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 39323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 39423b3eb3cSopenharmony_ci ret = back->OpenRawFile(uri, mode); 39523b3eb3cSopenharmony_ci return ret; 39623b3eb3cSopenharmony_ci} 39723b3eb3cSopenharmony_ci 39823b3eb3cSopenharmony_ciUri PaContainer::NormalizeUri(int32_t instanceId, const Uri& uri) 39923b3eb3cSopenharmony_ci{ 40023b3eb3cSopenharmony_ci LOGI("NormalizeUri with id %{public}d", instanceId); 40123b3eb3cSopenharmony_ci Uri ret(""); 40223b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 40323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 40423b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 40523b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 40623b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 40723b3eb3cSopenharmony_ci ret = back->NormalizeUri(uri); 40823b3eb3cSopenharmony_ci return ret; 40923b3eb3cSopenharmony_ci} 41023b3eb3cSopenharmony_ci 41123b3eb3cSopenharmony_ciUri PaContainer::DenormalizeUri(int32_t instanceId, const Uri& uri) 41223b3eb3cSopenharmony_ci{ 41323b3eb3cSopenharmony_ci LOGI("DenormalizeUri with id %{public}d", instanceId); 41423b3eb3cSopenharmony_ci Uri ret(""); 41523b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 41623b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 41723b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 41823b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 41923b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 42023b3eb3cSopenharmony_ci ret = back->DenormalizeUri(uri); 42123b3eb3cSopenharmony_ci return ret; 42223b3eb3cSopenharmony_ci} 42323b3eb3cSopenharmony_ci 42423b3eb3cSopenharmony_cisptr<IRemoteObject> PaContainer::OnConnect(int32_t instanceId, const OHOS::AAFwk::Want& want) 42523b3eb3cSopenharmony_ci{ 42623b3eb3cSopenharmony_ci LOGI("OnConnect with id %{private}d", instanceId); 42723b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 42823b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, nullptr); 42923b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 43023b3eb3cSopenharmony_ci auto back = aceContainer->GetBackend(); 43123b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, nullptr); 43223b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(back); 43323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, nullptr); 43423b3eb3cSopenharmony_ci return paBackend->OnConnect(want); 43523b3eb3cSopenharmony_ci return nullptr; 43623b3eb3cSopenharmony_ci} 43723b3eb3cSopenharmony_ci 43823b3eb3cSopenharmony_civoid PaContainer::OnDisConnect(int32_t instanceId, const OHOS::AAFwk::Want& want) 43923b3eb3cSopenharmony_ci{ 44023b3eb3cSopenharmony_ci LOGI("OnDisConnect with id %{private}d", instanceId); 44123b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 44223b3eb3cSopenharmony_ci CHECK_NULL_VOID(container); 44323b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 44423b3eb3cSopenharmony_ci auto back = aceContainer->GetBackend(); 44523b3eb3cSopenharmony_ci CHECK_NULL_VOID(back); 44623b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(back); 44723b3eb3cSopenharmony_ci CHECK_NULL_VOID(paBackend); 44823b3eb3cSopenharmony_ci paBackend->OnDisConnect(want); 44923b3eb3cSopenharmony_ci} 45023b3eb3cSopenharmony_ci 45123b3eb3cSopenharmony_civoid PaContainer::OnCommand(const OHOS::AAFwk::Want &want, int startId, int32_t instanceId) 45223b3eb3cSopenharmony_ci{ 45323b3eb3cSopenharmony_ci LOGI("OnCommand with id %{private}d", instanceId); 45423b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 45523b3eb3cSopenharmony_ci CHECK_NULL_VOID(container); 45623b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 45723b3eb3cSopenharmony_ci auto back = aceContainer->GetBackend(); 45823b3eb3cSopenharmony_ci CHECK_NULL_VOID(back); 45923b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(back); 46023b3eb3cSopenharmony_ci CHECK_NULL_VOID(paBackend); 46123b3eb3cSopenharmony_ci paBackend->OnCommand(want, startId); 46223b3eb3cSopenharmony_ci} 46323b3eb3cSopenharmony_ci 46423b3eb3cSopenharmony_cibool PaContainer::OnShare(int32_t instanceId, int64_t formId, OHOS::AAFwk::WantParams &wantParams) 46523b3eb3cSopenharmony_ci{ 46623b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 46723b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, false); 46823b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 46923b3eb3cSopenharmony_ci CHECK_NULL_RETURN(aceContainer, false); 47023b3eb3cSopenharmony_ci auto paBackend = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 47123b3eb3cSopenharmony_ci CHECK_NULL_RETURN(paBackend, false); 47223b3eb3cSopenharmony_ci return paBackend->OnShare(formId, wantParams); 47323b3eb3cSopenharmony_ci} 47423b3eb3cSopenharmony_ci 47523b3eb3cSopenharmony_cistd::shared_ptr<AppExecFwk::PacMap> PaContainer::Call(int32_t instanceId, const Uri& uri, 47623b3eb3cSopenharmony_ci const std::string& method, const std::string& arg, const AppExecFwk::PacMap& pacMap) 47723b3eb3cSopenharmony_ci{ 47823b3eb3cSopenharmony_ci std::shared_ptr<AppExecFwk::PacMap> ret = nullptr; 47923b3eb3cSopenharmony_ci auto container = AceEngine::Get().GetContainer(instanceId); 48023b3eb3cSopenharmony_ci CHECK_NULL_RETURN(container, ret); 48123b3eb3cSopenharmony_ci auto aceContainer = AceType::DynamicCast<PaContainer>(container); 48223b3eb3cSopenharmony_ci auto back = AceType::DynamicCast<PaBackend>(aceContainer->GetBackend()); 48323b3eb3cSopenharmony_ci CHECK_NULL_RETURN(back, ret); 48423b3eb3cSopenharmony_ci ret = back->Call(uri, method, arg, pacMap); 48523b3eb3cSopenharmony_ci return ret; 48623b3eb3cSopenharmony_ci} 48723b3eb3cSopenharmony_ci} // namespace OHOS::Ace::Platform 488