M products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.hpp => products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.hpp +15 -14
@@ 74,24 74,25 @@ namespace app::home_screen
virtual void setBatteryLevelState(const Store::Battery &batteryContext) = 0;
/// Various
- virtual void switchToMenu() = 0;
- virtual void switchToBatteryStatus() = 0;
+ virtual void switchToMenu() = 0;
+ virtual void switchToBatteryStatus() = 0;
+ virtual void setSnoozeTime(std::time_t time) = 0;
};
class AbstractPresenter : public BasePresenter<AbstractView>
{
public:
- virtual ~AbstractPresenter() noexcept = default;
- virtual void createData() = 0;
- virtual void handleUpdateTimeEvent() = 0;
- virtual bool handleInputEvent(const gui::InputEvent &inputEvent) = 0;
- virtual void onBeforeShow() = 0;
- virtual void onDatabaseMessage(db::NotificationMessage *msg) = 0;
- virtual void refreshWindow() = 0;
- virtual void spawnTimer(std::chrono::milliseconds timeout = defaultTimeout) = 0;
- virtual void detachTimer() = 0;
- virtual void handleAlarmRingingEvent() = 0;
- virtual void handleAlarmModelReady() = 0;
+ virtual ~AbstractPresenter() noexcept = default;
+ virtual void createData() = 0;
+ virtual void handleUpdateTimeEvent() = 0;
+ virtual bool handleInputEvent(const gui::InputEvent &inputEvent) = 0;
+ virtual void onBeforeShow() = 0;
+ virtual void onDatabaseMessage(db::NotificationMessage *msg) = 0;
+ virtual void refreshWindow() = 0;
+ virtual void spawnTimer(std::chrono::milliseconds timeout = defaultTimeout) = 0;
+ virtual void detachTimer() = 0;
+ virtual void handleAlarmRingingEvent() = 0;
+ virtual void handleAlarmModelReady() = 0;
virtual void setSnoozeTimer(std::unique_ptr<app::ProgressTimerWithSnoozeTimer> &&_timer) = 0;
virtual void startSnoozeTimer(std::chrono::seconds snoozeDuration) = 0;
virtual void stopSnoozeTimer() = 0;
@@ 153,7 154,7 @@ namespace app::home_screen
void handleCyclicDeepRefresh();
- static constexpr auto timerName = "HS_timer";
+ static constexpr auto timerName = "HS_timer";
static constexpr auto snoozeTick = std::chrono::seconds(1);
};
} // namespace app::home_screen
M products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp => products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp +11 -6
@@ 83,6 83,7 @@ namespace app::home_screen
alarmModel.setDefaultAlarmTime();
view.setAlarmTime(alarmModel.getAlarmTime());
};
+ auto turnOffRingingAlarm = [](AbstractAlarmModel &alarmModel) { alarmModel.turnOff(); };
} // namespace Helpers
namespace Events
@@ 257,7 258,7 @@ namespace app::home_screen
view.setHeaderViewMode(HeaderViewMode::SnoozeCountdown);
const auto snoozeDuration = alarmModel.getTimeToNextSnooze();
- presenter.startSnoozeTimer(snoozeDuration);
+ view.setSnoozeTime(alarmModel.getTimeOfNextSnooze());
const auto bottomDescription = utils::translate("app_bellmain_home_screen_bottom_desc") + " " +
std::to_string(alarmModel.getSnoozeDuration()) + " min";
view.setBottomDescription(bottomDescription);
@@ 365,11 366,15 @@ namespace app::home_screen
"AlarmRinging"_s + sml::on_exit<_> / AlarmRinging::exit,
"AlarmRinging"_s + event<Events::Reset> = "Init"_s,
"AlarmRinging"_s + event<Events::Timer> [Helpers::isSnoozeAllowed] / Helpers::snooze = "AlarmSnoozedWait"_s,
- "AlarmRinging"_s + event<Events::Timer> [!Helpers::isSnoozeAllowed] = "ActivatedWait"_s,
- "AlarmRinging"_s + event<Events::LightPress> = "AlarmSnoozedWait"_s,
- "AlarmRinging"_s + event<Events::RotateLeftPress> = "AlarmSnoozedWait"_s,
- "AlarmRinging"_s + event<Events::RotateRightPress> = "AlarmSnoozedWait"_s,
- "AlarmRinging"_s + event<Events::BackPress> = "AlarmSnoozedWait"_s,
+ "AlarmRinging"_s + event<Events::Timer> [not Helpers::isSnoozeAllowed] / Helpers::turnOffRingingAlarm = "ActivatedWait"_s,
+ "AlarmRinging"_s + event<Events::LightPress> [Helpers::isSnoozeAllowed] = "AlarmSnoozedWait"_s,
+ "AlarmRinging"_s + event<Events::LightPress> [not Helpers::isSnoozeAllowed] / Helpers::turnOffRingingAlarm = "ActivatedWait"_s,
+ "AlarmRinging"_s + event<Events::RotateLeftPress> [Helpers::isSnoozeAllowed] = "AlarmSnoozedWait"_s,
+ "AlarmRinging"_s + event<Events::RotateLeftPress> [not Helpers::isSnoozeAllowed] / Helpers::turnOffRingingAlarm = "ActivatedWait"_s,
+ "AlarmRinging"_s + event<Events::RotateRightPress> [Helpers::isSnoozeAllowed] = "AlarmSnoozedWait"_s,
+ "AlarmRinging"_s + event<Events::RotateRightPress> [not Helpers::isSnoozeAllowed] / Helpers::turnOffRingingAlarm = "ActivatedWait"_s,
+ "AlarmRinging"_s + event<Events::BackPress> [Helpers::isSnoozeAllowed] = "AlarmSnoozedWait"_s,
+ "AlarmRinging"_s + event<Events::BackPress> [not Helpers::isSnoozeAllowed] / Helpers::turnOffRingingAlarm = "ActivatedWait"_s,
"AlarmRinging"_s + event<Events::DeepDownPress> = "AlarmRingingDeactivatedWait"_s,
"AlarmRingingDeactivatedWait"_s + sml::on_entry<_> / AlarmRingingDeactivatedWait::entry,
M products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.cpp => products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.cpp +4 -12
@@ 20,17 20,6 @@ namespace gui
alarmImg->setMargins(Margins(10U, 0, 10U, 0));
alarmImg->setMinimumSizeToFitImage();
- minusText = new TextFixedSize(this, 0, 0, 0, 0);
- minusText->setText("-");
- minusText->setFont(style::window::font::largelight);
- minusText->setMargins(Margins(0, 0, 0, 0));
- minusText->setMinimumHeightToFitText();
- minusText->setMinimumWidthToFitText();
- minusText->drawUnderline(false);
- minusText->setEditMode(EditMode::Browse);
- minusText->activeItem = false;
- minusText->setAlignment(Alignment(Alignment::Horizontal::Right, Alignment::Vertical::Center));
-
timeSpinner = new TimeSetSpinner(this);
timeSpinner->setFont(style::window::font::largelight);
timeSpinner->setEditMode(EditMode::Browse);
@@ 44,7 33,6 @@ namespace gui
auto SnoozeTimer::setFont(std::string newFontName) noexcept -> void
{
fontName = std::move(newFontName);
- minusText->setFont(fontName);
timeSpinner->setFont(fontName);
}
@@ 52,5 40,9 @@ namespace gui
{
timeSpinner->setTime(mins, secs);
}
+ auto SnoozeTimer::setTime(std::time_t time) noexcept -> void
+ {
+ timeSpinner->setTime(time);
+ }
} /* namespace gui */
M products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.hpp => products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.hpp +1 -1
@@ 31,10 31,10 @@ namespace gui
auto setFont(std::string newFontName) noexcept -> void;
auto setTime(std::uint8_t mins, std::uint8_t secs) noexcept -> void;
+ auto setTime(std::time_t time) noexcept -> void;
private:
TimeSetSpinner *timeSpinner = nullptr;
- TextFixedSize *minusText = nullptr;
Status alarmStatus = Status::DEACTIVATED;
std::string fontName = style::window::font::largelight;
M products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp => products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp +4 -0
@@ 327,5 327,9 @@ namespace gui
std::make_unique<gui::BellBatteryStatusWindow::Data>(presenter->getBatteryLvl(),
presenter->isBatteryCharging()));
}
+ void BellHomeScreenWindow::setSnoozeTime(std::time_t newTime)
+ {
+ snoozeTimer->setTime(newTime);
+ }
} // namespace gui
M products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp => products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp +1 -0
@@ 52,6 52,7 @@ namespace gui
void setHeaderViewMode(app::home_screen::HeaderViewMode mode) override;
std::time_t getAlarmTime() const override;
void setAlarmTime(std::time_t newTime) override;
+ void setSnoozeTime(std::time_t newTime) override;
void incAlarmMinute() override;
void decAlarmMinute() override;
M products/BellHybrid/apps/common/include/common/models/AbstractAlarmModel.hpp => products/BellHybrid/apps/common/include/common/models/AbstractAlarmModel.hpp +11 -10
@@ 19,17 19,18 @@ namespace app
public:
virtual ~AbstractAlarmModel() noexcept = default;
- virtual bool isActive() const = 0;
- virtual void setDefaultAlarmTime() = 0;
- virtual void setAlarmTime(time_t time) = 0;
- virtual time_t getAlarmTime() const = 0;
- virtual void activate(bool value) = 0;
- virtual std::uint32_t getSnoozeDuration() = 0;
- virtual bool isSnoozeAllowed() = 0;
- virtual bool isSnoozeActive() = 0;
- virtual void turnOff() = 0;
- virtual void snooze() = 0;
+ virtual bool isActive() const = 0;
+ virtual void setDefaultAlarmTime() = 0;
+ virtual void setAlarmTime(time_t time) = 0;
+ virtual time_t getAlarmTime() const = 0;
+ virtual void activate(bool value) = 0;
+ virtual std::uint32_t getSnoozeDuration() = 0;
+ virtual bool isSnoozeAllowed() = 0;
+ virtual bool isSnoozeActive() = 0;
+ virtual void turnOff() = 0;
+ virtual void snooze() = 0;
virtual std::chrono::seconds getTimeToNextSnooze() = 0;
+ virtual std::time_t getTimeOfNextSnooze() = 0;
virtual alarms::AlarmStatus getAlarmStatus() = 0;
/// Command model to update its internal data
virtual void update(AlarmModelReadyHandler callback = AlarmModelReadyHandler()) = 0;
M products/BellHybrid/apps/common/include/common/models/AlarmModel.hpp => products/BellHybrid/apps/common/include/common/models/AlarmModel.hpp +1 -0
@@ 38,6 38,7 @@ namespace app
void turnOff() override;
void snooze() override;
std::chrono::seconds getTimeToNextSnooze() override;
+ std::time_t getTimeOfNextSnooze() override;
alarms::AlarmStatus getAlarmStatus() override;
private:
M products/BellHybrid/apps/common/src/AlarmModel.cpp => products/BellHybrid/apps/common/src/AlarmModel.cpp +8 -0
@@ 198,4 198,12 @@ namespace app
{
return alarmStatus;
}
+ std::time_t AlarmModel::getTimeOfNextSnooze()
+ {
+ const auto snoozeDurationStr =
+ settings.getValue(bell::settings::Snooze::length, settings::SettingsScope::Global);
+ const auto snoozeDuration = utils::getNumericValue<std::uint32_t>(snoozeDurationStr);
+ return Clock::to_time_t(std::chrono::floor<std::chrono::minutes>(TimePointNow()) +
+ std::chrono::minutes(snoozeDuration));
+ }
} // namespace app