M module-services/service-time/AlarmOperations.cpp => module-services/service-time/AlarmOperations.cpp +3 -5
@@ 269,12 269,12 @@ namespace alarms
}
}
- auto AlarmOperationsCommon::minuteUpdated(TimePoint now) -> bool
+ auto AlarmOperationsCommon::minuteUpdated(TimePoint now) -> void
{
- return processEvents(now);
+ processEvents(now);
}
- bool AlarmOperationsCommon::processEvents(TimePoint now)
+ void AlarmOperationsCommon::processEvents(TimePoint now)
{
const auto isHandlingInProgress = !ongoingSingleEvents.empty();
if (!nextSingleEvents.empty()) {
@@ 287,9 287,7 @@ namespace alarms
if (!isHandlingInProgress) {
processOngoingEvents();
- return true;
}
- return false;
}
void AlarmOperationsCommon::processOngoingEvents()
M module-services/service-time/AlarmOperations.hpp => module-services/service-time/AlarmOperations.hpp +19 -19
@@ 39,31 39,31 @@ namespace alarms
virtual void updateEventsCache(TimePoint now) = 0;
- virtual void getAlarm(const std::uint32_t alarmId, OnGetAlarmProcessed callback) = 0;
+ virtual void getAlarm(const std::uint32_t alarmId, OnGetAlarmProcessed callback) = 0;
virtual void getAlarmWithStatus(const std::uint32_t alarmId, OnGetAlarmWithStatusProcessed callback) = 0;
- virtual void addAlarm(AlarmEventRecord record, OnAddAlarmProcessed callback) = 0;
- virtual void updateAlarm(AlarmEventRecord record, OnUpdateAlarmProcessed callback) = 0;
- virtual void removeAlarm(const std::uint32_t alarmId, OnRemoveAlarmProcessed callback) = 0;
+ virtual void addAlarm(AlarmEventRecord record, OnAddAlarmProcessed callback) = 0;
+ virtual void updateAlarm(AlarmEventRecord record, OnUpdateAlarmProcessed callback) = 0;
+ virtual void removeAlarm(const std::uint32_t alarmId, OnRemoveAlarmProcessed callback) = 0;
virtual void getAlarmsInRange(std::uint32_t offset,
std::uint32_t limit,
- OnGetAlarmsInRangeProcessed callback) = 0;
- virtual void getNextSingleEvents(TimePoint start, OnGetAlarmsProcessed callback) = 0;
- virtual void turnOffRingingAlarm(const std::uint32_t id, OnTurnOffRingingAlarm callback) = 0;
- virtual void turnOffSnoozedAlarm(const std::uint32_t id, OnTurnOffRingingAlarm callback) = 0;
+ OnGetAlarmsInRangeProcessed callback) = 0;
+ virtual void getNextSingleEvents(TimePoint start, OnGetAlarmsProcessed callback) = 0;
+ virtual void turnOffRingingAlarm(const std::uint32_t id, OnTurnOffRingingAlarm callback) = 0;
+ virtual void turnOffSnoozedAlarm(const std::uint32_t id, OnTurnOffRingingAlarm callback) = 0;
virtual void snoozeRingingAlarm(const std::uint32_t id,
const TimePoint nextAlarmTime,
- OnSnoozeRingingAlarm callback) = 0;
+ OnSnoozeRingingAlarm callback) = 0;
virtual void postponeSnooze(const std::uint32_t id,
const TimePoint nextAlarmTime,
- OnSnoozeRingingAlarm callback) = 0;
- virtual bool minuteUpdated(TimePoint now) = 0;
+ OnSnoozeRingingAlarm callback) = 0;
+ virtual void minuteUpdated(TimePoint now) = 0;
virtual void addAlarmExecutionHandler(const alarms::AlarmType type,
- const std::shared_ptr<alarms::AlarmHandler> handler) = 0;
- virtual void stopAllSnoozedAlarms() = 0;
- virtual void addSnoozedAlarmsCountChangeCallback(OnSnoozedAlarmsCountChange) = 0;
- virtual void addActiveAlarmCountChangeCallback(OnActiveAlarmCountChange) = 0;
- virtual void toggleAll(bool toggle, OnToggleAll callback) = 0;
- virtual void getSnoozedAlarms(OnGetSnoozedAlarms callback) = 0;
+ const std::shared_ptr<alarms::AlarmHandler> handler) = 0;
+ virtual void stopAllSnoozedAlarms() = 0;
+ virtual void addSnoozedAlarmsCountChangeCallback(OnSnoozedAlarmsCountChange) = 0;
+ virtual void addActiveAlarmCountChangeCallback(OnActiveAlarmCountChange) = 0;
+ virtual void toggleAll(bool toggle, OnToggleAll callback) = 0;
+ virtual void getSnoozedAlarms(OnGetSnoozedAlarms callback) = 0;
};
class IAlarmOperationsFactory
@@ 100,7 100,7 @@ namespace alarms
void postponeSnooze(const std::uint32_t id,
const TimePoint nextAlarmTime,
OnSnoozeRingingAlarm callback) override;
- bool minuteUpdated(TimePoint now) override;
+ void minuteUpdated(TimePoint now) override;
void addAlarmExecutionHandler(const alarms::AlarmType type,
const std::shared_ptr<alarms::AlarmHandler> handler) override;
void stopAllSnoozedAlarms() override;
@@ 140,7 140,7 @@ namespace alarms
OnGetAlarmsProcessed handledCallback);
void checkAndUpdateCache(AlarmEventRecord record);
void switchAlarmExecution(const SingleEventRecord &singleAlarmEvent, bool newStateOn);
- bool processEvents(TimePoint now);
+ void processEvents(TimePoint now);
void processOngoingEvents();
void processNextEventsQueue(const TimePoint now);
void processSnoozedEventsQueue(const TimePoint now);
M products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp => products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp +8 -7
@@ 161,10 161,12 @@ namespace app::home_screen
namespace AlarmEdit
{
- auto entry = [](AbstractView &view, AbstractPresenter &presenter) {
- view.setAlarmEdit(true);
- view.setHeaderViewMode(HeaderViewMode::AlarmIconAndTime);
- };
+ auto entry =
+ [](AbstractView &view, AbstractPresenter &presenter, AbstractTemperatureModel &temperatureModel) {
+ view.setAlarmEdit(true);
+ view.setHeaderViewMode(HeaderViewMode::AlarmIconAndTime);
+ view.setTemperature(temperatureModel.getTemperature());
+ };
auto exit = [](AbstractView &view, AbstractPresenter &presenter) {
view.setAlarmEdit(false);
presenter.detachTimer();
@@ 256,8 258,6 @@ namespace app::home_screen
presenter.spawnTimer();
alarmModel.snooze();
view.setHeaderViewMode(HeaderViewMode::SnoozeCountdown);
-
- const auto snoozeDuration = alarmModel.getTimeToNextSnooze();
view.setSnoozeTime(alarmModel.getTimeOfNextSnooze());
const auto bottomDescription = utils::translate("app_bellmain_home_screen_bottom_desc") + " " +
std::to_string(alarmModel.getSnoozeDuration()) + " min";
@@ 269,9 269,10 @@ namespace app::home_screen
namespace AlarmSnoozed
{
auto entry =
- [](AbstractView &view, AbstractPresenter &presenter, AbstractTemperatureModel &temperatureModel) {
+ [](AbstractView &view, AbstractAlarmModel &alarmModel, AbstractTemperatureModel &temperatureModel) {
view.setHeaderViewMode(HeaderViewMode::SnoozeCountdown);
view.setTemperature(temperatureModel.getTemperature());
+ view.setSnoozeTime(alarmModel.getTimeOfNextSnooze());
};
auto exit = [](AbstractPresenter &presenter) { presenter.stopSnoozeTimer(); };
} // namespace AlarmSnoozed
M products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.cpp => products/BellHybrid/apps/application-bell-settings/models/alarm_settings/SnoozeListItemProvider.cpp +6 -5
@@ 28,11 28,12 @@ namespace app::bell_settings
{
auto chimeIntervals = getDefaultChimeIntervalRange();
- chimeIntervals.erase(
- std::remove_if(chimeIntervals.begin() + 1,
- chimeIntervals.end(),
- [chimeLength](const auto &e) { return e.getValue().value() >= chimeLength; }),
- chimeIntervals.end());
+ chimeIntervals.erase(std::remove_if(chimeIntervals.begin(),
+ chimeIntervals.end(),
+ [chimeLength](const auto &e) {
+ return e.getValue() && (e.getValue().value() >= chimeLength);
+ }),
+ chimeIntervals.end());
return chimeIntervals;
}
M products/BellHybrid/services/time/AlarmOperations.cpp => products/BellHybrid/services/time/AlarmOperations.cpp +19 -18
@@ 152,7 152,7 @@ namespace alarms
bedtime(std::move(bedtimeSettingsProvider))
{}
- bool AlarmOperations::minuteUpdated(TimePoint now)
+ void AlarmOperations::minuteUpdated(TimePoint now)
{
/**
* A very simple alarm priority:
@@ 163,15 163,11 @@ namespace alarms
* By design, there is no possibility to have both the main alarm, pre wakeup, and snooze alarm set for the same
* timestamp hence it is safe to process these three in the one go.
*/
- auto wasAlarmConsumed = AlarmOperationsCommon::minuteUpdated(now);
- wasAlarmConsumed |= processPreWakeUp(now);
- wasAlarmConsumed |= processSnoozeChime(now);
-
- if (not wasAlarmConsumed) {
+ AlarmOperationsCommon::minuteUpdated(now);
+ processPreWakeUp(now);
+ if (isBedtimeAllowed()) {
processBedtime(now);
}
-
- return false;
}
void AlarmOperations::stopAllSnoozedAlarms()
@@ 180,22 176,22 @@ namespace alarms
AlarmOperationsCommon::stopAllSnoozedAlarms();
}
- bool AlarmOperations::processPreWakeUp(TimePoint now)
+ void AlarmOperations::processPreWakeUp(TimePoint now)
{
if (nextSingleEvents.empty()) {
- return false;
+ return;
}
auto nextEvent = getNextPreWakeUpEvent();
if (!nextEvent.isValid()) {
- return false;
+ return;
}
const auto decision = preWakeUp.decide(now, nextEvent);
if (!decision.timeForChime && !decision.timeForFrontlight) {
- return false;
+ return;
}
- return handlePreWakeUp(nextEvent, decision);
+ handlePreWakeUp(nextEvent, decision);
}
void AlarmOperations::processBedtime(TimePoint now)
@@ 224,20 220,16 @@ namespace alarms
return event;
}
- bool AlarmOperations::handlePreWakeUp(const SingleEventRecord &event, PreWakeUp::Decision decision)
+ void AlarmOperations::handlePreWakeUp(const SingleEventRecord &event, PreWakeUp::Decision decision)
{
- auto ret = false;
if (auto alarmEventPtr = std::dynamic_pointer_cast<AlarmEventRecord>(event.parent); alarmEventPtr) {
if (decision.timeForChime) {
handleAlarmEvent(alarmEventPtr, alarms::AlarmType::PreWakeUpChime, true);
- ret = true;
}
if (decision.timeForFrontlight) {
handleAlarmEvent(alarmEventPtr, alarms::AlarmType::PreWakeUpFrontlight, true);
- ret = true;
}
}
- return ret;
}
bool AlarmOperations::processSnoozeChime(TimePoint now)
@@ 287,6 279,10 @@ namespace alarms
handleAlarmEvent(event, alarms::AlarmType::PreWakeUpChime, false);
handleAlarmEvent(event, alarms::AlarmType::PreWakeUpFrontlight, false);
}
+ bool AlarmOperations::isBedtimeAllowed() const
+ {
+ return ongoingSingleEvents.empty() && not preWakeUp.isActive();
+ }
PreWakeUp::PreWakeUp(std::unique_ptr<PreWakeUpSettingsProvider> &&settingsProvider)
: settingsProvider{std::move(settingsProvider)}
@@ 298,6 294,7 @@ namespace alarms
const auto frontlightSettings = settingsProvider->getFrontlightSettings();
const auto isTimeForChime = isTimeForPreWakeUp(now, event, chimeSettings);
const auto isTimeForFrontlight = isTimeForPreWakeUp(now, event, frontlightSettings);
+ active = isTimeForChime || isTimeForFrontlight;
return {isTimeForChime, isTimeForFrontlight};
}
@@ 308,6 305,10 @@ namespace alarms
const auto expectedAlarmStart = std::chrono::floor<std::chrono::minutes>(now) + settings.timeBeforeAlarm;
return settings.enabled && std::chrono::floor<std::chrono::minutes>(event.startDate) == expectedAlarmStart;
}
+ auto PreWakeUp::isActive() const -> bool
+ {
+ return active;
+ }
Bedtime::Bedtime(std::unique_ptr<AbstractBedtimeSettingsProvider> &&settingsProvider)
: settingsProvider{std::move(settingsProvider)}
M products/BellHybrid/services/time/include/time/AlarmOperations.hpp => products/BellHybrid/services/time/include/time/AlarmOperations.hpp +7 -3
@@ 64,6 64,7 @@ namespace alarms
explicit PreWakeUp(std::unique_ptr<PreWakeUpSettingsProvider> &&settingsProvider);
auto decide(TimePoint now, const SingleEventRecord &event) -> Decision;
+ auto isActive() const -> bool;
private:
auto isTimeForPreWakeUp(TimePoint now,
@@ 71,6 72,7 @@ namespace alarms
PreWakeUpSettingsProvider::Settings settings) -> bool;
std::unique_ptr<PreWakeUpSettingsProvider> settingsProvider;
+ bool active{false};
};
class Bedtime
@@ 95,19 97,21 @@ namespace alarms
std::unique_ptr<AbstractBedtimeSettingsProvider> &&BedtimeModel);
private:
- bool minuteUpdated(TimePoint now) override;
+ void minuteUpdated(TimePoint now) override;
void stopAllSnoozedAlarms() override;
- bool processPreWakeUp(TimePoint now);
+ void processPreWakeUp(TimePoint now);
bool processSnoozeChime(TimePoint now);
void stopAllSnoozeChimes();
SingleEventRecord getNextPreWakeUpEvent();
- bool handlePreWakeUp(const SingleEventRecord &event, PreWakeUp::Decision decision);
+ void handlePreWakeUp(const SingleEventRecord &event, PreWakeUp::Decision decision);
void handleSnoozeChime(const SingleEventRecord &event, bool newStateOn);
void handleBedtime(const SingleEventRecord &event, bool decision);
void processBedtime(TimePoint now);
void onAlarmTurnedOff(const std::shared_ptr<AlarmEventRecord> &event, alarms::AlarmType alarmType) override;
+ bool isBedtimeAllowed() const;
+
PreWakeUp preWakeUp;
std::unique_ptr<SnoozeChimeSettingsProvider> snoozeChimeSettings;
Bedtime bedtime;
M products/PurePhone/services/time/AlarmOperations.cpp => products/PurePhone/services/time/AlarmOperations.cpp +1 -1
@@ 25,7 25,7 @@ namespace alarms
: AlarmOperationsCommon{std::move(alarmEventsRepo), std::move(getCurrentTimeCallback)}
{}
- bool AlarmOperations::minuteUpdated(TimePoint now)
+ void AlarmOperations::minuteUpdated(TimePoint now)
{
return AlarmOperationsCommon::minuteUpdated(now);
}
M products/PurePhone/services/time/include/time/AlarmOperations.hpp => products/PurePhone/services/time/include/time/AlarmOperations.hpp +1 -1
@@ 22,7 22,7 @@ namespace alarms
AlarmOperations(std::unique_ptr<AbstractAlarmEventsRepository> &&alarmEventsRepo,
GetCurrentTime getCurrentTimeCallback);
- bool minuteUpdated(TimePoint now) override;
+ void minuteUpdated(TimePoint now) override;
private:
};