diff --git a/services/reminder/include/reminder_data_manager.h b/services/reminder/include/reminder_data_manager.h index 9f046a8123f39b2ab90221e94b50afc58ae0f755..d0ebb0cd5e8813f213807a065bc0b1c05e3b3267 100644 --- a/services/reminder/include/reminder_data_manager.h +++ b/services/reminder/include/reminder_data_manager.h @@ -692,7 +692,7 @@ private: sptr& reminder); void UpdateReminderFromDb(const std::vector>& remindersFromDb); - + ErrCode CancelReminderToDb(const int32_t reminderId, const int32_t callingUid); /** * Single instance. */ diff --git a/services/reminder/src/reminder_data_manager.cpp b/services/reminder/src/reminder_data_manager.cpp index d458c550cfa7c659a1f0cbd3366d332bd9b89810..843361db93693164e5d416e91f22871ee361c602 100644 --- a/services/reminder/src/reminder_data_manager.cpp +++ b/services/reminder/src/reminder_data_manager.cpp @@ -122,8 +122,8 @@ ErrCode ReminderDataManager::CancelReminder( ANSR_LOGI("cancel reminder id: %{public}d", reminderId); sptr reminder = FindReminderRequestLocked(reminderId, false); if (reminder == nullptr) { - ANSR_LOGW("Cancel reminder, not find the reminder"); - return ERR_REMINDER_NOT_EXIST; + 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"); diff --git a/services/reminder/src/reminder_data_manager_inner.cpp b/services/reminder/src/reminder_data_manager_inner.cpp index c5c8fd78ecda6709301a25274e7ee50d2a0670ac..704372157f2553884aea85ae7b08cfaa120c4ee6 100644 --- a/services/reminder/src/reminder_data_manager_inner.cpp +++ b/services/reminder/src/reminder_data_manager_inner.cpp @@ -367,5 +367,20 @@ void ReminderDataManager::SetAlertingReminder(const sptr &remin } ANSR_LOGD("Set alertingReminderId=%{public}d", alertingReminderId_.load()); } + +ErrCode ReminderDataManager::CancelReminderToDb(const int32_t reminderId, const int32_t callingUid) +{ + if (store_ == nullptr) { + ANSR_LOGE("Store is nullptr."); + return ERR_REMINDER_NOT_EXIST; + } + std::lock_guard lock(ReminderDataManager::MUTEX); + if (!store_->IsReminderExist(reminderId, callingUid)) { + ANSR_LOGE("Not find reminder[%{public}d] in db.", reminderId); + return ERR_REMINDER_NOT_EXIST; + } + store_->Delete(reminderId); + return ERR_OK; +} } } diff --git a/services/reminder/test/unittest/reminder_data_manager_test.cpp b/services/reminder/test/unittest/reminder_data_manager_test.cpp index b5d79454eb3d7aecbfcd496800db598f5ad40e88..b8152b8300e692dc9d59eb24a292070d4c943fa3 100644 --- a/services/reminder/test/unittest/reminder_data_manager_test.cpp +++ b/services/reminder/test/unittest/reminder_data_manager_test.cpp @@ -94,6 +94,35 @@ HWTEST_F(ReminderDataManagerTest, GetVaildReminders_00001, Level1) EXPECT_TRUE(reminders.size() >= 0); } +/** + * @tc.name: CancelReminderToDb_0001 + * @tc.desc: Reminder data manager test + * @tc.type: FUNC + * @tc.require: issue#I9IIDE + */ +HWTEST_F(ReminderDataManagerTest, CancelReminderToDb_0001, Level1) +{ + IPCSkeleton::SetCallingTokenID(100); + int32_t callingUid = 99999; + sptr reminder1 = new ReminderRequestTimer(static_cast(500)); + reminder1->InitCreatorBundleName("test_getvalid"); + reminder1->InitCreatorUid(callingUid); + reminder1->InitBundleName("test_getvalid"); + reminder1->InitUid(callingUid); + reminder1->SetExpired(false); + manager->PublishReminder(reminder1, callingUid); + + auto store = std::move(manager->store_); + int32_t ret = manager->CancelReminderToDb(reminder1->GetReminderId(), callingUid); + EXPECT_TRUE(ret == ERR_REMINDER_NOT_EXIST); + manager->store_ = std::move(store); + + ret = manager->CancelReminderToDb(12457, callingUid); + EXPECT_TRUE(ret == ERR_REMINDER_NOT_EXIST); + ret = manager->CancelReminderToDb(reminder1->GetReminderId(), callingUid); + EXPECT_TRUE(ret == ERR_OK); +} + /** * @tc.name: ReminderDataManagerTest_001 * @tc.desc: Reminder data manager test