diff --git a/frameworks/ets/ani/include/sts_convert_other.h b/frameworks/ets/ani/include/sts_convert_other.h index aec482f65097cd412fa21eda176364b5f351b772..59fcf75e09e6653a13707fd9ecafe9a1296dbbec 100644 --- a/frameworks/ets/ani/include/sts_convert_other.h +++ b/frameworks/ets/ani/include/sts_convert_other.h @@ -29,6 +29,8 @@ using namespace OHOS::AbilityRuntime::WantAgent; std::shared_ptr UnwrapWantAgent(ani_env *env, ani_object agent); ani_object WarpWantAgent(ani_env *env, std::shared_ptr wantAgent); +ani_status GetPropertyWantAgentArray(ani_env *env, ani_object param, const char *name, + ani_boolean &isUndefined, std::vector> &res); ani_object GetAniWantAgentArray(ani_env *env, std::vector> wantAgents); ani_object CreateAniPixelMap(ani_env* env, std::shared_ptr pixelMap); diff --git a/frameworks/ets/ani/src/sts_convert_other.cpp b/frameworks/ets/ani/src/sts_convert_other.cpp index 7631b34bd1371bb0dae04b868c99f59e715fded9..19e636bf2c70145f6b9f0313635a6bdc0ffe6829 100644 --- a/frameworks/ets/ani/src/sts_convert_other.cpp +++ b/frameworks/ets/ani/src/sts_convert_other.cpp @@ -38,6 +38,47 @@ std::shared_ptr UnwrapWantAgent(ani_env *env, ani_object agent) return wantAgentSp; } +ani_status GetPropertyWantAgentArray(ani_env *env, ani_object param, const char *name, + ani_boolean &isUndefined, std::vector> &res) +{ + if (env == nullptr || param == nullptr || name == nullptr) { + ANS_LOGE("GetPropertyWantAgentArray fail, has nullptr"); + return ANI_INVALID_ARGS; + } + ANS_LOGD("GetPropertyWantAgentArray: %{public}s", name); + ani_ref arrayObj = nullptr; + ani_status status; + ani_int length; + if ((status = GetPropertyRef(env, param, name, isUndefined, arrayObj)) != ANI_OK) { + ANS_LOGE("GetPropertyRef fail, status = %{public}d, isUndefind = %{public}d", status, isUndefined); + return ANI_INVALID_ARGS; + } + if (isUndefined == ANI_TRUE) { + return ANI_OK; + } + status = env->Object_GetPropertyByName_Int(static_cast(arrayObj), "length", &length); + if (status != ANI_OK) { + ANS_LOGE("status : %{public}d", status); + return status; + } + for (int32_t i = 0; i < length; i++) { + ani_ref entryRef; + status = env->Object_CallMethodByName_Ref(static_cast(arrayObj), + "$_get", "i:C{std.core.Object}", &entryRef, i); + if (status != ANI_OK) { + ANS_LOGE("status : %{public}d, index: %{public}d", status, i); + return status; + } + std::shared_ptr wantAgent = UnwrapWantAgent(env, static_cast(entryRef)); + if (wantAgent == nullptr) { + ANS_LOGE("UnwrapWantAgent failed, index: %{public}d", i); + return ANI_INVALID_ARGS; + } + res.push_back(wantAgent); + } + return status; +} + ani_status UnwrapResource(ani_env *env, ani_object obj, ResourceManager::Resource &resource) { ANS_LOGD("UnwrapResource called"); diff --git a/frameworks/ets/ani/src/sts_notification_content.cpp b/frameworks/ets/ani/src/sts_notification_content.cpp index 23afd19f173cf4b50582c1b9be7b5bcd3dafbac8..c7fcfcc480c2b524faf6c0b817af4758ee82abda 100644 --- a/frameworks/ets/ani/src/sts_notification_content.cpp +++ b/frameworks/ets/ani/src/sts_notification_content.cpp @@ -815,7 +815,6 @@ ani_status UnWarpNotificationMultiLineContent(ani_env *env, ani_object obj, return ANI_INVALID_ARGS; } multiLineContent->SetExpandedTitle(GetResizeStr(longTitle, SHORT_TEXT_SIZE)); - std::string briefText; isUndefined = ANI_TRUE; if ((status = GetPropertyString(env, obj, "briefText", isUndefined, briefText)) != ANI_OK @@ -824,7 +823,6 @@ ani_status UnWarpNotificationMultiLineContent(ani_env *env, ani_object obj, return ANI_INVALID_ARGS; } multiLineContent->SetBriefText(GetResizeStr(briefText, SHORT_TEXT_SIZE)); - std::vector lines = {}; isUndefined = ANI_TRUE; if ((status = GetPropertyStringArray(env, obj, "lines", isUndefined, lines)) != ANI_OK @@ -835,6 +833,12 @@ ani_status UnWarpNotificationMultiLineContent(ani_env *env, ani_object obj, for (auto line : lines) { multiLineContent->AddSingleLine(GetResizeStr(line, SHORT_TEXT_SIZE)); } + std::vector> lineWantAgents = {}; + isUndefined = ANI_TRUE; + if ((status = GetPropertyWantAgentArray(env, obj, "lineWantAgents", isUndefined, lineWantAgents)) != ANI_OK) { + ANS_LOGE("UnWarpNotificationMultiLineContent: get lineWantAgents failed"); + return ANI_INVALID_ARGS; + } ANS_LOGD("UnWarpNotificationMultiLineContent end"); return status; } @@ -1316,6 +1320,14 @@ bool SetNotificationMultiLineContent( if (allLinesObject == nullptr || !SetPropertyByRef(env, contentObj, "lines", allLinesObject)) { ANS_LOGD("SetNotificationMultiLineContent: set lines failed"); } + std::vector> lineWantAgents = content->GetLineWantAgents(); + if (lineWantAgents.size() > 0) { + ani_object lineWantAgentsObj = GetAniWantAgentArray(env, lineWantAgents); + if (lineWantAgentsObj == nullptr || + !SetPropertyByRef(env, contentObj, "lineWantAgents", lineWantAgentsObj)) { + ANS_LOGD("SetNotificationMultiLineContent set lineWantAgents faild"); + } + } return SetPropertyByRef(env, ncObj, "multiLine", contentObj); } diff --git a/frameworks/ets/ets/notification/notificationContent.ets b/frameworks/ets/ets/notification/notificationContent.ets index 500b35fcf880e4afddb7949599268e41ac69d616..6813f4b2a211d54b3c33bc2af0e9b5510934a289 100644 --- a/frameworks/ets/ets/notification/notificationContent.ets +++ b/frameworks/ets/ets/notification/notificationContent.ets @@ -16,6 +16,7 @@ import image from '@ohos.multimedia.image'; import { Resource } from 'global.resource'; import type notificationManager from '@ohos.notificationManager'; +import { WantAgent } from '@ohos.app.ability.wantAgent'; type IconType = Resource | image.PixelMap; @@ -139,6 +140,8 @@ export interface NotificationMultiLineContent extends NotificationBasicContent { longTitle: string; lines: Array; + + lineWantAgents?: Array; } class NotificationMultiLineContentInner implements NotificationMultiLineContent { @@ -156,6 +159,8 @@ class NotificationMultiLineContentInner implements NotificationMultiLineContent public longTitle: string = ''; public lines: Array = {}; + + public lineWantAgents?: Array = {}; } export interface NotificationPictureContent extends NotificationBasicContent {