From 8250ec4b6654d31078a2dfe7746c1783b3d09cf3 Mon Sep 17 00:00:00 2001 From: gaojiaqi Date: Sat, 12 Oct 2024 13:34:24 +0800 Subject: [PATCH] sync Signed-off-by: gaojiaqi --- frameworks/ans/src/reminder_request.cpp | 425 ++---------- frameworks/ans/src/reminder_request_alarm.cpp | 57 +- .../ans/src/reminder_request_calendar.cpp | 196 ++---- frameworks/ans/src/reminder_request_timer.cpp | 30 +- frameworks/ans/test/unittest/BUILD.gn | 1 + .../reminder_request_branch_test.cpp | 2 +- .../reminder_request_calendar_test.cpp | 13 +- .../test/unittest/reminder_request_test.cpp | 174 +---- .../unittest/reminder_request_timer_test.cpp | 15 - .../ans/test/unittest/reminder_store_test.cpp | 332 +++++++++ frameworks/core/src/ans_notification.cpp | 2 + interfaces/inner_api/reminder_request.h | 82 ++- interfaces/inner_api/reminder_request_alarm.h | 14 + .../inner_api/reminder_request_calendar.h | 127 ++++ interfaces/inner_api/reminder_request_timer.h | 2 + services/ans/BUILD.gn | 4 + services/ans/include/bundle_manager_helper.h | 8 + .../ans/include}/reminder_store.h | 0 .../ans/include/reminder_store_strategy.h | 193 ++++++ .../ans/include}/reminder_table.h | 0 .../ans/include}/reminder_table_old.h | 0 services/ans/src/bundle_manager_helper.cpp | 15 + services/ans/src/reminder_data_manager.cpp | 18 +- services/ans/src/reminder_event_manager.cpp | 3 +- .../ans/src/reminder_store.cpp | 32 +- services/ans/src/reminder_store_strategy.cpp | 649 ++++++++++++++++++ .../ans/src/reminder_table.cpp | 0 .../ans/src/reminder_table_old.cpp | 0 .../reminderrequest_fuzzer.cpp | 9 - .../reminderrequestcontinuate_fuzzer.cpp | 4 +- test/fuzztest/reminderstore_fuzzer/BUILD.gn | 6 +- .../reminderstoreannex_fuzzer/BUILD.gn | 6 +- .../reminderstoreannex_fuzzer.cpp | 2 - 33 files changed, 1572 insertions(+), 849 deletions(-) rename {interfaces/inner_api => services/ans/include}/reminder_store.h (100%) create mode 100644 services/ans/include/reminder_store_strategy.h rename {interfaces/inner_api => services/ans/include}/reminder_table.h (100%) rename {interfaces/inner_api => services/ans/include}/reminder_table_old.h (100%) rename {frameworks => services}/ans/src/reminder_store.cpp (95%) create mode 100644 services/ans/src/reminder_store_strategy.cpp rename {frameworks => services}/ans/src/reminder_table.cpp (100%) rename {frameworks => services}/ans/src/reminder_table_old.cpp (100%) diff --git a/frameworks/ans/src/reminder_request.cpp b/frameworks/ans/src/reminder_request.cpp index 43fed2510..a0f8a22fe 100644 --- a/frameworks/ans/src/reminder_request.cpp +++ b/frameworks/ans/src/reminder_request.cpp @@ -15,8 +15,6 @@ #include "reminder_request.h" -#include "reminder_table.h" -#include "reminder_table_old.h" #include "ans_const_define.h" #include "ans_log_wrapper.h" #include "bundle_mgr_interface.h" @@ -25,8 +23,6 @@ #include "ipc_skeleton.h" #include "iservice_registry.h" #include "locale_config.h" -#include "os_account_manager.h" -#include "reminder_store.h" #include "system_ability_definition.h" #include "want_agent_helper.h" #include "nlohmann/json.hpp" @@ -480,118 +476,6 @@ bool ReminderRequest::OnTimeZoneChange() triggerTimeInMilli_, GetDurationSinceEpochInMilli(newZoneTriggerTime), nextTriggerTime); } -int64_t ReminderRequest::RecoverInt64FromDb(const std::shared_ptr &resultSet, - const std::string &columnName, const DbRecoveryType &columnType) -{ - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return 0; - } - switch (columnType) { - case (DbRecoveryType::INT): { - int32_t value; - ReminderStore::GetInt32Val(resultSet, columnName, value); - return static_cast(value); - } - case (DbRecoveryType::LONG): { - int64_t value; - ReminderStore::GetInt64Val(resultSet, columnName, value); - return value; - } - default: { - ANSR_LOGD("ColumnType not support."); - break; - } - } - ANSR_LOGE("Recover data error"); - return 0; -} - -void ReminderRequest::RecoverBasicFromDb(const std::shared_ptr& resultSet) -{ - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::REMINDER_ID, reminderId_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::PACKAGE_NAME, bundleName_); - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::USER_ID, userId_); - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::UID, uid_); - - std::string isSysApp; - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::SYSTEM_APP, isSysApp); - isSystemApp_ = isSysApp == "true" ? true : false; - - int32_t reminderType; - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::REMINDER_TYPE, reminderType); - reminderType_ = ReminderType(reminderType); - - ReminderStore::GetUInt64Val(resultSet, ReminderBaseTable::REMINDER_TIME, reminderTimeInMilli_); - ReminderStore::GetUInt64Val(resultSet, ReminderBaseTable::TRIGGER_TIME, triggerTimeInMilli_); - - uint64_t timeIntervalInSecond = 0; - ReminderStore::GetUInt64Val(resultSet, ReminderBaseTable::TIME_INTERVAL, timeIntervalInSecond); - SetTimeInterval(timeIntervalInSecond); - - ReminderStore::GetUInt8Val(resultSet, ReminderBaseTable::SNOOZE_TIMES, snoozeTimes_); - ReminderStore::GetUInt8Val(resultSet, ReminderBaseTable::DYNAMIC_SNOOZE_TIMES, snoozeTimesDynamic_); - - uint64_t ringDurationInSecond; - ReminderStore::GetUInt64Val(resultSet, ReminderBaseTable::RING_DURATION, ringDurationInSecond); - SetRingDuration(ringDurationInSecond); - - std::string isExpired; - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::IS_EXPIRED, isExpired); - isExpired_ = isExpired == "true" ? true : false; - - ReminderStore::GetUInt8Val(resultSet, ReminderBaseTable::STATE, state_); - - // action buttons - RecoverActionButton(resultSet); - - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::CUSTOM_BUTTON_URI, customButtonUri_); - - int32_t slotType; - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::SLOT_ID, slotType); - slotType_ = NotificationConstant::SlotType(slotType); - - int32_t snoozeSlotType; - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::SNOOZE_SLOT_ID, snoozeSlotType); - snoozeSlotType_ = NotificationConstant::SlotType(snoozeSlotType); - - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::NOTIFICATION_ID, notificationId_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::TITLE, title_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::CONTENT, content_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::SNOOZE_CONTENT, snoozeContent_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::EXPIRED_CONTENT, expiredContent_); - - InitNotificationRequest(); // must set before wantAgent & maxScreenWantAgent -} - -void ReminderRequest::RecoverFromDbBase(const std::shared_ptr& resultSet) -{ - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return; - } - RecoverBasicFromDb(resultSet); - - std::string wantAgent; - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::WANT_AGENT, wantAgent); - RecoverWantAgent(wantAgent, 0); - - std::string maxScreenWantAgent; - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::MAX_SCREEN_WANT_AGENT, maxScreenWantAgent); - RecoverWantAgent(maxScreenWantAgent, 1); - - std::string tapDismissed; - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::TAP_DISMISSED, tapDismissed); - tapDismissed_ = tapDismissed == "true" ? true : false; - - ReminderStore::GetInt64Val(resultSet, ReminderBaseTable::AUTO_DELETED_TIME, autoDeletedTime_); - - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::GROUP_ID, groupId_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::CUSTOM_RING_URI, customRingUri_); - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::CREATOR_BUNDLE_NAME, creatorBundleName_); - ReminderStore::GetInt32Val(resultSet, ReminderBaseTable::CREATOR_UID, creatorUid_); -} - void ReminderRequest::RecoverActionButtonJsonMode(const std::string &jsonString) { if (!nlohmann::json::accept(jsonString)) { @@ -630,15 +514,9 @@ void ReminderRequest::RecoverActionButtonJsonMode(const std::string &jsonString) resource, buttonWantAgent, buttonDataShareUpdate); } -void ReminderRequest::RecoverActionButton(const std::shared_ptr &resultSet) +void ReminderRequest::DeserializeButtonInfo(const std::string& buttonInfoStr) { - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return; - } - std::string actionButtonInfo; - ReminderStore::GetStringVal(resultSet, ReminderBaseTable::ACTION_BUTTON_INFO, actionButtonInfo); - std::vector multiButton = StringSplit(actionButtonInfo, SEP_BUTTON_MULTI); + std::vector multiButton = StringSplit(buttonInfoStr, SEP_BUTTON_MULTI); for (auto button : multiButton) { std::vector singleButton = StringSplit(button, SEP_BUTTON_SINGLE); if (singleButton.size() <= SINGLE_BUTTON_INVALID) { @@ -733,7 +611,7 @@ void ReminderRequest::RecoverWantAgentByJson(const std::string& wantAgentInfo, c } } -void ReminderRequest::RecoverWantAgent(const std::string &wantAgentInfo, const uint8_t &type) +void ReminderRequest::DeserializeWantAgent(const std::string &wantAgentInfo, const uint8_t type) { if (nlohmann::json::accept(wantAgentInfo)) { RecoverWantAgentByJson(wantAgentInfo, type); @@ -1004,6 +882,21 @@ std::string ReminderRequest::GetBundleName() const return bundleName_; } +void ReminderRequest::SetReminderType(const ReminderType type) +{ + reminderType_ = type; +} + +void ReminderRequest::SetState(const uint8_t state) +{ + state_ = state; +} + +void ReminderRequest::SetRepeatDaysOfWeek(const uint8_t repeatDaysOfWeek) +{ + repeatDaysOfWeek_ = repeatDaysOfWeek; +} + void ReminderRequest::SetSystemApp(bool isSystem) { isSystemApp_ = isSystem; @@ -1079,11 +972,21 @@ bool ReminderRequest::SetNextTriggerTime() return false; } +void ReminderRequest::SetWantAgentStr(const std::string& wantStr) +{ + wantAgentStr_ = wantStr; +} + std::string ReminderRequest::GetWantAgentStr() { return wantAgentStr_; } +void ReminderRequest::SetMaxWantAgentStr(const std::string& maxWantStr) +{ + maxWantAgentStr_ = maxWantStr; +} + std::string ReminderRequest::GetMaxWantAgentStr() { return maxWantAgentStr_; @@ -1378,7 +1281,6 @@ bool ReminderRequest::InitNotificationRequest() return false; } displayContent_ = content_; - AddActionButtons(true); return true; } @@ -1411,7 +1313,7 @@ std::string ReminderRequest::GetDateTimeInfo(const time_t &timeInSecond) const return GetTimeInfoInner(timeInSecond, TimeFormat::YMDHMS, true); } -std::string ReminderRequest::GetButtonInfo() const +std::string ReminderRequest::SerializeButtonInfo() const { std::string info = ""; bool isFirst = true; @@ -1764,11 +1666,6 @@ void ReminderRequest::UpdateNotificationBundleInfo() notificationRequest_->SetOwnerBundleName(bundleName_); notificationRequest_->SetCreatorBundleName(bundleName_); notificationRequest_->SetCreatorUid(uid_); - ErrCode errCode = AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid_, userId_); - if (errCode != ERR_OK) { - ANSR_LOGE("GetOsAccountLocalIdFromUid fail."); - return; - } notificationRequest_->SetCreatorUserId(userId_); } @@ -1851,76 +1748,17 @@ int32_t ReminderRequest::GetCTime(const TimeTransferType &type, int32_t actualTi } } -int32_t ReminderRequest::GetUid(const int32_t &userId, const std::string &bundleName) -{ - sptr systemAbilityManager - = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (systemAbilityManager == nullptr) { - ANSR_LOGE("Failed to get uid due to get systemAbilityManager is null."); - return -1; - } - sptr remoteObject = systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); - if (remoteObject == nullptr) { - ANSR_LOGE("Fail to get bundle manager proxy"); - return -1; - } - sptr bundleMgr = iface_cast(remoteObject); - if (bundleMgr == nullptr) { - ANSR_LOGE("Bundle mgr proxy is nullptr"); - return -1; - } - int32_t uid = bundleMgr->GetUidByBundleName(bundleName, userId); - ANSR_LOGD("uid=%{public}d", uid); - return uid; -} - -int32_t ReminderRequest::GetAppIndex(const int32_t uid) -{ - const int32_t defaultAppIndex = 0; // failed return main apps - sptr systemAbilityManager - = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (systemAbilityManager == nullptr) { - ANSR_LOGE("Failed to get app index due to get systemAbilityManager is null."); - return defaultAppIndex; - } - sptr remoteObject = systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); - if (remoteObject == nullptr) { - ANSR_LOGE("Fail to get bundle manager proxy"); - return defaultAppIndex; - } - sptr bundleMgr = iface_cast(remoteObject); - if (bundleMgr == nullptr) { - ANSR_LOGE("Bundle mgr proxy is nullptr"); - return defaultAppIndex; - } - std::string bundleName; - int32_t appIndex = 0; - bundleMgr->GetNameAndIndexForUid(uid, bundleName, appIndex); - ANSR_LOGD("appIndex=%{public}d", appIndex); - return appIndex; -} - -int32_t ReminderRequest::GetUserId(const int32_t &uid) -{ - int32_t userId = -1; - AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid, userId); - ANSR_LOGD("userId=%{private}d", userId); - return userId; -} - -void ReminderRequest::AppendWantAgentValuesBucket(const sptr& reminder, - NativeRdb::ValuesBucket& values) +void ReminderRequest::SerializeWantAgent(std::string& wantInfoStr, std::string& maxWantInfoStr) { std::string pkgName; std::string abilityName; std::string uri; std::string parameters; - auto wantAgentInfo = reminder->GetWantAgentInfo(); - if (wantAgentInfo != nullptr) { - pkgName = wantAgentInfo->pkgName; - abilityName = wantAgentInfo->abilityName; - uri = wantAgentInfo->uri; - AAFwk::WantParamWrapper wrapper(wantAgentInfo->parameters); + if (wantAgentInfo_ != nullptr) { + pkgName = wantAgentInfo_->pkgName; + abilityName = wantAgentInfo_->abilityName; + uri = wantAgentInfo_->uri; + AAFwk::WantParamWrapper wrapper(wantAgentInfo_->parameters); parameters = wrapper.ToString(); } nlohmann::json wantInfo; @@ -1928,13 +1766,11 @@ void ReminderRequest::AppendWantAgentValuesBucket(const sptr& r wantInfo["abilityName"] = abilityName; wantInfo["uri"] = uri; wantInfo["parameters"] = parameters; - std::string info = wantInfo.dump(INDENT, ' ', false, nlohmann::json::error_handler_t::replace); - values.PutString(ReminderBaseTable::WANT_AGENT, info); + wantInfoStr = wantInfo.dump(INDENT, ' ', false, nlohmann::json::error_handler_t::replace); - auto maxScreenWantAgentInfo = reminder->GetMaxScreenWantAgentInfo(); - if (maxScreenWantAgentInfo != nullptr) { - pkgName = maxScreenWantAgentInfo->pkgName; - abilityName = maxScreenWantAgentInfo->abilityName; + if (maxScreenWantAgentInfo_ != nullptr) { + pkgName = maxScreenWantAgentInfo_->pkgName; + abilityName = maxScreenWantAgentInfo_->abilityName; uri = ""; parameters = ""; } @@ -1943,50 +1779,7 @@ void ReminderRequest::AppendWantAgentValuesBucket(const sptr& r maxWantInfo["abilityName"] = abilityName; maxWantInfo["uri"] = uri; maxWantInfo["parameters"] = parameters; - info = maxWantInfo.dump(INDENT, ' ', false, nlohmann::json::error_handler_t::replace); - values.PutString(ReminderBaseTable::MAX_SCREEN_WANT_AGENT, info); -} - -void ReminderRequest::AppendValuesBucket(const sptr &reminder, - const sptr &bundleOption, NativeRdb::ValuesBucket &values, bool oldVersion) -{ - values.PutInt(ReminderBaseTable::REMINDER_ID, reminder->GetReminderId()); - values.PutString(ReminderBaseTable::PACKAGE_NAME, reminder->GetBundleName()); - values.PutInt(ReminderBaseTable::USER_ID, reminder->GetUserId()); - values.PutInt(ReminderBaseTable::UID, reminder->GetUid()); - values.PutString(ReminderBaseTable::SYSTEM_APP, reminder->IsSystemApp() ? "true" : "false"); - values.PutInt(ReminderBaseTable::REMINDER_TYPE, static_cast(reminder->GetReminderType())); - values.PutLong(ReminderBaseTable::REMINDER_TIME, reminder->GetReminderTimeInMilli()); - values.PutLong(ReminderBaseTable::TRIGGER_TIME, reminder->GetTriggerTimeInMilli()); - values.PutLong(ReminderBaseTable::TIME_INTERVAL, reminder->GetTimeInterval()); - values.PutInt(ReminderBaseTable::SNOOZE_TIMES, reminder->GetSnoozeTimes()); - values.PutInt(ReminderBaseTable::DYNAMIC_SNOOZE_TIMES, reminder->GetSnoozeTimesDynamic()); - values.PutLong(ReminderBaseTable::RING_DURATION, reminder->GetRingDuration()); - values.PutString(ReminderBaseTable::IS_EXPIRED, reminder->IsExpired() ? "true" : "false"); - values.PutInt(ReminderBaseTable::STATE, reminder->GetState()); - values.PutString(ReminderBaseTable::ACTION_BUTTON_INFO, reminder->GetButtonInfo()); - values.PutString(ReminderBaseTable::CUSTOM_BUTTON_URI, reminder->GetCustomButtonUri()); - values.PutInt(ReminderBaseTable::SLOT_ID, reminder->GetSlotType()); - values.PutInt(ReminderBaseTable::SNOOZE_SLOT_ID, reminder->GetSnoozeSlotType()); - values.PutInt(ReminderBaseTable::NOTIFICATION_ID, reminder->GetNotificationId()); - values.PutString(ReminderBaseTable::TITLE, reminder->GetTitle()); - values.PutString(ReminderBaseTable::CONTENT, reminder->GetContent()); - values.PutString(ReminderBaseTable::SNOOZE_CONTENT, reminder->GetSnoozeContent()); - values.PutString(ReminderBaseTable::EXPIRED_CONTENT, reminder->GetExpiredContent()); - - if (oldVersion) { - values.PutString(ReminderBaseTable::WANT_AGENT, reminder->GetWantAgentStr()); - values.PutString(ReminderBaseTable::MAX_SCREEN_WANT_AGENT, reminder->GetMaxWantAgentStr()); - } else { - AppendWantAgentValuesBucket(reminder, values); - } - - values.PutString(ReminderBaseTable::TAP_DISMISSED, reminder->IsTapDismissed() ? "true" : "false"); - values.PutLong(ReminderBaseTable::AUTO_DELETED_TIME, reminder->GetAutoDeletedTime()); - values.PutString(ReminderBaseTable::GROUP_ID, reminder->GetGroupId()); - values.PutString(ReminderBaseTable::CUSTOM_RING_URI, reminder->GetCustomRingUri()); - values.PutString(ReminderBaseTable::CREATOR_BUNDLE_NAME, reminder->GetCreatorBundleName()); - values.PutInt(ReminderBaseTable::CREATOR_UID, reminder->GetCreatorUid()); + maxWantInfoStr = maxWantInfo.dump(INDENT, ' ', false, nlohmann::json::error_handler_t::replace); } int64_t ReminderRequest::GetNextDaysOfWeek(const time_t now, const time_t target) const @@ -2105,143 +1898,5 @@ void ReminderRequest::OnLanguageChange(const std::shared_ptr& resultSet) -{ - // reminderId - ReminderStore::GetInt32Val(resultSet, ReminderTable::REMINDER_ID, reminderId_); - - // userId - ReminderStore::GetInt32Val(resultSet, ReminderTable::USER_ID, userId_); - - // bundleName - ReminderStore::GetStringVal(resultSet, ReminderTable::PKG_NAME, bundleName_); - - // uid - ReminderStore::GetInt32Val(resultSet, ReminderTable::UID, uid_); - - // isSystemApp - std::string isSysApp; - ReminderStore::GetStringVal(resultSet, ReminderTable::SYS_APP, isSysApp); - isSystemApp_ = isSysApp == "true" ? true : false; - - // reminderType - int32_t reminderType; - ReminderStore::GetInt32Val(resultSet, ReminderTable::REMINDER_TYPE, reminderType); - reminderType_ = ReminderType(reminderType); - - // reminderTime - reminderTimeInMilli_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::REMINDER_TIME, - DbRecoveryType::LONG)); - - // triggerTime - triggerTimeInMilli_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::TRIGGER_TIME, - DbRecoveryType::LONG)); - - // timeInterval - uint64_t timeIntervalInSecond = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::TIME_INTERVAL, - DbRecoveryType::LONG)); - SetTimeInterval(timeIntervalInSecond); - - // snoozeTimes - snoozeTimes_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::SNOOZE_TIMES, - DbRecoveryType::INT)); - - // dynamicSnoozeTimes - snoozeTimesDynamic_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::DYNAMIC_SNOOZE_TIMES, - DbRecoveryType::INT)); - - // ringDuration - uint64_t ringDurationInSecond = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::RING_DURATION, - DbRecoveryType::LONG)); - SetRingDuration(ringDurationInSecond); - - // isExpired - std::string isExpired; - ReminderStore::GetStringVal(resultSet, ReminderTable::IS_EXPIRED, isExpired); - isExpired_ = isExpired == "true" ? true : false; - - // state - state_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::STATE, DbRecoveryType::INT)); - - // repeatDaysOfWeek_ - repeatDaysOfWeek_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::REPEAT_DAYS_OF_WEEK, - DbRecoveryType::INT)); - - // action buttons - RecoverActionButton(resultSet); - - // slotType - int32_t slotType; - ReminderStore::GetInt32Val(resultSet, ReminderTable::SLOT_ID, slotType); - slotType_ = NotificationConstant::SlotType(slotType); - - // snoozeSlotType - int32_t snoozeSlotType; - ReminderStore::GetInt32Val(resultSet, ReminderTable::SNOOZE_SLOT_ID, snoozeSlotType); - snoozeSlotType_ = NotificationConstant::SlotType(snoozeSlotType); - - // notification id - ReminderStore::GetInt32Val(resultSet, ReminderTable::NOTIFICATION_ID, notificationId_); - - // title - ReminderStore::GetStringVal(resultSet, ReminderTable::TITLE, title_); - - // content - ReminderStore::GetStringVal(resultSet, ReminderTable::CONTENT, content_); - - // snoozeContent - ReminderStore::GetStringVal(resultSet, ReminderTable::SNOOZE_CONTENT, snoozeContent_); - - // expiredContent - ReminderStore::GetStringVal(resultSet, ReminderTable::EXPIRED_CONTENT, expiredContent_); -} - -void ReminderRequest::RecoverFromOldVersion(const std::shared_ptr& resultSet) -{ - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return; - } - - RecoverBasicFromOldVersion(resultSet); - - // wantAgent - std::string wantAgent; - ReminderStore::GetStringVal(resultSet, ReminderTable::AGENT, wantAgent); - wantAgentStr_ = wantAgent; - - // maxScreenWantAgent - std::string maxScreenWantAgent; - ReminderStore::GetStringVal(resultSet, ReminderTable::MAX_SCREEN_AGENT, maxScreenWantAgent); - maxWantAgentStr_ = maxScreenWantAgent; - - // tapDismissed - std::string tapDismissed; - ReminderStore::GetStringVal(resultSet, ReminderTable::TAP_DISMISSED, tapDismissed); - tapDismissed_ = tapDismissed == "true" ? true : false; - - // autoDeletedTime - autoDeletedTime_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::AUTO_DELETED_TIME, - DbRecoveryType::LONG)); - - // customButtonUri - ReminderStore::GetStringVal(resultSet, ReminderTable::CUSTOM_BUTTON_URI, customButtonUri_); - - // groupId - ReminderStore::GetStringVal(resultSet, ReminderTable::GROUP_ID, groupId_); - - // customRingUri - ReminderStore::GetStringVal(resultSet, ReminderTable::CUSTOM_RING_URI, customRingUri_); - - // creatorBundleName - ReminderStore::GetStringVal(resultSet, ReminderTable::CREATOR_BUNDLE_NAME, creatorBundleName_); -} } } diff --git a/frameworks/ans/src/reminder_request_alarm.cpp b/frameworks/ans/src/reminder_request_alarm.cpp index 8a08f7a55..8fd928b2b 100644 --- a/frameworks/ans/src/reminder_request_alarm.cpp +++ b/frameworks/ans/src/reminder_request_alarm.cpp @@ -16,9 +16,6 @@ #include "reminder_request_alarm.h" #include "ans_log_wrapper.h" -#include "reminder_table.h" -#include "reminder_table_old.h" -#include "reminder_store.h" namespace OHOS { namespace Notification { @@ -114,6 +111,16 @@ uint64_t ReminderRequestAlarm::GetNextTriggerTime(bool forceToGetNext) const return GetTriggerTime(now, nextTriggerTime); } +void ReminderRequestAlarm::SetHour(const uint8_t hour) +{ + hour_ = hour; +} + +void ReminderRequestAlarm::SetMinute(const uint8_t minute) +{ + minute_ = minute; +} + uint8_t ReminderRequestAlarm::GetHour() const { return hour_; @@ -197,49 +204,5 @@ bool ReminderRequestAlarm::ReadFromParcel(Parcel &parcel) } return false; } - -void ReminderRequestAlarm::RecoverFromOldVersion(const std::shared_ptr &resultSet) -{ - ReminderRequest::RecoverFromOldVersion(resultSet); - - // hour - hour_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::ALARM_HOUR, - DbRecoveryType::INT)); - - // minute - minute_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::ALARM_MINUTE, - DbRecoveryType::INT)); -} - -void ReminderRequestAlarm::RecoverFromDb(const std::shared_ptr& resultSet) -{ - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return; - } - ReminderStore::GetUInt8Val(resultSet, ReminderAlarmTable::ALARM_HOUR, hour_); - ReminderStore::GetUInt8Val(resultSet, ReminderAlarmTable::ALARM_MINUTE, minute_); - ReminderStore::GetUInt8Val(resultSet, ReminderAlarmTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek_); -} - -void ReminderRequestAlarm::AppendValuesBucket(const sptr &reminder, - const sptr &bundleOption, NativeRdb::ValuesBucket &values) -{ - uint8_t hour = 0; - uint8_t minute = 0; - uint8_t repeatDaysOfWeek = 0; - if (reminder->GetReminderType() == ReminderRequest::ReminderType::ALARM) { - ReminderRequestAlarm* alarm = static_cast(reminder.GetRefPtr()); - hour = alarm->GetHour(); - minute = alarm->GetMinute(); - repeatDaysOfWeek = alarm->GetRepeatDaysOfWeek(); - } - values.PutInt(ReminderAlarmTable::REMINDER_ID, reminder->GetReminderId()); - values.PutInt(ReminderAlarmTable::ALARM_HOUR, hour); - values.PutInt(ReminderAlarmTable::ALARM_MINUTE, minute); - values.PutInt(ReminderAlarmTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); -} } } \ No newline at end of file diff --git a/frameworks/ans/src/reminder_request_calendar.cpp b/frameworks/ans/src/reminder_request_calendar.cpp index 0f1ead006..75ee258a0 100644 --- a/frameworks/ans/src/reminder_request_calendar.cpp +++ b/frameworks/ans/src/reminder_request_calendar.cpp @@ -16,9 +16,6 @@ #include "reminder_request_calendar.h" #include "ans_log_wrapper.h" -#include "reminder_table.h" -#include "reminder_table_old.h" -#include "reminder_store.h" #include "nlohmann/json.hpp" namespace OHOS { @@ -128,6 +125,56 @@ std::shared_ptr ReminderRequestCalendar::GetRRul return rruleWantAgentInfo_; } +void ReminderRequestCalendar::SetRepeatDay(const uint32_t repeatDay) +{ + repeatDay_ = repeatDay; +} + +void ReminderRequestCalendar::SetRepeatMonth(const uint16_t repeatMonth) +{ + repeatMonth_ = repeatMonth; +} + +void ReminderRequestCalendar::SetFirstDesignateYear(const uint16_t firstDesignateYear) +{ + firstDesignateYear_ = firstDesignateYear; +} + +void ReminderRequestCalendar::SetFirstDesignageMonth(const uint16_t firstDesignateMonth) +{ + firstDesignateMonth_ = firstDesignateMonth; +} + +void ReminderRequestCalendar::SetFirstDesignateDay(const uint16_t firstDesignateDay) +{ + firstDesignateDay_ = firstDesignateDay; +} + +void ReminderRequestCalendar::SetYear(const uint16_t year) +{ + year_ = year; +} + +void ReminderRequestCalendar::SetMonth(const uint8_t month) +{ + month_ = month; +} + +void ReminderRequestCalendar::SetDay(const uint8_t day) +{ + day_ = day; +} + +void ReminderRequestCalendar::SetHour(const uint8_t hour) +{ + hour_ = hour; +} + +void ReminderRequestCalendar::SetMinute(const uint8_t minute) +{ + minute_ = minute; +} + bool ReminderRequestCalendar::InitTriggerTime() { uint64_t nextTriggerTime = INVALID_LONG_LONG_VALUE; @@ -689,145 +736,6 @@ bool ReminderRequestCalendar::ReadFromParcel(Parcel &parcel) return false; } -void ReminderRequestCalendar::RecoverFromOldVersion(const std::shared_ptr &resultSet) -{ - ReminderRequest::RecoverFromOldVersion(resultSet); - - // repeatDay - repeatDay_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::REPEAT_DAYS, - DbRecoveryType::INT)); - - // repeatMonth - repeatMonth_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::REPEAT_MONTHS, - DbRecoveryType::INT)); - - // firstDesignateYear - firstDesignateYear_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::FIRST_DESIGNATE_YEAR, - DbRecoveryType::INT)); - - // firstDesignateMonth - firstDesignateMonth_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::FIRST_DESIGNATE_MONTH, - DbRecoveryType::INT)); - - // firstDesignateDay - firstDesignateDay_ = - static_cast(RecoverInt64FromDb(resultSet, ReminderTable::FIRST_DESIGNATE_DAY, - DbRecoveryType::INT)); - - // year - year_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::CALENDAR_YEAR, - DbRecoveryType::INT)); - - // month - month_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::CALENDAR_MONTH, - DbRecoveryType::INT)); - - // day - day_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::CALENDAR_DAY, - DbRecoveryType::INT)); - - // hour - hour_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::CALENDAR_HOUR, - DbRecoveryType::INT)); - - // minute - minute_ = static_cast(RecoverInt64FromDb(resultSet, ReminderTable::CALENDAR_MINUTE, - DbRecoveryType::INT)); -} - -void ReminderRequestCalendar::RecoverFromDb(const std::shared_ptr& resultSet) -{ - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return; - } - ReminderStore::GetUInt16Val(resultSet, ReminderCalendarTable::FIRST_DESIGNATE_YEAR, firstDesignateYear_); - ReminderStore::GetUInt8Val(resultSet, ReminderCalendarTable::FIRST_DESIGNATE_MONTH, firstDesignateMonth_); - ReminderStore::GetUInt8Val(resultSet, ReminderCalendarTable::FIRST_DESIGNATE_DAY, firstDesignateDay_); - - uint64_t dateTime; - ReminderStore::GetUInt64Val(resultSet, ReminderCalendarTable::CALENDAR_DATE_TIME, dateTime); - SetDateTime(dateTime); - - uint64_t endDateTime; - ReminderStore::GetUInt64Val(resultSet, ReminderCalendarTable::CALENDAR_END_DATE_TIME, endDateTime); - if (endDateTime != 0 && endDateTime >= dateTime) { - SetEndDateTime(endDateTime); - } else { - SetEndDateTime(startDateTime_); - } - - uint64_t lastStartDateTime; - ReminderStore::GetUInt64Val(resultSet, ReminderCalendarTable::CALENDAR_LAST_DATE_TIME, lastStartDateTime); - if (lastStartDateTime == 0) { - SetLastStartDateTime(dateTime); - } else { - SetLastStartDateTime(lastStartDateTime); - } - - int32_t repeatDay; - ReminderStore::GetInt32Val(resultSet, ReminderCalendarTable::REPEAT_DAYS, repeatDay); - repeatDay_ = static_cast(repeatDay); - - ReminderStore::GetUInt16Val(resultSet, ReminderCalendarTable::REPEAT_MONTHS, repeatMonth_); - ReminderStore::GetUInt8Val(resultSet, ReminderCalendarTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek_); - - std::string rruleWantAgent; - ReminderStore::GetStringVal(resultSet, ReminderCalendarTable::RRULE_WANT_AGENT, rruleWantAgent); - DeserializationRRule(rruleWantAgent); - - std::string excludeDates; - ReminderStore::GetStringVal(resultSet, ReminderCalendarTable::EXCLUDE_DATES, excludeDates); - DeserializationExcludeDates(excludeDates); -} - -void ReminderRequestCalendar::AppendValuesBucket(const sptr &reminder, - const sptr &bundleOption, NativeRdb::ValuesBucket &values) -{ - uint16_t firstDesignateYear = 0; - uint8_t firstDesignateMonth = 0; - uint8_t firstDesignateDay = 0; - uint64_t dateTime = 0; - uint32_t repeatDay = 0; - uint16_t repeatMonth = 0; - uint8_t repeatDaysOfWeek = 0; - uint64_t endDateTime = 0; - uint64_t lastStartDateTime = 0; - std::string rruleWantAgent; - std::string excludeDates; - if (reminder->GetReminderType() == ReminderRequest::ReminderType::CALENDAR) { - ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); - if (calendar != nullptr) { - repeatDay = calendar->GetRepeatDay(); - repeatMonth = calendar->GetRepeatMonth(); - firstDesignateYear = calendar->GetFirstDesignateYear(); - firstDesignateMonth = calendar->GetFirstDesignageMonth(); - firstDesignateDay = calendar->GetFirstDesignateDay(); - dateTime = calendar->GetDateTime(); - repeatDaysOfWeek = calendar->GetRepeatDaysOfWeek(); - endDateTime = calendar->GetEndDateTime(); - lastStartDateTime = calendar->GetLastStartDateTime(); - rruleWantAgent = calendar->SerializationRRule(); - excludeDates = calendar->SerializationExcludeDates(); - } - } - values.PutInt(ReminderCalendarTable::REMINDER_ID, reminder->GetReminderId()); - values.PutInt(ReminderCalendarTable::FIRST_DESIGNATE_YEAR, firstDesignateYear); - values.PutInt(ReminderCalendarTable::FIRST_DESIGNATE_MONTH, firstDesignateMonth); - values.PutInt(ReminderCalendarTable::FIRST_DESIGNATE_DAY, firstDesignateDay); - values.PutLong(ReminderCalendarTable::CALENDAR_DATE_TIME, dateTime); - values.PutLong(ReminderCalendarTable::CALENDAR_END_DATE_TIME, endDateTime); - values.PutLong(ReminderCalendarTable::CALENDAR_LAST_DATE_TIME, lastStartDateTime); - values.PutInt(ReminderCalendarTable::REPEAT_DAYS, repeatDay); - values.PutInt(ReminderCalendarTable::REPEAT_MONTHS, repeatMonth); - values.PutInt(ReminderCalendarTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); - values.PutString(ReminderCalendarTable::RRULE_WANT_AGENT, rruleWantAgent); - values.PutString(ReminderCalendarTable::EXCLUDE_DATES, excludeDates); -} - void ReminderRequestCalendar::SetDateTime(const uint64_t time) { time_t t = static_cast(time / MILLI_SECONDS); @@ -853,12 +761,12 @@ bool ReminderRequestCalendar::SetEndDateTime(const uint64_t time) return true; } -uint64_t ReminderRequestCalendar::GetDateTime() +uint64_t ReminderRequestCalendar::GetDateTime() const { return startDateTime_; } -uint64_t ReminderRequestCalendar::GetEndDateTime() +uint64_t ReminderRequestCalendar::GetEndDateTime() const { return endDateTime_; } diff --git a/frameworks/ans/src/reminder_request_timer.cpp b/frameworks/ans/src/reminder_request_timer.cpp index 6881b6261..867f26ae9 100644 --- a/frameworks/ans/src/reminder_request_timer.cpp +++ b/frameworks/ans/src/reminder_request_timer.cpp @@ -20,8 +20,6 @@ #include "ans_log_wrapper.h" #include "time_service_client.h" -#include "reminder_table.h" -#include "reminder_store.h" namespace OHOS { namespace Notification { @@ -58,6 +56,11 @@ uint64_t ReminderRequestTimer::GetInitInfo() const return countDownTimeInSeconds_; } +void ReminderRequestTimer::SetInitInfo(const uint64_t countDownTimeInSeconds) +{ + countDownTimeInSeconds_ = countDownTimeInSeconds; +} + uint64_t ReminderRequestTimer::PreGetNextTriggerTimeIgnoreSnooze(bool ignoreRepeat, bool forceToGetNext) { ANSR_LOGD("countdown time not support PreGetNextTriggerTimeIgnoreSnooze"); @@ -150,28 +153,5 @@ bool ReminderRequestTimer::ReadFromParcel(Parcel &parcel) } return false; } - -void ReminderRequestTimer::RecoverFromDb(const std::shared_ptr& resultSet) -{ - if (resultSet == nullptr) { - ANSR_LOGE("ResultSet is null"); - return; - } - ReminderStore::GetUInt64Val(resultSet, ReminderTimerTable::TRIGGER_SECOND, countDownTimeInSeconds_); -} - -void ReminderRequestTimer::AppendValuesBucket(const sptr &reminder, - const sptr &bundleOption, NativeRdb::ValuesBucket &values) -{ - uint64_t seconds = 0; - if (reminder->GetReminderType() == ReminderRequest::ReminderType::TIMER) { - ReminderRequestTimer* timer = static_cast(reminder.GetRefPtr()); - seconds = timer->GetInitInfo(); - } - values.PutInt(ReminderTimerTable::REMINDER_ID, reminder->GetReminderId()); - values.PutLong(ReminderTimerTable::TRIGGER_SECOND, seconds); - values.PutLong(ReminderTimerTable::START_DATE_TIME, 0); - values.PutLong(ReminderTimerTable::END_DATE_TIME, 0); -} } } diff --git a/frameworks/ans/test/unittest/BUILD.gn b/frameworks/ans/test/unittest/BUILD.gn index ae68e1aef..89bc493aa 100644 --- a/frameworks/ans/test/unittest/BUILD.gn +++ b/frameworks/ans/test/unittest/BUILD.gn @@ -73,6 +73,7 @@ ohos_unittest("ans_reminder_unit_test") { deps = [ "${frameworks_module_ans_path}:ans_innerkits", + "${services_path}/ans:libans", "//third_party/googletest:gtest_main", ] diff --git a/frameworks/ans/test/unittest/reminder_request_branch_test/reminder_request_branch_test.cpp b/frameworks/ans/test/unittest/reminder_request_branch_test/reminder_request_branch_test.cpp index 1c8599bb6..bc4e67d32 100644 --- a/frameworks/ans/test/unittest/reminder_request_branch_test/reminder_request_branch_test.cpp +++ b/frameworks/ans/test/unittest/reminder_request_branch_test/reminder_request_branch_test.cpp @@ -295,7 +295,7 @@ HWTEST_F(ReminderRequestBranchTest, GetButtonInfo_00100, Function | SmallTest | info.wantAgent = nullptr; reminderRequest->actionButtonMap_.insert( std::pair(actionButtonType, info)); - EXPECT_NE(reminderRequest->GetButtonInfo(), ""); + EXPECT_NE(reminderRequest->SerializeButtonInfo(), ""); } /** diff --git a/frameworks/ans/test/unittest/reminder_request_calendar_test.cpp b/frameworks/ans/test/unittest/reminder_request_calendar_test.cpp index 14a8a4121..e5dd66296 100644 --- a/frameworks/ans/test/unittest/reminder_request_calendar_test.cpp +++ b/frameworks/ans/test/unittest/reminder_request_calendar_test.cpp @@ -421,9 +421,6 @@ HWTEST_F(ReminderRequestCalendarTest, PreGetNextTriggerTimeIgnoreSnooze_03000, F struct tm nowTime; auto calendar = ReminderRequestCalendarTest::CreateCalendar(nowTime); EXPECT_NE(nullptr, calendar); - std::shared_ptr resultSet = - std::make_shared(); - calendar->RecoverFromDb(resultSet); EXPECT_EQ(calendar->PreGetNextTriggerTimeIgnoreSnooze(ignoreRepeat, forceToGetNext), calendar->GetNextTriggerTime()); @@ -954,11 +951,8 @@ HWTEST_F(ReminderRequestCalendarTest, RecoverFromDb_00001, Function | SmallTest auto calendar = ReminderRequestCalendarTest::CreateCalendar(nowTime); EXPECT_NE(nullptr, calendar); - std::shared_ptr resultSet = - std::make_shared(); - calendar->RecoverFromDb(resultSet); bool result = calendar->IsRepeatDay(1); - EXPECT_EQ(result, false); + EXPECT_EQ(result, true); } /** @@ -1102,11 +1096,8 @@ HWTEST_F(ReminderRequestCalendarTest, RecoverFromOldVersion_00001, Function | Sm auto calendar = ReminderRequestCalendarTest::CreateCalendar(nowTime); EXPECT_NE(nullptr, calendar); - std::shared_ptr resultSet = - std::make_shared(); - calendar->RecoverFromOldVersion(resultSet); bool result = calendar->IsRepeatDay(1); - EXPECT_EQ(result, false); + EXPECT_EQ(result, true); } /** diff --git a/frameworks/ans/test/unittest/reminder_request_test.cpp b/frameworks/ans/test/unittest/reminder_request_test.cpp index b1fd3e023..0489d7cbb 100644 --- a/frameworks/ans/test/unittest/reminder_request_test.cpp +++ b/frameworks/ans/test/unittest/reminder_request_test.cpp @@ -784,21 +784,6 @@ HWTEST_F(ReminderRequestTest, OnTimeZoneChange_00001, Function | SmallTest | Lev } } -/** - * @tc.name: RecoverInt64FromDb_00001 - * @tc.desc: Test RecoverInt64FromDb parameters. - * @tc.type: FUNC - * @tc.require: issueI5UYHP - */ -HWTEST_F(ReminderRequestTest, RecoverInt64FromDb_00001, Function | SmallTest | Level1) -{ - std::shared_ptr resultSet = nullptr; - std::string columnName = "columnName"; - ReminderRequest::DbRecoveryType columnType = ReminderRequest::DbRecoveryType::INT; - auto rrc = std::make_shared(); - EXPECT_EQ(rrc->RecoverInt64FromDb(resultSet, columnName, columnType), 0); -} - /** * @tc.name: StringSplit_00001 * @tc.desc: Test StringSplit parameters. @@ -991,7 +976,7 @@ HWTEST_F(ReminderRequestTest, IsAlerting_00001, Function | SmallTest | Level1) HWTEST_F(ReminderRequestTest, GetButtonInfo_00001, Function | SmallTest | Level1) { auto rrc = std::make_shared(); - EXPECT_EQ(rrc->GetButtonInfo(), ""); + EXPECT_EQ(rrc->SerializeButtonInfo(), ""); } /** @@ -1025,33 +1010,6 @@ HWTEST_F(ReminderRequestTest, GetShowTime_00002, Function | SmallTest | Level1) EXPECT_EQ(res.substr(4, res.size()), ret); } -/** - * @tc.name: GetUid_00001 - * @tc.desc: Test GetUid parameters. - * @tc.type: FUNC - * @tc.require: issueI5VB6V - */ -HWTEST_F(ReminderRequestTest, GetUid_00001, Function | SmallTest | Level1) -{ - int32_t userId = 1; - std::string bundleName = "bundleName"; - auto rrc = std::make_shared(); - EXPECT_EQ(rrc->GetUid(userId, bundleName), -1); -} - -/** - * @tc.name: GetUserId_00001 - * @tc.desc: Test GetUserId parameters. - * @tc.type: FUNC - * @tc.require: issueI5VB6V - */ -HWTEST_F(ReminderRequestTest, GetUserId_00001, Function | SmallTest | Level1) -{ - int32_t uid = 1; - auto rrc = std::make_shared(); - EXPECT_EQ(rrc->GetUserId(uid), 0); -} - /** * @tc.name: SetActionButton_00001 * @tc.desc: Test SetActionButton parameters. @@ -1209,49 +1167,6 @@ HWTEST_F(ReminderRequestTest, OnStart_00001, Function | SmallTest | Level1) reminderRequestChild->OnStop(); } -/** - * @tc.name: RecoverInt64FromDb_00002 - * @tc.desc: Test RecoverInt64FromDb parameters. - * @tc.type: FUNC - * @tc.require: issueI65R21 - */ -HWTEST_F(ReminderRequestTest, RecoverInt64FromDb_00002, Function | SmallTest | Level1) - -{ - auto rrc = std::make_shared(); - std::shared_ptr resultSet = - std::make_shared(); - std::string columnName = "this is columnName"; - ReminderRequest::DbRecoveryType columnType = ReminderRequest::DbRecoveryType::INT; - int64_t result = rrc->RecoverInt64FromDb(resultSet, columnName, columnType); - EXPECT_EQ(result, 0); - - ReminderRequest::DbRecoveryType columnType2 = ReminderRequest::DbRecoveryType::LONG; - int64_t result2 = rrc->RecoverInt64FromDb(resultSet, columnName, columnType2); - EXPECT_EQ(result2, 0); - rrc->RecoverFromDb(resultSet); - rrc->RecoverActionButton(resultSet); - rrc->RecoverActionButton(nullptr); -} - -/** - * @tc.name: RecoverInt64FromDb_00003 - * @tc.desc: Test RecoverInt64FromDb parameters. - * @tc.type: FUNC - * @tc.require: issueI65R21 - */ -HWTEST_F(ReminderRequestTest, RecoverInt64FromDb_00003, Function | SmallTest | Level1) -{ - auto rrc = std::make_shared(); - std::shared_ptr resultSet = - std::make_shared(); - std::string columnName = "this is columnName"; - - ReminderRequest::DbRecoveryType columnType = ReminderRequest::DbRecoveryType(3); - int64_t result2 = rrc->RecoverInt64FromDb(resultSet, columnName, columnType); - EXPECT_EQ(result2, 0); -} - /** * @tc.name: RecoverWantAgent_00002 * @tc.desc: Test RecoverWantAgent parameters. @@ -1334,20 +1249,6 @@ HWTEST_F(ReminderRequestTest, CreateWantAgent_00002, Function | SmallTest | Leve EXPECT_EQ(WantAgent, nullptr); } -/** - * @tc.name: AddColumn_00002 - * @tc.desc: Test AddColumn parameters. - * @tc.type: FUNC - * @tc.require: issueI65R21 - */ -HWTEST_F(ReminderRequestTest, AddColumn_00002, Function | SmallTest | Level1) -{ - std::string name = "this is name"; - std::string type = "this is type"; - ReminderTable::AddColumn(name, type, true); - ReminderTable::AddColumn(name, type, false); -} - /** * @tc.name: OnClose_00100 * @tc.desc: Test OnClose parameters. @@ -1467,7 +1368,7 @@ HWTEST_F(ReminderRequestTest, RecoverWantAgent_00003, Function | SmallTest | Lev uint8_t type = 0; std::vector ret1 = rrc->StringSplit(wantAgentInfo, ""); EXPECT_EQ(ret1.size(), 2); - rrc->RecoverWantAgent(wantAgentInfo, type); + rrc->DeserializeWantAgent(wantAgentInfo, type); } /** @@ -1483,7 +1384,7 @@ HWTEST_F(ReminderRequestTest, RecoverWantAgent_00004, Function | SmallTest | Lev uint8_t type = 1; std::vector ret1 = rrc->StringSplit(wantAgentInfo, ""); EXPECT_EQ(ret1.size(), 2); - rrc->RecoverWantAgent(wantAgentInfo, type); + rrc->DeserializeWantAgent(wantAgentInfo, type); } /** @@ -1499,7 +1400,7 @@ HWTEST_F(ReminderRequestTest, RecoverWantAgent_00005, Function | SmallTest | Lev uint8_t type = 2; std::vector ret1 = rrc->StringSplit(wantAgentInfo, ""); EXPECT_EQ(ret1.size(), 2); - rrc->RecoverWantAgent(wantAgentInfo, type); + rrc->DeserializeWantAgent(wantAgentInfo, type); } /** @@ -1515,7 +1416,7 @@ HWTEST_F(ReminderRequestTest, RecoverWantAgent_00006, Function | SmallTest | Lev uint8_t type = 0; std::vector ret1 = rrc->StringSplit(wantAgentInfo, ""); EXPECT_EQ(ret1.size(), 3); - rrc->RecoverWantAgent(wantAgentInfo, type); + rrc->DeserializeWantAgent(wantAgentInfo, type); } /** @@ -2017,23 +1918,23 @@ HWTEST_F(ReminderRequestTest, RecoverWantAgent_00007, Function | SmallTest | Lev { auto rrc = std::make_shared(); std::string jsonValue = ""; - rrc->RecoverWantAgent(jsonValue, 0); + rrc->DeserializeWantAgent(jsonValue, 0); EXPECT_EQ(rrc->GetWantAgentInfo()->abilityName, ""); jsonValue = R"({"pkgName":"com.example.myapplication","abilityName":"MainAbility","uri":"","parameters":""})"; - rrc->RecoverWantAgent(jsonValue, 1); + rrc->DeserializeWantAgent(jsonValue, 1); EXPECT_EQ(rrc->GetMaxScreenWantAgentInfo()->abilityName, "MainAbility"); jsonValue = R"(})"; - rrc->RecoverWantAgent(jsonValue, 1); + rrc->DeserializeWantAgent(jsonValue, 1); EXPECT_EQ(rrc->GetMaxScreenWantAgentInfo()->abilityName, "MainAbility"); jsonValue = R"({})"; - rrc->RecoverWantAgent(jsonValue, 1); + rrc->DeserializeWantAgent(jsonValue, 1); EXPECT_EQ(rrc->GetMaxScreenWantAgentInfo()->abilityName, "MainAbility"); jsonValue = "fawexcdvasdfwessdf"; - rrc->RecoverWantAgent(jsonValue, 1); + rrc->DeserializeWantAgent(jsonValue, 1); EXPECT_EQ(rrc->GetMaxScreenWantAgentInfo()->abilityName, "MainAbility"); } @@ -2067,59 +1968,6 @@ HWTEST_F(ReminderRequestTest, MarshallingWantParameters_00001, Function | SmallT EXPECT_EQ(params2.GetStringParam(key), value); } -/** - * @tc.name: AppendWantAgentValuesBucket_00001 - * @tc.desc: Test AppendWantAgentValuesBucket parameters. - * @tc.type: FUNC - * @tc.require: issue#I94VJT - */ -HWTEST_F(ReminderRequestTest, AppendWantAgentValuesBucket_00001, Function | SmallTest | Level1) -{ - sptr rrc = new ReminderRequestChild; - NativeRdb::ValuesBucket values; - ReminderRequest::AppendWantAgentValuesBucket(rrc, values); - - NativeRdb::ValueObject object; - values.GetObject(ReminderBaseTable::WANT_AGENT, object); - std::string result; - object.GetString(result); - EXPECT_NE(result.find("pkgName"), -1); - - values.GetObject(ReminderBaseTable::MAX_SCREEN_WANT_AGENT, object); - object.GetString(result); - EXPECT_NE(result.find("pkgName"), -1); -} - -/** - * @tc.name: AppendWantAgentValuesBucket_00002 - * @tc.desc: Test AppendWantAgentValuesBucket parameters. - * @tc.type: FUNC - * @tc.require: issue#I94VJT - */ -HWTEST_F(ReminderRequestTest, AppendWantAgentValuesBucket_00002, Function | SmallTest | Level1) -{ - auto wantInfo = std::make_shared(); - wantInfo->pkgName = "test"; - auto maxWantInfo = std::make_shared(); - maxWantInfo->pkgName = "maxTest"; - - sptr rrc = new ReminderRequestChild; - rrc->SetWantAgentInfo(wantInfo); - rrc->SetMaxScreenWantAgentInfo(maxWantInfo); - NativeRdb::ValuesBucket values; - ReminderRequest::AppendWantAgentValuesBucket(rrc, values); - - NativeRdb::ValueObject object; - values.GetObject(ReminderBaseTable::WANT_AGENT, object); - std::string result; - object.GetString(result); - EXPECT_NE(result.find("test"), -1); - - values.GetObject(ReminderBaseTable::MAX_SCREEN_WANT_AGENT, object); - object.GetString(result); - EXPECT_NE(result.find("maxTest"), -1); -} - /** * @tc.name: WantAgentStr_00001 * @tc.desc: Test want agent str parameters. @@ -2310,8 +2158,6 @@ HWTEST_F(ReminderRequestTest, InitCreatorUid_00001, Function | SmallTest | Level rrc->InitCreatorUid(-1); EXPECT_EQ(rrc->GetCreatorUid(), -1); - - EXPECT_EQ(ReminderRequest::GetAppIndex(20020152), 0); } } } diff --git a/frameworks/ans/test/unittest/reminder_request_timer_test.cpp b/frameworks/ans/test/unittest/reminder_request_timer_test.cpp index 66b7f5889..ac6c58324 100644 --- a/frameworks/ans/test/unittest/reminder_request_timer_test.cpp +++ b/frameworks/ans/test/unittest/reminder_request_timer_test.cpp @@ -114,20 +114,5 @@ HWTEST_F(ReminderRequestTimerTest, ReadFromParcel_00100, Function | SmallTest | auto result = rrc->ReadFromParcel(parcel); EXPECT_EQ(result, false); } - -/** - * @tc.name: RecoverFromDb_00001 - * @tc.desc: Test RecoverFromDb parameters. - * @tc.type: FUNC - * @tc.require: issueI92BU9 - */ -HWTEST_F(ReminderRequestTimerTest, RecoverFromDb_00001, Function | SmallTest | Level1) -{ - auto rrc = std::make_shared(10); - std::shared_ptr resultSet = nullptr; - rrc->RecoverFromDb(resultSet); - uint64_t ret = rrc->GetInitInfo(); - EXPECT_EQ(ret, 0); -} } } \ No newline at end of file diff --git a/frameworks/ans/test/unittest/reminder_store_test.cpp b/frameworks/ans/test/unittest/reminder_store_test.cpp index 0687e8bf7..53aa06669 100644 --- a/frameworks/ans/test/unittest/reminder_store_test.cpp +++ b/frameworks/ans/test/unittest/reminder_store_test.cpp @@ -20,6 +20,9 @@ #include "reminder_store.h" #include "reminder_table.h" #include "reminder_table_old.h" +#include "reminder_request_alarm.h" +#include "reminder_request_calendar.h" +#include "reminder_request_timer.h" #undef private #undef protected #include "reminder_helper.h" @@ -46,6 +49,25 @@ public: ReminderHelper::CancelAllReminders(); NativeRdb::RdbHelper::DeleteRdbStore(ReminderStore::REMINDER_DB_DIR + ReminderStore::REMINDER_DB_NAME); } + + void InitStore(ReminderStore& store) + { + std::string dbConfig = ReminderStore::REMINDER_DB_DIR + "notification_test.db"; + NativeRdb::RdbStoreConfig config(dbConfig); + config.SetSecurityLevel(NativeRdb::SecurityLevel::S1); + { + ReminderStore::ReminderStoreDataCallBack rdbDataCallBack; + int32_t errCode = STATE_FAIL; + constexpr int32_t version = 7; + store.rdbStore_ = NativeRdb::RdbHelper::GetRdbStore(config, version, rdbDataCallBack, errCode); + } + } + + void ClearStore() + { + NativeRdb::RdbHelper::ClearCache(); + NativeRdb::RdbHelper::DeleteRdbStore(ReminderStore::REMINDER_DB_DIR + "notification_test.db"); + } static sptr bundleOption_; }; @@ -300,5 +322,315 @@ HWTEST_F(ReminderStoreTest, Delete_00005, Function | SmallTest | Level1) ret = reminderStore.Delete("com.example.simple", 100, -1); EXPECT_EQ(ret, -1); } + +/** + * @tc.name: ReminderStrategyTest_00001 + * @tc.desc: Test OnCreate parameters. + * @tc.type: FUNC + * @tc.require: issueI92BU9 + */ +HWTEST_F(ReminderStoreTest, ReminderTimerStrategyTest_00001, Function | SmallTest | Level1) +{ + ReminderStore reminderStore; + InitStore(reminderStore); + sptr reminder = new ReminderRequestTimer(); + reminder->reminderId_ = 999; + reminder->bundleName_ = "ReminderTimerStrategyTest_00001"; + reminder->userId_ = 998; + reminder->uid_ = 997; + reminder->isSystemApp_ = true; + reminder->reminderType_ = ReminderRequest::ReminderType::TIMER; + reminder->reminderTimeInMilli_ = 123456789; + reminder->triggerTimeInMilli_ = 987654321; + reminder->SetTimeInterval(100); + reminder->snoozeTimes_ = 10; + reminder->snoozeTimesDynamic_ = 9; + reminder->SetRingDuration(500); + reminder->isExpired_ = false; + reminder->state_ = 123; + ReminderRequestTimer* timer = static_cast(reminder.GetRefPtr()); + timer->countDownTimeInSeconds_ = 10001; + + sptr bundleOption = new NotificationBundleOption("test", 101); + reminderStore.UpdateOrInsert(reminder, bundleOption); + auto reminders = reminderStore.GetAllValidReminders(); + bool succeed = false; + for (auto each : reminders) { + if (each->reminderId_ != reminder->reminderId_) { + continue; + } + + EXPECT_EQ(reminder->bundleName_, each->bundleName_); + EXPECT_EQ(reminder->userId_, each->userId_); + EXPECT_EQ(reminder->uid_, each->uid_); + EXPECT_EQ(reminder->isSystemApp_, each->isSystemApp_); + EXPECT_EQ(reminder->reminderType_, each->reminderType_); + EXPECT_EQ(reminder->reminderTimeInMilli_, each->reminderTimeInMilli_); + EXPECT_EQ(reminder->triggerTimeInMilli_, each->triggerTimeInMilli_); + EXPECT_EQ(reminder->GetTimeInterval(), each->GetTimeInterval()); + EXPECT_EQ(reminder->snoozeTimes_, each->snoozeTimes_); + EXPECT_EQ(reminder->snoozeTimesDynamic_, each->snoozeTimesDynamic_); + EXPECT_EQ(reminder->GetRingDuration(), each->GetRingDuration()); + EXPECT_EQ(reminder->isExpired_, each->isExpired_); + EXPECT_EQ(reminder->state_, each->state_); + ReminderRequestTimer* timer1 = static_cast(each.GetRefPtr()); + EXPECT_EQ(timer1->countDownTimeInSeconds_, timer->countDownTimeInSeconds_); + succeed = true; + break; + } + reminderStore.Delete(reminder->reminderId_); + EXPECT_EQ(succeed, true); + ClearStore(); +} + +/** + * @tc.name: ReminderTimerStrategyTest_00002 + * @tc.desc: Test OnCreate parameters. + * @tc.type: FUNC + * @tc.require: issueI92BU9 + */ +HWTEST_F(ReminderStoreTest, ReminderTimerStrategyTest_00002, Function | SmallTest | Level1) +{ + ReminderStore reminderStore; + InitStore(reminderStore); + sptr reminder = new ReminderRequestTimer(); + reminder->reminderId_ = 999; + reminder->reminderType_ = ReminderRequest::ReminderType::TIMER; + reminder->slotType_ = static_cast(1); + reminder->snoozeSlotType_ = static_cast(1); + reminder->notificationId_ = 123; + reminder->title_ = "title_"; + reminder->content_ = "content_"; + reminder->snoozeContent_ = "snoozeContent_"; + reminder->expiredContent_ = "expiredContent_"; + reminder->tapDismissed_ = false; + reminder->autoDeletedTime_ = 666; + reminder->groupId_ = "groupId_"; + reminder->customRingUri_ = "customRingUri_"; + reminder->creatorBundleName_ = "creatorBundleName_"; + reminder->creatorUid_ = 101; + ReminderRequestTimer* timer = static_cast(reminder.GetRefPtr()); + timer->countDownTimeInSeconds_ = 10001; + + sptr bundleOption = new NotificationBundleOption("test", 101); + reminderStore.UpdateOrInsert(reminder, bundleOption); + auto reminders = reminderStore.GetAllValidReminders(); + bool succeed = false; + for (auto each : reminders) { + if (each->reminderId_ != reminder->reminderId_) { + continue; + } + + EXPECT_EQ(reminder->slotType_, each->slotType_); + EXPECT_EQ(reminder->snoozeSlotType_, each->snoozeSlotType_); + EXPECT_EQ(reminder->notificationId_, each->notificationId_); + EXPECT_EQ(reminder->title_, each->title_); + EXPECT_EQ(reminder->content_, each->content_); + EXPECT_EQ(reminder->snoozeContent_, each->snoozeContent_); + EXPECT_EQ(reminder->expiredContent_, each->expiredContent_); + EXPECT_EQ(reminder->tapDismissed_, each->tapDismissed_); + EXPECT_EQ(reminder->autoDeletedTime_, each->autoDeletedTime_); + EXPECT_EQ(reminder->groupId_, each->groupId_); + EXPECT_EQ(reminder->customRingUri_, each->customRingUri_); + EXPECT_EQ(reminder->creatorBundleName_, each->creatorBundleName_); + EXPECT_EQ(reminder->creatorUid_, each->creatorUid_); + succeed = true; + break; + } + reminderStore.Delete(reminder->reminderId_); + EXPECT_EQ(succeed, true); + ClearStore(); +} + +/** + * @tc.name: ReminderTimerStrategyTest_00003 + * @tc.desc: Test OnCreate parameters. + * @tc.type: FUNC + * @tc.require: issueI92BU9 + */ +HWTEST_F(ReminderStoreTest, ReminderTimerStrategyTest_00003, Function | SmallTest | Level1) +{ + ReminderStore reminderStore; + InitStore(reminderStore); + sptr reminder = new ReminderRequestTimer(); + reminder->reminderId_ = 999; + reminder->reminderType_ = ReminderRequest::ReminderType::TIMER; + reminder->customButtonUri_ = "customButtonUri_"; + if (reminder->wantAgentInfo_ == nullptr) { + reminder->InitServerObj(); + } + reminder->wantAgentInfo_->pkgName = "pkgName"; + reminder->wantAgentInfo_->abilityName = "abilityName"; + reminder->wantAgentInfo_->uri = "uri"; + reminder->maxScreenWantAgentInfo_->pkgName = "pkgName1"; + reminder->maxScreenWantAgentInfo_->abilityName = "abilityName1"; + ReminderRequestTimer* timer = static_cast(reminder.GetRefPtr()); + timer->countDownTimeInSeconds_ = 10001; + + sptr bundleOption = new NotificationBundleOption("test", 101); + reminderStore.UpdateOrInsert(reminder, bundleOption); + auto reminders = reminderStore.GetAllValidReminders(); + bool succeed = false; + for (auto each : reminders) { + if (each->reminderId_ != reminder->reminderId_) { + continue; + } + + EXPECT_EQ(reminder->customButtonUri_, each->customButtonUri_); + EXPECT_EQ(reminder->wantAgentInfo_->pkgName, each->wantAgentInfo_->pkgName); + EXPECT_EQ(reminder->wantAgentInfo_->abilityName, each->wantAgentInfo_->abilityName); + EXPECT_EQ(reminder->wantAgentInfo_->uri, each->wantAgentInfo_->uri); + EXPECT_EQ(reminder->maxScreenWantAgentInfo_->pkgName, each->maxScreenWantAgentInfo_->pkgName); + EXPECT_EQ(reminder->maxScreenWantAgentInfo_->abilityName, each->maxScreenWantAgentInfo_->abilityName); + succeed = true; + break; + } + reminderStore.Delete(reminder->reminderId_); + EXPECT_EQ(succeed, true); + ClearStore(); +} + +/** + * @tc.name: ReminderAlarmStrategyTest_00001 + * @tc.desc: Test OnCreate parameters. + * @tc.type: FUNC + * @tc.require: issueI92BU9 + */ +HWTEST_F(ReminderStoreTest, ReminderAlarmStrategyTest_00001, Function | SmallTest | Level1) +{ + ReminderStore reminderStore; + InitStore(reminderStore); + sptr reminder = new ReminderRequestAlarm(); + reminder->reminderId_ = 999; + reminder->reminderType_ = ReminderRequest::ReminderType::ALARM; + reminder->repeatDaysOfWeek_ = 55; + ReminderRequestAlarm* alarm = static_cast(reminder.GetRefPtr()); + alarm->hour_ = 12; + alarm->minute_ = 30; + + sptr bundleOption = new NotificationBundleOption("test", 101); + reminderStore.UpdateOrInsert(reminder, bundleOption); + auto reminders = reminderStore.GetAllValidReminders(); + bool succeed = false; + for (auto each : reminders) { + if (each->reminderId_ != reminder->reminderId_) { + continue; + } + + EXPECT_EQ(reminder->repeatDaysOfWeek_, each->repeatDaysOfWeek_); + ReminderRequestAlarm* alarm1 = static_cast(each.GetRefPtr()); + EXPECT_EQ(alarm->hour_, alarm1->hour_); + EXPECT_EQ(alarm->minute_, alarm1->minute_); + succeed = true; + break; + } + reminderStore.Delete(reminder->reminderId_); + EXPECT_EQ(succeed, true); + ClearStore(); +} + +/** + * @tc.name: ReminderCalendarStrategyTest_00001 + * @tc.desc: Test OnCreate parameters. + * @tc.type: FUNC + * @tc.require: issueI92BU9 + */ +HWTEST_F(ReminderStoreTest, ReminderCalendarStrategyTest_00001, Function | SmallTest | Level1) +{ + ReminderStore reminderStore; + InitStore(reminderStore); + time_t t; + (void)time(&t); // unit is seconds. + uint64_t ts = t * 1000; // ms + + sptr reminder = new ReminderRequestCalendar(); + reminder->reminderId_ = 999; + reminder->reminderType_ = ReminderRequest::ReminderType::CALENDAR; + ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); + calendar->firstDesignateYear_ = 2006; + calendar->firstDesignateMonth_ = 6; + calendar->firstDesignateDay_ = 6; + calendar->SetDateTime(ts); + calendar->SetEndDateTime(ts + 60 * 1000); + calendar->SetLastStartDateTime(ts + 10 * 1000); + calendar->repeatDay_ = 12; + calendar->repeatMonth_ = 13; + calendar->AddExcludeDate(ts); + + sptr bundleOption = new NotificationBundleOption("test", 101); + reminderStore.UpdateOrInsert(reminder, bundleOption); + auto reminders = reminderStore.GetAllValidReminders(); + bool succeed = false; + for (auto each : reminders) { + if (each->reminderId_ != reminder->reminderId_) { + continue; + } + + ReminderRequestCalendar* calendar1 = static_cast(each.GetRefPtr()); + EXPECT_EQ(calendar1->firstDesignateYear_, calendar->firstDesignateYear_); + EXPECT_EQ(calendar1->firstDesignateMonth_, calendar->firstDesignateMonth_); + EXPECT_EQ(calendar1->firstDesignateDay_, calendar->firstDesignateDay_); + EXPECT_EQ(calendar1->repeatDay_, calendar->repeatDay_); + EXPECT_EQ(calendar1->repeatMonth_, calendar->repeatMonth_); + EXPECT_EQ(calendar1->GetDateTime(), calendar->GetDateTime()); + EXPECT_EQ(calendar1->GetEndDateTime(), calendar->GetEndDateTime()); + EXPECT_EQ(calendar1->GetLastStartDateTime(), calendar->GetLastStartDateTime()); + EXPECT_EQ(calendar1->SerializationExcludeDates(), calendar->SerializationExcludeDates()); + EXPECT_EQ(calendar1->SerializationRRule(), calendar->SerializationRRule()); + succeed = true; + break; + } + reminderStore.Delete(reminder->reminderId_); + EXPECT_EQ(succeed, true); + ClearStore(); +} + +/** + * @tc.name: ReminderCalendarStrategyTest_00002 + * @tc.desc: Test OnCreate parameters. + * @tc.type: FUNC + * @tc.require: issueI92BU9 + */ +HWTEST_F(ReminderStoreTest, ReminderCalendarStrategyTest_00002, Function | SmallTest | Level1) +{ + ReminderStore reminderStore; + InitStore(reminderStore); + time_t t; + (void)time(&t); // unit is seconds. + uint64_t ts = t * 1000; // ms + + sptr reminder = new ReminderRequestCalendar(); + reminder->reminderId_ = 999; + reminder->reminderType_ = ReminderRequest::ReminderType::CALENDAR; + reminder->repeatDaysOfWeek_ = 55; + ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); + calendar->SetDateTime(ts); + calendar->rruleWantAgentInfo_ = std::make_shared(); + calendar->rruleWantAgentInfo_->pkgName = "pkgName"; + calendar->rruleWantAgentInfo_->abilityName = "abilityName"; + calendar->rruleWantAgentInfo_->uri = "uri"; + + sptr bundleOption = new NotificationBundleOption("test", 101); + reminderStore.UpdateOrInsert(reminder, bundleOption); + auto reminders = reminderStore.GetAllValidReminders(); + bool succeed = false; + for (auto each : reminders) { + if (each->reminderId_ != reminder->reminderId_) { + continue; + } + + EXPECT_EQ(reminder->repeatDaysOfWeek_, each->repeatDaysOfWeek_); + ReminderRequestCalendar* calendar1 = static_cast(each.GetRefPtr()); + EXPECT_EQ(calendar1->GetDateTime(), calendar->GetDateTime()); + EXPECT_EQ(calendar1->GetEndDateTime(), calendar->GetDateTime()); + EXPECT_EQ(calendar1->GetLastStartDateTime(), calendar->GetDateTime()); + EXPECT_EQ(calendar1->SerializationRRule(), calendar->SerializationRRule()); + succeed = true; + break; + } + reminderStore.Delete(reminder->reminderId_); + EXPECT_EQ(succeed, true); + ClearStore(); +} } } \ No newline at end of file diff --git a/frameworks/core/src/ans_notification.cpp b/frameworks/core/src/ans_notification.cpp index 723d8ccd8..84aafa456 100644 --- a/frameworks/core/src/ans_notification.cpp +++ b/frameworks/core/src/ans_notification.cpp @@ -28,6 +28,8 @@ #include "reminder_request_timer.h" #include "system_ability_definition.h" +#include + namespace OHOS { namespace Notification { namespace { diff --git a/interfaces/inner_api/reminder_request.h b/interfaces/inner_api/reminder_request.h index 841e6a688..52164228e 100644 --- a/interfaces/inner_api/reminder_request.h +++ b/interfaces/inner_api/reminder_request.h @@ -19,11 +19,9 @@ #include #include -#include "abs_shared_result_set.h" #include "notification_bundle_option.h" #include "notification_constant.h" #include "notification_request.h" -#include "values_bucket.h" #include "want_params.h" namespace OHOS { @@ -437,6 +435,27 @@ public: */ std::string GetBundleName() const; + /** + * @brief Set the reminder type. + * + * @param reminderType the reminder type. + */ + void SetReminderType(const ReminderType type); + + /** + * @brief Set the reminder state. + * + * @param state the reminder state. + */ + void SetState(const uint8_t state); + + /** + * @brief Set the reminder repeat days of week. + * + * @param state the reminder repeat days of week. + */ + void SetRepeatDaysOfWeek(const uint8_t repeatDaysOfWeek); + /** * @brief Set the app system. * @@ -608,17 +627,6 @@ public: */ virtual bool OnTimeZoneChange(); - void RecoverBasicFromOldVersion(const std::shared_ptr& resultSet); - virtual void RecoverFromOldVersion(const std::shared_ptr& resultSet); - - /** - * @brief Recovery reminder instance from database record. - * - * @param resultSet Indicates the resultSet with pointer to the row of record data. - */ - void RecoverFromDbBase(const std::shared_ptr& resultSet); - virtual void RecoverFromDb(const std::shared_ptr& resultSet) {}; - /** * @brief Sets action button. * @@ -801,7 +809,9 @@ public: return true; } + void SetWantAgentStr(const std::string& wantStr); std::string GetWantAgentStr(); + void SetMaxWantAgentStr(const std::string& maxWantStr); std::string GetMaxWantAgentStr(); /** @@ -879,6 +889,17 @@ public: */ std::vector GetDaysOfWeek() const; + /** + * @brief Create notification request struct when recover from rdb or + * recv reminder info from ipc. + */ + bool InitNotificationRequest(); + + /** + * @brief Gets repeat days of week + */ + uint8_t GetRepeatDaysOfWeek() const; + /** * @brief When system language change, will call this function. * need load resource to update button title @@ -886,15 +907,34 @@ public: */ void OnLanguageChange(const std::shared_ptr &resMgr); +public: + /** + * @brief Serialize want agent info and max want agent info to string. + * Persist to the rdb. + */ + void SerializeWantAgent(std::string& wantInfoStr, std::string& maxWantInfoStr); + + /** + * @brief Deserialize want agent info and max want agent info from string. + * Recover from the rdb. + */ + void DeserializeWantAgent(const std::string& wantAgentInfo, const uint8_t type); + + /** + * @brief Serialize action button info to string. + * Persist to the rdb. + */ + std::string SerializeButtonInfo() const; + + /** + * @brief Deserialize action button info from string. + * Recover from the rdb. + */ + void DeserializeButtonInfo(const std::string& buttonInfoStr); + static int32_t GetActualTime(const TimeTransferType &type, int32_t cTime); static int32_t GetCTime(const TimeTransferType &type, int32_t actualTime); static uint64_t GetDurationSinceEpochInMilli(const time_t target); - static int32_t GetUid(const int32_t &userId, const std::string &bundleName); - static int32_t GetAppIndex(const int32_t uid); - static int32_t GetUserId(const int32_t &uid); - static void AppendValuesBucket(const sptr &reminder, - const sptr &bundleOption, NativeRdb::ValuesBucket &values, - bool oldVersion = false); static std::vector StringSplit(std::string source, const std::string &split); static int32_t GLOBAL_ID; @@ -979,9 +1019,6 @@ protected: return INVALID_LONG_LONG_VALUE; } - int64_t RecoverInt64FromDb(const std::shared_ptr &resultSet, - const std::string &columnName, const DbRecoveryType &columnType); - uint8_t repeatDaysOfWeek_{0}; /** @@ -993,7 +1030,6 @@ protected: */ int64_t GetNextDaysOfWeek(const time_t now, const time_t target) const; void SetRepeatDaysOfWeek(bool set, const std::vector &daysOfWeek); - uint8_t GetRepeatDaysOfWeek() const; time_t GetTriggerTimeWithDST(const time_t now, const time_t nextTriggerTime) const; uint64_t GetTriggerTime(const time_t now, const time_t nextTriggerTime) const; uint64_t GetNowInstantMilli() const; diff --git a/interfaces/inner_api/reminder_request_alarm.h b/interfaces/inner_api/reminder_request_alarm.h index d82f093a3..b6bd2dbda 100644 --- a/interfaces/inner_api/reminder_request_alarm.h +++ b/interfaces/inner_api/reminder_request_alarm.h @@ -71,6 +71,20 @@ public: */ uint8_t GetMinute() const; + /** + * @brief Sets the hour. + * + * @param hour Indicates the hour. + */ + void SetHour(const uint8_t hour); + + /** + * @brief Sets the minute. + * + * @param minute Indicates the minute. + */ + void SetMinute(const uint8_t minute); + virtual bool UpdateNextReminder() override; /** diff --git a/interfaces/inner_api/reminder_request_calendar.h b/interfaces/inner_api/reminder_request_calendar.h index 38578e528..73246716c 100644 --- a/interfaces/inner_api/reminder_request_calendar.h +++ b/interfaces/inner_api/reminder_request_calendar.h @@ -118,6 +118,133 @@ public: return firstDesignateDay_; } + /** + * @brief Gets the repeat day. + */ + uint32_t GetRepeatDay() const + { + return repeatDay_; + } + + /** + * @brief Gets the repeat month. + */ + uint16_t GetRepeatMonth() const + { + return repeatMonth_; + } + + /** + * @brief Gets the start date time. + */ + uint64_t GetDateTime() const; + + /** + * @brief Gets the end date time. + */ + uint64_t GetEndDateTime() const; + + /** + * @brief Sets the year. + * + * @param year Indicates the year. + */ + void SetYear(const uint16_t year); + + /** + * @brief Sets the month. + * + * @param month Indicates the month. + */ + void SetMonth(const uint8_t month); + + /** + * @brief Sets the day. + * + * @param day Indicates the day. + */ + void SetDay(const uint8_t day); + + /** + * @brief Sets the hour. + * + * @param hour Indicates the hour. + */ + void SetHour(const uint8_t hour); + + /** + * @brief Sets the minute. + * + * @param minute Indicates the minute. + */ + void SetMinute(const uint8_t minute); + + /** + * @brief Sets the repeat day. + * + * @param repeatDay Indicates the repeat day. + */ + void SetRepeatDay(const uint32_t repeatDay); + + /** + * @brief Sets the repeat month. + * + * @param repeatMonth Indicates the repeat month. + */ + void SetRepeatMonth(const uint16_t repeatMonth); + + /** + * @brief Sets the first designate year. + * + * @param firstDesignateYear Indicates the first designate year. + */ + void SetFirstDesignateYear(const uint16_t firstDesignateYear); + + /** + * @brief Sets the first designate month. + * + * @param firstDesignateMonth Indicates the first designate month. + */ + void SetFirstDesignageMonth(const uint16_t firstDesignateMonth); + + /** + * @brief Sets the first designate day. + * + * @param firstDesignateDay Indicates the first designate day. + */ + void SetFirstDesignateDay(const uint16_t firstDesignateDay); + + /** + * @brief Sets the hour. + * + * @param hour Indicates the hour. + */ + void SetDateTime(const uint64_t time); + + /** + * @brief Serialize the rrule to string. + * Persist to the rdb. + */ + std::string SerializationRRule(); + + /** + * @brief Deserialize the rrule from string. + * Recover from the rdb. + */ + void DeserializationRRule(const std::string& str); + + /** + * @brief Serialize the exclude date to string. + * Persist to the rdb. + */ + std::string SerializationExcludeDates(); + + /** + * @brief Deserialize the exclude date from string. + * Recover from the rdb. + */ + void DeserializationExcludeDates(const std::string& str); + bool InitTriggerTime(); std::vector GetRepeatMonths() const; diff --git a/interfaces/inner_api/reminder_request_timer.h b/interfaces/inner_api/reminder_request_timer.h index 1e9d4b5f2..d5426eea3 100644 --- a/interfaces/inner_api/reminder_request_timer.h +++ b/interfaces/inner_api/reminder_request_timer.h @@ -51,6 +51,8 @@ public: ~ReminderRequestTimer() override {}; uint64_t GetInitInfo() const; + void SetInitInfo(const uint64_t countDownTimeInSeconds); + virtual bool OnDateTimeChange() override; virtual bool OnTimeZoneChange() override; virtual bool UpdateNextReminder() override; diff --git a/services/ans/BUILD.gn b/services/ans/BUILD.gn index ef5291a15..d70383802 100644 --- a/services/ans/BUILD.gn +++ b/services/ans/BUILD.gn @@ -90,7 +90,11 @@ ohos_shared_library("libans") { "src/reminder_data_manager.cpp", "src/reminder_data_manager_inner.cpp", "src/reminder_event_manager.cpp", + "src/reminder_store.cpp", + "src/reminder_store_strategy.cpp", "src/reminder_swing_decision_center.cpp", + "src/reminder_table.cpp", + "src/reminder_table_old.cpp", "src/reminder_timer_info.cpp", "src/system_dialog_connect_stb.cpp", "src/system_event_observer.cpp", diff --git a/services/ans/include/bundle_manager_helper.h b/services/ans/include/bundle_manager_helper.h index 30da5ea18..f559e0eb2 100644 --- a/services/ans/include/bundle_manager_helper.h +++ b/services/ans/include/bundle_manager_helper.h @@ -116,6 +116,14 @@ public: * @return Returns the check result. */ bool CheckApiCompatibility(const std::string &bundleName, const int32_t &uid); + + /** + * @brief Obtains the app index by uid. + * @param uid Indicates uid. + * @return Returns the query result if succeed, retrun 0(main index) otherwise. + */ + int32_t GetAppIndexByUid(const int32_t uid); + private: void Connect(); void Disconnect(); diff --git a/interfaces/inner_api/reminder_store.h b/services/ans/include/reminder_store.h similarity index 100% rename from interfaces/inner_api/reminder_store.h rename to services/ans/include/reminder_store.h diff --git a/services/ans/include/reminder_store_strategy.h b/services/ans/include/reminder_store_strategy.h new file mode 100644 index 000000000..0d0ccefb6 --- /dev/null +++ b/services/ans/include/reminder_store_strategy.h @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef BASE_NOTIFICATION_DISTRIBUTED_NOTIFICATION_SERVICE_SERVICES_ANS_INCLUDE_REMINDER_STORE_STRATEGY_H +#define BASE_NOTIFICATION_DISTRIBUTED_NOTIFICATION_SERVICE_SERVICES_ANS_INCLUDE_REMINDER_STORE_STRATEGY_H + +#include +#include + +#include "reminder_request.h" +#include "rdb_store.h" + +namespace OHOS { +namespace Notification { +class ReminderStrategy { +public: + /** + * @brief Gets the value from rdb result. + * + * @param resultSet the rdb result. + * @param name the column name in rdb. + * @param value the column value in rdb. + */ + template + static void GetRdbValue(const std::shared_ptr& resultSet, + const std::string& name, T& value); + +public: + /** + * @brief Persist the reminder to the database. + */ + static void AppendValuesBucket(const sptr& reminder, + NativeRdb::ValuesBucket &values, const bool oldVersion = false); + + /** + * @brief Restore the reminder from the database(old version rdb). + */ + static void RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + + /** + * @brief Restore the reminder from the database. + */ + static void RecoverFromDb(sptr& reminder, const std::shared_ptr& resultSet); + +private: + /** + * @brief Recovery time related fields from the database(old version rdb). + */ + static void RecoverTimeFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + /** + * @brief Recovery id related fields from the database(old version rdb). + */ + static void RecoverIdFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + /** + * @brief Recovery context related from the database(old version rdb). + */ + static void RecoverContextFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + + /** + * @brief Recovery time related fields from the database. + */ + static void RecoverTimeFromDb(sptr& reminder, + const std::shared_ptr& resultSet); + /** + * @brief Recovery id related fields from the database. + */ + static void RecoverIdFromDb(sptr& reminder, + const std::shared_ptr& resultSet); + /** + * @brief Recovery context related from the database. + */ + static void RecoverContextFromDb(sptr& reminder, + const std::shared_ptr& resultSet); +}; + +class ReminderTimerStrategy { +public: + /** + * @brief Persist the reminder to the database. + */ + static void AppendValuesBucket(const sptr& reminder, + NativeRdb::ValuesBucket& values); + + /** + * @brief Restore the reminder from the database(old version rdb). + */ + static void RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + + /** + * @brief Restore the reminder from the database. + */ + static void RecoverFromDb(sptr& reminder, const std::shared_ptr& baseResult, + const std::shared_ptr& resultSet); +}; + +class ReminderAlarmStrategy { +public: + /** + * @brief Persist the reminder to the database. + */ + static void AppendValuesBucket(const sptr &reminder, NativeRdb::ValuesBucket &values); + + /** + * @brief Restore the reminder from the database(old version rdb). + */ + static void RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + + /** + * @brief Restore the reminder from the database. + */ + static void RecoverFromDb(sptr& reminder, const std::shared_ptr& baseResult, + const std::shared_ptr& resultSet); +}; + +class ReminderCalendarStrategy { +public: + /** + * @brief Persist the reminder to the database. + */ + static void AppendValuesBucket(const sptr &reminder, NativeRdb::ValuesBucket &values); + + /** + * @brief Restore the reminder from the database(old version rdb). + */ + static void RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet); + + /** + * @brief Restore the reminder from the database. + */ + static void RecoverFromDb(sptr& reminder, const std::shared_ptr& baseResult, + const std::shared_ptr& resultSet); + +private: + static void RecoverTime(sptr& reminder, const std::shared_ptr& resultSet); +}; + +template +void ReminderStrategy::GetRdbValue(const std::shared_ptr& resultSet, + const std::string& name, T& value) +{ + value = T(); + int32_t columnIndex = -1; + resultSet->GetColumnIndex(name, columnIndex); + if (columnIndex == -1) { + ANSR_LOGE("the column %{public}s does not exsit.", name.c_str()); + return; + } + + if constexpr (std::is_same_v) { + resultSet->GetString(columnIndex, value); + } else if constexpr (std::is_same_v) { + resultSet->GetLong(columnIndex, value); + } else if constexpr (std::is_same_v) { + int64_t t = 0; + resultSet->GetLong(columnIndex, t); + value = static_cast(t); + } else if constexpr (std::is_same_v) { + resultSet->GetInt(columnIndex, value); + } else if constexpr (std::is_same_v) { + int32_t t = 0; + resultSet->GetInt(columnIndex, t); + value = static_cast(t); + } else if constexpr (std::is_same_v) { + int32_t t = 0; + resultSet->GetInt(columnIndex, t); + value = static_cast(t); + } else if constexpr (std::is_same_v) { + int32_t t = 0; + resultSet->GetInt(columnIndex, t); + value = static_cast(t); + } +} +} // namespace Notification +} // namespace OHOS +#endif // BASE_NOTIFICATION_DISTRIBUTED_NOTIFICATION_SERVICE_SERVICES_ANS_INCLUDE_REMINDER_STORE_STRATEGY_H \ No newline at end of file diff --git a/interfaces/inner_api/reminder_table.h b/services/ans/include/reminder_table.h similarity index 100% rename from interfaces/inner_api/reminder_table.h rename to services/ans/include/reminder_table.h diff --git a/interfaces/inner_api/reminder_table_old.h b/services/ans/include/reminder_table_old.h similarity index 100% rename from interfaces/inner_api/reminder_table_old.h rename to services/ans/include/reminder_table_old.h diff --git a/services/ans/src/bundle_manager_helper.cpp b/services/ans/src/bundle_manager_helper.cpp index 5ea086ca1..5b8ada05b 100644 --- a/services/ans/src/bundle_manager_helper.cpp +++ b/services/ans/src/bundle_manager_helper.cpp @@ -226,5 +226,20 @@ bool BundleManagerHelper::GetBundleInfos( IPCSkeleton::SetCallingIdentity(identity); return ret; } + +int32_t BundleManagerHelper::GetAppIndexByUid(const int32_t uid) +{ + int32_t appIndex = 0; + std::lock_guard lock(connectionMutex_); + Connect(); + if (nullptr == bundleMgr_) { + return appIndex; + } + std::string bundleName; + std::string identity = IPCSkeleton::ResetCallingIdentity(); + bundleMgr_->GetNameAndIndexForUid(uid, bundleName, appIndex); + IPCSkeleton::SetCallingIdentity(identity); + return appIndex; +} } // namespace Notification } // namespace OHOS diff --git a/services/ans/src/reminder_data_manager.cpp b/services/ans/src/reminder_data_manager.cpp index b1b7b265b..98e1ce896 100644 --- a/services/ans/src/reminder_data_manager.cpp +++ b/services/ans/src/reminder_data_manager.cpp @@ -30,6 +30,7 @@ #include "ipc_skeleton.h" #include "notification_slot.h" #include "os_account_manager.h" +#include "os_account_manager_helper.h" #include "reminder_event_manager.h" #include "time_service_client.h" #include "singleton.h" @@ -892,7 +893,9 @@ void ReminderDataManager::UpdateAndSaveReminderLocked( { std::lock_guard lock(ReminderDataManager::MUTEX); reminder->InitReminderId(); - reminder->InitUserId(ReminderRequest::GetUserId(bundleOption->GetUid())); + int32_t userId = -1; + OsAccountManagerHelper::GetInstance().GetOsAccountLocalIdFromUid(bundleOption->GetUid(), userId); + reminder->InitUserId(userId); reminder->InitUid(bundleOption->GetUid()); reminder->InitBundleName(bundleOption->GetBundleName()); @@ -928,7 +931,8 @@ bool ReminderDataManager::ShouldAlert(const sptr &reminder) con ANSR_LOGD("The reminder (reminderId=%{public}d) is silent", reminderId); return false; } - int32_t userId = ReminderRequest::GetUserId(bundleOption->GetUid()); + int32_t userId = -1; + OsAccountManagerHelper::GetInstance().GetOsAccountLocalIdFromUid(bundleOption->GetUid(), userId); if (currentUserId_ != userId) { ANSR_LOGD("The reminder (reminderId=%{public}d) is silent for not in active user, " \ "current user id: %{private}d, reminder user id: %{private}d", reminderId, currentUserId_, userId); @@ -1580,7 +1584,7 @@ bool ReminderDataManager::CheckIsSameApp(const sptr &reminder, std::string bundleName = reminder->GetCreatorBundleName(); int32_t uid = reminder->GetCreatorUid(); if (uid == -1) { - uid = ReminderRequest::GetUid(reminder->GetUserId(), bundleName); + uid = BundleManagerHelper::GetInstance()->GetDefaultUidByBundleName(bundleName, reminder->GetUserId()); } return bundleName == other->GetBundleName() && uid == other->GetUid(); } @@ -1591,7 +1595,11 @@ bool ReminderDataManager::IsBelongToSameApp(const sptr int32_t uidSrc = bundleOption->GetUid(); int32_t uidTar = other->GetUid(); bool result = uidSrc == uidTar; - result = result && (ReminderRequest::GetUserId(uidSrc) == ReminderRequest::GetUserId(uidTar)); + int32_t userIdSrc = -1; + OsAccountManagerHelper::GetInstance().GetOsAccountLocalIdFromUid(uidSrc, userIdSrc); + int32_t userIdTar = -1; + OsAccountManagerHelper::GetInstance().GetOsAccountLocalIdFromUid(uidTar, userIdTar); + result = result && (userIdSrc == userIdTar); result = result && (bundleOption->GetBundleName() == other->GetBundleName()); return result; } @@ -1978,7 +1986,7 @@ void ReminderDataManager::ClickReminder(const OHOS::EventFwk::Want &want) abilityWant.SetElement(element); abilityWant.SetUri(wantInfo->uri); abilityWant.SetParams(wantInfo->parameters); - int32_t appIndex = ReminderRequest::GetAppIndex(reminder->GetUid()); + int32_t appIndex = BundleManagerHelper::GetInstance()->GetAppIndexByUid(reminder->GetUid()); abilityWant.SetParam("ohos.extra.param.key.appCloneIndex", appIndex); auto client = AppExecFwk::AbilityManagerClient::GetInstance(); diff --git a/services/ans/src/reminder_event_manager.cpp b/services/ans/src/reminder_event_manager.cpp index 6211e82d1..e282d02ee 100644 --- a/services/ans/src/reminder_event_manager.cpp +++ b/services/ans/src/reminder_event_manager.cpp @@ -20,6 +20,7 @@ #include "bundle_mgr_interface.h" #include "common_event_manager.h" #include "common_event_support.h" +#include "bundle_manager_helper.h" #include "if_system_ability_manager.h" #include "ipc_skeleton.h" #include "iservice_registry.h" @@ -228,7 +229,7 @@ sptr ReminderEventManager::ReminderEventSubscriber::Ge OHOS::AppExecFwk::ElementName ele = want.GetElement(); std::string bundleName = ele.GetBundleName(); int32_t userId = want.GetIntParam(OHOS::AppExecFwk::Constants::USER_ID, -1); - int32_t uid = ReminderRequest::GetUid(userId, bundleName); + int32_t uid = BundleManagerHelper::GetInstance()->GetDefaultUidByBundleName(bundleName, userId); ANSR_LOGD("bundleName=%{public}s, userId=%{private}d, uid=%{public}d", bundleName.c_str(), userId, uid); sptr bundleOption = new (std::nothrow) NotificationBundleOption(bundleName, uid); if (bundleOption == nullptr) { diff --git a/frameworks/ans/src/reminder_store.cpp b/services/ans/src/reminder_store.cpp similarity index 95% rename from frameworks/ans/src/reminder_store.cpp rename to services/ans/src/reminder_store.cpp index e75be5b9c..2eaf1cc9d 100644 --- a/frameworks/ans/src/reminder_store.cpp +++ b/services/ans/src/reminder_store.cpp @@ -27,6 +27,7 @@ #include "reminder_request_alarm.h" #include "reminder_request_timer.h" #include "reminder_request_calendar.h" +#include "reminder_store_strategy.h" namespace OHOS { namespace Notification { @@ -177,14 +178,17 @@ std::vector> ReminderStore::ReminderStoreDataCallBack::Get switch (reminderType) { case (static_cast(ReminderRequest::ReminderType::TIMER)): { reminderReq = new (std::nothrow) ReminderRequestTimer(reminderId); + ReminderTimerStrategy::RecoverFromOldVersion(reminderReq, queryResult); break; } case (static_cast(ReminderRequest::ReminderType::CALENDAR)): { reminderReq = new (std::nothrow) ReminderRequestCalendar(reminderId); + ReminderCalendarStrategy::RecoverFromOldVersion(reminderReq, queryResult); break; } case (static_cast(ReminderRequest::ReminderType::ALARM)): { reminderReq = new (std::nothrow) ReminderRequestAlarm(reminderId); + ReminderAlarmStrategy::RecoverFromOldVersion(reminderReq, queryResult); break; } default: { @@ -192,7 +196,6 @@ std::vector> ReminderStore::ReminderStoreDataCallBack::Get } } if (reminderReq != nullptr) { - reminderReq->RecoverFromOldVersion(queryResult); reminders.push_back(reminderReq); } queryResult->IsAtLastRow(isLastRow); @@ -211,7 +214,7 @@ void ReminderStore::ReminderStoreDataCallBack::InsertNewReminders(NativeRdb::Rdb } bundleOption->SetBundleName(reminder->GetBundleName()); NativeRdb::ValuesBucket baseValues; - ReminderRequest::AppendValuesBucket(reminder, bundleOption, baseValues, true); + ReminderStrategy::AppendValuesBucket(reminder, baseValues, true); store.BeginTransaction(); // insert reminder_base @@ -228,15 +231,15 @@ void ReminderStore::ReminderStoreDataCallBack::InsertNewReminders(NativeRdb::Rdb rowId = STATE_FAIL; switch (reminder->GetReminderType()) { case ReminderRequest::ReminderType::CALENDAR: - ReminderRequestCalendar::AppendValuesBucket(reminder, bundleOption, values); + ReminderCalendarStrategy::AppendValuesBucket(reminder, values); ret = store.Insert(rowId, ReminderCalendarTable::TABLE_NAME, values); break; case ReminderRequest::ReminderType::ALARM: - ReminderRequestAlarm::AppendValuesBucket(reminder, bundleOption, values); + ReminderAlarmStrategy::AppendValuesBucket(reminder, values); ret = store.Insert(rowId, ReminderAlarmTable::TABLE_NAME, values); break; case ReminderRequest::ReminderType::TIMER: - ReminderRequestTimer::AppendValuesBucket(reminder, bundleOption, values); + ReminderTimerStrategy::AppendValuesBucket(reminder, values); ret = store.Insert(rowId, ReminderTimerTable::TABLE_NAME, values); break; default: @@ -596,7 +599,7 @@ int32_t ReminderStore::Insert( } int64_t rowId = STATE_FAIL; NativeRdb::ValuesBucket baseValues; - ReminderRequest::AppendValuesBucket(reminder, bundleOption, baseValues); + ReminderStrategy::AppendValuesBucket(reminder, baseValues); rdbStore_->BeginTransaction(); // insert reminder_base @@ -613,17 +616,17 @@ int32_t ReminderStore::Insert( rowId = STATE_FAIL; switch (reminder->GetReminderType()) { case ReminderRequest::ReminderType::CALENDAR: { - ReminderRequestCalendar::AppendValuesBucket(reminder, bundleOption, values); + ReminderCalendarStrategy::AppendValuesBucket(reminder, values); ret = rdbStore_->Insert(rowId, ReminderCalendarTable::TABLE_NAME, values); break; } case ReminderRequest::ReminderType::ALARM: { - ReminderRequestAlarm::AppendValuesBucket(reminder, bundleOption, values); + ReminderAlarmStrategy::AppendValuesBucket(reminder, values); ret = rdbStore_->Insert(rowId, ReminderAlarmTable::TABLE_NAME, values); break; } case ReminderRequest::ReminderType::TIMER: { - ReminderRequestTimer::AppendValuesBucket(reminder, bundleOption, values); + ReminderTimerStrategy::AppendValuesBucket(reminder, values); ret = rdbStore_->Insert(rowId, ReminderTimerTable::TABLE_NAME, values); break; } @@ -653,7 +656,7 @@ int32_t ReminderStore::Update( } int32_t rowId = STATE_FAIL; NativeRdb::ValuesBucket baseValues; - ReminderRequest::AppendValuesBucket(reminder, bundleOption, baseValues); + ReminderStrategy::AppendValuesBucket(reminder, baseValues); std::string updateCondition = ReminderBaseTable::REMINDER_ID + " = " + std::to_string(reminder->GetReminderId()); @@ -674,15 +677,15 @@ int32_t ReminderStore::Update( rowId = STATE_FAIL; switch (reminder->GetReminderType()) { case ReminderRequest::ReminderType::CALENDAR: - ReminderRequestCalendar::AppendValuesBucket(reminder, bundleOption, values); + ReminderCalendarStrategy::AppendValuesBucket(reminder, values); ret = rdbStore_->Update(rowId, ReminderCalendarTable::TABLE_NAME, values, updateCondition, whereArgs); break; case ReminderRequest::ReminderType::ALARM: - ReminderRequestAlarm::AppendValuesBucket(reminder, bundleOption, values); + ReminderAlarmStrategy::AppendValuesBucket(reminder, values); ret = rdbStore_->Update(rowId, ReminderAlarmTable::TABLE_NAME, values, updateCondition, whereArgs); break; case ReminderRequest::ReminderType::TIMER: - ReminderRequestTimer::AppendValuesBucket(reminder, bundleOption, values); + ReminderTimerStrategy::AppendValuesBucket(reminder, values); ret = rdbStore_->Update(rowId, ReminderTimerTable::TABLE_NAME, values, updateCondition, whereArgs); break; default: @@ -753,16 +756,19 @@ sptr ReminderStore::BuildReminder(const std::shared_ptr(ReminderRequest::ReminderType::TIMER)): { reminder = new (std::nothrow) ReminderRequestTimer(reminderId); resultSet = Query(ReminderTimerTable::TABLE_NAME, ReminderTimerTable::SELECT_COLUMNS, reminderId); + ReminderTimerStrategy::RecoverFromDb(reminder, resultBase, resultSet); break; } case (static_cast(ReminderRequest::ReminderType::CALENDAR)): { reminder = new (std::nothrow) ReminderRequestCalendar(reminderId); resultSet = Query(ReminderCalendarTable::TABLE_NAME, ReminderCalendarTable::SELECT_COLUMNS, reminderId); + ReminderCalendarStrategy::RecoverFromDb(reminder, resultBase, resultSet); break; } case (static_cast(ReminderRequest::ReminderType::ALARM)): { reminder = new (std::nothrow) ReminderRequestAlarm(reminderId); resultSet = Query(ReminderAlarmTable::TABLE_NAME, ReminderAlarmTable::SELECT_COLUMNS, reminderId); + ReminderAlarmStrategy::RecoverFromDb(reminder, resultBase, resultSet); break; } default: { diff --git a/services/ans/src/reminder_store_strategy.cpp b/services/ans/src/reminder_store_strategy.cpp new file mode 100644 index 000000000..814d85d3b --- /dev/null +++ b/services/ans/src/reminder_store_strategy.cpp @@ -0,0 +1,649 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "reminder_store_strategy.h" + +#include "ans_log_wrapper.h" +#include "reminder_store.h" +#include "reminder_table.h" +#include "reminder_table_old.h" +#include "reminder_request_alarm.h" +#include "reminder_request_timer.h" +#include "reminder_request_calendar.h" + +namespace OHOS { +namespace Notification { +void ReminderStrategy::AppendValuesBucket(const sptr& reminder, + NativeRdb::ValuesBucket &values, const bool oldVersion) +{ + values.PutInt(ReminderBaseTable::REMINDER_ID, reminder->GetReminderId()); + values.PutString(ReminderBaseTable::PACKAGE_NAME, reminder->GetBundleName()); + values.PutInt(ReminderBaseTable::USER_ID, reminder->GetUserId()); + values.PutInt(ReminderBaseTable::UID, reminder->GetUid()); + values.PutString(ReminderBaseTable::SYSTEM_APP, reminder->IsSystemApp() ? "true" : "false"); + values.PutInt(ReminderBaseTable::REMINDER_TYPE, static_cast(reminder->GetReminderType())); + values.PutLong(ReminderBaseTable::REMINDER_TIME, reminder->GetReminderTimeInMilli()); + values.PutLong(ReminderBaseTable::TRIGGER_TIME, reminder->GetTriggerTimeInMilli()); + values.PutLong(ReminderBaseTable::TIME_INTERVAL, reminder->GetTimeInterval()); + values.PutInt(ReminderBaseTable::SNOOZE_TIMES, reminder->GetSnoozeTimes()); + values.PutInt(ReminderBaseTable::DYNAMIC_SNOOZE_TIMES, reminder->GetSnoozeTimesDynamic()); + values.PutLong(ReminderBaseTable::RING_DURATION, reminder->GetRingDuration()); + values.PutString(ReminderBaseTable::IS_EXPIRED, reminder->IsExpired() ? "true" : "false"); + values.PutInt(ReminderBaseTable::STATE, reminder->GetState()); + values.PutString(ReminderBaseTable::ACTION_BUTTON_INFO, reminder->SerializeButtonInfo()); + values.PutString(ReminderBaseTable::CUSTOM_BUTTON_URI, reminder->GetCustomButtonUri()); + values.PutInt(ReminderBaseTable::SLOT_ID, reminder->GetSlotType()); + values.PutInt(ReminderBaseTable::SNOOZE_SLOT_ID, reminder->GetSnoozeSlotType()); + values.PutInt(ReminderBaseTable::NOTIFICATION_ID, reminder->GetNotificationId()); + values.PutString(ReminderBaseTable::TITLE, reminder->GetTitle()); + values.PutString(ReminderBaseTable::CONTENT, reminder->GetContent()); + values.PutString(ReminderBaseTable::SNOOZE_CONTENT, reminder->GetSnoozeContent()); + values.PutString(ReminderBaseTable::EXPIRED_CONTENT, reminder->GetExpiredContent()); + + if (oldVersion) { + values.PutString(ReminderBaseTable::WANT_AGENT, reminder->GetWantAgentStr()); + values.PutString(ReminderBaseTable::MAX_SCREEN_WANT_AGENT, reminder->GetMaxWantAgentStr()); + } else { + std::string wantInfoStr; + std::string maxWantInfoStr; + reminder->SerializeWantAgent(wantInfoStr, maxWantInfoStr); + values.PutString(ReminderBaseTable::WANT_AGENT, wantInfoStr); + values.PutString(ReminderBaseTable::MAX_SCREEN_WANT_AGENT, maxWantInfoStr); + } + + values.PutString(ReminderBaseTable::TAP_DISMISSED, reminder->IsTapDismissed() ? "true" : "false"); + values.PutLong(ReminderBaseTable::AUTO_DELETED_TIME, reminder->GetAutoDeletedTime()); + values.PutString(ReminderBaseTable::GROUP_ID, reminder->GetGroupId()); + values.PutString(ReminderBaseTable::CUSTOM_RING_URI, reminder->GetCustomRingUri()); + values.PutString(ReminderBaseTable::CREATOR_BUNDLE_NAME, reminder->GetCreatorBundleName()); + values.PutInt(ReminderBaseTable::CREATOR_UID, reminder->GetCreatorUid()); +} + +void ReminderStrategy::RecoverTimeFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + uint64_t reminderTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::REMINDER_TIME, reminderTime); + reminder->SetReminderTimeInMilli(reminderTime); + + uint64_t triggerTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::TRIGGER_TIME, triggerTime); + reminder->SetTriggerTimeInMilli(triggerTime); + + uint64_t timeInterval = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::TIME_INTERVAL, timeInterval); + reminder->SetTimeInterval(timeInterval); + + uint8_t snoozeTimes = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::SNOOZE_TIMES, snoozeTimes); + reminder->SetSnoozeTimes(snoozeTimes); + + uint8_t dynamicSnoozeTimes = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::DYNAMIC_SNOOZE_TIMES, dynamicSnoozeTimes); + reminder->SetSnoozeTimesDynamic(dynamicSnoozeTimes); + + uint64_t ringDuration = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::RING_DURATION, ringDuration); + reminder->SetRingDuration(ringDuration); + + int64_t autoDeletedTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::AUTO_DELETED_TIME, autoDeletedTime); + reminder->SetAutoDeletedTime(autoDeletedTime); +} + +void ReminderStrategy::RecoverIdFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + int32_t reminderId = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::REMINDER_ID, reminderId); + reminder->SetReminderId(reminderId); + + int32_t userId = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::USER_ID, userId); + reminder->InitUserId(userId); + + int32_t uid = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::UID, uid); + reminder->InitUid(uid); + + int32_t reminderType = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::REMINDER_TYPE, reminderType); + reminder->SetReminderType(ReminderRequest::ReminderType(reminderType)); + + int32_t slotType = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::SLOT_ID, slotType); + reminder->SetSlotType(NotificationConstant::SlotType(slotType)); + + int32_t snoozeSlotType = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::SNOOZE_SLOT_ID, snoozeSlotType); + reminder->SetSnoozeSlotType(NotificationConstant::SlotType(snoozeSlotType)); + + int32_t notificationId = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::NOTIFICATION_ID, notificationId); + reminder->SetNotificationId(notificationId); + + std::string groupId; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::GROUP_ID, groupId); + reminder->SetGroupId(groupId); +} + +void ReminderStrategy::RecoverContextFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + std::string bundleName; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::PKG_NAME, bundleName); + reminder->InitBundleName(bundleName); + + std::string title; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::TITLE, title); + reminder->SetTitle(title); + + std::string content; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CONTENT, content); + reminder->SetContent(content); + + std::string snoozeContent; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::SNOOZE_CONTENT, snoozeContent); + reminder->SetSnoozeContent(snoozeContent); + + std::string expiredContent; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::EXPIRED_CONTENT, expiredContent); + reminder->SetExpiredContent(expiredContent); + + std::string customButtonUri; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CUSTOM_BUTTON_URI, customButtonUri); + reminder->SetCustomButtonUri(customButtonUri); + + std::string customRingUri; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CUSTOM_RING_URI, customRingUri); + reminder->SetCustomRingUri(customRingUri); + + std::string creatorBundleName; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CREATOR_BUNDLE_NAME, creatorBundleName); + reminder->InitCreatorBundleName(creatorBundleName); +} + +void ReminderStrategy::RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + if (reminder == nullptr || resultSet == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + + ReminderStrategy::RecoverTimeFromOldVersion(reminder, resultSet); + ReminderStrategy::RecoverIdFromOldVersion(reminder, resultSet); + ReminderStrategy::RecoverContextFromOldVersion(reminder, resultSet); + + std::string isSystemApp; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::SYS_APP, isSystemApp); + reminder->SetSystemApp(isSystemApp == "true" ? true : false); + + std::string isExpired; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::IS_EXPIRED, isExpired); + reminder->SetExpired(isExpired == "true" ? true : false); + + std::string actionButtons; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::ACTION_BUTTON_INFO, actionButtons); + reminder->DeserializeButtonInfo(actionButtons); + + uint8_t state = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::STATE, state); + reminder->SetState(state); + + uint8_t repeatDaysOfWeek = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); + reminder->SetRepeatDaysOfWeek(repeatDaysOfWeek); + + std::string wantAgent; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::AGENT, wantAgent); + reminder->SetWantAgentStr(wantAgent); + + std::string maxScreenWantAgent; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::MAX_SCREEN_AGENT, maxScreenWantAgent); + reminder->SetMaxWantAgentStr(maxScreenWantAgent); + + std::string tapDismissed; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::TAP_DISMISSED, tapDismissed); + reminder->SetTapDismissed(tapDismissed == "true" ? true : false); +} + +void ReminderStrategy::RecoverTimeFromDb(sptr& reminder, + const std::shared_ptr& resultSet) +{ + uint64_t reminderTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::REMINDER_TIME, reminderTime); + reminder->SetReminderTimeInMilli(reminderTime); + + uint64_t triggerTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::TRIGGER_TIME, triggerTime); + reminder->SetTriggerTimeInMilli(triggerTime); + + uint64_t timeInterval = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::TIME_INTERVAL, timeInterval); + reminder->SetTimeInterval(timeInterval); + + uint8_t snoozeTimes = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::SNOOZE_TIMES, snoozeTimes); + reminder->SetSnoozeTimes(snoozeTimes); + + uint8_t dynamicSnoozeTimes = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::DYNAMIC_SNOOZE_TIMES, dynamicSnoozeTimes); + reminder->SetSnoozeTimesDynamic(dynamicSnoozeTimes); + + uint64_t ringDuration = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::RING_DURATION, ringDuration); + reminder->SetRingDuration(ringDuration); + + int64_t autoDeletedTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::AUTO_DELETED_TIME, autoDeletedTime); + reminder->SetAutoDeletedTime(autoDeletedTime); +} + +void ReminderStrategy::RecoverIdFromDb(sptr& reminder, + const std::shared_ptr& resultSet) +{ + int32_t reminderId = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::REMINDER_ID, reminderId); + reminder->SetReminderId(reminderId); + + int32_t userId = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::USER_ID, userId); + reminder->InitUserId(userId); + + int32_t uid = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::UID, uid); + reminder->InitUid(uid); + + int32_t reminderType = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::REMINDER_TYPE, reminderType); + reminder->SetReminderType(ReminderRequest::ReminderType(reminderType)); + + int32_t slotType = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::SLOT_ID, slotType); + reminder->SetSlotType(NotificationConstant::SlotType(slotType)); + + int32_t snoozeSlotType = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::SNOOZE_SLOT_ID, snoozeSlotType); + reminder->SetSnoozeSlotType(NotificationConstant::SlotType(snoozeSlotType)); + + int32_t notificationId = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::NOTIFICATION_ID, notificationId); + reminder->SetNotificationId(notificationId); + + std::string groupId; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::GROUP_ID, groupId); + reminder->SetGroupId(groupId); + + int32_t creatorUid; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::CREATOR_UID, creatorUid); + reminder->InitCreatorUid(creatorUid); +} + +void ReminderStrategy::RecoverContextFromDb(sptr& reminder, + const std::shared_ptr& resultSet) +{ + std::string bundleName; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::PACKAGE_NAME, bundleName); + reminder->InitBundleName(bundleName); + + std::string customButtonUri; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::CUSTOM_BUTTON_URI, customButtonUri); + reminder->SetCustomButtonUri(customButtonUri); + + std::string title; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::TITLE, title); + reminder->SetTitle(title); + + std::string content; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::CONTENT, content); + reminder->SetContent(content); + + std::string snoozeContent; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::SNOOZE_CONTENT, snoozeContent); + reminder->SetSnoozeContent(snoozeContent); + + std::string expiredContent; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::EXPIRED_CONTENT, expiredContent); + reminder->SetExpiredContent(expiredContent); + + std::string customRingUri; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::CUSTOM_RING_URI, customRingUri); + reminder->SetCustomRingUri(customRingUri); + + std::string creatorBundleName; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::CREATOR_BUNDLE_NAME, creatorBundleName); + reminder->InitCreatorBundleName(creatorBundleName); +} + +void ReminderStrategy::RecoverFromDb(sptr& reminder, + const std::shared_ptr& resultSet) +{ + if (reminder == nullptr || resultSet == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverTimeFromDb(reminder, resultSet); + ReminderStrategy::RecoverIdFromDb(reminder, resultSet); + ReminderStrategy::RecoverContextFromDb(reminder, resultSet); + + uint8_t state = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::STATE, state); + reminder->SetState(state); + + std::string isSystemApp; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::SYSTEM_APP, isSystemApp); + reminder->SetSystemApp(isSystemApp == "true" ? true : false); + + std::string isExpired; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::IS_EXPIRED, isExpired); + reminder->SetExpired(isExpired == "true" ? true : false); + + std::string actionButtons; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::ACTION_BUTTON_INFO, actionButtons); + reminder->DeserializeButtonInfo(actionButtons); + + reminder->InitNotificationRequest(); // must set before wantAgent & maxScreenWantAgent + std::string wantAgent; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::WANT_AGENT, wantAgent); + reminder->DeserializeWantAgent(wantAgent, 0); + + std::string maxWantAgent; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::MAX_SCREEN_WANT_AGENT, maxWantAgent); + reminder->DeserializeWantAgent(maxWantAgent, 1); + + std::string tapDismissed; + ReminderStrategy::GetRdbValue(resultSet, ReminderBaseTable::TAP_DISMISSED, tapDismissed); + reminder->SetTapDismissed(tapDismissed == "true" ? true : false); +} + +void ReminderTimerStrategy::AppendValuesBucket(const sptr& reminder, + NativeRdb::ValuesBucket& values) +{ + uint64_t seconds = 0; + if (reminder->GetReminderType() == ReminderRequest::ReminderType::TIMER) { + ReminderRequestTimer* timer = static_cast(reminder.GetRefPtr()); + seconds = timer->GetInitInfo(); + } + values.PutInt(ReminderTimerTable::REMINDER_ID, reminder->GetReminderId()); + values.PutLong(ReminderTimerTable::TRIGGER_SECOND, seconds); + values.PutLong(ReminderTimerTable::START_DATE_TIME, 0); + values.PutLong(ReminderTimerTable::END_DATE_TIME, 0); +} + +void ReminderTimerStrategy::RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + if (resultSet == nullptr || reminder == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverFromOldVersion(reminder, resultSet); +} + +void ReminderTimerStrategy::RecoverFromDb(sptr& reminder, + const std::shared_ptr& baseResult, const std::shared_ptr& resultSet) +{ + if (resultSet == nullptr || reminder == nullptr || baseResult == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverFromDb(reminder, baseResult); + if (reminder->GetReminderType() == ReminderRequest::ReminderType::TIMER) { + ReminderRequestTimer* timer = static_cast(reminder.GetRefPtr()); + uint64_t seconds; + ReminderStrategy::GetRdbValue(resultSet, ReminderTimerTable::TRIGGER_SECOND, seconds); + timer->SetInitInfo(seconds); + } +} + +void ReminderAlarmStrategy::AppendValuesBucket(const sptr& reminder, + NativeRdb::ValuesBucket& values) +{ + uint8_t hour = 0; + uint8_t minute = 0; + uint8_t repeatDaysOfWeek = 0; + if (reminder->GetReminderType() == ReminderRequest::ReminderType::ALARM) { + ReminderRequestAlarm* alarm = static_cast(reminder.GetRefPtr()); + hour = alarm->GetHour(); + minute = alarm->GetMinute(); + repeatDaysOfWeek = alarm->GetRepeatDaysOfWeek(); + } + values.PutInt(ReminderAlarmTable::REMINDER_ID, reminder->GetReminderId()); + values.PutInt(ReminderAlarmTable::ALARM_HOUR, hour); + values.PutInt(ReminderAlarmTable::ALARM_MINUTE, minute); + values.PutInt(ReminderAlarmTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); +} + +void ReminderAlarmStrategy::RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + if (resultSet == nullptr || reminder == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverFromOldVersion(reminder, resultSet); + + if (reminder->GetReminderType() == ReminderRequest::ReminderType::ALARM) { + ReminderRequestAlarm* alarm = static_cast(reminder.GetRefPtr()); + uint8_t hour = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::ALARM_HOUR, hour); + alarm->SetHour(hour); + + uint8_t minute = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::ALARM_MINUTE, minute); + alarm->SetMinute(minute); + } +} + +void ReminderAlarmStrategy::RecoverFromDb(sptr& reminder, + const std::shared_ptr& baseResult, const std::shared_ptr& resultSet) +{ + if (resultSet == nullptr || reminder == nullptr || baseResult == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverFromDb(reminder, baseResult); + if (reminder->GetReminderType() == ReminderRequest::ReminderType::ALARM) { + ReminderRequestAlarm* alarm = static_cast(reminder.GetRefPtr()); + uint8_t hour = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderAlarmTable::ALARM_HOUR, hour); + alarm->SetHour(hour); + + uint8_t minute = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderAlarmTable::ALARM_MINUTE, minute); + alarm->SetMinute(minute); + + uint8_t repeatDaysOfWeek = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderAlarmTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); + alarm->SetRepeatDaysOfWeek(repeatDaysOfWeek); + } +} + +void ReminderCalendarStrategy::AppendValuesBucket(const sptr& reminder, + NativeRdb::ValuesBucket& values) +{ + uint16_t firstDesignateYear = 0; + uint8_t firstDesignateMonth = 0; + uint8_t firstDesignateDay = 0; + uint64_t dateTime = 0; + uint32_t repeatDay = 0; + uint16_t repeatMonth = 0; + uint8_t repeatDaysOfWeek = 0; + uint64_t endDateTime = 0; + uint64_t lastStartDateTime = 0; + std::string rruleWantAgent; + std::string excludeDates; + if (reminder->GetReminderType() == ReminderRequest::ReminderType::CALENDAR) { + ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); + if (calendar != nullptr) { + repeatDay = calendar->GetRepeatDay(); + repeatMonth = calendar->GetRepeatMonth(); + firstDesignateYear = calendar->GetFirstDesignateYear(); + firstDesignateMonth = calendar->GetFirstDesignageMonth(); + firstDesignateDay = calendar->GetFirstDesignateDay(); + dateTime = calendar->GetDateTime(); + repeatDaysOfWeek = calendar->GetRepeatDaysOfWeek(); + endDateTime = calendar->GetEndDateTime(); + lastStartDateTime = calendar->GetLastStartDateTime(); + rruleWantAgent = calendar->SerializationRRule(); + excludeDates = calendar->SerializationExcludeDates(); + } + } + values.PutInt(ReminderCalendarTable::REMINDER_ID, reminder->GetReminderId()); + values.PutInt(ReminderCalendarTable::FIRST_DESIGNATE_YEAR, firstDesignateYear); + values.PutInt(ReminderCalendarTable::FIRST_DESIGNATE_MONTH, firstDesignateMonth); + values.PutInt(ReminderCalendarTable::FIRST_DESIGNATE_DAY, firstDesignateDay); + values.PutLong(ReminderCalendarTable::CALENDAR_DATE_TIME, dateTime); + values.PutLong(ReminderCalendarTable::CALENDAR_END_DATE_TIME, endDateTime); + values.PutLong(ReminderCalendarTable::CALENDAR_LAST_DATE_TIME, lastStartDateTime); + values.PutInt(ReminderCalendarTable::REPEAT_DAYS, repeatDay); + values.PutInt(ReminderCalendarTable::REPEAT_MONTHS, repeatMonth); + values.PutInt(ReminderCalendarTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); + values.PutString(ReminderCalendarTable::RRULE_WANT_AGENT, rruleWantAgent); + values.PutString(ReminderCalendarTable::EXCLUDE_DATES, excludeDates); +} + +void ReminderCalendarStrategy::RecoverFromOldVersion(sptr& reminder, + const std::shared_ptr& resultSet) +{ + if (resultSet == nullptr || reminder == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverFromOldVersion(reminder, resultSet); + if (reminder->GetReminderType() == ReminderRequest::ReminderType::CALENDAR) { + ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); + uint32_t repeatDay = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::REPEAT_DAYS, repeatDay); + calendar->SetRepeatDay(repeatDay); + + uint16_t repeatMonth = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::REPEAT_MONTHS, repeatMonth); + calendar->SetRepeatMonth(repeatMonth); + + uint16_t firstDesignateYear = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::FIRST_DESIGNATE_YEAR, firstDesignateYear); + calendar->SetFirstDesignateYear(firstDesignateYear); + + uint8_t firstDesignateMonth = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::FIRST_DESIGNATE_MONTH, firstDesignateMonth); + calendar->SetFirstDesignageMonth(firstDesignateMonth); + + uint8_t firstDesignateDay = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::FIRST_DESIGNATE_DAY, firstDesignateDay); + calendar->SetFirstDesignateDay(firstDesignateDay); + + uint16_t year = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CALENDAR_YEAR, year); + calendar->SetYear(year); + + uint8_t month = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CALENDAR_MONTH, month); + calendar->SetMonth(month); + + uint8_t day = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CALENDAR_DAY, day); + calendar->SetDay(day); + + uint8_t hour = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CALENDAR_HOUR, hour); + calendar->SetHour(hour); + + uint8_t minute = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderTable::CALENDAR_MINUTE, minute); + calendar->SetMinute(minute); + } +} + +void ReminderCalendarStrategy::RecoverTime(sptr& reminder, + const std::shared_ptr& resultSet) +{ + if (reminder->GetReminderType() == ReminderRequest::ReminderType::CALENDAR) { + ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); + + uint16_t firstDesignateYear = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::FIRST_DESIGNATE_YEAR, + firstDesignateYear); + calendar->SetFirstDesignateYear(firstDesignateYear); + + uint8_t firstDesignateMonth = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::FIRST_DESIGNATE_MONTH, + firstDesignateMonth); + calendar->SetFirstDesignageMonth(firstDesignateMonth); + + uint8_t firstDesignateDay = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::FIRST_DESIGNATE_DAY, + firstDesignateDay); + calendar->SetFirstDesignateDay(firstDesignateDay); + + uint64_t dateTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::CALENDAR_DATE_TIME, dateTime); + calendar->SetDateTime(dateTime); + + uint64_t endDateTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::CALENDAR_END_DATE_TIME, endDateTime); + if (endDateTime != 0 && endDateTime >= dateTime) { + calendar->SetEndDateTime(endDateTime); + } else { + calendar->SetEndDateTime(dateTime); + } + + uint64_t lastStartDateTime = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::CALENDAR_LAST_DATE_TIME, + lastStartDateTime); + if (lastStartDateTime == 0) { + calendar->SetLastStartDateTime(dateTime); + } else { + calendar->SetLastStartDateTime(lastStartDateTime); + } + } +} + +void ReminderCalendarStrategy::RecoverFromDb(sptr& reminder, + const std::shared_ptr& baseResult, const std::shared_ptr& resultSet) +{ + if (resultSet == nullptr || reminder == nullptr || baseResult == nullptr) { + ANSR_LOGE("ResultSet is null or reminder is null"); + return; + } + ReminderStrategy::RecoverFromDb(reminder, baseResult); + ReminderCalendarStrategy::RecoverTime(reminder, resultSet); + if (reminder->GetReminderType() == ReminderRequest::ReminderType::CALENDAR) { + ReminderRequestCalendar* calendar = static_cast(reminder.GetRefPtr()); + + uint32_t repeatDay = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::REPEAT_DAYS, repeatDay); + calendar->SetRepeatDay(repeatDay); + + uint16_t repeatMonth = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::REPEAT_MONTHS, repeatMonth); + calendar->SetRepeatMonth(repeatMonth); + + uint8_t repeatDaysOfWeek = 0; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::REPEAT_DAYS_OF_WEEK, repeatDaysOfWeek); + calendar->SetRepeatDaysOfWeek(repeatDaysOfWeek); + + std::string rruleWantAgent; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::RRULE_WANT_AGENT, rruleWantAgent); + calendar->DeserializationRRule(rruleWantAgent); + + std::string excludeDates; + ReminderStrategy::GetRdbValue(resultSet, ReminderCalendarTable::EXCLUDE_DATES, excludeDates); + calendar->DeserializationExcludeDates(excludeDates); + } +} +} +} \ No newline at end of file diff --git a/frameworks/ans/src/reminder_table.cpp b/services/ans/src/reminder_table.cpp similarity index 100% rename from frameworks/ans/src/reminder_table.cpp rename to services/ans/src/reminder_table.cpp diff --git a/frameworks/ans/src/reminder_table_old.cpp b/services/ans/src/reminder_table_old.cpp similarity index 100% rename from frameworks/ans/src/reminder_table_old.cpp rename to services/ans/src/reminder_table_old.cpp diff --git a/test/fuzztest/reminderrequest_fuzzer/reminderrequest_fuzzer.cpp b/test/fuzztest/reminderrequest_fuzzer/reminderrequest_fuzzer.cpp index 1b5cd73e9..25f7dd5d9 100644 --- a/test/fuzztest/reminderrequest_fuzzer/reminderrequest_fuzzer.cpp +++ b/test/fuzztest/reminderrequest_fuzzer/reminderrequest_fuzzer.cpp @@ -24,7 +24,6 @@ namespace OHOS { namespace { constexpr uint8_t ENABLE = 2; constexpr uint8_t ACTION_BUTTON_TYPE = 3; - constexpr uint8_t COLUMN_TYPE = 2; constexpr uint8_t SLOT_TYPE_NUM = 5; } bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) @@ -65,14 +64,6 @@ namespace OHOS { reminderRequest.OnStop(); reminderRequest.OnTerminate(); reminderRequest.OnTimeZoneChange(); - std::shared_ptr resultSet = - std::make_shared(); - uint8_t column = *data % COLUMN_TYPE; - Notification::ReminderRequest::DbRecoveryType columnType = - Notification::ReminderRequest::DbRecoveryType(column); - reminderRequest.RecoverInt64FromDb(resultSet, stringData, columnType); - reminderRequest.RecoverFromDb(resultSet); - reminderRequest.RecoverActionButton(resultSet); reminderRequest.StringSplit(stringData, stringData); reminderRequest.RecoverWantAgent(stringData, *data); std::shared_ptr< Notification::ReminderRequest::MaxScreenAgentInfo> maxScreenWantAgentInfo = diff --git a/test/fuzztest/reminderrequestcontinuate_fuzzer/reminderrequestcontinuate_fuzzer.cpp b/test/fuzztest/reminderrequestcontinuate_fuzzer/reminderrequestcontinuate_fuzzer.cpp index ef2550eac..bb6d560d0 100644 --- a/test/fuzztest/reminderrequestcontinuate_fuzzer/reminderrequestcontinuate_fuzzer.cpp +++ b/test/fuzztest/reminderrequestcontinuate_fuzzer/reminderrequestcontinuate_fuzzer.cpp @@ -26,8 +26,8 @@ namespace OHOS { std::string stringData(data); int32_t reminderId = static_cast(GetU32Data(data)); Notification::ReminderRequest reminderRequest(reminderId); - reminderRequest.GetButtonInfo(); - return reminderRequest.GetUid(reminderId, stringData); + reminderRequest.SerializeButtonInfo(); + return true; } } diff --git a/test/fuzztest/reminderstore_fuzzer/BUILD.gn b/test/fuzztest/reminderstore_fuzzer/BUILD.gn index 5120dff67..28132be53 100644 --- a/test/fuzztest/reminderstore_fuzzer/BUILD.gn +++ b/test/fuzztest/reminderstore_fuzzer/BUILD.gn @@ -21,7 +21,10 @@ ohos_fuzztest("ReminderStoreFuzzTest") { module_out_path = service_fuzz_test_path fuzz_config_file = "${component_path}/test/fuzztest/reminderstore_fuzzer" - include_dirs = [ "${component_path}/test/fuzztest/fuzz_common_base" ] + include_dirs = [ + "${component_path}/test/fuzztest/fuzz_common_base", + "${component_path}/services/ans/include", + ] cflags = [ "-g", "-O0", @@ -33,6 +36,7 @@ ohos_fuzztest("ReminderStoreFuzzTest") { deps = [ "${component_path}/test/fuzztest/fuzz_common_base:fuzz_common_base", "${frameworks_module_ans_path}:ans_innerkits", + "${services_path}/ans:libans", ] external_deps = [ diff --git a/test/fuzztest/reminderstoreannex_fuzzer/BUILD.gn b/test/fuzztest/reminderstoreannex_fuzzer/BUILD.gn index 5e5d5c6b2..74b52ec22 100644 --- a/test/fuzztest/reminderstoreannex_fuzzer/BUILD.gn +++ b/test/fuzztest/reminderstoreannex_fuzzer/BUILD.gn @@ -21,7 +21,10 @@ ohos_fuzztest("ReminderStoreAnnexFuzzTest") { module_out_path = service_fuzz_test_path fuzz_config_file = "${component_path}/test/fuzztest/reminderstoreannex_fuzzer" - include_dirs = [ "${component_path}/test/fuzztest/fuzz_common_base" ] + include_dirs = [ + "${component_path}/test/fuzztest/fuzz_common_base", + "${component_path}/services/ans/include", + ] cflags = [ "-g", "-O0", @@ -33,6 +36,7 @@ ohos_fuzztest("ReminderStoreAnnexFuzzTest") { deps = [ "${component_path}/test/fuzztest/fuzz_common_base:fuzz_common_base", "${frameworks_module_ans_path}:ans_innerkits", + "${services_path}/ans:libans", ] external_deps = [ diff --git a/test/fuzztest/reminderstoreannex_fuzzer/reminderstoreannex_fuzzer.cpp b/test/fuzztest/reminderstoreannex_fuzzer/reminderstoreannex_fuzzer.cpp index a9c43538e..9d691c582 100644 --- a/test/fuzztest/reminderstoreannex_fuzzer/reminderstoreannex_fuzzer.cpp +++ b/test/fuzztest/reminderstoreannex_fuzzer/reminderstoreannex_fuzzer.cpp @@ -38,8 +38,6 @@ namespace OHOS { reminderStore.GetInt32Val(resultSet, name, value); std::string value1(data); reminderStore.GetStringVal(resultSet, name, value1); - // test BuildReminder function - reminderStore.BuildReminder(resultSet); return true; } } -- Gitee