From 16116503e0b7e3774cbf153502d93938b730aa77 Mon Sep 17 00:00:00 2001 From: heguokai Date: Mon, 16 Jun 2025 00:12:28 +0800 Subject: [PATCH] fixed for getSlot & getSlots Signed-off-by: heguokai --- frameworks/ets/ani/src/manager/ani_slot.cpp | 5 ++ frameworks/ets/ani/src/sts_common.cpp | 4 +- frameworks/ets/ani/src/sts_slot.cpp | 82 ++++++++----------- .../ets/ani/src/subscribe/ani_subscribe.cpp | 2 +- 4 files changed, 43 insertions(+), 50 deletions(-) diff --git a/frameworks/ets/ani/src/manager/ani_slot.cpp b/frameworks/ets/ani/src/manager/ani_slot.cpp index 622984eea..8790b0a3b 100644 --- a/frameworks/ets/ani/src/manager/ani_slot.cpp +++ b/frameworks/ets/ani/src/manager/ani_slot.cpp @@ -132,6 +132,11 @@ ani_object AniGetSlot(ani_env *env, ani_enum_item enumObj) ANS_LOGE("AniGetSlot -> error, errorCode: %{public}d", externalCode); AbilityRuntime::ThrowStsError(env, externalCode, NotificationSts::FindAnsErrMsg(externalCode)); } + if (slot == nullptr) { + ANS_LOGD("AniGetSlot -> slot is nullptr"); + AbilityRuntime::ThrowStsError(env, RETURN_EXCEPTION_VALUE, "slot is null"); + return nullptr; + } ani_object slotObj; if (!NotificationSts::WrapNotificationSlot(env, slot, slotObj)) { ANS_LOGE("WrapNotificationSlot faild"); diff --git a/frameworks/ets/ani/src/sts_common.cpp b/frameworks/ets/ani/src/sts_common.cpp index 253a124d3..31f5b6b53 100644 --- a/frameworks/ets/ani/src/sts_common.cpp +++ b/frameworks/ets/ani/src/sts_common.cpp @@ -515,8 +515,8 @@ ani_object newRecordClass(ani_env *env) ani_object ConvertArrayDoubleToAniObj(ani_env *env, const std::vector values) { - if (env == nullptr || values.empty()) { - ANS_LOGE("ConvertArrayDoubleToAniObj fail, env is nullptr or values is empty"); + if (env == nullptr) { + ANS_LOGE("ConvertArrayDoubleToAniObj fail, env is nullptr"); return nullptr; } ani_object arrayObj = newArrayClass(env, values.size()); diff --git a/frameworks/ets/ani/src/sts_slot.cpp b/frameworks/ets/ani/src/sts_slot.cpp index 7202f92ab..844c3fc89 100644 --- a/frameworks/ets/ani/src/sts_slot.cpp +++ b/frameworks/ets/ani/src/sts_slot.cpp @@ -21,18 +21,31 @@ namespace OHOS { namespace NotificationSts { -bool CheckOptionalFieldSlotTypeParam(const ani_env *env, const ani_class cls, const ani_object &object) +bool SetOptionalFieldSlotLevel( + ani_env *env, const ani_class cls, ani_object &object, const std::string fieldName, const SlotLevel value) { - if (env == nullptr) { - ANS_LOGE("env is null"); + ANS_LOGD("SetOptionalFieldSlotLevel call"); + if (env == nullptr || cls == nullptr || object == nullptr) { + ANS_LOGE("SetOptionalFieldSlotLevel failed, has nullptr"); return false; } - if (cls == nullptr) { - ANS_LOGE("cls is null"); + ani_field field = nullptr; + ani_status status = env->Class_FindField(cls, fieldName.c_str(), &field); + if (status != ANI_OK || field == nullptr) { + ANS_LOGE("Class_FindField failed or null field, status=%{public}d, fieldName=%{public}s", + status, fieldName.c_str()); return false; } - if (object == nullptr) { - ANS_LOGE("object is null"); + ani_enum_item enumItem = nullptr; + NotificationSts::SlotLevelCToEts(env, value, enumItem); + if (enumItem == nullptr) { + ANS_LOGE("null enumItem"); + return false; + } + status = env->Object_SetField_Ref(object, field, enumItem); + if (status != ANI_OK) { + ANS_LOGE("Object_SetField_Ref failed, status=%{public}d, fieldName=%{public}s", + status, fieldName.c_str()); return false; } return true; @@ -41,9 +54,9 @@ bool CheckOptionalFieldSlotTypeParam(const ani_env *env, const ani_class cls, co bool SetOptionalFieldSlotType( ani_env *env, const ani_class cls, ani_object &object, const std::string fieldName, const SlotType value) { - ANS_LOGD("WrapNotificationSlot call"); - if (!CheckOptionalFieldSlotTypeParam(env, cls, object)) { - ANS_LOGE("WrapNotificationSlot failed, has nullptr"); + ANS_LOGD("SetOptionalFieldSlotType call"); + if (env == nullptr || cls == nullptr || object == nullptr) { + ANS_LOGE("SetOptionalFieldSlotType failed, has nullptr"); return false; } ani_field field = nullptr; @@ -141,10 +154,19 @@ bool WrapNotificationSlot(ani_env *env, sptr slo ANS_LOGE("CreateClassObjByClassName fail"); return false; } + if (cls == nullptr || outAniObj == nullptr) { + ANS_LOGE("Create class failed"); + return false; + } + if (!SetOptionalFieldSlotType(env, cls, outAniObj, "notificationType", slot->GetType())) { ANS_LOGE("Set notificationType fail"); return false; } + if (!SetOptionalFieldSlotLevel(env, cls, outAniObj, "notificationLevel", slot->GetLevel())) { + ANS_LOGE("Set notificationLevel fail"); + return false; + } if (!WrapNotificationSlotByBoolean(env, slot, outAniObj)) { ANS_LOGE("set Boolean params fail"); return false; @@ -157,41 +179,11 @@ bool WrapNotificationSlot(ani_env *env, sptr slo ANS_LOGE("set String params fail"); return false; } - if (slot->GetVibrationStyle().size() != 0 - && !SetOptionalFieldArrayDouble(env, cls, outAniObj, "vibrationValues", slot->GetVibrationStyle())) { - ANS_LOGE("Set vibrationValues fail"); - return false; - } - ANS_LOGD("WrapNotificationSlot end"); - return true; -} - -bool SetOptionalFieldSlotLevel(ani_env *env, const ani_class cls, ani_object &object, const std::string fieldName, - const SlotLevel value) -{ - ANS_LOGD("SetOptionalFieldSlotLevel call"); - if (env == nullptr) { - ANS_LOGE("SetOptionalFieldSlotLevel failed, env is nullptr"); - return false; - } - ani_field field = nullptr; - ani_status status = env->Class_FindField(cls, fieldName.c_str(), &field); - if (status != ANI_OK || field == nullptr) { - ANS_LOGE("Class_FindField failed or null field, status=%{public}d, fieldName=%{public}s", - status, fieldName.c_str()); - return false; - } - ani_enum_item enumItem = nullptr; - if (!NotificationSts::SlotLevelCToEts(env, value, enumItem) || enumItem == nullptr) { - ANS_LOGE("get enumItem failed"); - return false; - } - status = env->Object_SetField_Ref(object, field, enumItem); - if (status != ANI_OK) { - ANS_LOGE("Object_SetField_Ref failed, status=%{public}d, fieldName=%{public}s", - status, fieldName.c_str()); + if (!SetOptionalFieldArrayDouble(env, cls, outAniObj, "vibrationValues", slot->GetVibrationStyle())) { + ANS_LOGE("Set vibrationValues fail"); return false; } + ANS_LOGD("WrapNotificationSlot end"); return true; } @@ -199,10 +191,6 @@ bool WrapNotificationSlotArray(ani_env *env, const std::vectorPromise_New(&aniResolver, &aniPromise)) { - ANS_LOGD("Promise_New faild"); + ANS_LOGE("Promise_New faild"); return nullptr; } bool noWithOperationInfo = false; -- Gitee