From 3180c268d869082bf5884eb7171f2f46538d93da Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Tue, 8 Jul 2025 14:28:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AD=E7=8E=AF=E2=80=9C=E5=9B=9E=E5=90=88Ab?= =?UTF-8?q?ilityStage,=20AbilityStageContext=EF=BC=8C=E5=9B=9E=E5=90=88ui?= =?UTF-8?q?=5Fextension=5Fability=E2=80=9D=E6=A3=80=E8=A7=86=E6=84=8F?= =?UTF-8?q?=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzezhong --- .../include/ets_ui_extension.h | 2 - .../ets_ui_extension_content_session.h | 2 +- .../src/ets_ui_extension_content_session.cpp | 49 ++++++++++--------- .../ui_extension_ability/ui_extension.cpp | 4 ++ .../ability_runtime/app/ets_ability_stage.cpp | 2 +- .../ability_runtime/app/ets_ability_stage.h | 2 +- 6 files changed, 34 insertions(+), 27 deletions(-) diff --git a/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension.h b/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension.h index 5316b90aad7..3148066bffb 100644 --- a/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension.h +++ b/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension.h @@ -161,8 +161,6 @@ private: std::shared_ptr etsObj_ = nullptr; std::shared_ptr shellContextRef_ = nullptr; std::mutex uiWindowMutex_; - std::map> uiWindowMap_; - std::set foregroundWindows_; std::map contentSessions_; int32_t screenMode_ = AAFwk::IDLE_SCREEN_MODE; std::shared_ptr screenModePtr_; diff --git a/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension_content_session.h b/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension_content_session.h index c829015e6bd..d4fea895644 100644 --- a/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension_content_session.h +++ b/frameworks/ets/ani/ui_extension_ability/include/ets_ui_extension_content_session.h @@ -101,7 +101,7 @@ private: ani_ref receiveDataCallback_ = nullptr; bool isRegistered_ = false; std::shared_ptr receiveDataForResultCallback_; - bool isSyncRegistered = false; + bool isSyncRegistered_ = false; std::shared_ptr listener_; bool isFirstTriggerBindModal_ = true; }; diff --git a/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_content_session.cpp b/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_content_session.cpp index f7000700459..cb965963194 100644 --- a/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_content_session.cpp +++ b/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_content_session.cpp @@ -276,21 +276,22 @@ void EtsUIExtensionContentSession::SendData(ani_env *env, ani_object object, ani void EtsUIExtensionContentSession::LoadContent(ani_env *env, ani_object object, ani_string path, ani_object storage) { - TAG_LOGD(AAFwkTag::UI_EXT, "called"); + TAG_LOGD(AAFwkTag::UI_EXT, "LoadContent called"); std::string contextPath; - ani_size sz {}; - env->String_GetUTF8Size(path, &sz); - contextPath.resize(sz + 1); - env->String_GetUTF8SubString(path, 0, sz, contextPath.data(), contextPath.size(), &sz); - + if (!OHOS::AppExecFwk::GetStdString(env, path, contextPath)) { + TAG_LOGE(AAFwkTag::UI_EXT, "invalid param"); + EtsErrorUtil::ThrowInvalidParamError(env, "Parameter error: Path must be a string."); + return; + } + TAG_LOGD(AAFwkTag::UI_EXT, "contextPath: %{public}s", contextPath.c_str()); if (uiWindow_ == nullptr || sessionInfo_ == nullptr) { TAG_LOGE(AAFwkTag::UI_EXT, "uiWindow_ or sessionInfo_ is nullptr"); EtsErrorUtil::ThrowErrorByNativeErr(env, static_cast(AbilityErrorCode::ERROR_CODE_INNER)); return; } - if (sessionInfo_->isAsyncModalBinding && isFirstTriggerBindModal_) { + TAG_LOGD(AAFwkTag::UI_EXT, "Trigger binding UIExtension modal window"); uiWindow_->TriggerBindModalUIExtension(); isFirstTriggerBindModal_ = false; } @@ -302,6 +303,7 @@ void EtsUIExtensionContentSession::LoadContent(ani_env *env, ani_object object, EtsErrorUtil::ThrowErrorByNativeErr(env, static_cast(AbilityErrorCode::ERROR_CODE_INNER)); } + TAG_LOGD(AAFwkTag::UI_EXT, "LoadContent end"); return; } @@ -321,10 +323,11 @@ void EtsUIExtensionContentSession::SetWindowBackgroundColor(ani_env *env, ani_st { TAG_LOGD(AAFwkTag::UI_EXT, "SetWindowBackgroundColor call"); std::string strColor; - ani_size sz {}; - env->String_GetUTF8Size(color, &sz); - strColor.resize(sz + 1); - env->String_GetUTF8SubString(color, 0, sz, strColor.data(), strColor.size(), &sz); + if (!OHOS::AppExecFwk::GetStdString(env, color, strColor)) { + TAG_LOGE(AAFwkTag::UI_EXT, "invalid param"); + EtsErrorUtil::ThrowInvalidParamError(env, "Parameter error: color must be a string."); + return; + } if (uiWindow_ == nullptr) { TAG_LOGE(AAFwkTag::UI_EXT, "uiWindow_ is nullptr"); EtsErrorUtil::ThrowError(env, AbilityErrorCode::ERROR_CODE_INNER); @@ -394,7 +397,7 @@ void EtsUIExtensionContentSession::SetReceiveDataCallback(ani_env *env, ani_obje TAG_LOGD(AAFwkTag::UI_EXT, "SetReceiveDataCallback end"); } -void EtsUIExtensionContentSession::SetReceiveDataCallbackRegister(ani_env* env, ani_object functionObj) +void EtsUIExtensionContentSession::SetReceiveDataCallbackRegister(ani_env *env, ani_object functionObj) { if (uiWindow_ == nullptr) { TAG_LOGE(AAFwkTag::UI_EXT, "uiWindow_ is nullptr"); @@ -419,19 +422,21 @@ void EtsUIExtensionContentSession::SetReceiveDataCallbackRegister(ani_env* env, } auto callbackRef = receiveDataCallback_; auto handler = std::make_shared(AppExecFwk::EventRunner::GetMainEventRunner()); - uiWindow_->RegisterTransferComponentDataListener([aniVM, handler, callbackRef] ( - const AAFwk::WantParams& wantParams) { - if (handler) { - handler->PostTask([aniVM, callbackRef, wantParams]() { - EtsUIExtensionContentSession::CallReceiveDataCallback(aniVM, callbackRef, wantParams); - }, "EtsUIExtensionContentSession:OnSetReceiveDataCallback"); - } - }); + uiWindow_->RegisterTransferComponentDataListener( + [aniVM, handler, callbackRef](const AAFwk::WantParams &wantParams) { + if (handler) { + handler->PostTask( + [aniVM, callbackRef, wantParams]() { + EtsUIExtensionContentSession::CallReceiveDataCallback(aniVM, callbackRef, wantParams); + }, + "EtsUIExtensionContentSession:OnSetReceiveDataCallback"); + } + }); isRegistered_ = true; } -void EtsUIExtensionContentSession::CallReceiveDataCallback(ani_vm* vm, ani_ref callbackRef, - const AAFwk::WantParams& wantParams) +void EtsUIExtensionContentSession::CallReceiveDataCallback(ani_vm *vm, ani_ref callbackRef, + const AAFwk::WantParams &wantParams) { TAG_LOGD(AAFwkTag::UI_EXT, "CallReceiveDataCallback call"); if (vm == nullptr) { diff --git a/frameworks/native/ability/native/ui_extension_ability/ui_extension.cpp b/frameworks/native/ability/native/ui_extension_ability/ui_extension.cpp index 4131cc0b350..60e55b30c0d 100755 --- a/frameworks/native/ability/native/ui_extension_ability/ui_extension.cpp +++ b/frameworks/native/ability/native/ui_extension_ability/ui_extension.cpp @@ -15,6 +15,10 @@ #include "ui_extension.h" +#include "ability_manager_client.h" +#include "array_wrapper.h" +#include "connection_manager.h" +#include "ets_ui_extension.h" #include "ets_ui_extension_instance.h" #include "ability_manager_client.h" #include "array_wrapper.h" diff --git a/frameworks/native/appkit/ability_runtime/app/ets_ability_stage.cpp b/frameworks/native/appkit/ability_runtime/app/ets_ability_stage.cpp index a6b0158e27d..844e932fb2d 100644 --- a/frameworks/native/appkit/ability_runtime/app/ets_ability_stage.cpp +++ b/frameworks/native/appkit/ability_runtime/app/ets_ability_stage.cpp @@ -42,7 +42,7 @@ namespace OHOS { namespace AbilityRuntime { AbilityStage *ETSAbilityStage::Create( - const std::unique_ptr& runtime, const AppExecFwk::HapModuleInfo& hapModuleInfo) + const std::unique_ptr &runtime, const AppExecFwk::HapModuleInfo &hapModuleInfo) { if (runtime == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "null runtime"); diff --git a/interfaces/kits/native/appkit/ability_runtime/app/ets_ability_stage.h b/interfaces/kits/native/appkit/ability_runtime/app/ets_ability_stage.h index 55eca830a9d..d1dd02a8985 100644 --- a/interfaces/kits/native/appkit/ability_runtime/app/ets_ability_stage.h +++ b/interfaces/kits/native/appkit/ability_runtime/app/ets_ability_stage.h @@ -32,7 +32,7 @@ namespace AbilityRuntime { class ETSAbilityStage : public AbilityStage { public: static AbilityStage *Create( - const std::unique_ptr& runtime, const AppExecFwk::HapModuleInfo& hapModuleInfo); + const std::unique_ptr &runtime, const AppExecFwk::HapModuleInfo &hapModuleInfo); ETSAbilityStage(ETSRuntime &etsRuntime, std::unique_ptr &&ETSAbilityStageObj); ~ETSAbilityStage() override {} -- Gitee