diff --git a/frameworks/ets/ets/application/UIAbilityContext.ets b/frameworks/ets/ets/application/UIAbilityContext.ets index b9ca6c2b73f78f3748cf9b27fdf47ee7c5e04cda..cbd1a7eb92d53cf83aae19bc7be5a2053ec8c050 100644 --- a/frameworks/ets/ets/application/UIAbilityContext.ets +++ b/frameworks/ets/ets/application/UIAbilityContext.ets @@ -27,6 +27,7 @@ import { HapModuleInfo } from 'bundleManager.HapModuleInfo'; import AsyncCallbackWrapper from '../utils/AbilityUtils'; import OpenLinkOptions from '@ohos.app.ability.OpenLinkOptions'; import { LocalStorage } from '@ohos.arkui.stateManagement'; +import image from '@ohos.multimedia.image'; import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant'; export default class UIAbilityContext extends Context { @@ -91,6 +92,7 @@ export default class UIAbilityContext extends Context { private native nativeMoveAbilityToBackground(callback: AsyncCallbackWrapper): void; private native nativeRequestModalUIExtension(pickerWant: Want, callback: AsyncCallbackWrapper): void; + private native nativeSetAbilityInstanceInfo(label: string, icon: image.PixelMap, callback: AsyncCallbackWrapper): void; private native nativeSetColorMode(colorMode: ConfigurationConstant.ColorMode): void; private native nativeBackToCallerAbilityWithResult(abilityResult: AbilityResult, requestCode: string, callback: AsyncCallbackWrapper): void; @@ -370,6 +372,22 @@ export default class UIAbilityContext extends Context { }); }); } + + setAbilityInstanceInfo(label: string, icon: image.PixelMap): Promise { + let p:Promise = 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((): void => { + this.nativeSetAbilityInstanceInfo(label, icon, syncCall); + }); + }); + return p; + } setColorMode(colorMode: ConfigurationConstant.ColorMode): void { this.nativeSetColorMode(colorMode); diff --git a/frameworks/native/ability/native/BUILD.gn b/frameworks/native/ability/native/BUILD.gn index be9b389abb8f8569642fd009034f53167c79fa33..c69f8c3e654560868c8ece3cb10521e90052dd69 100644 --- a/frameworks/native/ability/native/BUILD.gn +++ b/frameworks/native/ability/native/BUILD.gn @@ -358,6 +358,8 @@ ohos_shared_library("abilitykit_native") { "hilog:libhilog", "hisysevent:libhisysevent", "hitrace:hitrace_meter", + "image_framework:image", + "image_framework:image_taihe", "init:libbegetutil", "ipc:ipc_core", "ipc:ipc_napi", 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..80d4d4a5cae0ee221804fb0f71fe7fe3ac0ba796 100644 --- a/frameworks/native/ability/native/ability_runtime/sts_ability_context.cpp +++ b/frameworks/native/ability/native/ability_runtime/sts_ability_context.cpp @@ -51,6 +51,9 @@ #include "sts_caller_complex.h" #include "sts_context_utils.h" #include "sts_error_utils.h" +#ifdef SUPPORT_GRAPHICS +#include "pixel_map_taihe_ani.h" +#endif namespace OHOS { namespace AbilityRuntime { @@ -819,6 +822,48 @@ ani_object StsAbilityContext::NativeTransferDynamic(ani_env *env, ani_object, an return nullptr; } +#ifdef SUPPORT_SCREEN +void StsAbilityContext::SetAbilityInstanceInfo(ani_env *env, ani_object aniObj, ani_string labelObj, ani_object iconObj, + ani_object callback) +{ + TAG_LOGD(AAFwkTag::UIABILITY, "SetAbilityInstanceInfo called"); + if (env == nullptr) { + TAG_LOGE(AAFwkTag::UIABILITY, "null env"); + return; + } + + auto context = GetAbilityContext(env, aniObj); + if (context == nullptr) { + TAG_LOGE(AAFwkTag::UIABILITY, "GetAbilityContext is nullptr"); + ThrowStsInvalidParamError(env, "context null"); + return; + } + + std::string label; + if (!AppExecFwk::GetStdString(env, labelObj, label)) { + TAG_LOGE(AAFwkTag::UIABILITY, "Failed to parse label"); + ThrowStsInvalidParamError(env, "Parse param label failed"); + return; + } + + auto icon = OHOS::Media::PixelMapTaiheAni::GetNativePixelMap(env, iconObj); + if (icon == nullptr) { + TAG_LOGE(AAFwkTag::UIABILITY, "Failed to unwrap PixelMap"); + ThrowStsInvalidParamError(env, "Parse param icon failed"); + return; + } + + ErrCode ret = context->SetAbilityInstanceInfo(label, icon); + ani_object errorObj = nullptr; + if (ret == ERR_OK) { + errorObj = CreateStsError(env, AbilityErrorCode::ERROR_OK); + } else { + errorObj = CreateStsErrorByNativeErr(env, static_cast(ret)); + } + AppExecFwk::AsyncCallback(env, callback, errorObj, nullptr); +} +#endif + void StsAbilityContext::NativeBackToCallerAbilityWithResult(ani_env *env, ani_object aniObj, ani_object abilityResultObj, ani_string requestCodeObj, ani_object callBackObj) { @@ -913,6 +958,11 @@ bool BindNativeMethods(ani_env *env, ani_class &cls) reinterpret_cast(StsAbilityContext::NativeTransferStatic) }, ani_native_function { "nativeTransferDynamic", "Lstd/core/Object;:Lstd/interop/ESValue;", reinterpret_cast(StsAbilityContext::NativeTransferDynamic) }, +#ifdef SUPPORT_GRAPHICS + ani_native_function { "nativeSetAbilityInstanceInfo", + "Lstd/core/String;L@ohos/multimedia/image/image/PixelMap;Lutils/AbilityUtils/AsyncCallbackWrapper;:V", + reinterpret_cast(StsAbilityContext::SetAbilityInstanceInfo) }, +#endif ani_native_function { "nativeBackToCallerAbilityWithResult", "Lability/abilityResult/AbilityResult;Lstd/core/String;Lutils/AbilityUtils/AsyncCallbackWrapper;:V", reinterpret_cast(StsAbilityContext::NativeBackToCallerAbilityWithResult) }, 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..e85bab3e04a5532c29376a077e14b4e0e99b1279 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 @@ -70,6 +70,10 @@ public: static void SetColorMode(ani_env *env, ani_object aniObj, ani_enum_item colorMode); static ani_object NativeTransferStatic(ani_env *env, ani_object aniObj, ani_object input); static ani_object NativeTransferDynamic(ani_env *env, ani_object aniObj, ani_object input); +#ifdef SUPPORT_GRAPHICS + static void SetAbilityInstanceInfo(ani_env *env, ani_object aniObj, ani_string labelObj, ani_object iconObj, + ani_object callback); +#endif static void NativeBackToCallerAbilityWithResult(ani_env *env, ani_object aniObj, ani_object abilityResultObj, ani_string requestCodeObj, ani_object callBackObj);