diff --git a/frameworks/ets/ets/application/UIAbilityContext.ets b/frameworks/ets/ets/application/UIAbilityContext.ets index 5de1f3c64d09971ef134b835d1a5944714a23380..0791d5024ffa3e4d45afa12f95bd23fdd37029e4 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'; // remove local declaration after Any type is supported @@ -94,6 +95,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; @@ -373,6 +375,23 @@ 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 2b649768eb73f1b3cc73078351a95023c366d25a..42b7e0a872788f9b345dfd944b935259f0a2277c 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_ani", "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..07749ce39360d3f7b158331eee0bd71bf249a27a 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,10 @@ #include "sts_caller_complex.h" #include "sts_context_utils.h" #include "sts_error_utils.h" +#ifdef SUPPORT_GRAPHICS +#include "pixel_map_ani.h" +#include "image_ani_utils.h" +#endif namespace OHOS { namespace AbilityRuntime { @@ -819,6 +823,47 @@ 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_LOGI(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 = Media::ImageAniUtils::GetPixelMapFromEnvSp(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,10 @@ 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", nullptr, + 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);