From aa357fa71b318307b63d73027a1dc7a166499e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jo=C5=84ski?= Date: Thu, 13 Jan 2022 17:09:42 +0100 Subject: [PATCH] [BH-1365] Restore snooze chime processing to alarm operations Restore snooze chime processing to alarm operations --- .../services/time/AlarmOperations.cpp | 18 +++++++++++------- .../time/include/time/AlarmOperations.hpp | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/products/BellHybrid/services/time/AlarmOperations.cpp b/products/BellHybrid/services/time/AlarmOperations.cpp index b410494a90ddf43326da0a36a1070e583a641644..d3689f0b65fffff69e089535d0d8a59f6607d2bb 100644 --- a/products/BellHybrid/services/time/AlarmOperations.cpp +++ b/products/BellHybrid/services/time/AlarmOperations.cpp @@ -164,8 +164,11 @@ namespace alarms * timestamp hence it is safe to process these three in the one go. */ AlarmOperationsCommon::minuteUpdated(now); - processPreWakeUp(now); - if (isBedtimeAllowed()) { + auto prewakeupStarted = processPreWakeUp(now); + auto snoozeChimePlayed = processSnoozeChime(now); + + // If we are during snooze or its prewakeup time, we decided to skip bedtime handling at all + if (!prewakeupStarted && !snoozeChimePlayed && isBedtimeAllowed()) { processBedtime(now); } } @@ -176,22 +179,23 @@ namespace alarms AlarmOperationsCommon::stopAllSnoozedAlarms(); } - void AlarmOperations::processPreWakeUp(TimePoint now) + bool AlarmOperations::processPreWakeUp(TimePoint now) { if (nextSingleEvents.empty()) { - return; + return false; } auto nextEvent = getNextPreWakeUpEvent(); if (!nextEvent.isValid()) { - return; + return false; } const auto decision = preWakeUp.decide(now, nextEvent); if (!decision.timeForChime && !decision.timeForFrontlight) { - return; + return false; } handlePreWakeUp(nextEvent, decision); + return true; } void AlarmOperations::processBedtime(TimePoint now) @@ -281,7 +285,7 @@ namespace alarms } bool AlarmOperations::isBedtimeAllowed() const { - return ongoingSingleEvents.empty() && not preWakeUp.isActive(); + return ongoingSingleEvents.empty() && snoozedSingleEvents.empty() && not preWakeUp.isActive(); } void AlarmOperations::handleAlarmEvent(const std::shared_ptr &event, diff --git a/products/BellHybrid/services/time/include/time/AlarmOperations.hpp b/products/BellHybrid/services/time/include/time/AlarmOperations.hpp index 3164c0beb9264dc51f44765f94c952f2a110c9e5..26f17e886165c0f690765470adc7078a644721fb 100644 --- a/products/BellHybrid/services/time/include/time/AlarmOperations.hpp +++ b/products/BellHybrid/services/time/include/time/AlarmOperations.hpp @@ -99,7 +99,7 @@ namespace alarms private: void minuteUpdated(TimePoint now) override; void stopAllSnoozedAlarms() override; - void processPreWakeUp(TimePoint now); + bool processPreWakeUp(TimePoint now); bool processSnoozeChime(TimePoint now); void stopAllSnoozeChimes();