AlarmController: save on Alarm sceen closing when settingsChanged

Introduce `SaveAlarm()` member function which saves to file only if the
alarm setting is changed.
The `alarmChanged` boolean flag mimics the behavior of `settingsChanged`
flag from `Settings.h`

Also mark the `SaveAlarmToFile()` function const, as it doesn't change
anything in the `AlarmController` object.
This commit is contained in:
Reinhold Gschweicher 2022-09-26 21:46:09 +02:00
parent 751f46f7de
commit ad6e1b967c
3 changed files with 20 additions and 8 deletions

View File

@ -45,13 +45,22 @@ void AlarmController::Init(System::SystemTask* systemTask) {
}
}
void AlarmController::SaveAlarm() {
// verify if is necessary to save
if (alarmChanged) {
SaveAlarmToFile();
}
alarmChanged = false;
}
void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) {
if (alarm.hours == alarmHr && alarm.minutes == alarmMin) {
return;
}
alarm.hours = alarmHr;
alarm.minutes = alarmMin;
SaveAlarmToFile();
alarmChanged = true;
}
void AlarmController::ScheduleAlarm() {
@ -93,7 +102,7 @@ void AlarmController::ScheduleAlarm() {
if (!alarm.isEnabled) {
alarm.isEnabled = true;
SaveAlarmToFile();
alarmChanged = true;
}
}
@ -106,7 +115,7 @@ void AlarmController::DisableAlarm() {
isAlerting = false;
if (alarm.isEnabled) {
alarm.isEnabled = false;
SaveAlarmToFile();
alarmChanged = true;
}
}
@ -120,7 +129,7 @@ void AlarmController::StopAlerting() {
// Disable alarm unless it is recurring
if (alarm.recurrence == RecurType::None) {
alarm.isEnabled = false;
SaveAlarmToFile();
alarmChanged = true;
} else {
// set next instance
ScheduleAlarm();
@ -131,7 +140,7 @@ void AlarmController::StopAlerting() {
void AlarmController::SetRecurrence(RecurType recurrence) {
if (alarm.recurrence != recurrence) {
alarm.recurrence = recurrence;
SaveAlarmToFile();
alarmChanged = true;
}
}
@ -157,14 +166,14 @@ void AlarmController::LoadAlarmFromFile() {
NRF_LOG_INFO("[AlarmController] Loaded alarm data from file");
}
void AlarmController::SaveAlarmToFile() {
void AlarmController::SaveAlarmToFile() const {
lfs_file_t alarmFile;
if (fs.FileOpen(&alarmFile, "/alarm.dat", LFS_O_WRONLY | LFS_O_CREAT) != LFS_ERR_OK) {
NRF_LOG_WARNING("[AlarmController] Failed to open alarm data file for saving");
return;
}
fs.FileWrite(&alarmFile, reinterpret_cast<uint8_t*>(&alarm), sizeof(alarm));
fs.FileWrite(&alarmFile, reinterpret_cast<const uint8_t*>(&alarm), sizeof(alarm));
fs.FileClose(&alarmFile);
NRF_LOG_INFO("[AlarmController] Saved alarm data with format version %u to file", alarm.version);
}

View File

@ -32,6 +32,7 @@ namespace Pinetime {
AlarmController(Controllers::DateTime& dateTimeController, Controllers::FS& fs);
void Init(System::SystemTask* systemTask);
void SaveAlarm();
void SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin);
void ScheduleAlarm();
void DisableAlarm();
@ -68,6 +69,7 @@ namespace Pinetime {
bool isEnabled = false;
};
bool isAlerting = false;
bool alarmChanged = false;
Controllers::DateTime& dateTimeController;
Controllers::FS& fs;
@ -77,7 +79,7 @@ namespace Pinetime {
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> alarmTime;
void LoadAlarmFromFile();
void SaveAlarmToFile();
void SaveAlarmToFile() const;
};
}
}

View File

@ -125,6 +125,7 @@ Alarm::~Alarm() {
StopAlerting();
}
lv_obj_clean(lv_scr_act());
alarmController.SaveAlarm();
}
void Alarm::DisableAlarm() {