diff --git a/adapter/ohos/entrance/ace_ability.cpp b/adapter/ohos/entrance/ace_ability.cpp index 77b3fc7b..91a5818b 100644 --- a/adapter/ohos/entrance/ace_ability.cpp +++ b/adapter/ohos/entrance/ace_ability.cpp @@ -471,6 +471,7 @@ void AceAbility::OnNewWant(const Want& want) Ability::OnNewWant(want); std::string params = want.GetStringParam(START_PARAMS_KEY); Platform::AceContainer::OnNewRequest(abilityId_, params); + Platform::AceContainer::OnNewWant(abilityId_); LOGI("AceAbility::OnNewWant called End"); } diff --git a/adapter/ohos/entrance/ace_container.cpp b/adapter/ohos/entrance/ace_container.cpp index 3e6b384c..fb25d424 100644 --- a/adapter/ohos/entrance/ace_container.cpp +++ b/adapter/ohos/entrance/ace_container.cpp @@ -362,6 +362,25 @@ void AceContainer::OnInactive(int32_t instanceId) }, TaskExecutor::TaskType::UI); } +void AceContainer::OnNewWant(int32_t instanceId) +{ + std::string data = ""; + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + LOGE("container is null, OnNewWant failed."); + return; + } + + ContainerScope scope(instanceId); + auto front = container->GetFrontend(); + if (!front) { + LOGE("front is null, OnNewWant failed."); + return; + } + + front->OnNewWant(data); +} + bool AceContainer::OnStartContinuation(int32_t instanceId) { auto container = AceEngine::Get().GetContainer(instanceId); diff --git a/adapter/ohos/entrance/ace_container.h b/adapter/ohos/entrance/ace_container.h index eeb22f6a..c9fea610 100644 --- a/adapter/ohos/entrance/ace_container.h +++ b/adapter/ohos/entrance/ace_container.h @@ -226,6 +226,7 @@ public: static void OnHide(int32_t instanceId); static void OnActive(int32_t instanceId); static void OnInactive(int32_t instanceId); + static void OnNewWant(int32_t instanceId); static bool OnStartContinuation(int32_t instanceId); static std::string OnSaveData(int32_t instanceId); static bool OnRestoreData(int32_t instanceId, const std::string& data); diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp index 7a30e393..33865914 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.cpp @@ -1335,6 +1335,20 @@ void JsiDeclarativeEngine::OnInactive() CallAppFunc("onInactive"); } +void JsiDeclarativeEngine::OnNewWant(const std::string& data) +{ + LOGI("JsiDeclarativeEngine OnNewWant called."); + shared_ptr runtime = engineInstance_->GetJsRuntime(); + if (!runtime) { + LOGE("OnNewWant failed, runtime is null."); + return; + } + + shared_ptr object = runtime->NewObject(); + std::vector> argv = { object }; + CallAppFunc("onNewWant", argv); +} + bool JsiDeclarativeEngine::OnStartContinuation() { LOGI("JsiDeclarativeEngine OnStartContinuation"); diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h index 73ef8c79..5eb5fba9 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h @@ -224,6 +224,8 @@ public: void OnInactive() override; + void OnNewWant(const std::string& data) override; + bool OnStartContinuation() override; void OnCompleteContinuation(int32_t code) override;