diff --git a/frameworks/ans/native/src/reminder_request.cpp b/frameworks/ans/native/src/reminder_request.cpp index f768f60e020ff89afa1a3cfa70e71663160f01eb..2984b3143b4d01f4d7b4a22c9844bbad7ffa2cc9 100644 --- a/frameworks/ans/native/src/reminder_request.cpp +++ b/frameworks/ans/native/src/reminder_request.cpp @@ -976,7 +976,7 @@ void ReminderRequest::AddActionButtons(const bool includeSnooze) continue; } } - want->SetParam("REMINDER_ID", reminderId_); + want->SetParam(PARAM_REMINDER_ID, reminderId_); std::vector> wants; wants.push_back(want); auto title = static_cast(it->second.title); @@ -1155,12 +1155,14 @@ void ReminderRequest::UpdateNotificationContent(const bool &setSnooze) void ReminderRequest::UpdateNotificationStateForAlert() { + ANSR_LOGD("UpdateNotification content and buttons"); UpdateNotificationContent(false); UpdateActionButtons(false); } void ReminderRequest::UpdateNotificationStateForSnooze() { + ANSR_LOGD("UpdateNotification content and buttons"); UpdateNotificationContent(true); UpdateActionButtons(true); } @@ -1172,8 +1174,14 @@ int ReminderRequest::GetActualTime(const TimeTransferType &type, int cTime) return BASE_YEAR + cTime; case (TimeTransferType::MONTH): // month return 1 + cTime; - case (TimeTransferType::WEEK): // week - return 1 + cTime; + case (TimeTransferType::WEEK): { // week + int sunDay = 7; + if (cTime == 0) { + return sunDay; + } else { + return cTime; + } + } default: return -1; } @@ -1186,8 +1194,14 @@ int ReminderRequest::GetCTime(const TimeTransferType &type, int actualTime) return actualTime - BASE_YEAR; case (TimeTransferType::MONTH): // month return actualTime - 1; - case (TimeTransferType::WEEK): // week - return actualTime - 1; + case (TimeTransferType::WEEK): { // week + int sunDay = 7; + if (actualTime == sunDay) { + return 0; + } else { + return actualTime; + } + } default: return -1; } diff --git a/frameworks/ans/native/src/reminder_request_calendar.cpp b/frameworks/ans/native/src/reminder_request_calendar.cpp index 115c6fa0d804e308d375bc6f978b7fef2141cfd3..df2a62a70b916060e68cc49a9bbcb46432b8e747 100644 --- a/frameworks/ans/native/src/reminder_request_calendar.cpp +++ b/frameworks/ans/native/src/reminder_request_calendar.cpp @@ -79,7 +79,7 @@ ReminderRequestCalendar::ReminderRequestCalendar(const ReminderRequestCalendar & repeatDay_ = other.repeatDay_; } -uint8_t ReminderRequestCalendar::GetDaysOfMonth(const uint16_t &year, const uint8_t &month) const +uint8_t ReminderRequestCalendar::GetDaysOfMonth(const uint16_t &year, const uint8_t &month) { uint8_t days; uint8_t daysArray[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; @@ -157,7 +157,7 @@ uint64_t ReminderRequestCalendar::GetNextTriggerTime() const if (now <= target) { triggerTimeInMilli = static_cast(target) * MILLI_SECONDS; ANSR_LOGD("Now time is: %{public}s", GetDateTimeInfo(now).c_str()); - ANSR_LOGD("Tar time is: %{public}s", GetDateTimeInfo(target).c_str()); + ANSR_LOGD("Next calendar time:%{public}s", GetDateTimeInfo(target).c_str()); } return triggerTimeInMilli; } diff --git a/frameworks/ans/native/src/reminder_request_timer.cpp b/frameworks/ans/native/src/reminder_request_timer.cpp index 773e18eba07ce3027e5ceb3d9bddeac6e0737ebc..4fc99ed1697bd1c8997ae1e76f725ae963eaac35 100644 --- a/frameworks/ans/native/src/reminder_request_timer.cpp +++ b/frameworks/ans/native/src/reminder_request_timer.cpp @@ -49,7 +49,7 @@ uint64_t ReminderRequestTimer::GetInitInfo() const uint64_t ReminderRequestTimer::PreGetNextTriggerTimeIgnoreSnooze(bool ignoreRepeat, bool forceToGetNext) const { - ANSR_LOGD("countdonw time not support PreGetNextTriggerTimeIgnoreSnooze"); + ANSR_LOGD("countdown time not support PreGetNextTriggerTimeIgnoreSnooze"); return ReminderRequest::INVALID_LONG_LONG_VALUE; } @@ -67,7 +67,7 @@ bool ReminderRequestTimer::OnTimeZoneChange() bool ReminderRequestTimer::UpdateNextReminder() { - ANSR_LOGD("countdonw time not support repeat reminder, no need to update next triggerTime"); + ANSR_LOGD("countdown time not support repeat reminder, no need to update next triggerTime"); SetExpired(true); return false; } diff --git a/interfaces/innerkits/ans/native/include/reminder_request_calendar.h b/interfaces/innerkits/ans/native/include/reminder_request_calendar.h index 8c6868e98c0537ee2d2ac89ba2f591c153f84f63..17d8138c3e5000cf99731d27fd825221f5a79836 100644 --- a/interfaces/innerkits/ans/native/include/reminder_request_calendar.h +++ b/interfaces/innerkits/ans/native/include/reminder_request_calendar.h @@ -133,6 +133,7 @@ public: static const uint8_t MAX_MONTHS_OF_YEAR; static const uint8_t MAX_DAYS_OF_MONTH; + static uint8_t GetDaysOfMonth(const uint16_t &year, const uint8_t &month); protected: virtual uint64_t PreGetNextTriggerTimeIgnoreSnooze(bool ignoreRepeat, bool forceToGetNext) const override; @@ -140,7 +141,6 @@ protected: private: ReminderRequestCalendar() : ReminderRequest() {} - uint8_t GetDaysOfMonth(const uint16_t &year, const uint8_t &month) const; uint8_t GetNextDay(const uint16_t &settedYear, const uint8_t &settedMonth, const tm &now, const tm &target) const; uint64_t GetNextTriggerTime() const; uint64_t GetNextTriggerTimeAsRepeatReminder(const tm &nowTime, const tm &tarTime) const; diff --git a/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp b/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp index 4bf5d4985de6999774a41888df7e9a0fa2046c83..a5f9091762eff422e7bb1ab5cb105181c6091395 100644 --- a/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp +++ b/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp @@ -463,9 +463,10 @@ bool ReminderCommon::CheckCalendarParams(const int32_t &year, const int32_t &mon ReminderAgentNapi::CALENDAR_MONTH, ReminderRequestCalendar::MAX_MONTHS_OF_YEAR); return false; } - if (day < 1 || day > ReminderRequestCalendar::MAX_DAYS_OF_MONTH) { + uint8_t maxDaysOfMonth = ReminderRequestCalendar::GetDaysOfMonth(static_cast(year), month); + if (day < 1 || day > maxDaysOfMonth) { ANSR_LOGW("Create calender reminder fail: designated %{public}s must between [1, %{public}u]", - ReminderAgentNapi::CALENDAR_DAY, ReminderRequestCalendar::MAX_DAYS_OF_MONTH); + ReminderAgentNapi::CALENDAR_DAY, maxDaysOfMonth); return false; } return true; diff --git a/services/ans/src/reminder_data_manager.cpp b/services/ans/src/reminder_data_manager.cpp index 4acf6c44e2a91ebad7e65c2478e7015db952fa91..1fb4bd01d505e29e3876fbf02ee733622fc203e6 100644 --- a/services/ans/src/reminder_data_manager.cpp +++ b/services/ans/src/reminder_data_manager.cpp @@ -261,7 +261,7 @@ std::shared_ptr ReminderDataManager::CreateTimerInfo(TimerTyp nullptr ); std::shared_ptr wantAgent = - AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(wantAgentInfo); + AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(wantAgentInfo, 0); sharedTimerInfo->SetWantAgent(wantAgent); return sharedTimerInfo; } @@ -470,7 +470,9 @@ void ReminderDataManager::SetActiveReminder(const sptr &reminde } else { activeReminderId_ = reminder->GetReminderId(); activeReminder_ = reminder; + ANSR_LOGD("Set activeReminder with id=%{public}d", activeReminderId_); } + ANSR_LOGD("Set activeReminderId=%{public}d", activeReminderId_); } void ReminderDataManager::SetAlertingReminder(const sptr &reminder) @@ -481,7 +483,9 @@ void ReminderDataManager::SetAlertingReminder(const sptr &remin } else { alertingReminderId_ = reminder->GetReminderId(); alertingReminder_ = reminder; + ANSR_LOGD("Set alertingReminder with id=%{public}d", alertingReminderId_); } + ANSR_LOGD("Set alertingReminderId=%{public}d", alertingReminderId_); } void ReminderDataManager::ShowActiveReminderExtendLocked(sptr &reminder) @@ -538,10 +542,9 @@ void ReminderDataManager::ShowReminder(const sptr &reminder, co reminder->OnShow(false, isSysTimeChanged, true); } AddToShowedReminders(reminder); - ANSR_LOGD("publish notification.(reminderId=%{public}d)", reminder->GetReminderId()); UpdateNotification(reminder); // this should be called after OnShow - ErrCode errCode - = advancedNotificationService_->PublishPreparedNotification(notificationRequest, bundleOption); + ANSR_LOGD("publish notification.(reminderId=%{public}d)", reminder->GetReminderId()); + ErrCode errCode = advancedNotificationService_->PublishPreparedNotification(notificationRequest, bundleOption); if (errCode != ERR_OK) { reminder->OnShowFail(); RemoveFromShowedReminders(reminder); @@ -697,6 +700,14 @@ sptr ReminderDataManager::GetRecentReminderLocked() for (auto it = reminderVector_.begin(); it != reminderVector_.end();) { if (!(*it)->IsExpired()) { ANSR_LOGI("GetRecentReminderLocked: %{public}s", (*it)->Dump().c_str()); + time_t now; + (void)time(&now); // unit is seconds. + if (now < 0 + || static_cast(now) * ReminderRequest::MILLI_SECONDS > (*it)->GetTriggerTimeInMilli()) { + ANSR_LOGE("Get recent reminder while the trigger time is overdue."); + it++; + continue; + } return *it; } if (!(*it)->CanRemove()) { @@ -878,7 +889,8 @@ void ReminderDataManager::StopSoundAndVibration(const sptr &rem return; } if (alertingReminderId_ == -1 || (reminder->GetReminderId() != alertingReminderId_)) { - ANSR_LOGE("Stop sound and vibration failed as alertingReminder is illegal."); + ANSR_LOGE("Stop sound and vibration failed as alertingReminder is illegal, alertingReminderId_=" \ + "%{public}d, tarReminderId=%{public}d", alertingReminderId_, reminder->GetReminderId()); return; } ANSR_LOGD("Stop sound and vibration, reminderId=%{public}d", reminder->GetReminderId());