diff --git a/frameworks/ets/ets/application/UIAbilityContext.ets b/frameworks/ets/ets/application/UIAbilityContext.ets index 5de1f3c64d09971ef134b835d1a5944714a23380..cae287430d78b81a934ab979d0ebcc76b828e3d2 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 3bc17f94740bebdfd76d60e18b56cf816d29a1d6..68722d24e1504575fb34ebd2d71adaac408cdae2 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 8da9e295bc6068319057c8fd4511eb702ccd30ce..e92cd54779ceefc5e90119463d30336dec7c4cb5 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,