From 9799081866028d83d1a676ba07deffebe228e516 Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Tue, 24 Jun 2025 15:44:01 +0800 Subject: [PATCH] add ani uiabilitycontext SetMissionLabel Signed-off-by: zhangzezhong --- .../ets/ets/application/UIAbilityContext.ets | 26 ++++++++++++++- .../ability_runtime/sts_ability_context.cpp | 32 +++++++++++++++++++ .../ability_runtime/sts_ability_context.h | 2 +- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/frameworks/ets/ets/application/UIAbilityContext.ets b/frameworks/ets/ets/application/UIAbilityContext.ets index 5de1f3c64d0..cae287430d7 100644 --- a/frameworks/ets/ets/application/UIAbilityContext.ets +++ b/frameworks/ets/ets/application/UIAbilityContext.ets @@ -98,6 +98,8 @@ export default class UIAbilityContext extends Context { private native nativeBackToCallerAbilityWithResult(abilityResult: AbilityResult, requestCode: string, callback: AsyncCallbackWrapper): void; + private native nativeSetMissionLabel(label: string, callback: AsyncCallbackWrapper): void; + startAbility(want: Want, callback: AsyncCallback): void { let myCall = new AsyncCallbackWrapper(callback); taskpool.execute((): void => { @@ -373,7 +375,7 @@ export default class UIAbilityContext extends Context { }); }); } - + setColorMode(colorMode: ConfigurationConstant.ColorMode): void { this.nativeSetColorMode(colorMode); } @@ -392,4 +394,26 @@ export default class UIAbilityContext extends Context { }); }); } + + setMissionLabel(label: string, callback: AsyncCallback): void { + let syncCall = new AsyncCallbackWrapper(callback); + taskpool.execute((): void => { + this.nativeSetMissionLabel(label, syncCall); + }); + } + + setMissionLabel(label: string): Promise { + return new Promise((resolve: (data: undefined) => void, reject: (err: BusinessError) => void): void => { + let syncCall = new AsyncCallbackWrapper((err: BusinessError | null) => { + if (err == null || err.code == 0) { + resolve(undefined); + } else { + reject(err); + } + }); + taskpool.execute(() => { + this.nativeSetMissionLabel(label, syncCall); + }); + }); + } } diff --git a/frameworks/native/ability/native/ability_runtime/sts_ability_context.cpp b/frameworks/native/ability/native/ability_runtime/sts_ability_context.cpp index 3bc17f94740..68722d24e15 100644 --- a/frameworks/native/ability/native/ability_runtime/sts_ability_context.cpp +++ b/frameworks/native/ability/native/ability_runtime/sts_ability_context.cpp @@ -859,6 +859,35 @@ void StsAbilityContext::NativeBackToCallerAbilityWithResult(ani_env *env, ani_ob AppExecFwk::AsyncCallback(env, callBackObj, errorObject, nullptr); } +void StsAbilityContext::OnSetMissionLabel(ani_env *env, ani_object aniObj, ani_string labelObj, + ani_object callbackObj) +{ + TAG_LOGD(AAFwkTag::CONTEXT, "OnSetMissionLabel call"); + if (env == nullptr) { + TAG_LOGE(AAFwkTag::CONTEXT, "null env"); + return; + } + ani_object errorObject = nullptr; + std::string label; + if (!AppExecFwk::GetStdString(env, labelObj, label)) { + TAG_LOGE(AAFwkTag::CONTEXT, "Failed to parse label"); + errorObject = CreateStsInvalidParamError(env, "Failed to parse label."); + AppExecFwk::AsyncCallback(env, callbackObj, errorObject, nullptr); + return; + } + auto context = StsAbilityContext::GetAbilityContext(env, aniObj); + if (context == nullptr) { + TAG_LOGE(AAFwkTag::CONTEXT, "null context"); + AppExecFwk::AsyncCallback(env, callbackObj, + OHOS::AbilityRuntime::CreateStsErrorByNativeErr(env, + static_cast(AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT)), nullptr); + return; + } + auto errCode = context->SetMissionLabel(label); + errorObject = CreateStsErrorByNativeErr(env, static_cast(errCode)); + AppExecFwk::AsyncCallback(env, callbackObj, errorObject, nullptr); +} + bool BindNativeMethods(ani_env *env, ani_class &cls) { ani_status status = env->FindClass(UI_ABILITY_CONTEXT_CLASS_NAME, &cls); @@ -916,6 +945,9 @@ bool BindNativeMethods(ani_env *env, ani_class &cls) ani_native_function { "nativeBackToCallerAbilityWithResult", "Lability/abilityResult/AbilityResult;Lstd/core/String;Lutils/AbilityUtils/AsyncCallbackWrapper;:V", reinterpret_cast(StsAbilityContext::NativeBackToCallerAbilityWithResult) }, + ani_native_function { "nativeSetMissionLabel", + "Lstd/core/String;Lutils/AbilityUtils/AsyncCallbackWrapper;:V", + reinterpret_cast(StsAbilityContext::OnSetMissionLabel) }, }; status = env->Class_BindNativeMethods(cls, functions.data(), functions.size()); }); diff --git a/interfaces/kits/native/ability/native/ability_runtime/sts_ability_context.h b/interfaces/kits/native/ability/native/ability_runtime/sts_ability_context.h index 8da9e295bc6..e92cd54779c 100644 --- a/interfaces/kits/native/ability/native/ability_runtime/sts_ability_context.h +++ b/interfaces/kits/native/ability/native/ability_runtime/sts_ability_context.h @@ -72,7 +72,7 @@ public: static ani_object NativeTransferDynamic(ani_env *env, ani_object aniObj, ani_object input); static void NativeBackToCallerAbilityWithResult(ani_env *env, ani_object aniObj, ani_object abilityResultObj, ani_string requestCodeObj, ani_object callBackObj); - + static void OnSetMissionLabel(ani_env *env, ani_object aniObj, ani_string labelObj, ani_object callbackObj); private: static void InheritWindowMode(ani_env *env, ani_object aniObj, AAFwk::Want &want); void StartAbilityInner([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object aniObj, -- Gitee