diff --git a/frameworks/ets/ani/include/sts_notification_content.h b/frameworks/ets/ani/include/sts_notification_content.h index ba4656b72d4c82c0c2887698c043d78992c73fe4..34f73e559c17ea6c1945b7db82ff5acaa081b610 100644 --- a/frameworks/ets/ani/include/sts_notification_content.h +++ b/frameworks/ets/ani/include/sts_notification_content.h @@ -37,6 +37,8 @@ using LiveViewTypes = OHOS::Notification::NotificationLocalLiveViewContent::Live namespace OHOS { namespace NotificationSts { using namespace OHOS::Notification; +const uint32_t BUTTON_MAX_SIZE = 3; +const uint32_t CAPSULE_BTN_MAX_SIZE = 2; enum STSLiveViewStatus { LIVE_VIEW_CREATE = 0, @@ -66,8 +68,8 @@ bool WarpNotificationTime(ani_env *env, const NotificationTime &time, bool isIni ani_status UnWarpNotificationIconButton(ani_env *env, ani_object obj, NotificationIconButton &iconButton); ani_object WarpNotificationIconButton(ani_env *env, const NotificationIconButton &button); -ani_status GetIconButtonArray(ani_env *env, - ani_object param, const char *name, std::vector &res); +ani_status GetIconButtonArray(ani_env *env, ani_object param, const char *name, + std::vector &res, const uint32_t maxLen); ani_object GetAniIconButtonArray(ani_env *env, const std::vector buttons); void UnWarpNotificationLocalLiveViewButton(ani_env *env, ani_object obj, diff --git a/frameworks/ets/ani/src/sts_notification_content.cpp b/frameworks/ets/ani/src/sts_notification_content.cpp index 52abe95ed00c76dbd41b7664e679315f33847030..f9b8ebbc2450085e88796df56a2b45e58070737a 100644 --- a/frameworks/ets/ani/src/sts_notification_content.cpp +++ b/frameworks/ets/ani/src/sts_notification_content.cpp @@ -309,8 +309,8 @@ ani_status UnWarpNotificationIconButton(ani_env *env, ani_object obj, Notificati return status; } -ani_status GetIconButtonArray(ani_env *env, - ani_object param, const char *name, std::vector &res) +ani_status GetIconButtonArray(ani_env *env, ani_object param, const char *name, + std::vector &res, const uint32_t maxLen) { ANS_LOGD("GetIconButtonArray call"); if (env == nullptr || param == nullptr || name == nullptr) { @@ -330,6 +330,9 @@ ani_status GetIconButtonArray(ani_env *env, ANS_LOGI("status : %{public}d", status); return status; } + if (length > maxLen) { + length = static_cast(maxLen); + } for (int i = 0; i < static_cast(length); i++) { ani_ref buttonRef; status = env->Object_CallMethodByName_Ref(static_cast(arrayObj), @@ -469,7 +472,7 @@ bool getCapsuleByButtons(ani_env *env, ani_object obj, std::vector buttons = {}; - if (GetIconButtonArray(env, obj, "cardButtons", buttons) == ANI_OK) { + if (GetIconButtonArray(env, obj, "cardButtons", buttons, BUTTON_MAX_SIZE) == ANI_OK) { localLiveViewContent->SetCardButton(buttons); localLiveViewContent->addFlag(NotificationLocalLiveViewContent::LiveViewContentInner::CARD_BUTTON); } else {