From 03a0018c63e97b4c417684c0d365d1daa7e45b9a Mon Sep 17 00:00:00 2001 From: rcy-hw Date: Thu, 21 Apr 2022 20:53:14 +0800 Subject: [PATCH 1/5] fix addSlot js api Signed-off-by: rcy-hw Change-Id: I583ef9ddab34ede675781b08325479c334438397 --- .../kits/napi/ans/include/reminder/publish.h | 9 ++ .../napi/ans/src/reminder/native_module.cpp | 2 +- .../kits/napi/ans/src/reminder/publish.cpp | 94 +++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/napi/ans/include/reminder/publish.h b/interfaces/kits/napi/ans/include/reminder/publish.h index bb3124746..c9a824c96 100644 --- a/interfaces/kits/napi/ans/include/reminder/publish.h +++ b/interfaces/kits/napi/ans/include/reminder/publish.h @@ -54,6 +54,15 @@ napi_value GetValidReminders(napi_env env, napi_callback_info info); * @return opaque pointer that is used to represent a JavaScript value */ napi_value PublishReminder(napi_env env, napi_callback_info info); + +/** + * @brief Adds a slot type. + * + * @param env Indicates the context. + * @param info Indicates the opaque datatype about the context. + * @return opaque pointer that is used to represent a JavaScript value. + */ +napi_value AddSlot(napi_env env, napi_callback_info info); } // namespace ReminderAgentNapi } // namespace OHOS diff --git a/interfaces/kits/napi/ans/src/reminder/native_module.cpp b/interfaces/kits/napi/ans/src/reminder/native_module.cpp index 23ce01695..613202a83 100644 --- a/interfaces/kits/napi/ans/src/reminder/native_module.cpp +++ b/interfaces/kits/napi/ans/src/reminder/native_module.cpp @@ -31,7 +31,7 @@ napi_value ReminderAgentInit(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("cancelAllReminders", CancelAllReminders), DECLARE_NAPI_FUNCTION("getValidReminders", GetValidReminders), DECLARE_NAPI_FUNCTION("publishReminder", PublishReminder), - DECLARE_NAPI_FUNCTION("addNotificationSlot", NotificationNapi::AddSlot), + DECLARE_NAPI_FUNCTION("addNotificationSlot", AddSlot), DECLARE_NAPI_FUNCTION("removeNotificationSlot", NotificationNapi::RemoveSlot), }; NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); diff --git a/interfaces/kits/napi/ans/src/reminder/publish.cpp b/interfaces/kits/napi/ans/src/reminder/publish.cpp index 7c332d7a9..b0967b83f 100644 --- a/interfaces/kits/napi/ans/src/reminder/publish.cpp +++ b/interfaces/kits/napi/ans/src/reminder/publish.cpp @@ -27,11 +27,14 @@ static const int32_t PUBLISH_PARAM_LEN = 2; static const int32_t CANCEL_PARAM_LEN = 2; static const int32_t CANCEL_ALL_PARAM_LEN = 1; static const int32_t GET_VALID_PARAM_LEN = 1; +static const int32_t ADD_SLOT_PARAM_LEN = 2; struct AsyncCallbackInfo { napi_env env = nullptr; napi_async_work asyncWork = nullptr; int32_t reminderId = -1; + enum NotificationNapi::NotificationConstant::SlotType inType + = NotificationNapi::NotificationConstant::SlotType::CONTENT_INFORMATION; std::shared_ptr reminder = nullptr; std::vector> validReminders; NotificationNapi::CallbackPromiseInfo info; @@ -40,6 +43,8 @@ struct AsyncCallbackInfo { struct Parameters { int32_t reminderId = -1; + enum NotificationNapi::NotificationConstant::SlotType inType + = NotificationNapi::NotificationConstant::SlotType::CONTENT_INFORMATION; std::shared_ptr reminder = nullptr; napi_ref callback = nullptr; }; @@ -94,6 +99,39 @@ napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, return NotificationNapi::Common::NapiGetNull(env); } +napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &info, Parameters ¶ms) { + size_t argc = ADD_SLOT_PARAM_LEN; + napi_value argv[ADD_SLOT_PARAM_LEN] = {nullptr}; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); + if ((argc < 1) || (argc > ADD_SLOT_PARAM_LEN)) { + ANSR_LOGW("Wrong number of arguments"); + return nullptr; + } + + // argv[0] : notificationSlot + // slotType + const char* propertyKey = "type"; + int32_t propertyVal = 0; + if (!ReminderCommon::GetInt32(env, argv[0], propertyKey, propertyVal, false)) { + ANSR_LOGW("Failed to get valid slot type."); + return NotificationNapi::Common::NapiGetNull(env); + } + + if (!NotificationNapi::Common::SlotTypeJSToC(NotificationNapi::SlotType(propertyVal), params.inType)) { + ANSR_LOGW("Failed to get valid slot type"); + return nullptr; + } + + // argv[1]: callback + if (argc == ADD_SLOT_PARAM_LEN) { + if (GetCallback(env, argv[1], params) == nullptr) { + ANSR_LOGW("[reminderAgent]GetCallbak returns nullptr"); + return nullptr; + } + } + return NotificationNapi::Common::NapiGetNull(env); +} + napi_value ParseCanCelParameter(const napi_env &env, const napi_callback_info &info, Parameters ¶ms) { ANSR_LOGI("ParseCanCelParameter"); @@ -650,5 +688,61 @@ napi_value PublishReminder(napi_env env, napi_callback_info info) return promise; } } + +napi_value AddSlot(napi_env env, napi_callback_info info) { + ANSR_LOGI("AddSlot"); + + // param + Parameters params; + if (ParseSlotParameters(env, info, params) == nullptr) { + ANSR_LOGW("Parse params error"); + return NotificationNapi::Common::JSParaError(env, params.callback); + } + + // promise + napi_value promise = nullptr; + AsyncCallbackInfo *asynccallbackinfo = SetAsynccallbackinfo(env, params, promise); + if (!asynccallbackinfo) { + return NotificationNapi::Common::JSParaError(env, params.callback); + } + asynccallbackinfo->inType = params.inType; + + // resource name + napi_value resourceName = nullptr; + napi_create_string_latin1(env, "AddSlot", NAPI_AUTO_LENGTH, &resourceName); + + // create and start async work + napi_create_async_work(env, + nullptr, + resourceName, + [](napi_env env, void *data) { + ANSR_LOGI("AddSlot napi_create_async_work start"); + AsyncCallbackInfo *asynccallbackinfo = static_cast(data); + if (asynccallbackinfo) { + asynccallbackinfo->info.errorCode = NotificationHelper::AddSlotByType(asynccallbackinfo->inType); + } + }, + [](napi_env env, napi_status status, void *data) { + AsyncCallbackInfo *asynccallbackinfo = (AsyncCallbackInfo *)data; + NotificationNapi::Common::ReturnCallbackPromise( + env, asynccallbackinfo->info, NotificationNapi::Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + ANSR_LOGD("AddSlot napi_create_async_work complete end"); + }, + (void *)asynccallbackinfo, + &asynccallbackinfo->asyncWork); + NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + + if (asynccallbackinfo->info.isCallback) { + return NotificationNapi::Common::NapiGetNull(env); + } else { + return promise; + } +} } } \ No newline at end of file -- Gitee From d755fa789eece0253255704347cef016bb76fec0 Mon Sep 17 00:00:00 2001 From: rcy-hw Date: Fri, 22 Apr 2022 10:18:33 +0800 Subject: [PATCH 2/5] fix addSlot js api Signed-off-by: rcy-hw Change-Id: Ie9e002c03c6a63e0ca1fe090f91abaa22aa5f594 --- .../kits/napi/ans/src/reminder/publish.cpp | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/interfaces/kits/napi/ans/src/reminder/publish.cpp b/interfaces/kits/napi/ans/src/reminder/publish.cpp index b0967b83f..1eb594811 100644 --- a/interfaces/kits/napi/ans/src/reminder/publish.cpp +++ b/interfaces/kits/napi/ans/src/reminder/publish.cpp @@ -33,7 +33,7 @@ struct AsyncCallbackInfo { napi_env env = nullptr; napi_async_work asyncWork = nullptr; int32_t reminderId = -1; - enum NotificationNapi::NotificationConstant::SlotType inType + NotificationNapi::NotificationConstant::SlotType inType = NotificationNapi::NotificationConstant::SlotType::CONTENT_INFORMATION; std::shared_ptr reminder = nullptr; std::vector> validReminders; @@ -43,7 +43,8 @@ struct AsyncCallbackInfo { struct Parameters { int32_t reminderId = -1; - enum NotificationNapi::NotificationConstant::SlotType inType + int32_t errCode = ERR_OK; + NotificationNapi::NotificationConstant::SlotType inType = NotificationNapi::NotificationConstant::SlotType::CONTENT_INFORMATION; std::shared_ptr reminder = nullptr; napi_ref callback = nullptr; @@ -99,7 +100,8 @@ napi_value ParseParameters(const napi_env &env, const napi_callback_info &info, return NotificationNapi::Common::NapiGetNull(env); } -napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &info, Parameters ¶ms) { +napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &info, Parameters ¶ms) +{ size_t argc = ADD_SLOT_PARAM_LEN; napi_value argv[ADD_SLOT_PARAM_LEN] = {nullptr}; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); @@ -108,12 +110,21 @@ napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &in return nullptr; } + // argv[1]: callback + if (argc == ADD_SLOT_PARAM_LEN) { + if (GetCallback(env, argv[1], params) == nullptr) { + ANSR_LOGW("[reminderAgent]GetCallbak returns nullptr"); + return nullptr; + } + } + // argv[0] : notificationSlot // slotType const char* propertyKey = "type"; int32_t propertyVal = 0; if (!ReminderCommon::GetInt32(env, argv[0], propertyKey, propertyVal, false)) { ANSR_LOGW("Failed to get valid slot type."); + params.errCode = ERR_INVALID_VALUE; return NotificationNapi::Common::NapiGetNull(env); } @@ -121,14 +132,6 @@ napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &in ANSR_LOGW("Failed to get valid slot type"); return nullptr; } - - // argv[1]: callback - if (argc == ADD_SLOT_PARAM_LEN) { - if (GetCallback(env, argv[1], params) == nullptr) { - ANSR_LOGW("[reminderAgent]GetCallbak returns nullptr"); - return nullptr; - } - } return NotificationNapi::Common::NapiGetNull(env); } @@ -689,7 +692,8 @@ napi_value PublishReminder(napi_env env, napi_callback_info info) } } -napi_value AddSlot(napi_env env, napi_callback_info info) { +napi_value AddSlot(napi_env env, napi_callback_info info) +{ ANSR_LOGI("AddSlot"); // param @@ -706,6 +710,7 @@ napi_value AddSlot(napi_env env, napi_callback_info info) { return NotificationNapi::Common::JSParaError(env, params.callback); } asynccallbackinfo->inType = params.inType; + asynccallbackinfo->info.errorCode = params.errCode; // resource name napi_value resourceName = nullptr; @@ -718,7 +723,7 @@ napi_value AddSlot(napi_env env, napi_callback_info info) { [](napi_env env, void *data) { ANSR_LOGI("AddSlot napi_create_async_work start"); AsyncCallbackInfo *asynccallbackinfo = static_cast(data); - if (asynccallbackinfo) { + if (asynccallbackinfo && (asynccallbackinfo->info.errorCode == ERR_OK)) { asynccallbackinfo->info.errorCode = NotificationHelper::AddSlotByType(asynccallbackinfo->inType); } }, -- Gitee From 54e2b5c2d02ecaaa74d45554bbc17bb8987c5a6b Mon Sep 17 00:00:00 2001 From: rcy-hw Date: Fri, 22 Apr 2022 10:19:56 +0800 Subject: [PATCH 3/5] fix addSlot js api Signed-off-by: rcy-hw Change-Id: Id91cc35fc22fbe2d1447e4c0795052b8c4e0a85a --- interfaces/kits/napi/ans/src/reminder/publish.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/napi/ans/src/reminder/publish.cpp b/interfaces/kits/napi/ans/src/reminder/publish.cpp index 1eb594811..d502f7e91 100644 --- a/interfaces/kits/napi/ans/src/reminder/publish.cpp +++ b/interfaces/kits/napi/ans/src/reminder/publish.cpp @@ -113,7 +113,7 @@ napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &in // argv[1]: callback if (argc == ADD_SLOT_PARAM_LEN) { if (GetCallback(env, argv[1], params) == nullptr) { - ANSR_LOGW("[reminderAgent]GetCallbak returns nullptr"); + ANSR_LOGW("GetCallbak returns nullptr"); return nullptr; } } -- Gitee From 1b39011801def4f5d78518ceb970afdd16486d45 Mon Sep 17 00:00:00 2001 From: rcy-hw Date: Fri, 22 Apr 2022 16:40:43 +0800 Subject: [PATCH 4/5] fix codex Signed-off-by: rcy-hw Change-Id: Idece0cff5f432c69c1493fbced379ab60655cf4e --- frameworks/ans/native/src/reminder_request_alarm.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/frameworks/ans/native/src/reminder_request_alarm.cpp b/frameworks/ans/native/src/reminder_request_alarm.cpp index 61cd41d68..3a3ee1af6 100644 --- a/frameworks/ans/native/src/reminder_request_alarm.cpp +++ b/frameworks/ans/native/src/reminder_request_alarm.cpp @@ -160,12 +160,9 @@ int8_t ReminderRequestAlarm::GetNextAlarm(const time_t now, const time_t target) if (repeatDays_ == 0) { return INVALID_INT_VALUE; } - tm *nowTime = gmtime(&now); - if (nowTime == nullptr) { - ANSR_LOGE("Failed to get next alarm due to gmtime return null."); - return 0; - } - int32_t today = GetActualTime(TimeTransferType::WEEK, nowTime->tm_wday); + struct tm nowTime; + (void)gmtime_r(&now, &nowTime); + int32_t today = GetActualTime(TimeTransferType::WEEK, nowTime.tm_wday); int32_t dayCount = now >= target ? 1 : 0; for (; dayCount <= DAYS_PER_WEEK; dayCount++) { int32_t day = (today + dayCount) % DAYS_PER_WEEK; -- Gitee From 1e2a3460941771bcbcc45ea47b058d1c77b3aff2 Mon Sep 17 00:00:00 2001 From: JayLeeHW Date: Mon, 25 Apr 2022 07:58:44 +0000 Subject: [PATCH 5/5] Update interfaces/kits/napi/ans/src/reminder/publish.cpp done --- interfaces/kits/napi/ans/src/reminder/publish.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/napi/ans/src/reminder/publish.cpp b/interfaces/kits/napi/ans/src/reminder/publish.cpp index d502f7e91..af5008dc4 100644 --- a/interfaces/kits/napi/ans/src/reminder/publish.cpp +++ b/interfaces/kits/napi/ans/src/reminder/publish.cpp @@ -104,7 +104,7 @@ napi_value ParseSlotParameters(const napi_env &env, const napi_callback_info &in { size_t argc = ADD_SLOT_PARAM_LEN; napi_value argv[ADD_SLOT_PARAM_LEN] = {nullptr}; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr)); if ((argc < 1) || (argc > ADD_SLOT_PARAM_LEN)) { ANSR_LOGW("Wrong number of arguments"); return nullptr; -- Gitee