From 042a9bf389271a1e4e13f1da9e0414452fe04946 Mon Sep 17 00:00:00 2001 From: "m.furkankeskin" Date: Fri, 30 May 2025 00:42:55 +0300 Subject: [PATCH] Form Extension Ability side OnAcquireFormState function added. Signed-off-by: m.furkankeskin --- .../@ohos.app.form.FormExtensionAbility.ets | 6 ++++ .../include/sts_form_extension.h | 2 ++ .../src/sts_form_extension.cpp | 34 +++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/frameworks/ets/ani/form_extension_ability/ets/@ohos.app.form.FormExtensionAbility.ets b/frameworks/ets/ani/form_extension_ability/ets/@ohos.app.form.FormExtensionAbility.ets index ec46ff21057..3e6e4053c67 100644 --- a/frameworks/ets/ani/form_extension_ability/ets/@ohos.app.form.FormExtensionAbility.ets +++ b/frameworks/ets/ani/form_extension_ability/ets/@ohos.app.form.FormExtensionAbility.ets @@ -14,6 +14,7 @@ */ import formBindingData from '@ohos.app.form.formBindingData'; +import formInfo from '@ohos.app.form.formInfo'; import FormExtensionContext from './application/FormExtensionContext'; import Want from '@ohos.app.ability.Want'; @@ -53,6 +54,11 @@ export default class FormExtensionAbility { onRemoveForm(formId: string): void { console.log(`FormExtensionAbility onRemoveForm, formId: ${formId}`); } + + onAcquireFormState(want: Want) : formInfo.FormState { + console.log(`FormExtensionAbility onAcquireFormState`); + return formInfo.FormState.UNKNOWN; + } public onStop?: OnStopFn; } \ No newline at end of file diff --git a/frameworks/ets/ani/form_extension_ability/include/sts_form_extension.h b/frameworks/ets/ani/form_extension_ability/include/sts_form_extension.h index 31b5cf3671e..8b963c58930 100644 --- a/frameworks/ets/ani/form_extension_ability/include/sts_form_extension.h +++ b/frameworks/ets/ani/form_extension_ability/include/sts_form_extension.h @@ -49,6 +49,8 @@ public: void OnVisibilityChange(const std::map &formEventsMap) override; + FormState OnAcquireFormState(const Want &want) override; + sptr OnConnect(const OHOS::AAFwk::Want &want) override; void OnStop() override; diff --git a/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp b/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp index c8ccbbadf84..e6a6d73830b 100644 --- a/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp +++ b/frameworks/ets/ani/form_extension_ability/src/sts_form_extension.cpp @@ -560,6 +560,40 @@ void STSFormExtension::OnVisibilityChange(const std::map &form TAG_LOGI(AAFwkTag::FORM_EXT, "OnVisibilityChange End"); } +FormState STSFormExtension::OnAcquireFormState(const Want &want) { + TAG_LOGI(AAFwkTag::FORM_EXT, "call OnAcquireFormState"); + + const char* METHOD_NAME = "onAcquireFormState"; + const char* ANI_ARG_TYPE = "L@ohos/app/ability/Want/Want;"; + const char* ANI_RETURN_TYPE = "L@ohos/app/form/formInfo/FormState;"; + const std::string methodSignature = std::string(ANI_ARG_TYPE) + ":" + std::string(ANI_RETURN_TYPE); + + auto env = stsRuntime_.GetAniEnv(); + ani_object aniWant = OHOS::AppExecFwk::WrapWant(env, want); + + ani_status status = ANI_OK; + ani_method function; + if ((status = env->Class_FindMethod( + stsAbilityObj_->aniCls, METHOD_NAME, methodSignature.c_str(), &function))) { + TAG_LOGE(AAFwkTag::FORM_EXT, "Class_FindMethod status : %{public}d", status); + return FormState::UNKNOWN; + } + + ani_ref onAcquireFormStateResult; + status = env->Object_CallMethod_Ref(stsAbilityObj_->aniObj, function, &onAcquireFormStateResult, aniWant); + if (status != ANI_OK || onAcquireFormStateResult == nullptr) { + TAG_LOGE(AAFwkTag::FORM_EXT, "Failed to call method or retrieve result: %{public}d", status); + return FormState::UNKNOWN; + } + + int32_t onAcquireFormStateResult_Int; + env->EnumItem_GetValue_Int(static_cast(onAcquireFormStateResult), &onAcquireFormStateResult_Int); + + TAG_LOGI(AAFwkTag::FORM_EXT, "Form state result: %{public}d", onAcquireFormStateResult_Int); + + return static_cast(onAcquireFormStateResult_Int); +} + bool STSFormExtension::CreateAndFillRecordObject(ani_env *env, const std::map &formEventsMap, ani_object &recordObject) { -- Gitee