From b02a33fffbe66a26ce844d4d71eef2a3163fa864 Mon Sep 17 00:00:00 2001 From: let_it_rot Date: Thu, 4 Sep 2025 16:52:38 +0800 Subject: [PATCH] fix Signed-off-by: demonio --- frameworks/js/napi/src/reminder/BUILD.gn | 4 +- frameworks/js/napi/src/reminder/publish.cpp | 6 +-- .../js/napi/src/reminder/reminder_common.cpp | 2 - frameworks/reminder/BUILD.gn | 1 + frameworks/reminder/src/reminder_request.cpp | 7 ++- interfaces/inner_api/reminder_request.h | 1 + services/reminder/BUILD.gn | 5 +-- .../reminder/include/reminder_data_manager.h | 2 + .../include/reminder_datashare_helper.h | 2 +- .../reminder/src/reminder_agent_service.cpp | 17 ++++--- .../reminder/src/reminder_data_manager.cpp | 45 +++++++++---------- .../src/reminder_data_manager_inner.cpp | 16 +------ .../src/reminder_datashare_helper.cpp | 8 ++-- services/reminder/src/reminder_store.cpp | 12 ++++- .../unittest/reminder_data_manager_test.cpp | 2 +- .../reminderdatasharehelper_fuzzer.cpp | 2 +- 16 files changed, 62 insertions(+), 70 deletions(-) diff --git a/frameworks/js/napi/src/reminder/BUILD.gn b/frameworks/js/napi/src/reminder/BUILD.gn index a5bb1dea0..4dbb59bc3 100644 --- a/frameworks/js/napi/src/reminder/BUILD.gn +++ b/frameworks/js/napi/src/reminder/BUILD.gn @@ -53,7 +53,7 @@ ohos_shared_library("reminderagent") { "publish.cpp", "reminder_common.cpp", ] - + cflags_cc = [ "-fstack-protector-strong" ] deps = [ "${frameworks_module_ans_path}:ans_innerkits", "${frameworks_module_reminder_path}:reminder_innerkits", @@ -110,7 +110,7 @@ ohos_shared_library("reminderagentmanager") { "publish.cpp", "reminder_common.cpp", ] - + cflags_cc = [ "-fstack-protector-strong" ] deps = [ "${frameworks_module_ans_path}:ans_innerkits", "${frameworks_module_reminder_path}:reminder_innerkits", diff --git a/frameworks/js/napi/src/reminder/publish.cpp b/frameworks/js/napi/src/reminder/publish.cpp index 156a82b7c..6a6ee8cab 100644 --- a/frameworks/js/napi/src/reminder/publish.cpp +++ b/frameworks/js/napi/src/reminder/publish.cpp @@ -772,11 +772,7 @@ napi_value SetValidReminder(const napi_env &env, ReminderRequest &reminder, napi // slotType NotificationNapi::SlotType jsSlotType; - if (reminder.GetSlotType() == NotificationConstant::SlotType::OTHER) { - NotificationNapi::AnsEnumUtil::SlotTypeCToJS(NotificationConstant::SlotType::SOCIAL_COMMUNICATION, jsSlotType); - } else { - NotificationNapi::AnsEnumUtil::SlotTypeCToJS(reminder.GetSlotType(), jsSlotType); - } + NotificationNapi::AnsEnumUtil::SlotTypeCToJS(reminder.GetSlotType(), jsSlotType); napi_create_int32(env, static_cast(jsSlotType), &value); napi_set_named_property(env, result, SLOT_TYPE, value); diff --git a/frameworks/js/napi/src/reminder/reminder_common.cpp b/frameworks/js/napi/src/reminder/reminder_common.cpp index 47ba11ee6..7625e2cf1 100644 --- a/frameworks/js/napi/src/reminder/reminder_common.cpp +++ b/frameworks/js/napi/src/reminder/reminder_common.cpp @@ -608,8 +608,6 @@ bool ReminderCommon::GenReminderIntInner( return false; } reminder->SetSlotType(actureType); - } else if (!reminder->IsSystemApp()) { - reminder->SetSlotType(NotificationConstant::SlotType::OTHER); } //autoDeletedTime diff --git a/frameworks/reminder/BUILD.gn b/frameworks/reminder/BUILD.gn index 35f1f04e2..9cd8ea19c 100644 --- a/frameworks/reminder/BUILD.gn +++ b/frameworks/reminder/BUILD.gn @@ -73,6 +73,7 @@ ohos_shared_library("reminder_innerkits") { ] sources += filter_include(output_values, [ "*.cpp" ]) defines = [] + cflags_cc = [ "-fstack-protector-strong" ] deps = [ ":reminder_service_interface", "${frameworks_path}/ans:ans_client", diff --git a/frameworks/reminder/src/reminder_request.cpp b/frameworks/reminder/src/reminder_request.cpp index 3d9357a4c..ead09b906 100644 --- a/frameworks/reminder/src/reminder_request.cpp +++ b/frameworks/reminder/src/reminder_request.cpp @@ -665,7 +665,10 @@ void ReminderRequest::RecoverWantAgentByJson(const std::string& wantAgentInfo, c GetJsonValue(root, "uri", wai->uri); std::string parameters; GetJsonValue(root, "parameters", parameters); - wai->parameters = AAFwk::WantParamWrapper::ParseWantParams(parameters); + auto result = AAFwk::WantParamWrapper::Parse(parameters); + if (result != nullptr) { + result->GetValue(wai->parameters); + } SetWantAgentInfo(wai); break; } @@ -1945,7 +1948,7 @@ uint64_t ReminderRequest::GetTriggerTime(const time_t now, const time_t nextTrig struct tm test; (void)localtime_r(&triggerTime, &test); ANSR_LOGI("NextTriggerTime: year=%{public}d, mon=%{public}d, day=%{public}d, hour=%{public}d, " - "min=%{public}d, sec=%{public}d, week=%{public}d, nextTriggerTime=%{public}lld", + "min=%{public}d, sec=%{public}d, week=%{public}d, nextTriggerTime=%{public}lld", GetActualTime(TimeTransferType::YEAR, test.tm_year), GetActualTime(TimeTransferType::MONTH, test.tm_mon), test.tm_mday, diff --git a/interfaces/inner_api/reminder_request.h b/interfaces/inner_api/reminder_request.h index 8ab25fc6d..8c099b41d 100644 --- a/interfaces/inner_api/reminder_request.h +++ b/interfaces/inner_api/reminder_request.h @@ -1208,6 +1208,7 @@ private: std::string maxWantAgentStr_{}; std::string identifier_; + sptr notificationOption_ {nullptr}; int32_t titleResourceId_ {0}; int32_t contentResourceId_ {0}; int32_t expiredContentResourceId_ {0}; diff --git a/services/reminder/BUILD.gn b/services/reminder/BUILD.gn index 182e3404d..fc34d342e 100644 --- a/services/reminder/BUILD.gn +++ b/services/reminder/BUILD.gn @@ -154,10 +154,6 @@ ohos_source_set("reminder_service_sources") { defines += [ "SCREENLOCK_MGR_ENABLE" ] } - if (distributed_notification_service_feature_summary) { - defines += [ "ENABLE_ANS_EXT_WRAPPER" ] - } - if (telephony_cust) { defines += [ "ENABLE_ANS_TELEPHONY_CUST_WRAPPER" ] } @@ -194,6 +190,7 @@ ohos_shared_library("libreminder") { "-Oz", "-flto", "-ffunction-sections", + "-fstack-protector-strong", "-fdata-sections", ] sources = [] diff --git a/services/reminder/include/reminder_data_manager.h b/services/reminder/include/reminder_data_manager.h index efe1cfeb4..bc8899621 100644 --- a/services/reminder/include/reminder_data_manager.h +++ b/services/reminder/include/reminder_data_manager.h @@ -696,6 +696,7 @@ private: bool CheckShowLimit(std::unordered_map& limits, int32_t& totalCount, sptr& reminder); + int64_t CreateReminderLoadTimer(const sptr timer); void UpdateReminderFromDb(const std::vector>& remindersFromDb); ErrCode CancelReminderToDb(const int32_t reminderId, const int32_t callingUid); @@ -712,6 +713,7 @@ private: static std::mutex ALERT_MUTEX; static std::mutex TIMER_MUTEX; static std::mutex ACTIVE_MUTEX; + std::mutex cancelMutex_; // for cancelReminder function /** * Max number of reminders limit for the whole system. diff --git a/services/reminder/include/reminder_datashare_helper.h b/services/reminder/include/reminder_datashare_helper.h index fa66dfa7d..42dfaedfe 100644 --- a/services/reminder/include/reminder_datashare_helper.h +++ b/services/reminder/include/reminder_datashare_helper.h @@ -54,7 +54,7 @@ public: * @brief Update the reminder state. * state is ReminderCalendarShareTable::STATE_* */ - bool Update(const int32_t reminderId, const int32_t state); + bool Update(const std::string& identifier, const int32_t state); /** * @brief Start calendar data extension. diff --git a/services/reminder/src/reminder_agent_service.cpp b/services/reminder/src/reminder_agent_service.cpp index 50ed97510..6774f897e 100644 --- a/services/reminder/src/reminder_agent_service.cpp +++ b/services/reminder/src/reminder_agent_service.cpp @@ -62,7 +62,7 @@ sptr ReminderAgentService::GetInstance() ErrCode ReminderAgentService::PublishReminder(const ReminderRequest& reminder, int32_t& reminderId) { - NOTIFICATION_HITRACE(HITRACE_TAG_OHOS); + NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); ANSR_LOGD("called"); sptr tarReminder = CreateReminderRequest(reminder); if (nullptr == tarReminder) { @@ -106,7 +106,7 @@ ErrCode ReminderAgentService::PublishReminder(const ReminderRequest& reminder, i ErrCode ReminderAgentService::UpdateReminder(const int32_t reminderId, const ReminderRequest& reminder) { - NOTIFICATION_HITRACE(HITRACE_TAG_OHOS); + NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); ANSR_LOGD("called"); sptr tarReminder = CreateReminderRequest(reminder); if (nullptr == tarReminder) { @@ -129,13 +129,12 @@ ErrCode ReminderAgentService::UpdateReminder(const int32_t reminderId, const Rem } tarReminder->SetReminderId(reminderId); ret = rdm->UpdateReminder(tarReminder, callingUid); - TryPostDelayUnloadTask(UNLOAD_TASK_DELAY_TIME); return ret; } ErrCode ReminderAgentService::CancelReminder(const int32_t reminderId) { - NOTIFICATION_HITRACE(HITRACE_TAG_OHOS); + NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); ANSR_LOGD("called"); if (!CheckReminderPermission()) { ANSR_LOGE("Failed to check permission: ohos.permission.PUBLISH_AGENT_REMINDER."); @@ -151,7 +150,7 @@ ErrCode ReminderAgentService::CancelReminder(const int32_t reminderId) ErrCode ReminderAgentService::CancelAllReminders() { - NOTIFICATION_HITRACE(HITRACE_TAG_OHOS); + NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); ANSR_LOGD("called"); if (!CheckReminderPermission()) { ANSR_LOGE("Failed to check permission: ohos.permission.PUBLISH_AGENT_REMINDER."); @@ -171,7 +170,7 @@ ErrCode ReminderAgentService::CancelAllReminders() ErrCode ReminderAgentService::GetValidReminders(std::vector& reminders) { - NOTIFICATION_HITRACE(HITRACE_TAG_OHOS); + NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); ANSR_LOGD("called"); if (!CheckReminderPermission()) { ANSR_LOGE("Failed to check permission: ohos.permission.PUBLISH_AGENT_REMINDER."); @@ -188,7 +187,7 @@ ErrCode ReminderAgentService::GetValidReminders(std::vector& dates) { - NOTIFICATION_HITRACE(HITRACE_TAG_OHOS); + NOTIFICATION_HITRACE(HITRACE_TAG_NOTIFICATION); ANSR_LOGD("called"); if (!CheckReminderPermission()) { ANSR_LOGE("Failed to check permission: ohos.permission.PUBLISH_AGENT_REMINDER."); diff --git a/services/reminder/src/reminder_data_manager.cpp b/services/reminder/src/reminder_data_manager.cpp index 56d5dd1ac..cfc683afa 100644 --- a/services/reminder/src/reminder_data_manager.cpp +++ b/services/reminder/src/reminder_data_manager.cpp @@ -123,13 +123,14 @@ ErrCode ReminderDataManager::CancelReminder( ANSR_LOGI("cancel reminder id: %{public}d", reminderId); sptr reminder = FindReminderRequestLocked(reminderId, false); if (reminder == nullptr) { - ANSR_LOGW("null reminder"); + ANSR_LOGW("Cancel reminder, not find the reminder in memory."); return CancelReminderToDb(reminderId, callingUid); } if (!CheckIsSameApp(reminder, callingUid)) { ANSR_LOGW("Not find the reminder due to not match"); return ERR_REMINDER_NOT_EXIST; } + std::lock_guard locker(cancelMutex_); if (activeReminderId_ == reminderId) { { std::lock_guard locker(ReminderDataManager::ACTIVE_MUTEX); @@ -429,7 +430,6 @@ void ReminderDataManager::OnUserSwitch(const int32_t& userId) void ReminderDataManager::OnProcessDiedLocked(const int32_t callingUid) { - ANSR_LOGD("called, uid=%{public}d", callingUid); std::lock_guard locker(ReminderDataManager::MUTEX); std::lock_guard lock(ReminderDataManager::SHOW_MUTEX); for (auto it = showedReminderVector_.begin(); it != showedReminderVector_.end(); ++it) { @@ -561,7 +561,6 @@ void ReminderDataManager::CloseRemindersByGroupId(const int32_t &oldReminderId, const std::string &groupId) { if (packageName == "") { - ANSR_LOGD("packageName is empty"); return; } std::lock_guard lock(ReminderDataManager::MUTEX); @@ -572,7 +571,6 @@ void ReminderDataManager::CloseRemindersByGroupId(const int32_t &oldReminderId, } int32_t reminderId = reminder->GetReminderId(); if (reminderId == oldReminderId) { - ANSR_LOGD("The old and new reminder are the same"); continue; } if (IsMatchedForGroupIdAndPkgName(reminder, packageName, groupId)) { @@ -606,7 +604,8 @@ void ReminderDataManager::CloseReminder(const sptr &reminder, b reminder->OnClose(true); RemoveFromShowedReminders(reminder); if (reminder->IsShare()) { - ReminderDataShareHelper::GetInstance().Update(reminderId, ReminderCalendarShareTable::STATE_DISMISSED); + ReminderDataShareHelper::GetInstance().Update(reminder->GetIdentifier(), + ReminderCalendarShareTable::STATE_DISMISSED); } else { store_->UpdateOrInsert(reminder); } @@ -631,7 +630,6 @@ void ReminderDataManager::StartLoadTimer() { sptr timer = MiscServices::TimeServiceClient::GetInstance(); if (timer == nullptr) { - ANSR_LOGE("null timer"); return; } std::lock_guard locker(timeLoadMutex_); @@ -645,7 +643,6 @@ void ReminderDataManager::StartLoadTimer() void ReminderDataManager::InitShareReminders(const bool registerObserver) { - ANSR_LOGD("called"); ReminderDataShareHelper::GetInstance().SetUserId(currentUserId_); ReminderDataShareHelper::GetInstance().UpdateCalendarUid(); if (registerObserver) { @@ -834,7 +831,6 @@ void ReminderDataManager::RefreshRemindersDueToSysTimeChange(uint8_t type) std::string typeInfo = type == TIME_ZONE_CHANGE ? "timeZone" : "dateTime"; ANSR_LOGI("Refresh all reminders due to %{public}s changed by user", typeInfo.c_str()); if (activeReminderId_ != -1) { - ANSR_LOGD("Stop active reminder due to date/time or timeZone change"); { std::lock_guard locker(ReminderDataManager::ACTIVE_MUTEX); activeReminder_->OnStop(); @@ -897,7 +893,6 @@ void ReminderDataManager::TerminateAlerting(const sptr &reminde } int32_t reminderId = reminder->GetReminderId(); int32_t uid = reminder->GetUid(); - ANSR_LOGD("publish(update) notification.(reminderId=%{public}d)", reminder->GetReminderId()); NotificationRequest notificationRequest(reminder->GetNotificationId()); notificationRequest.SetNotificationControlFlags(static_cast( NotificationNapi::NotificationControlFlagStatus::NOTIFICATION_STATUS_CLOSE_SOUND)); @@ -961,7 +956,6 @@ bool ReminderDataManager::ShouldAlert(const sptr &reminder) con return true; } } - ANSR_LOGD("The reminder (reminderId=%{public}d) is silent for Dnd", reminderId); return false; } @@ -999,6 +993,18 @@ bool ReminderDataManager::HandleSysTimeChange(const sptr remind } } +void ReminderDataManager::SetAlertingReminder(const sptr &reminder) +{ + if (reminder == nullptr) { + // alertingReminder_ should not be set with null as it point to actual object. + alertingReminderId_ = -1; + } else { + alertingReminderId_ = reminder->GetReminderId(); + alertingReminder_ = reminder; + } + ANSR_LOGD("Set alertingReminderId=%{public}d", alertingReminderId_.load()); +} + void ReminderDataManager::ShowActiveReminderExtendLocked(sptr& reminder, std::vector>& extensionReminders) { @@ -1047,7 +1053,6 @@ void ReminderDataManager::ShowActiveReminderExtendLocked(sptr& bool ReminderDataManager::StartExtensionAbility(const sptr &reminder, const int8_t type) { - ANSR_LOGD("called"); if (reminder->GetReminderType() == ReminderRequest::ReminderType::CALENDAR) { ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); std::shared_ptr wantInfo = calendar->GetRRuleWantAgentInfo(); @@ -1071,8 +1076,6 @@ void ReminderDataManager::ShowReminder(const sptr& reminder, co const bool isNeedToStartNext, const bool isSysTimeChanged, const bool needScheduleTimeout, const bool isNeedCloseDefaultSound) { - ANSR_LOGD("Show the reminder(Play sound: %{public}d), %{public}s", - static_cast(isNeedToPlaySound), reminder->Dump().c_str()); int32_t reminderId = reminder->GetReminderId(); bool isShare = reminder->IsShare(); if (!IsAllowedNotify(reminder)) { @@ -1111,7 +1114,8 @@ void ReminderDataManager::ShowReminder(const sptr& reminder, co } HandleSameNotificationIdShowing(reminder); if (isShare) { - ReminderDataShareHelper::GetInstance().Update(reminderId, ReminderCalendarShareTable::STATE_FIRED); + ReminderDataShareHelper::GetInstance().Update(reminder->GetIdentifier(), + ReminderCalendarShareTable::STATE_FIRED); } } store_->UpdateOrInsert(reminder); @@ -1137,7 +1141,6 @@ void ReminderDataManager::SnoozeReminder(const OHOS::EventFwk::Want &want) void ReminderDataManager::SnoozeReminderImpl(sptr &reminder) { - ANSR_LOGD("Snooze the reminder request, %{public}s", reminder->Dump().c_str()); int32_t reminderId = reminder->GetReminderId(); if (activeReminderId_ == reminderId) { ANSR_LOGD("Cancel active reminder, id=%{public}d", activeReminderId_.load()); @@ -1171,7 +1174,7 @@ void ReminderDataManager::StartRecentReminder() std::lock_guard lock(ReminderDataManager::MUTEX); sptr reminder = GetRecentReminder(); if (reminder == nullptr) { - ANSR_LOGE("null reminder"); + ANSR_LOGE("No reminder need to start"); SetActiveReminder(reminder); return; } @@ -1369,7 +1372,8 @@ void ReminderDataManager::HandleSameNotificationIdShowing(const sptrOnSameNotificationIdCovered(); RemoveFromShowedReminders(*it); if ((*it)->IsShare()) { - ReminderDataShareHelper::GetInstance().Update(tmpId, ReminderCalendarShareTable::STATE_DISMISSED); + ReminderDataShareHelper::GetInstance().Update((*it)->GetIdentifier(), + ReminderCalendarShareTable::STATE_DISMISSED); } else { store_->UpdateOrInsert((*it)); } @@ -1711,7 +1715,6 @@ void ReminderDataManager::RemoveFromShowedReminders(const sptr for (auto it = showedReminderVector_.begin(); it != showedReminderVector_.end(); ++it) { if ((*it)->GetReminderId() == reminder->GetReminderId() && (*it)->IsShare() == reminder->IsShare()) { - ANSR_LOGD("Containers(shownVector) remove. reminderId=%{public}d", reminder->GetReminderId()); showedReminderVector_.erase(it); break; } @@ -1767,7 +1770,6 @@ void ReminderDataManager::StartTimer(const sptr &reminderReques time_t now; (void)time(&now); // unit is seconds. if (now < 0) { - ANSR_LOGE("Get now time error"); return; } uint64_t triggerTime = 0; @@ -1789,7 +1791,6 @@ void ReminderDataManager::StartTimer(const sptr &reminderReques break; } default: { - ANSR_LOGE("TimerType not support"); break; } } @@ -1851,7 +1852,6 @@ void ReminderDataManager::StopTimer(TimerType type) break; } default: { - ANSR_LOGE("TimerType not support"); break; } } @@ -1883,7 +1883,6 @@ void ReminderDataManager::ResetStates(TimerType type) break; } default: { - ANSR_LOGE("TimerType not support"); break; } } @@ -1940,7 +1939,7 @@ void ReminderDataManager::ClickReminder(const OHOS::EventFwk::Want &want) ANSR_LOGW("null reminder: %{public}d", reminderId); return; } - CloseReminder(reminder, true); + CloseReminder(reminder, reminder->IsTapDismissed()); StartRecentReminder(); auto wantInfo = reminder->GetWantAgentInfo(); diff --git a/services/reminder/src/reminder_data_manager_inner.cpp b/services/reminder/src/reminder_data_manager_inner.cpp index 36f130e40..40c8d9c6d 100644 --- a/services/reminder/src/reminder_data_manager_inner.cpp +++ b/services/reminder/src/reminder_data_manager_inner.cpp @@ -393,18 +393,6 @@ void ReminderDataManager::SetActiveReminder(const sptr &reminde ANSR_LOGD("Set activeReminderId=%{public}d", activeReminderId_.load()); } -void ReminderDataManager::SetAlertingReminder(const sptr &reminder) -{ - if (reminder == nullptr) { - // alertingReminder_ should not be set with null as it point to actual object. - alertingReminderId_ = -1; - } else { - alertingReminderId_ = reminder->GetReminderId(); - alertingReminder_ = reminder; - } - ANSR_LOGD("Set alertingReminderId=%{public}d", alertingReminderId_.load()); -} - ErrCode ReminderDataManager::CancelReminderToDb(const int32_t reminderId, const int32_t callingUid) { if (store_ == nullptr) { @@ -446,9 +434,9 @@ void ReminderDataManager::ReportTimerEvent(const int64_t targetTime, const bool if ((now - targetTime) <= deviation) { return; } + std::string event = "REMINDER_TIMER_ERROR"; uint8_t errorCode = isSysTimeChanged ? 0 : 1; - HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::NOTIFICATION, "REMINDER_TIMER_ERROR", - HiviewDFX::HiSysEvent::EventType::STATISTIC, + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::NOTIFICATION, event, HiviewDFX::HiSysEvent::EventType::STATISTIC, "TARGET_TIME", targetTime, "TRIGGER_TIME", now, "ERROR_CODE", errorCode); #endif } diff --git a/services/reminder/src/reminder_datashare_helper.cpp b/services/reminder/src/reminder_datashare_helper.cpp index 0657fff90..7de5117bd 100644 --- a/services/reminder/src/reminder_datashare_helper.cpp +++ b/services/reminder/src/reminder_datashare_helper.cpp @@ -153,7 +153,7 @@ bool ReminderDataShareHelper::Query(std::map> bool ReminderDataShareHelper::Query(Uri& uri, const std::string& key, std::string& value) { - static constexpr const char* SETTINGS_DATA_EXT_URI = "datashare::///com.ohos.settingsdata.DataAbility"; + static constexpr const char* SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility"; static constexpr const char* DATA_COLUMN_KEYWORD = "KEYWORD"; static constexpr const char* DATA_COLUMN_VALUE = "VALUE"; auto helper = CreateDataShareHelper(SETTINGS_DATA_EXT_URI); @@ -173,7 +173,7 @@ bool ReminderDataShareHelper::Query(Uri& uri, const std::string& key, std::strin ANSR_LOGE("GoToFirstRow failed."); result->Close(); helper->Release(); - return false; + return true; } int32_t columnIndex; result->GetColumnIndex(DATA_COLUMN_VALUE, columnIndex); @@ -183,7 +183,7 @@ bool ReminderDataShareHelper::Query(Uri& uri, const std::string& key, std::strin return true; } -bool ReminderDataShareHelper::Update(const int32_t reminderId, const int32_t state) +bool ReminderDataShareHelper::Update(const std::string& identifier, const int32_t state) { auto helper = CreateDataShareHelper(ReminderCalendarShareTable::PROXY); if (helper == nullptr) { @@ -195,7 +195,7 @@ bool ReminderDataShareHelper::Update(const int32_t reminderId, const int32_t sta Uri uri(proxy); DataShare::DataSharePredicates predicates; - predicates.EqualTo(ReminderCalendarShareTable::ID, reminderId); + predicates.EqualTo(ReminderCalendarShareTable::IDENTIFIER, identifier); DataShare::DataShareValuesBucket valuesBucket; valuesBucket.Put(ReminderCalendarShareTable::STATE, state); helper->UpdateEx(uri, predicates, valuesBucket); diff --git a/services/reminder/src/reminder_store.cpp b/services/reminder/src/reminder_store.cpp index 7849661ed..183ffc294 100644 --- a/services/reminder/src/reminder_store.cpp +++ b/services/reminder/src/reminder_store.cpp @@ -181,7 +181,10 @@ std::vector> ReminderStore::ReminderStoreDataCallBack::Get return reminders; } - while (queryResult->GoToNextRow() == NativeRdb::E_OK) { + bool isLastRow = false; + queryResult->IsAtLastRow(isLastRow); + while (!isLastRow) { + queryResult->GoToNextRow(); int32_t reminderId; int32_t reminderType; GetInt32Val(queryResult, ReminderTable::REMINDER_ID, reminderId); @@ -211,6 +214,7 @@ std::vector> ReminderStore::ReminderStoreDataCallBack::Get if (reminderReq != nullptr) { reminders.push_back(reminderReq); } + queryResult->IsAtLastRow(isLastRow); } return reminders; } @@ -773,11 +777,15 @@ std::vector> ReminderStore::GetReminders(const std::string if (queryResultSet == nullptr) { return reminders; } - while (queryResultSet->GoToNextRow() == NativeRdb::E_OK) { + bool isAtLastRow = false; + int32_t ret = queryResultSet->IsAtLastRow(isAtLastRow); + while (ret == NativeRdb::E_OK && !isAtLastRow) { + queryResultSet->GoToNextRow(); sptr reminder = BuildReminder(queryResultSet); if (reminder != nullptr) { reminders.push_back(reminder); } + ret = queryResultSet->IsAtLastRow(isAtLastRow); } ANSR_LOGD("Size=%{public}zu", reminders.size()); return reminders; diff --git a/services/reminder/test/unittest/reminder_data_manager_test.cpp b/services/reminder/test/unittest/reminder_data_manager_test.cpp index ba3db22dd..7fdced42a 100644 --- a/services/reminder/test/unittest/reminder_data_manager_test.cpp +++ b/services/reminder/test/unittest/reminder_data_manager_test.cpp @@ -1042,7 +1042,7 @@ HWTEST_F(ReminderDataManagerTest, ReminderDataManagerTest_021, Level1) { ReminderDataShareHelper::GetInstance().RegisterObserver(); ReminderDataShareHelper::GetInstance().RegisterObserver(); - ReminderDataShareHelper::GetInstance().Update(1, 1); + ReminderDataShareHelper::GetInstance().Update("1", 1); ReminderDataShareHelper::GetInstance().OnDataInsertOrDelete(); ReminderDataShareHelper::GetInstance().OnDataInsertOrDelete(); DataShare::DataShareObserver::ChangeInfo info; diff --git a/test/fuzztest/reminderdatasharehelper_fuzzer/reminderdatasharehelper_fuzzer.cpp b/test/fuzztest/reminderdatasharehelper_fuzzer/reminderdatasharehelper_fuzzer.cpp index 92c902e92..e9d0b0412 100644 --- a/test/fuzztest/reminderdatasharehelper_fuzzer/reminderdatasharehelper_fuzzer.cpp +++ b/test/fuzztest/reminderdatasharehelper_fuzzer/reminderdatasharehelper_fuzzer.cpp @@ -32,7 +32,7 @@ namespace OHOS { helper.UnRegisterObserver(); std::map> reminders; helper.Query(reminders); - helper.Update(id, id); + helper.Update(bundleName, id); helper.StartDataExtension(id); helper.SetUserId(id); helper.UpdateCalendarUid(); -- Gitee