diff --git a/frameworks/ans/native/src/reminder_request.cpp b/frameworks/ans/native/src/reminder_request.cpp
index 5adbeee6ce012ad980c68c0de62d65253e8be3f1..efa426b5d36696102c7f269d449fcdd55f04d701 100644
--- a/frameworks/ans/native/src/reminder_request.cpp
+++ b/frameworks/ans/native/src/reminder_request.cpp
@@ -18,6 +18,7 @@
#include "ans_log_wrapper.h"
#include "bundle_mgr_interface.h"
#include "if_system_ability_manager.h"
+#include "ipc_skeleton.h"
#include "iservice_registry.h"
#include "os_account_manager.h"
#include "reminder_store.h"
@@ -26,6 +27,10 @@
namespace OHOS {
namespace Notification {
+namespace {
+const int BASE_YEAR = 1900;
+}
+
int32_t ReminderRequest::GLOBAL_ID = 0;
const uint64_t ReminderRequest::INVALID_LONG_LONG_VALUE = 0;
const uint16_t ReminderRequest::INVALID_U16_VALUE = 0;
@@ -38,7 +43,6 @@ const uint8_t ReminderRequest::REMINDER_STATUS_ACTIVE = 1;
const uint8_t ReminderRequest::REMINDER_STATUS_ALERTING = 2;
const uint8_t ReminderRequest::REMINDER_STATUS_SHOWING = 4;
const uint8_t ReminderRequest::REMINDER_STATUS_SNOOZE = 8;
-const int ReminderRequest::BASE_YEAR = 1900;
const std::string ReminderRequest::NOTIFICATION_LABEL = "REMINDER_AGENT";
const std::string ReminderRequest::REMINDER_EVENT_ALARM_ALERT = "ohos.event.notification.reminder.ALARM_ALERT";
const std::string ReminderRequest::REMINDER_EVENT_CLOSE_ALERT = "ohos.event.notification.reminder.CLOSE_ALERT";
@@ -51,6 +55,38 @@ const std::string ReminderRequest::SEP_BUTTON_SINGLE = "";
const std::string ReminderRequest::SEP_BUTTON_MULTI = "";
const std::string ReminderRequest::SEP_WANT_AGENT = "";
+// For database recovery.
+const std::string ReminderRequest::REMINDER_ID = "reminder_id";
+const std::string ReminderRequest::PKG_NAME = "package_name";
+const std::string ReminderRequest::USER_ID = "user_id";
+const std::string ReminderRequest::UID = "uid";
+const std::string ReminderRequest::APP_LABEL = "app_label";
+const std::string ReminderRequest::REMINDER_TYPE = "reminder_type";
+const std::string ReminderRequest::REMINDER_TIME = "reminder_time";
+const std::string ReminderRequest::TRIGGER_TIME = "trigger_time";
+const std::string ReminderRequest::RTC_TRIGGER_TIME = "rtc_trigger_time";
+const std::string ReminderRequest::TIME_INTERVAL = "time_interval";
+const std::string ReminderRequest::SNOOZE_TIMES = "snooze_times";
+const std::string ReminderRequest::DYNAMIC_SNOOZE_TIMES = "dynamic_snooze_times";
+const std::string ReminderRequest::RING_DURATION = "ring_duration";
+const std::string ReminderRequest::IS_EXPIRED = "is_expired";
+const std::string ReminderRequest::IS_ACTIVE = "is_active";
+const std::string ReminderRequest::STATE = "state";
+const std::string ReminderRequest::ZONE_ID = "zone_id";
+const std::string ReminderRequest::HAS_SCHEDULED_TIMEOUT = "has_ScheduledTimeout";
+const std::string ReminderRequest::ACTION_BUTTON_INFO = "button_info";
+const std::string ReminderRequest::SLOT_ID = "slot_id";
+const std::string ReminderRequest::NOTIFICATION_ID = "notification_id";
+const std::string ReminderRequest::TITLE = "title";
+const std::string ReminderRequest::CONTENT = "content";
+const std::string ReminderRequest::SNOOZE_CONTENT = "snooze_content";
+const std::string ReminderRequest::EXPIRED_CONTENT = "expired_content";
+const std::string ReminderRequest::AGENT = "agent";
+const std::string ReminderRequest::MAX_SCREEN_AGENT = "maxScreen_agent";
+
+std::string ReminderRequest::sqlOfAddColumns = "";
+std::vector ReminderRequest::columns;
+
ReminderRequest::ReminderRequest()
{
InitServerObj();
@@ -937,12 +973,15 @@ bool ReminderRequest::Marshalling(Parcel &parcel) const
ReminderRequest *ReminderRequest::Unmarshalling(Parcel &parcel)
{
- auto objptr = new ReminderRequest();
- if ((objptr != nullptr) && !objptr->ReadFromParcel(parcel)) {
+ auto objptr = new (std::nothrow) ReminderRequest();
+ if (objptr == nullptr) {
+ ANSR_LOGE("Failed to create reminder due to no memory.");
+ return objptr;
+ }
+ if (!objptr->ReadFromParcel(parcel)) {
delete objptr;
objptr = nullptr;
}
-
return objptr;
}
@@ -1239,8 +1278,12 @@ void ReminderRequest::AddActionButtons(const bool includeSnooze)
wants,
nullptr
);
+
+ std::string identity = IPCSkeleton::ResetCallingIdentity();
std::shared_ptr buttonWantAgent =
AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(buttonWantAgentInfo, userId_);
+ IPCSkeleton::SetCallingIdentity(identity);
+
std::shared_ptr actionButton
= NotificationActionButton::Create(nullptr, title, buttonWantAgent);
notificationRequest_->AddActionButton(actionButton);
@@ -1264,8 +1307,12 @@ void ReminderRequest::AddRemovalWantAgent()
wants,
nullptr
);
+
+ std::string identity = IPCSkeleton::ResetCallingIdentity();
std::shared_ptr wantAgent =
AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(wantAgentInfo, userId_);
+ IPCSkeleton::SetCallingIdentity(identity);
+
notificationRequest_->SetRemovalWantAgent(wantAgent);
}
@@ -1286,7 +1333,10 @@ std::shared_ptr ReminderRequest::CreateWan
wants,
nullptr
);
- return AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(wantAgentInfo, userId_);
+ std::string identity = IPCSkeleton::ResetCallingIdentity();
+ auto wantAgent = AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(wantAgentInfo, userId_);
+ IPCSkeleton::SetCallingIdentity(identity);
+ return wantAgent;
}
void ReminderRequest::SetMaxScreenWantAgent(AppExecFwk::ElementName &element)
@@ -1307,7 +1357,7 @@ void ReminderRequest::SetState(bool deSet, const uint8_t newState, std::string f
if (deSet) {
state_ |= newState;
} else {
- state_ &= ~newState;
+ state_ &= static_cast(~newState);
}
ANSR_LOGI("Switch the reminder(reminderId=%{public}d) state, from %{public}s to %{public}s, called by %{public}s",
reminderId_, GetState(oldState).c_str(), GetState(state_).c_str(), function.c_str());
@@ -1386,7 +1436,7 @@ void ReminderRequest::UpdateNotificationBundleInfo()
notificationRequest_->SetOwnerBundleName(bundleName_);
notificationRequest_->SetCreatorBundleName(bundleName_);
notificationRequest_->SetCreatorUid(uid_);
- ErrCode errCode = OHOS::AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid_, userId_);
+ ErrCode errCode = AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid_, userId_);
if (errCode != ERR_OK) {
ANSR_LOGE("GetOsAccountLocalIdFromUid fail.");
return;
@@ -1549,38 +1599,7 @@ void ReminderRequest::AppendValuesBucket(const sptr &reminder,
}
}
-const std::string ReminderRequest::REMINDER_ID = "reminder_id";
-const std::string ReminderRequest::PKG_NAME = "package_name";
-const std::string ReminderRequest::USER_ID = "user_id";
-const std::string ReminderRequest::UID = "uid";
-const std::string ReminderRequest::APP_LABEL = "app_label";
-const std::string ReminderRequest::REMINDER_TYPE = "reminder_type";
-const std::string ReminderRequest::REMINDER_TIME = "reminder_time";
-const std::string ReminderRequest::TRIGGER_TIME = "trigger_time";
-const std::string ReminderRequest::RTC_TRIGGER_TIME = "rtc_trigger_time";
-const std::string ReminderRequest::TIME_INTERVAL = "time_interval";
-const std::string ReminderRequest::SNOOZE_TIMES = "snooze_times";
-const std::string ReminderRequest::DYNAMIC_SNOOZE_TIMES = "dynamic_snooze_times";
-const std::string ReminderRequest::RING_DURATION = "ring_duration";
-const std::string ReminderRequest::IS_EXPIRED = "is_expired";
-const std::string ReminderRequest::IS_ACTIVE = "is_active";
-const std::string ReminderRequest::STATE = "state";
-const std::string ReminderRequest::ZONE_ID = "zone_id";
-const std::string ReminderRequest::HAS_SCHEDULED_TIMEOUT = "has_ScheduledTimeout";
-const std::string ReminderRequest::ACTION_BUTTON_INFO = "button_info";
-const std::string ReminderRequest::SLOT_ID = "slot_id";
-const std::string ReminderRequest::NOTIFICATION_ID = "notification_id";
-const std::string ReminderRequest::TITLE = "title";
-const std::string ReminderRequest::CONTENT = "content";
-const std::string ReminderRequest::SNOOZE_CONTENT = "snooze_content";
-const std::string ReminderRequest::EXPIRED_CONTENT = "expired_content";
-const std::string ReminderRequest::AGENT = "agent";
-const std::string ReminderRequest::MAX_SCREEN_AGENT = "maxScreen_agent";
-
-std::string ReminderRequest::sqlOfAddColumns = "";
-std::vector ReminderRequest::columns;
-
-void ReminderRequest::Init()
+void ReminderRequest::InitDbColumns()
{
AddColumn(REMINDER_ID, "INTEGER PRIMARY KEY", false);
AddColumn(PKG_NAME, "TEXT NOT NULL", false);
@@ -1622,4 +1641,4 @@ void ReminderRequest::AddColumn(
}
}
}
-}
\ No newline at end of file
+}
diff --git a/frameworks/ans/native/src/reminder_request_alarm.cpp b/frameworks/ans/native/src/reminder_request_alarm.cpp
index 532202d0c16ec1303648c7cb19319e21a6164c5a..35a459af72db423e3620cdb782bc394ab786980e 100644
--- a/frameworks/ans/native/src/reminder_request_alarm.cpp
+++ b/frameworks/ans/native/src/reminder_request_alarm.cpp
@@ -29,6 +29,11 @@ const uint8_t ReminderRequestAlarm::MINUTES_PER_HOUR = 60;
const int8_t ReminderRequestAlarm::INVALID_INT_VALUE = -1;
const int8_t ReminderRequestAlarm::DEFAULT_SNOOZE_TIMES = 3;
+// For database recovery.
+const std::string ReminderRequestAlarm::REPEAT_DAYS_OF_WEEK = "repeat_days_of_week";
+const std::string ReminderRequestAlarm::ALARM_HOUR = "alarm_hour";
+const std::string ReminderRequestAlarm::ALARM_MINUTE = "alarm_minute";
+
ReminderRequestAlarm::ReminderRequestAlarm(uint8_t hour, uint8_t minute, const std::vector daysOfWeek)
: ReminderRequest(ReminderRequest::ReminderType::ALARM)
{
@@ -270,7 +275,11 @@ ReminderRequestAlarm *ReminderRequestAlarm::Unmarshalling(Parcel &parcel)
{
ANSR_LOGD("New alarm");
auto objptr = new (std::nothrow) ReminderRequestAlarm();
- if ((objptr != nullptr) && !objptr->ReadFromParcel(parcel)) {
+ if (objptr == nullptr) {
+ ANSR_LOGE("Failed to create reminder alarm due to no memory.");
+ return objptr;
+ }
+ if (!objptr->ReadFromParcel(parcel)) {
delete objptr;
objptr = nullptr;
}
@@ -332,11 +341,7 @@ void ReminderRequestAlarm::AppendValuesBucket(const sptr &remin
values.PutInt(ALARM_MINUTE, minute);
}
-const std::string ReminderRequestAlarm::REPEAT_DAYS_OF_WEEK = "repeat_days_of_week";
-const std::string ReminderRequestAlarm::ALARM_HOUR = "alarm_hour";
-const std::string ReminderRequestAlarm::ALARM_MINUTE = "alarm_minute";
-
-void ReminderRequestAlarm::Init()
+void ReminderRequestAlarm::InitDbColumns()
{
ReminderRequest::AddColumn(REPEAT_DAYS_OF_WEEK, "INT", false);
ReminderRequest::AddColumn(ALARM_HOUR, "INT", false);
diff --git a/frameworks/ans/native/src/reminder_request_calendar.cpp b/frameworks/ans/native/src/reminder_request_calendar.cpp
index 746c2adcd41a1106367610d0f0c7d2e6a010a9f3..07b741a0aa897a249637ffd04e24e5e338c8b8bf 100644
--- a/frameworks/ans/native/src/reminder_request_calendar.cpp
+++ b/frameworks/ans/native/src/reminder_request_calendar.cpp
@@ -25,13 +25,25 @@ const uint8_t ReminderRequestCalendar::JANUARY = 1;
const uint8_t ReminderRequestCalendar::DECEMBER = 12;
const uint8_t ReminderRequestCalendar::DEFAULT_SNOOZE_TIMES = 3;
+// For database recovery.
+const std::string ReminderRequestCalendar::REPEAT_DAYS = "repeat_days";
+const std::string ReminderRequestCalendar::REPEAT_MONTHS = "repeat_months";
+const std::string ReminderRequestCalendar::FIRST_DESIGNATE_YEAR = "first_designate_year";
+const std::string ReminderRequestCalendar::FIRST_DESIGNATE_MONTH = "first_designate_month";
+const std::string ReminderRequestCalendar::FIRST_DESIGNATE_DAY = "first_designate_day";
+const std::string ReminderRequestCalendar::CALENDAR_YEAR = "calendar_year";
+const std::string ReminderRequestCalendar::CALENDAR_MONTH = "calendar_month";
+const std::string ReminderRequestCalendar::CALENDAR_DAY = "calendar_day";
+const std::string ReminderRequestCalendar::CALENDAR_HOUR = "calendar_hour";
+const std::string ReminderRequestCalendar::CALENDAR_MINUTE = "calendar_minute";
+
ReminderRequestCalendar::ReminderRequestCalendar(const tm &dateTime,
const std::vector &repeatMonths, const std::vector &repeatDays)
: ReminderRequest(ReminderRequest::ReminderType::CALENDAR)
{
// 1. record the information which designated by user at first time.
- firstDesignateYear_ = GetActualTime(TimeTransferType::YEAR, dateTime.tm_year);
- firstDesignateMonth_ = GetActualTime(TimeTransferType::MONTH, dateTime.tm_mon);
+ firstDesignateYear_ = static_cast(GetActualTime(TimeTransferType::YEAR, dateTime.tm_year));
+ firstDesignateMonth_ = static_cast(GetActualTime(TimeTransferType::MONTH, dateTime.tm_mon));
firstDesignateDay_ = dateTime.tm_mday;
SetRepeatMonths(repeatMonths);
SetRepeatDaysOfMonth(repeatDays);
@@ -39,8 +51,8 @@ ReminderRequestCalendar::ReminderRequestCalendar(const tm &dateTime,
// 2. get the latest valid trigger time.
InitDateTime(dateTime);
- hour_ = dateTime_.tm_hour;
- minute_ = dateTime_.tm_min;
+ hour_ = static_cast(dateTime_.tm_hour);
+ minute_ = static_cast(dateTime_.tm_min);
uint64_t nextTriggerTime = INVALID_LONG_LONG_VALUE;
if ((nextTriggerTime = GetNextTriggerTime()) != INVALID_LONG_LONG_VALUE) {
time_t target = static_cast(nextTriggerTime / MILLI_SECONDS);
@@ -52,8 +64,8 @@ ReminderRequestCalendar::ReminderRequestCalendar(const tm &dateTime,
}
// 2. set the time information (used to transfer to proxy service) which is decided to trigger firstly.
- year_ = GetActualTime(TimeTransferType::YEAR, dateTime_.tm_year);
- month_ = GetActualTime(TimeTransferType::MONTH, dateTime_.tm_mon);
+ year_ = static_cast(GetActualTime(TimeTransferType::YEAR, dateTime_.tm_year));
+ month_ = static_cast(GetActualTime(TimeTransferType::MONTH, dateTime_.tm_mon));
day_ = dateTime_.tm_mday;
second_ = 0;
SetTriggerTimeInMilli(nextTriggerTime);
@@ -439,7 +451,11 @@ ReminderRequestCalendar *ReminderRequestCalendar::Unmarshalling(Parcel &parcel)
{
ANSR_LOGD("New calendar");
auto objptr = new ReminderRequestCalendar();
- if ((objptr != nullptr) && !objptr->ReadFromParcel(parcel)) {
+ if (objptr == nullptr) {
+ ANS_LOGE("Failed to create reminder calendar due to no memory.");
+ return objptr;
+ }
+ if (!objptr->ReadFromParcel(parcel)) {
delete objptr;
objptr = nullptr;
}
@@ -576,18 +592,7 @@ void ReminderRequestCalendar::AppendValuesBucket(const sptr &re
values.PutInt(CALENDAR_MINUTE, minute);
}
-const std::string ReminderRequestCalendar::REPEAT_DAYS = "repeat_days";
-const std::string ReminderRequestCalendar::REPEAT_MONTHS = "repeat_months";
-const std::string ReminderRequestCalendar::FIRST_DESIGNATE_YEAR = "first_designate_year";
-const std::string ReminderRequestCalendar::FIRST_DESIGNATE_MONTH = "first_designate_month";
-const std::string ReminderRequestCalendar::FIRST_DESIGNATE_DAY = "first_designate_day";
-const std::string ReminderRequestCalendar::CALENDAR_YEAR = "calendar_year";
-const std::string ReminderRequestCalendar::CALENDAR_MONTH = "calendar_month";
-const std::string ReminderRequestCalendar::CALENDAR_DAY = "calendar_day";
-const std::string ReminderRequestCalendar::CALENDAR_HOUR = "calendar_hour";
-const std::string ReminderRequestCalendar::CALENDAR_MINUTE = "calendar_minute";
-
-void ReminderRequestCalendar::Init()
+void ReminderRequestCalendar::InitDbColumns()
{
ReminderRequest::AddColumn(REPEAT_DAYS, "INT", false);
ReminderRequest::AddColumn(REPEAT_MONTHS, "INT", false);
diff --git a/frameworks/ans/native/src/reminder_request_timer.cpp b/frameworks/ans/native/src/reminder_request_timer.cpp
index 66b8794cf9a1bac79f19b02881685ea97b0fd8c8..cac42261980e32d4966be8ff836c2370982fb2a8 100644
--- a/frameworks/ans/native/src/reminder_request_timer.cpp
+++ b/frameworks/ans/native/src/reminder_request_timer.cpp
@@ -33,7 +33,12 @@ ReminderRequestTimer::ReminderRequestTimer(uint64_t countDownTimeInSeconds)
ReminderRequest::SetTriggerTimeInMilli(
ReminderRequest::GetDurationSinceEpochInMilli(now) + countDownTimeInSeconds_ * ReminderRequest::MILLI_SECONDS);
sptr timer = MiscServices::TimeServiceClient::GetInstance();
- firstRealTimeInMilliSeconds_ = timer->GetBootTimeMs();
+ int64_t bootTimeMs = timer->GetBootTimeMs();
+ if (bootTimeMs >= 0) {
+ firstRealTimeInMilliSeconds_ = static_cast(bootTimeMs);
+ } else {
+ ANSR_LOGW("Get boot time error.");
+ }
}
ReminderRequestTimer::ReminderRequestTimer(const ReminderRequestTimer &other) : ReminderRequest(other)
@@ -113,8 +118,12 @@ bool ReminderRequestTimer::Marshalling(Parcel &parcel) const
ReminderRequestTimer *ReminderRequestTimer::Unmarshalling(Parcel &parcel)
{
- auto objptr = new ReminderRequestTimer();
- if ((objptr != nullptr) && !objptr->ReadFromParcel(parcel)) {
+ auto objptr = new (std::nothrow) ReminderRequestTimer();
+ if (objptr == nullptr) {
+ ANSR_LOGE("Failed to create reminder timer due to no memory.");
+ return objptr;
+ }
+ if (!objptr->ReadFromParcel(parcel)) {
delete objptr;
objptr = nullptr;
}
diff --git a/frameworks/ans/native/src/reminder_store.cpp b/frameworks/ans/native/src/reminder_store.cpp
index b63bcaea32a1504d5901cd6107a3aea6d5fa9925..1b51a5a9f33c1f9a3d7bbe31da8d9034d9929bb4 100644
--- a/frameworks/ans/native/src/reminder_store.cpp
+++ b/frameworks/ans/native/src/reminder_store.cpp
@@ -28,15 +28,16 @@
namespace OHOS {
namespace Notification {
-const std::string ReminderStore::REMINDER_DB_DIR = "/data/system_ce/ans_standard/";
-const std::string ReminderStore::REMINDER_DB_NAME = "reminder.db";
-const std::string ReminderStore::REMINDER_DB_TABLE = "reminder";
-const uint32_t ReminderStore::REMINDER_RDB_VERSION = 1;
-const int32_t ReminderStore::STATE_FAIL = -1;
+namespace {
+const std::string REMINDER_DB_DIR = "/data/system_ce/ans_standard/";
+const std::string REMINDER_DB_NAME = "reminder.db";
+const std::string REMINDER_DB_TABLE = "reminder";
+const uint32_t REMINDER_RDB_VERSION = 1;
+const int32_t STATE_FAIL = -1;
+std::vector columns;
+}
+
const int32_t ReminderStore::STATE_OK = 0;
-const uint16_t ReminderStore::TIME_INTERVAL_FOR_DELETE = 1800;
-const uint16_t ReminderStore::MILLI_SECONDS = 1000;
-std::vector ReminderStore::columns;
int32_t ReminderStore::ReminderStoreDataCallBack::OnCreate(NativeRdb::RdbStore &store)
{
@@ -66,13 +67,13 @@ int32_t ReminderStore::Init()
}
}
- ReminderRequest::Init();
- ReminderRequestCalendar::Init();
- ReminderRequestAlarm::Init();
- ReminderStore::columns.insert(ReminderStore::columns.begin(),
+ ReminderRequest::InitDbColumns();
+ ReminderRequestCalendar::InitDbColumns();
+ ReminderRequestAlarm::InitDbColumns();
+ columns.insert(columns.begin(),
ReminderRequest::columns.begin(), ReminderRequest::columns.end());
- std::string dbConfig = ReminderStore::REMINDER_DB_DIR + ReminderStore::REMINDER_DB_NAME;
+ std::string dbConfig = REMINDER_DB_DIR + REMINDER_DB_NAME;
NativeRdb::RdbStoreConfig config_(dbConfig);
ReminderStoreDataCallBack rdbDataCallBack_;
rdbStore_ = NativeRdb::RdbHelper::GetRdbStore(config_, REMINDER_RDB_VERSION, rdbDataCallBack_, errCode);
@@ -124,7 +125,7 @@ int32_t ReminderStore::InitData()
ANSR_LOGE("Init data failed.");
return STATE_FAIL;
}
- return STATE_OK;
+ return ReminderStore::STATE_OK;
}
int32_t ReminderStore::Delete(int32_t reminderId)
@@ -259,7 +260,7 @@ std::shared_ptr ReminderStore::Query(const std::s
uint8_t ReminderStore::GetColumnIndex(const std::string& name)
{
uint8_t index = 0;
- for (auto it = ReminderStore::columns.begin(); it != ReminderStore::columns.end(); ++it) {
+ for (auto it = columns.begin(); it != columns.end(); ++it) {
if (name == (*it)) {
break;
}
@@ -414,4 +415,4 @@ void ReminderStore::GenerateData(const sptr &reminder,
ReminderRequestAlarm::AppendValuesBucket(reminder, bundleOption, values);
}
} // namespace Notification
-} // namespace OHOS
\ No newline at end of file
+} // namespace OHOS
diff --git a/frameworks/ans/test/moduletest/ReminderHelperTest.js b/frameworks/ans/test/moduletest/ReminderHelperTest.js
index 93aaa459fceab374a059e96a48adf59ffb7ffa94..c3952cb152c551c671dd6b4c2a807645af431687 100644
--- a/frameworks/ans/test/moduletest/ReminderHelperTest.js
+++ b/frameworks/ans/test/moduletest/ReminderHelperTest.js
@@ -108,8 +108,7 @@ describe("ReminderHelperTest", function () {
*/
it("testReminderHelper003", 0, async function (done) {
function reminderCallback(err, data) {
- let i = 0;
- expect(0).assertEqual(i);
+ expect(true).assertEqual(true);
}
reminderAgent.addNotificationSlot(0, reminderCallback);
done();
@@ -245,14 +244,13 @@ describe("ReminderHelperTest", function () {
reminderType: reminderAgent.ReminderType.REMINDER_TYPE_TIMER,
triggerTimeInSeconds: 3
}
- let id = 1;
let publishlength = -1;
let cancellength = -1;
let firstdiff = -1;
reminderAgent.publishReminder(timer).then(() => {
reminderAgent.getValidReminders().then((reminders) => {
publishlength=reminders.length
- reminderAgent.cancelReminder(id).then(() => {
+ reminderAgent.cancelReminder(0).then(() => {
reminderAgent.getValidReminders().then((reminders) => {
cancellength = reminders.length
firstdiff = publishlength - cancellength;
@@ -319,10 +317,8 @@ describe("ReminderHelperTest", function () {
reminderAgent.getValidReminders((err, reminders) => {
cancellength = reminders.length;
firstdiff = publishlength - cancellength;
- if (firstdiff === 0) {
+ if (firstdiff === 0 || firstdiff === 1) {
expect(0).assertEqual(firstdiff);
- } else if (firstdiff === 1) {
- expect(1).assertEqual(firstdiff);
}
});
});
@@ -357,10 +353,8 @@ describe("ReminderHelperTest", function () {
reminderAgent.getValidReminders((err, reminders) => {
cancellength = reminders.length;
firstdiff = publishlength - cancellength;
- if (firstdiff === 0) {
+ if (firstdiff === 0 || firstdiff === 1) {
expect(0).assertEqual(firstdiff);
- } else if (firstdiff === 1) {
- expect(1).assertEqual(firstdiff);
}
});
});
@@ -846,7 +840,7 @@ describe("ReminderHelperTest", function () {
slotType:3
}
reminderAgent.publishReminder(calendar).then((reminderId) => {
- expect(typeof(reminderId)).assertEqual('number');
+ expect(typeof(reminderId) === 'number').assertEqual(true);
});
done();
})
diff --git a/frameworks/ans/test/moduletest/config.json b/frameworks/ans/test/moduletest/config.json
index 7d3bb1663873510fc00c1203273ad743dfbb2f43..46e2a9f391b523655bdfbb7b2a6d525dcd79dff1 100644
--- a/frameworks/ans/test/moduletest/config.json
+++ b/frameworks/ans/test/moduletest/config.json
@@ -13,6 +13,18 @@
},
"deviceConfig": {},
"module": {
+ "reqPermissions": [
+ {
+ "name": "ohos.permission.PUBLISH_AGENT_REMINDER",
+ "reason": "SYSTEM_GRANT",
+ "usedScene": {
+ "ability": [
+ ".FormAbility"
+ ],
+ "when": "inuse"
+ }
+ }
+ ],
"package": "com.example.myapplication",
"name": ".MyApplication",
"deviceType": [
@@ -58,4 +70,3 @@
]
}
}
-
\ No newline at end of file
diff --git a/interfaces/innerkits/ans/native/include/reminder_request.h b/interfaces/innerkits/ans/native/include/reminder_request.h
index f4585d1deb5efb3c9e2cf5341fcdecf86afcf70d..798913b6a582a95a44c45f2c865a8cb2862a4563 100644
--- a/interfaces/innerkits/ans/native/include/reminder_request.h
+++ b/interfaces/innerkits/ans/native/include/reminder_request.h
@@ -607,7 +607,7 @@ public:
static const uint8_t REMINDER_STATUS_SNOOZE;
// For database recovery.
- static void Init();
+ static void InitDbColumns();
static const std::string REMINDER_ID;
static const std::string PKG_NAME;
static const std::string USER_ID;
@@ -664,8 +664,6 @@ protected:
*/
static void AddColumn(const std::string &name, const std::string &type, const bool &isEnd);
- static const int BASE_YEAR;
-
private:
void AddActionButtons(const bool includeSnooze);
void AddRemovalWantAgent();
diff --git a/interfaces/innerkits/ans/native/include/reminder_request_alarm.h b/interfaces/innerkits/ans/native/include/reminder_request_alarm.h
index b0f562507939de534ab7055b15a1a1dfc2011101..705dbf0a03945b6e2c1cbb4773573dcfb991881e 100644
--- a/interfaces/innerkits/ans/native/include/reminder_request_alarm.h
+++ b/interfaces/innerkits/ans/native/include/reminder_request_alarm.h
@@ -109,7 +109,7 @@ public:
const sptr &bundleOption, NativeRdb::ValuesBucket &values);
// For database recovery.
- static void Init();
+ static void InitDbColumns();
protected:
virtual uint64_t PreGetNextTriggerTimeIgnoreSnooze(bool ignoreRepeat, bool forceToGetNext) const override;
diff --git a/interfaces/innerkits/ans/native/include/reminder_request_calendar.h b/interfaces/innerkits/ans/native/include/reminder_request_calendar.h
index 9d022dc7d002633612488e780b8b6382654d71d6..1023f233267ecb5a5f0d71525d4fa5edd5ff1e61 100644
--- a/interfaces/innerkits/ans/native/include/reminder_request_calendar.h
+++ b/interfaces/innerkits/ans/native/include/reminder_request_calendar.h
@@ -147,7 +147,7 @@ public:
static uint8_t GetDaysOfMonth(const uint16_t &year, const uint8_t &month);
// For database recovery.
- static void Init();
+ static void InitDbColumns();
protected:
virtual uint64_t PreGetNextTriggerTimeIgnoreSnooze(bool ignoreRepeat, bool forceToGetNext) const override;
@@ -186,7 +186,17 @@ private:
static const uint8_t DECEMBER;
static const uint8_t DEFAULT_SNOOZE_TIMES;
- tm dateTime_;
+ tm dateTime_ = {
+ .tm_sec = 0,
+ .tm_min = 0,
+ .tm_hour = 0,
+ .tm_mday = 1,
+ .tm_mon = 0,
+ .tm_year = 0,
+ .tm_wday = 0,
+ .tm_yday = 0,
+ .tm_isdst = -1
+ };
uint16_t firstDesignateYear_ {1};
uint8_t firstDesignateMonth_ {1};
uint8_t firstDesignateDay_ {1};
diff --git a/interfaces/innerkits/ans/native/include/reminder_request_timer.h b/interfaces/innerkits/ans/native/include/reminder_request_timer.h
index 8b9aae9867ec07fd27347c3790af4a21c5545804..673bf2885e2e76b7c7f9e4514d1c5a784ce34b48 100644
--- a/interfaces/innerkits/ans/native/include/reminder_request_timer.h
+++ b/interfaces/innerkits/ans/native/include/reminder_request_timer.h
@@ -77,8 +77,8 @@ private:
void CheckParamsValid(const uint64_t countDownTimeInSeconds) const;
void UpdateTimeInfo(const std::string description);
uint64_t countDownTimeInSeconds_ {0};
- uint64_t firstRealTimeInMilliSeconds_ {-1};
- uint64_t whenToChangeSysTime_ {-1};
+ uint64_t firstRealTimeInMilliSeconds_ {0};
+ uint64_t whenToChangeSysTime_ {0};
};
} // namespace Reminder
} // namespace OHOS
diff --git a/interfaces/innerkits/ans/native/include/reminder_store.h b/interfaces/innerkits/ans/native/include/reminder_store.h
index 8e49fded8d3f0590461b5a6504fe5026ef14c9af..cea23b096fecfb5139dbfac9d72a145b5e0152be 100644
--- a/interfaces/innerkits/ans/native/include/reminder_store.h
+++ b/interfaces/innerkits/ans/native/include/reminder_store.h
@@ -41,8 +41,6 @@ public:
int64_t UpdateOrInsert(const sptr &reminder, const sptr &bundleOption);
static uint8_t GetColumnIndex(const std::string& name);
- static std::vector columns;
- static const int32_t STATE_FAIL;
static const int32_t STATE_OK;
private:
@@ -71,13 +69,6 @@ private:
std::shared_ptr Query(const std::string &queryCondition) const;
int64_t Update(const sptr &reminder, const sptr &bundleOption);
- static const std::string REMINDER_DB_DIR;
- static const std::string REMINDER_DB_NAME;
- static const std::string REMINDER_DB_TABLE;
- static const uint32_t REMINDER_RDB_VERSION;
- static const uint16_t TIME_INTERVAL_FOR_DELETE;
- static const uint16_t MILLI_SECONDS;
-
class ReminderStoreDataCallBack : public NativeRdb::RdbOpenCallback {
public:
int32_t OnCreate(NativeRdb::RdbStore &rdbStore) override;
diff --git a/interfaces/kits/js/@ohos.reminderAgent.d.ts b/interfaces/kits/js/@ohos.reminderAgent.d.ts
index 581d5fe418f08232e658c464084aa7faa2fd988a..f227a9b7388d2f75b9bda8d83005824e7911433d 100644
--- a/interfaces/kits/js/@ohos.reminderAgent.d.ts
+++ b/interfaces/kits/js/@ohos.reminderAgent.d.ts
@@ -408,6 +408,13 @@ declare namespace reminderAgent {
* @syscap SystemCapability.Notification.ReminderAgent.
*/
minute: number;
+
+ /**
+ * value of minute.
+ * @since 7
+ * @syscap SystemCapability.Notification.ReminderAgent.
+ */
+ second: number;
}
}
export default reminderAgent;
\ No newline at end of file
diff --git a/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp b/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp
index 8ebcb860969cb471f44a1374c80839d28a30a6bf..27f82b503edbf4c5270a00583223e097deeb97a5 100644
--- a/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp
+++ b/interfaces/kits/napi/ans/src/reminder/reminder_common.cpp
@@ -222,7 +222,7 @@ napi_value ReminderCommon::GenReminder(
if (propertyVal < 0) {
reminder->SetSnoozeTimes(0);
} else {
- uint8_t snoozeTimes = propertyVal > UINT8_MAX ? UINT8_MAX : propertyVal;
+ uint8_t snoozeTimes = propertyVal > UINT8_MAX ? UINT8_MAX : static_cast(propertyVal);
reminder->SetSnoozeTimes(static_cast(snoozeTimes));
}
}
diff --git a/services/ans/src/reminder_data_manager.cpp b/services/ans/src/reminder_data_manager.cpp
index 238814284f593e3d838d853d006dd665a343625f..538c554a5e4fa8c89e46557c871cb75ef9b4d69a 100644
--- a/services/ans/src/reminder_data_manager.cpp
+++ b/services/ans/src/reminder_data_manager.cpp
@@ -18,6 +18,7 @@
#include "ans_log_wrapper.h"
#include "ans_const_define.h"
#include "common_event_support.h"
+#include "ipc_skeleton.h"
#include "notification_slot.h"
#include "reminder_event_manager.h"
#include "time_service_client.h"
@@ -236,15 +237,22 @@ void ReminderDataManager::OnProcessDiedLocked(const sptr ReminderDataManager::CreateTimerInfo(TimerType type) const
{
auto sharedTimerInfo = std::make_shared();
- sharedTimerInfo->SetType(sharedTimerInfo->TIMER_TYPE_WAKEUP|sharedTimerInfo->TIMER_TYPE_EXACT);
+ if (sharedTimerInfo->TIMER_TYPE_WAKEUP > UINT8_MAX || sharedTimerInfo->TIMER_TYPE_EXACT > UINT8_MAX) {
+ ANSR_LOGE("Failed to set timer type.");
+ return nullptr;
+ }
+ uint8_t timerTypeWakeup = static_cast(sharedTimerInfo->TIMER_TYPE_WAKEUP);
+ uint8_t timerTypeExact = static_cast(sharedTimerInfo->TIMER_TYPE_EXACT);
+ int timerType = static_cast(timerTypeWakeup | timerTypeExact);
+ sharedTimerInfo->SetType(timerType);
sharedTimerInfo->SetRepeat(false);
sharedTimerInfo->SetInterval(0);
int requestCode = 10;
std::vector flags;
flags.push_back(AbilityRuntime::WantAgent::WantAgentConstant::Flags::UPDATE_PRESENT_FLAG);
- auto want = std::make_shared();
+ auto want = std::make_shared();
switch (type) {
case (TimerType::TRIGGER_TIMER): {
want->SetAction(ReminderRequest::REMINDER_EVENT_ALARM_ALERT);
@@ -272,8 +280,12 @@ std::shared_ptr ReminderDataManager::CreateTimerInfo(TimerTyp
wants,
nullptr
);
+
+ std::string identity = IPCSkeleton::ResetCallingIdentity();
std::shared_ptr wantAgent =
AbilityRuntime::WantAgent::WantAgentHelper::GetWantAgent(wantAgentInfo, 0);
+ IPCSkeleton::SetCallingIdentity(identity);
+
sharedTimerInfo->SetWantAgent(wantAgent);
return sharedTimerInfo;
}
@@ -653,7 +665,6 @@ void ReminderDataManager::StartRecentReminder()
StartTimerLocked(reminder, TimerType::TRIGGER_TIMER);
reminder->OnStart();
store_->UpdateOrInsert(reminder, FindNotificationBundleOption(reminder->GetReminderId()));
- SetActiveReminder(reminder);
}
void ReminderDataManager::StopAlertingReminder(const sptr &reminder)
@@ -1136,13 +1147,13 @@ void ReminderDataManager::ResetStates(TimerType type)
{
switch (type) {
case TimerType::TRIGGER_TIMER: {
- ANSR_LOGD("ResetStates(activeReminder)");
+ ANSR_LOGD("ResetStates(activeReminderId, timerId(next triggerTime))");
timerId_ = 0;
activeReminderId_ = -1;
break;
}
case TimerType::ALERTING_TIMER: {
- ANSR_LOGD("ResetStates(alertingReminder)");
+ ANSR_LOGD("ResetStates(alertingReminderId, timeId(alerting time out))");
timerIdAlerting_ = 0;
alertingReminderId_ = -1;
break;