diff --git a/frameworks/ets/ani/ani_common/src/ani_common_start_options.cpp b/frameworks/ets/ani/ani_common/src/ani_common_start_options.cpp index 11c8377ca1754279d2c3c3d6063f592b89e62c7c..f6833cfce363a761c974a502bb76b88fb1c30504 100644 --- a/frameworks/ets/ani/ani_common/src/ani_common_start_options.cpp +++ b/frameworks/ets/ani/ani_common/src/ani_common_start_options.cpp @@ -337,7 +337,6 @@ void UnWrapOpenLinkOptions( if ((status = env->Object_GetPropertyByName_Boolean(optionsObj, APP_LINKING_ONLY.c_str(), &aniAppLinkingOnly)) == ANI_OK) { bool appLinkingOnly = aniAppLinkingOnly; - AppExecFwk::GetFieldBoolByName(env, optionsObj, "appLinkingOnly", appLinkingOnly); openLinkOptions.SetAppLinkingOnly(appLinkingOnly); want.SetParam(APP_LINKING_ONLY, appLinkingOnly); } diff --git a/frameworks/ets/ani/ui_ability/src/ets_ability_context.cpp b/frameworks/ets/ani/ui_ability/src/ets_ability_context.cpp index 9db7a7cf3d8d1a890163323737fc1d79013aa82c..a4a738621f5742702ad79956ef04ecddd377b5df 100644 --- a/frameworks/ets/ani/ui_ability/src/ets_ability_context.cpp +++ b/frameworks/ets/ani/ui_ability/src/ets_ability_context.cpp @@ -1463,20 +1463,20 @@ void EtsAbilityContext::CreateOpenLinkTask(ani_env *env, const ani_object callba RuntimeTask task = [etsVm, callbackRef] (int resultCode, const AAFwk::Want &want, bool isInner) { TAG_LOGD(AAFwkTag::CONTEXT, "start async callback"); ani_status status = ANI_ERROR; - ani_env *env = nullptr; - if ((status = etsVm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { + ani_env *taskEnv = nullptr; + if ((status = etsVm->GetEnv(ANI_VERSION_1, &taskEnv)) != ANI_OK) { TAG_LOGE(AAFwkTag::CONTEXT, "status: %{public}d", status); return; } - ani_object abilityResult = AppExecFwk::WrapAbilityResult(env, resultCode, want); + ani_object abilityResult = AppExecFwk::WrapAbilityResult(taskEnv, resultCode, want); if (abilityResult == nullptr) { TAG_LOGW(AAFwkTag::CONTEXT, "null abilityResult"); isInner = true; resultCode = ERR_INVALID_VALUE; } auto errCode = isInner ? resultCode : 0; - AppExecFwk::AsyncCallback(env, reinterpret_cast(callbackRef), - EtsErrorUtil::CreateErrorByNativeErr(env, errCode), abilityResult); + AppExecFwk::AsyncCallback(taskEnv, reinterpret_cast(callbackRef), + EtsErrorUtil::CreateErrorByNativeErr(taskEnv, errCode), abilityResult); }; requestCode = GenerateRequestCode(); context->InsertResultCallbackTask(requestCode, std::move(task)); 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 197078cfbd39c9ef5be60049d4f197b5c26787ca..4ef63e1d529d6f175735889d2afcc6fa6ffc03cf 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 @@ -728,6 +728,7 @@ void EtsUIExtensionContentSession::SetWindowPrivacyMode( TAG_LOGE(AAFwkTag::UI_EXT, "status: %{public}d", status); errorObj = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INNER); AppExecFwk::AsyncCallback(env, callbackObj, errorObj, nullptr); + env->GlobalReference_Delete(callbackRef); return; } SetWindowPrivacyModeInner(env, isPrivacyMode, callbackObj, etsVm, callbackRef); @@ -739,28 +740,28 @@ void EtsUIExtensionContentSession::SetWindowPrivacyModeInner(ani_env *env, ani_b ani_object errorObj = nullptr; auto task = [uiWindow = uiWindow_, isPrivacyMode, etsVm, callbackRef]() { ani_status status = ANI_ERROR; - ani_env *env = nullptr; - if ((status = etsVm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK || env == nullptr) { + ani_env *taskEnv = nullptr; + if ((status = etsVm->GetEnv(ANI_VERSION_1, &taskEnv)) != ANI_OK || taskEnv == nullptr) { TAG_LOGE(AAFwkTag::UI_EXT, "status: %{public}d", status); return; } ani_object errorObj = nullptr; if (uiWindow == nullptr) { TAG_LOGE(AAFwkTag::UI_EXT, "null uiWindow"); - errorObj = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INNER); - AppExecFwk::AsyncCallback(env, reinterpret_cast(callbackRef), errorObj, nullptr); - env->GlobalReference_Delete(callbackRef); + errorObj = EtsErrorUtil::CreateError(taskEnv, AbilityErrorCode::ERROR_CODE_INNER); + AppExecFwk::AsyncCallback(taskEnv, reinterpret_cast(callbackRef), errorObj, nullptr); + taskEnv->GlobalReference_Delete(callbackRef); return; } auto ret = uiWindow->SetPrivacyMode(isPrivacyMode); if (ret == Rosen::WMError::WM_OK) { - errorObj = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_OK); - AppExecFwk::AsyncCallback(env, reinterpret_cast(callbackRef), errorObj, nullptr); - env->GlobalReference_Delete(callbackRef); + errorObj = EtsErrorUtil::CreateError(taskEnv, AbilityErrorCode::ERROR_OK); + AppExecFwk::AsyncCallback(taskEnv, reinterpret_cast(callbackRef), errorObj, nullptr); + taskEnv->GlobalReference_Delete(callbackRef); } else { - errorObj = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INNER); - AppExecFwk::AsyncCallback(env, reinterpret_cast(callbackRef), errorObj, nullptr); - env->GlobalReference_Delete(callbackRef); + errorObj = EtsErrorUtil::CreateError(taskEnv, AbilityErrorCode::ERROR_CODE_INNER); + AppExecFwk::AsyncCallback(taskEnv, reinterpret_cast(callbackRef), errorObj, nullptr); + taskEnv->GlobalReference_Delete(callbackRef); } }; if (AniTask::AniSendEvent(task) != ANI_OK) { diff --git a/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_context.cpp b/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_context.cpp index 09f8b832eec5b28823f003cf82f58d9e53d9d429..a3a7d7fd677e4aa1ef815cba4fcd0bb62fe13e5b 100644 --- a/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_context.cpp +++ b/frameworks/ets/ani/ui_extension_ability/src/ets_ui_extension_context.cpp @@ -903,7 +903,7 @@ void EtsUIExtensionContext::OpenAtomicServiceInner(ani_env *env, ani_object aniO TAG_LOGE(AAFwkTag::UI_EXT, "status: %{public}d", status); return; } - RuntimeTask task = [etsVm, element = want.GetElement(), startTime, &observer = freeInstallObserver_]( + RuntimeTask task = [etsVm, element = want.GetElement(), startTime, observer = freeInstallObserver_]( int resultCode, const AAFwk::Want &want, bool isInner) { ani_env *env = nullptr; if (etsVm->GetEnv(ANI_VERSION_1, &env) != ANI_OK || env == nullptr) { @@ -1141,7 +1141,7 @@ ani_object CreateEtsUIExtensionContext(ani_env *env, std::shared_ptr(EtsUIExtensionContext::ReportDrawnCompleted)}, ani_native_function { "nativeOpenAtomicService", SIGNATURE_OPEN_ATOMIC_SERVICE, reinterpret_cast(EtsUIExtensionContext::OpenAtomicService) }, - ani_native_function { "nativeOpenLinkSync", SIGNATURE_OPEN_LINK, + ani_native_function { "nativeOpenLink", SIGNATURE_OPEN_LINK, reinterpret_cast(EtsUIExtensionContext::OpenLink) }, }; if ((status = env->Class_BindNativeMethods(cls, functions.data(), functions.size())) != ANI_OK) { diff --git a/frameworks/ets/ets/application/UIExtensionContext.ets b/frameworks/ets/ets/application/UIExtensionContext.ets index 6f2d70e1c4ea060f0959770e6eac814b2c5e5689..a66dbb59998e49de4d7250f654ee5f82d6e8aea2 100644 --- a/frameworks/ets/ets/application/UIExtensionContext.ets +++ b/frameworks/ets/ets/application/UIExtensionContext.ets @@ -71,7 +71,7 @@ export default class UIExtensionContext extends ExtensionContext { private native nativeSetHostPageOverlayForbidden(isForbidden: boolean): void; native setColorMode(colorMode: ConfigurationConstant.ColorMode): void; native nativeReportDrawnCompleted(callback:AsyncCallbackWrapper): void; - private native nativeOpenLinkSync(link: string, syncCallback:AsyncCallbackWrapper, + private native nativeOpenLink(link: string, syncCallback:AsyncCallbackWrapper, options?: OpenLinkOptions, callback?: AsyncCallbackWrapper): void; private native nativeOpenAtomicService(appId: string, syncCallback: AsyncCallbackWrapper, options?: AtomicServiceOptions): void; @@ -305,7 +305,7 @@ export default class UIExtensionContext extends ExtensionContext { } }); taskpool.execute(() => { - this.nativeOpenLinkSync(link, syncCall, finalOptions, callParam); + this.nativeOpenLink(link, syncCall, finalOptions, callParam); }); }); }