From cfdd234db1b41c2244c484ec72d3ac9c659cdfa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jo=C5=84ski?= Date: Thu, 17 Feb 2022 15:56:41 +0100 Subject: [PATCH] [BH-1316] Vertical layouts Add 2 vertical layouts --- .../apps-common/widgets/AlarmSetSpinner.cpp | 6 + .../apps-common/widgets/AlarmSetSpinner.hpp | 1 + .../apps-common/widgets/TimeSetFmtSpinner.cpp | 5 + .../apps-common/widgets/TimeSetFmtSpinner.hpp | 2 + .../apps-common/widgets/TimeSetSpinner.hpp | 3 + .../ApplicationBellMain.cpp | 2 +- .../presenters/HomeScreenPresenter.hpp | 18 +- .../presenters/HomeScreenPresenter.cpp | 77 +++++++ .../presenters/StateController.cpp | 81 +++---- .../windows/BellHomeScreenWindow.cpp | 108 +--------- .../windows/BellHomeScreenWindow.hpp | 11 +- .../ApplicationBellOnBoarding.cpp | 6 +- .../ApplicationBellSettings.cpp | 5 +- .../models/TimeUnitsModel.hpp | 3 + .../presenter/TimeUnitsPresenter.hpp | 9 +- .../models/TimeUnitsModel.cpp | 5 + .../presenter/LayoutWindowPresenter.cpp | 57 ++--- .../presenter/TimeUnitsPresenter.cpp | 36 +++- .../BellHybrid/apps/common/CMakeLists.txt | 12 ++ .../layouts/BaseHomeScreenLayoutProvider.hpp | 15 +- .../layouts/HomeScreenLayoutClassic.hpp | 8 +- .../layouts/HomeScreenLayoutVertical.hpp | 60 ++++++ .../HomeScreenLayoutVerticalSimple.hpp | 16 ++ .../HomeScreenLayoutVerticalWithAmPm.hpp | 27 +++ .../common/layouts/HomeScreenLayouts.hpp | 11 +- .../include/common/widgets/AlarmIcon.hpp | 29 +++ .../include/common/widgets/BellBattery.hpp | 6 +- .../include/common/widgets/LayoutVertical.hpp | 50 +++++ .../common/widgets/TimeSetSpinnerVertical.hpp | 77 +++++++ .../src/layouts/HomeScreenLayoutClassic.cpp | 60 ++---- .../src/layouts/HomeScreenLayoutVertical.cpp | 164 +++++++++++++++ .../HomeScreenLayoutVerticalSimple.cpp | 38 ++++ .../HomeScreenLayoutVerticalWithAmPm.cpp | 69 ++++++ .../common/src/layouts/HomeScreenLayouts.cpp | 30 ++- .../apps/common/src/widgets/AlarmIcon.cpp | 46 ++++ .../apps/common/src/widgets/BellBattery.cpp | 12 +- .../common/src/widgets/LayoutVertical.cpp | 103 +++++++++ .../src/widgets/TimeSetSpinnerVertical.cpp | 197 ++++++++++++++++++ products/BellHybrid/assets/assets_common.json | 1 + 39 files changed, 1161 insertions(+), 305 deletions(-) create mode 100644 products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVertical.hpp create mode 100644 products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalSimple.hpp create mode 100644 products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalWithAmPm.hpp create mode 100644 products/BellHybrid/apps/common/include/common/widgets/AlarmIcon.hpp create mode 100644 products/BellHybrid/apps/common/include/common/widgets/LayoutVertical.hpp create mode 100644 products/BellHybrid/apps/common/include/common/widgets/TimeSetSpinnerVertical.hpp create mode 100644 products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutVertical.cpp create mode 100644 products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutVerticalSimple.cpp create mode 100644 products/BellHybrid/apps/common/src/layouts/HomeScreenLayoutVerticalWithAmPm.cpp create mode 100644 products/BellHybrid/apps/common/src/widgets/AlarmIcon.cpp create mode 100644 products/BellHybrid/apps/common/src/widgets/LayoutVertical.cpp create mode 100644 products/BellHybrid/apps/common/src/widgets/TimeSetSpinnerVertical.cpp diff --git a/module-apps/apps-common/widgets/AlarmSetSpinner.cpp b/module-apps/apps-common/widgets/AlarmSetSpinner.cpp index 76f7e83149eaa8214d8b666a0013bd18ed3e52bd..8168998bf17e317e64a22a58c2aaaacb532e571c 100644 --- a/module-apps/apps-common/widgets/AlarmSetSpinner.cpp +++ b/module-apps/apps-common/widgets/AlarmSetSpinner.cpp @@ -59,6 +59,12 @@ namespace gui return this->focusItem->onInput(inputEvent); } + auto AlarmSetSpinner::setArrowsVisible(bool visible) noexcept -> void + { + leftArrow->setVisible(visible); + rightArrow->setVisible(visible); + } + auto AlarmSetSpinner::setFont(std::string newFontName) noexcept -> void { fontName = std::move(newFontName); diff --git a/module-apps/apps-common/widgets/AlarmSetSpinner.hpp b/module-apps/apps-common/widgets/AlarmSetSpinner.hpp index f9ba4444737ac29fcc02802e359c486f1ab10b65..25ddf1f9c87e0a9cd079e60d6ce6cc09372b8c0d 100644 --- a/module-apps/apps-common/widgets/AlarmSetSpinner.hpp +++ b/module-apps/apps-common/widgets/AlarmSetSpinner.hpp @@ -34,6 +34,7 @@ namespace gui explicit AlarmSetSpinner( Item *parent = nullptr, Position x = 0U, Position y = 0U, Length w = 0U, Length h = 0U); + auto setArrowsVisible(bool visible) noexcept -> void; auto setTime(std::time_t time) noexcept -> void; auto setFont(std::string newFontName) noexcept -> void; auto setEditMode(EditMode mode) noexcept -> void; diff --git a/module-apps/apps-common/widgets/TimeSetFmtSpinner.cpp b/module-apps/apps-common/widgets/TimeSetFmtSpinner.cpp index 20ed499f0045b4c9d24cfb1301827d19c4421f12..26eb092abf6bf999f3db6931ce6e3e1f4d66354d 100644 --- a/module-apps/apps-common/widgets/TimeSetFmtSpinner.cpp +++ b/module-apps/apps-common/widgets/TimeSetFmtSpinner.cpp @@ -218,6 +218,11 @@ namespace gui return fmt->getCurrentValue() == utils::time::Locale::getPM().c_str(); } + auto TimeSetFmtSpinner::getTimeFormat() const noexcept -> utils::time::Locale::TimeFormat + { + return timeFormat; + } + auto TimeSetFmtSpinner::setTime(std::time_t time) noexcept -> void { using namespace utils::time; diff --git a/module-apps/apps-common/widgets/TimeSetFmtSpinner.hpp b/module-apps/apps-common/widgets/TimeSetFmtSpinner.hpp index f4c3f3155219e3ef30cb326ceb65d123328af10b..4952687ee29fedff053a86458229aaa42dda7a03 100644 --- a/module-apps/apps-common/widgets/TimeSetFmtSpinner.hpp +++ b/module-apps/apps-common/widgets/TimeSetFmtSpinner.hpp @@ -54,6 +54,8 @@ namespace gui [[nodiscard]] auto getMinute() const noexcept -> int; [[nodiscard]] auto isPM() const noexcept -> bool; + auto getTimeFormat() const noexcept -> utils::time::Locale::TimeFormat; + private: enum class TraverseDir : bool { diff --git a/module-apps/apps-common/widgets/TimeSetSpinner.hpp b/module-apps/apps-common/widgets/TimeSetSpinner.hpp index 8102aab75acbc661ed68d9ea861783f039689375..b51e62e574f62d110a536391f72a598342c69602 100644 --- a/module-apps/apps-common/widgets/TimeSetSpinner.hpp +++ b/module-apps/apps-common/widgets/TimeSetSpinner.hpp @@ -46,6 +46,7 @@ namespace gui std::map colonFontMap = { {style::window::font::verybiglight, "alarm_colon_W_M"}, {style::window::font::largelight, "alarm_colon_W_M"}, + {style::window::font::supersizeme, "alarm_colon_select_W_M"}, {style::window::font::supersizemelight, "alarm_colon_select_W_M"}, {style::window::font::huge, "alarm_colon_clock_W_M"}}; @@ -54,6 +55,8 @@ namespace gui {style::time_set_spinner::small_margin, 0, style::time_set_spinner::small_margin, 0}}, {style::window::font::largelight, {style::time_set_spinner::small_margin, 0, style::time_set_spinner::small_margin, 0}}, + {style::window::font::supersizeme, + {style::time_set_spinner::big_margin, 0, style::time_set_spinner::big_margin, 0}}, {style::window::font::supersizemelight, {style::time_set_spinner::big_margin, 0, style::time_set_spinner::big_margin, 0}}, {style::window::font::huge, diff --git a/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp b/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp index 235b2459b5cc2254dd065e73c83a52e79f906bd9..ae06edd9f2428d45353ab897234668bb41849241 100644 --- a/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +++ b/products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp @@ -177,7 +177,7 @@ namespace app void ApplicationBellMain::setHomeScreenLayout(std::string layoutName) { - auto homeScreenLayoutsList = gui::homeScreenLayouts(); + auto homeScreenLayoutsList = gui::factory::getAllLayouts(); if (homeScreenLayoutsList.find(layoutName) == homeScreenLayoutsList.end()) { return; } diff --git a/products/BellHybrid/apps/application-bell-main/include/application-bell-main/presenters/HomeScreenPresenter.hpp b/products/BellHybrid/apps/application-bell-main/include/application-bell-main/presenters/HomeScreenPresenter.hpp index 86cc5e0e2e131be5d1d11ffb07cd17df16adbb76..9ec979d22c5911599cc24a12b76d129da2337821 100644 --- a/products/BellHybrid/apps/application-bell-main/include/application-bell-main/presenters/HomeScreenPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-main/include/application-bell-main/presenters/HomeScreenPresenter.hpp @@ -48,16 +48,11 @@ namespace app::home_screen virtual ~AbstractView() noexcept = default; /// Alarm widget related API - virtual void setAlarmTriggered() = 0; - virtual void setAlarmActive(bool) = 0; - virtual void setAlarmEdit(bool) = 0; virtual void setViewState(ViewState state) = 0; virtual std::time_t getAlarmTime() const = 0; virtual void setAlarmTime(std::time_t time) = 0; virtual void setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) = 0; virtual void setSnoozeFormat(utils::time::Locale::TimeFormat fmt) = 0; - virtual void incAlarmMinute() = 0; - virtual void decAlarmMinute() = 0; /// Time widget related API virtual void setTime(std::time_t time) = 0; @@ -65,14 +60,11 @@ namespace app::home_screen /// Bottom box related API(descriptionn battery or time) virtual void setTemperature(utils::temperature::Temperature newTemp) = 0; - virtual void setBottomDescription(const UTF8 &desc) = 0; - virtual void removeBottomDescription() = 0; + virtual void setTextDescription(const UTF8 &desc) = 0; virtual void setBatteryLevelState(const Store::Battery &batteryContext) = 0; /// Various virtual void setLayout(gui::LayoutGenerator layoutGenerator) = 0; - virtual void switchToMenu() = 0; - virtual void switchToBatteryStatus() = 0; virtual void setSnoozeTime(std::time_t time) = 0; }; @@ -99,6 +91,10 @@ namespace app::home_screen virtual bool isBatteryCharging() const = 0; virtual bool isAlarmActivatedByLatch() const = 0; virtual void setLayout(gui::LayoutGenerator layoutGenerator) = 0; + virtual void incAlarmMinute() = 0; + virtual void decAlarmMinute() = 0; + virtual void switchToMenu() = 0; + virtual void switchToBatteryStatus() = 0; static constexpr auto defaultTimeout = std::chrono::milliseconds{5000}; }; @@ -138,6 +134,10 @@ namespace app::home_screen std::uint32_t getBatteryLvl() const override; bool isBatteryCharging() const override; bool isAlarmActivatedByLatch() const override; + void incAlarmMinute(); + void decAlarmMinute(); + void switchToMenu(); + void switchToBatteryStatus(); void setLayout(gui::LayoutGenerator layoutGenerator) override; diff --git a/products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp b/products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp index 4c4444cefabba50b612f6a08e2add702fe3326c8..858e4806e1a43f061ec64019e0b447c611635a69 100644 --- a/products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-main/presenters/HomeScreenPresenter.cpp @@ -6,6 +6,9 @@ #include "models/BatteryModel.hpp" #include "models/TemperatureModel.hpp" +#include +#include +#include #include #include #include @@ -17,6 +20,53 @@ #include #include +namespace +{ + using utils::time::Locale; + void increaseHour(struct tm &tm) + { + if (tm.tm_hour >= Locale::max_hour_24H_mode) { + tm.tm_hour = 0; + tm.tm_min = 0; + } + else { + tm.tm_hour++; + tm.tm_min = 0; + } + } + + void decreaseHour(struct tm &tm) + { + if (tm.tm_hour <= Locale::min_hour_24H_mode) { + tm.tm_hour = Locale::max_hour_24H_mode; + tm.tm_min = Locale::max_minutes; + } + else { + tm.tm_hour--; + tm.tm_min = utils::time::Locale::max_minutes; + } + } + + void handleMinuteIncrease(struct tm &tm) + { + if (tm.tm_min >= Locale::max_minutes) { + increaseHour(tm); + } + else { + tm.tm_min++; + } + } + + void handleMinuteDecrease(struct tm &tm) + { + if (tm.tm_min <= 0) { + decreaseHour(tm); + } + else { + tm.tm_min--; + } + } +}; // namespace namespace app::home_screen { HomeScreenPresenter::HomeScreenPresenter(ApplicationCommon *app, @@ -168,4 +218,31 @@ namespace app::home_screen { getView()->setLayout(layoutGenerator); } + + void HomeScreenPresenter::incAlarmMinute() + { + const auto alarmTime = getView()->getAlarmTime(); + auto newTime = std::localtime(&alarmTime); + handleMinuteIncrease(*newTime); + getView()->setAlarmTime(std::mktime(newTime)); + } + + void HomeScreenPresenter::decAlarmMinute() + { + const auto alarmTime = getView()->getAlarmTime(); + auto newTime = std::localtime(&alarmTime); + handleMinuteDecrease(*newTime); + getView()->setAlarmTime(std::mktime(newTime)); + } + + void HomeScreenPresenter::switchToMenu() + { + app->switchWindow(gui::window::name::bell_main_menu, nullptr); + } + + void HomeScreenPresenter::switchToBatteryStatus() + { + app->switchWindow(gui::BellBatteryStatusWindow::name, + std::make_unique(getBatteryLvl(), isBatteryCharging())); + } } // namespace app::home_screen diff --git a/products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp b/products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp index 086eb518d71ce450e2a9a9f3a654a3b1e3f24fb5..da4817b6c7654c877947edb06118c1188cd7d2cd 100644 --- a/products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp +++ b/products/BellHybrid/apps/application-bell-main/presenters/StateController.cpp @@ -65,10 +65,8 @@ namespace app::home_screen return true; }; - auto switchToMenu = [](AbstractView &view) { view.switchToMenu(); }; - auto makeAlarmEditable = [](AbstractView &view) { view.setAlarmEdit(true); }; - auto makeAlarmNonEditable = [](AbstractView &view) { view.setAlarmEdit(false); }; - auto switchToBatteryStatus = [](AbstractView &view) { view.switchToBatteryStatus(); }; + auto switchToMenu = [](AbstractPresenter &presenter) { presenter.switchToMenu(); }; + auto switchToBatteryStatus = [](AbstractPresenter &presenter) { presenter.switchToBatteryStatus(); }; auto updateTemperature = [](AbstractView &view, AbstractTemperatureModel &temperatureModel) { view.setTemperature(temperatureModel.getTemperature()); }; @@ -141,8 +139,6 @@ namespace app::home_screen AbstractPresenter &presenter, AbstractAlarmModel &alarmModel) { alarmModel.update([&]() { presenter.handleAlarmModelReady(); }); - view.setAlarmEdit(false); - view.setAlarmActive(false); view.setTemperature(temperatureModel.getTemperature()); view.setBatteryLevelState(batteryModel.getLevelState()); }; @@ -155,8 +151,6 @@ namespace app::home_screen AbstractTemperatureModel &temperatureModel, AbstractBatteryModel &batteryModel) { controller.snooze(false); - view.setAlarmEdit(false); - view.setAlarmActive(false); view.setViewState(ViewState::Deactivated); view.setTemperature(temperatureModel.getTemperature()); view.setBatteryLevelState(batteryModel.getLevelState()); @@ -168,37 +162,29 @@ namespace app::home_screen auto entry = [](AbstractView &view, AbstractPresenter &presenter, AbstractAlarmModel &alarmModel) { alarmModel.activate(false); presenter.spawnTimer(); - view.setBottomDescription(utils::translate("app_bell_alarm_deactivated")); - view.setAlarmActive(false); + view.setTextDescription(utils::translate("app_bell_alarm_deactivated")); view.setViewState(ViewState::DeactivatedWait); }; - auto exit = [](AbstractView &view, AbstractPresenter &presenter) { - presenter.detachTimer(); - view.removeBottomDescription(); - }; + auto exit = [](AbstractView &view, AbstractPresenter &presenter) { presenter.detachTimer(); }; } // namespace DeactivatedWait namespace AlarmEdit { auto entry = [](AbstractView &view, AbstractPresenter &presenter, AbstractTemperatureModel &temperatureModel) { - view.setAlarmEdit(true); view.setViewState(ViewState::AlarmEdit); view.setTemperature(temperatureModel.getTemperature()); }; - auto exit = [](AbstractView &view, AbstractPresenter &presenter) { - view.setAlarmEdit(false); - presenter.detachTimer(); - }; + auto exit = [](AbstractView &view, AbstractPresenter &presenter) { presenter.detachTimer(); }; - auto processRotateLeft = [](AbstractView &view, AbstractPresenter &presenter) { + auto processRotateLeft = [](AbstractPresenter &presenter) { presenter.spawnTimer(defaultAlarmSetTime); - view.decAlarmMinute(); + presenter.decAlarmMinute(); }; - auto processRotateRight = [](AbstractView &view, AbstractPresenter &presenter) { + auto processRotateRight = [](AbstractPresenter &presenter) { presenter.spawnTimer(defaultAlarmSetTime); - view.incAlarmMinute(); + presenter.incAlarmMinute(); }; } // namespace AlarmEdit @@ -206,16 +192,12 @@ namespace app::home_screen { auto entry = [](AbstractView &view, AbstractPresenter &presenter) { presenter.spawnTimer(); - view.setBottomDescription(utils::translate("app_bellmain_home_screen_bottom_desc_dp")); + view.setTextDescription(utils::translate("app_bellmain_home_screen_bottom_desc_dp")); view.setViewState(ViewState::WaitForConfirmation); }; auto exit = [](AbstractPresenter &presenter) { presenter.detachTimer(); }; - auto action = [](AbstractView &view) { - view.setAlarmEdit(false); - view.setAlarmActive(true); - view.removeBottomDescription(); - }; + auto action = [](AbstractView &view) {}; } // namespace WaitForConfirmation namespace ActivatedWait @@ -226,15 +208,11 @@ namespace app::home_screen AbstractTimeModel &timeModel) { alarmModel.activate(true); presenter.spawnTimer(); - view.setBottomDescription(utils::time::getBottomDescription( + view.setTextDescription(utils::time::getBottomDescription( utils::time::calculateMinutesDifference(view.getAlarmTime(), timeModel.getCurrentTime()))); - view.setAlarmActive(true); view.setViewState(ViewState::ActivatedWait); }; - auto exit = [](AbstractView &view, AbstractPresenter &presenter) { - presenter.detachTimer(); - view.removeBottomDescription(); - }; + auto exit = [](AbstractView &view, AbstractPresenter &presenter) { presenter.detachTimer(); }; } // namespace ActivatedWait namespace Activated @@ -246,7 +224,6 @@ namespace app::home_screen AbstractBatteryModel &batteryModel) { controller.snooze(false); view.setTemperature(temperatureModel.getTemperature()); - view.setAlarmActive(true); view.setViewState(ViewState::Activated); view.setAlarmTime(alarmModel.getAlarmTime()); view.setBatteryLevelState(batteryModel.getLevelState()); @@ -259,7 +236,6 @@ namespace app::home_screen [](AbstractView &view, AbstractTemperatureModel &temperatureModel, AbstractPresenter &presenter) { presenter.spawnTimer(defaultAlarmRingingTime); view.setViewState(ViewState::AlarmRinging); - view.setAlarmTriggered(); view.setTemperature(temperatureModel.getTemperature()); }; auto exit = [](AbstractPresenter &presenter) { presenter.detachTimer(); }; @@ -272,13 +248,9 @@ namespace app::home_screen alarmModel.turnOff(); alarmModel.activate(false); view.setViewState(ViewState::AlarmRingingDeactivatedWait); - view.setBottomDescription(Helpers::getGreeting()); - view.setAlarmActive(false); - }; - auto exit = [](AbstractView &view, AbstractPresenter &presenter) { - presenter.detachTimer(); - view.removeBottomDescription(); + view.setTextDescription(Helpers::getGreeting()); }; + auto exit = [](AbstractView &view, AbstractPresenter &presenter) { presenter.detachTimer(); }; } // namespace AlarmRingingDeactivatedWait namespace AlarmSnoozedWait @@ -289,12 +261,9 @@ namespace app::home_screen view.setViewState(ViewState::AlarmSnoozedWait); const auto bottomDescription = utils::time::getBottomDescription(alarmModel.getSnoozeDuration().count()); - view.setBottomDescription(bottomDescription); - }; - auto exit = [](AbstractView &view, AbstractPresenter &presenter) { - presenter.detachTimer(); - view.removeBottomDescription(); + view.setTextDescription(bottomDescription); }; + auto exit = [](AbstractView &view, AbstractPresenter &presenter) { presenter.detachTimer(); }; } // namespace AlarmSnoozedWait namespace AlarmSnoozed @@ -326,8 +295,8 @@ namespace app::home_screen "Deactivated"_s + sml::on_entry<_> / Deactivated::entry, "Deactivated"_s + event/ Helpers::switchToMenu, - "Deactivated"_s + event / Helpers::makeAlarmEditable = "DeactivatedEdit"_s, - "Deactivated"_s + event / Helpers::makeAlarmEditable = "DeactivatedEdit"_s, + "Deactivated"_s + event = "DeactivatedEdit"_s, + "Deactivated"_s + event = "DeactivatedEdit"_s, "Deactivated"_s + event = "ActivatedWait"_s, "Deactivated"_s + event / Helpers::updateTemperature, "Deactivated"_s + event / Helpers::switchToBatteryStatus, @@ -336,7 +305,7 @@ namespace app::home_screen "DeactivatedWait"_s + sml::on_entry<_> / DeactivatedWait::entry, "DeactivatedWait"_s + sml::on_exit<_> / DeactivatedWait::exit, "DeactivatedWait"_s + event = "Deactivated"_s, - "DeactivatedWait"_s + event/ Helpers::switchToMenu = "Deactivated"_s, + "DeactivatedWait"_s + event = "Deactivated"_s, "DeactivatedWait"_s + event = "ActivatedWait"_s, "DeactivatedWait"_s + event = "DeactivatedEdit"_s, "DeactivatedWait"_s + event = "DeactivatedEdit"_s, @@ -355,7 +324,7 @@ namespace app::home_screen "WaitForConfirmation"_s + sml::on_entry<_> / WaitForConfirmation::entry, "WaitForConfirmation"_s + sml::on_exit<_> / WaitForConfirmation::exit, - "WaitForConfirmation"_s + event / Helpers::makeAlarmNonEditable = "Deactivated"_s, + "WaitForConfirmation"_s + event = "Deactivated"_s, "WaitForConfirmation"_s + event / WaitForConfirmation::action = "ActivatedWait"_s, "WaitForConfirmation"_s + event/ Helpers::switchToMenu = "Deactivated"_s, "WaitForConfirmation"_s + event = "Deactivated"_s, @@ -364,8 +333,8 @@ namespace app::home_screen "ActivatedWait"_s + sml::on_entry<_> / ActivatedWait::entry, "ActivatedWait"_s + sml::on_exit<_> / ActivatedWait::exit, - "ActivatedWait"_s + event / Helpers::makeAlarmNonEditable = "Activated"_s, - "ActivatedWait"_s + event/ Helpers::switchToMenu = "Activated"_s, + "ActivatedWait"_s + event = "Activated"_s, + "ActivatedWait"_s + event = "Activated"_s, "ActivatedWait"_s + event = "DeactivatedWait"_s, "ActivatedWait"_s + event = "Activated"_s, "ActivatedWait"_s + event = "ActivatedEdit"_s, @@ -375,8 +344,8 @@ namespace app::home_screen "Activated"_s + sml::on_entry<_> / Activated::entry, "Activated"_s [not Helpers::isAlarmActive] = "Deactivated"_s, "Activated"_s + event/ Helpers::switchToMenu = "Activated"_s, - "Activated"_s + event / Helpers::makeAlarmEditable = "ActivatedEdit"_s, - "Activated"_s + event / Helpers::makeAlarmEditable = "ActivatedEdit"_s, + "Activated"_s + event = "ActivatedEdit"_s, + "Activated"_s + event = "ActivatedEdit"_s, "Activated"_s + event / Helpers::updateTemperature, "Activated"_s + event = "DeactivatedWait"_s, "Activated"_s + event = "AlarmRinging"_s, diff --git a/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp b/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp index ae1e4a2a8d35b79c9bdfde5ae7e7fe0a747754c6..bcbf7df86ffa62beef7de97c27f7f5f2968149eb 100644 --- a/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp +++ b/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.cpp @@ -24,50 +24,6 @@ #include namespace { - using utils::time::Locale; - void increaseHour(struct tm &tm) - { - if (tm.tm_hour >= Locale::max_hour_24H_mode) { - tm.tm_hour = 0; - tm.tm_min = 0; - } - else { - tm.tm_hour++; - tm.tm_min = 0; - } - } - - void decreaseHour(struct tm &tm) - { - if (tm.tm_hour <= Locale::min_hour_24H_mode) { - tm.tm_hour = Locale::max_hour_24H_mode; - tm.tm_min = Locale::max_minutes; - } - else { - tm.tm_hour--; - tm.tm_min = utils::time::Locale::max_minutes; - } - } - - void handleMinuteIncrease(struct tm &tm) - { - if (tm.tm_min >= Locale::max_minutes) { - increaseHour(tm); - } - else { - tm.tm_min++; - } - } - - void handleMinuteDecrease(struct tm &tm) - { - if (tm.tm_min <= 0) { - decreaseHour(tm); - } - else { - tm.tm_min--; - } - } inline constexpr auto snoozeTimerName = "SnoozeTimer"; inline constexpr std::chrono::seconds timerTick{1}; } // namespace @@ -108,20 +64,6 @@ namespace gui } } - void BellHomeScreenWindow::setAlarmTriggered() - { - if (currentLayout) { - currentLayout->setAlarmTriggered(); - } - } - - void BellHomeScreenWindow::setAlarmActive(bool val) - { - if (currentLayout) { - currentLayout->setAlarmActive(val); - } - } - void BellHomeScreenWindow::setViewState(app::home_screen::ViewState state) { if (currentLayout) { @@ -137,20 +79,12 @@ namespace gui } } - void BellHomeScreenWindow::setBottomDescription(const UTF8 &desc) - { - if (currentLayout) { - currentLayout->setBottomDescription(desc); - } - } - - void BellHomeScreenWindow::removeBottomDescription() + void BellHomeScreenWindow::setTextDescription(const UTF8 &desc) { if (currentLayout) { - currentLayout->removeBottomDescription(); + currentLayout->setTextDescription(desc); } } - void BellHomeScreenWindow::setBatteryLevelState(const Store::Battery &batteryContext) { if (currentLayout) { @@ -186,13 +120,6 @@ namespace gui } } - void BellHomeScreenWindow::setAlarmEdit(bool val) - { - if (currentLayout) { - currentLayout->setAlarmEdit(val); - } - } - std::time_t BellHomeScreenWindow::getAlarmTime() const { if (currentLayout) { @@ -210,26 +137,6 @@ namespace gui } } - void BellHomeScreenWindow::incAlarmMinute() - { - if (currentLayout) { - const auto alarmTime = currentLayout->getAlarmTime(); - auto newTime = std::localtime(&alarmTime); - handleMinuteIncrease(*newTime); - currentLayout->setAlarmTime(std::mktime(newTime)); - } - } - - void BellHomeScreenWindow::decAlarmMinute() - { - if (currentLayout) { - const auto alarmTime = currentLayout->getAlarmTime(); - auto newTime = std::localtime(&alarmTime); - handleMinuteDecrease(*newTime); - currentLayout->setAlarmTime(std::mktime(newTime)); - } - } - void BellHomeScreenWindow::setSnoozeTime(std::time_t newTime) { if (currentLayout) { @@ -237,11 +144,6 @@ namespace gui } } - void BellHomeScreenWindow::switchToMenu() - { - application->switchWindow(window::name::bell_main_menu, nullptr); - } - bool BellHomeScreenWindow::onInput(const InputEvent &inputEvent) { if (inputEvent.isShortRelease() || inputEvent.isLongRelease()) { @@ -269,12 +171,6 @@ namespace gui } return true; } - void BellHomeScreenWindow::switchToBatteryStatus() - { - application->switchWindow(gui::BellBatteryStatusWindow::name, - std::make_unique(presenter->getBatteryLvl(), - presenter->isBatteryCharging())); - } bool BellHomeScreenWindow::updateBatteryStatus() { diff --git a/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp b/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp index a336a6f38b4c7236bef1388c1323c867e0de0560..fa8e3858e083dd97eb0a84ee76e0f37aeee76be7 100644 --- a/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp +++ b/products/BellHybrid/apps/application-bell-main/windows/BellHomeScreenWindow.hpp @@ -27,27 +27,18 @@ namespace gui void onBeforeShow(ShowMode mode, SwitchData *data) override; bool onDatabaseMessage(sys::Message *msg) override; - void setAlarmTriggered() override; - void setAlarmActive(bool val) override; - void setAlarmEdit(bool val) override; void setViewState(app::home_screen::ViewState state) 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; void setTemperature(utils::temperature::Temperature newTemp) override; - void setBottomDescription(const UTF8 &desc) override; - void removeBottomDescription() override; + void setTextDescription(const UTF8 &desc) override; void setBatteryLevelState(const Store::Battery &batteryContext) override; void setTime(std::time_t newTime) override; void setTimeFormat(utils::time::Locale::TimeFormat fmt) override; void setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) override; void setSnoozeFormat(utils::time::Locale::TimeFormat fmt) override; - void switchToMenu() override; - void switchToBatteryStatus() override; - bool updateBatteryStatus() override; std::shared_ptr presenter; diff --git a/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp b/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp index 839063ecd1dfed77c04683beef4bbc8ff30f818d..ed702a2c53fcafd585f8ddbd80e8611987de0ddc 100644 --- a/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp +++ b/products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -74,11 +75,12 @@ namespace app }); windowsFactory.attach( - gui::window::name::onBoardingSettingsWindow, [](ApplicationCommon *app, const std::string &name) { + gui::window::name::onBoardingSettingsWindow, [this](ApplicationCommon *app, const std::string &name) { + auto layoutModel = std::make_unique(this); auto temperatureUnitModel = std::make_unique(app); auto timeUnitsProvider = std::make_shared(app); auto presenter = std::make_unique( - timeUnitsProvider, std::move(temperatureUnitModel)); + this, timeUnitsProvider, std::move(temperatureUnitModel), std::move(layoutModel)); return std::make_unique(app, std::move(presenter), name); }); diff --git a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp index 283a5a828671efae082690919689aa0a0931e551..d20a0caf281581975f0438096ea3a6c224d0332d 100644 --- a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +++ b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp @@ -134,11 +134,12 @@ namespace app }); windowsFactory.attach( - gui::window::name::bellSettingsTimeUnits, [](ApplicationCommon *app, const std::string &name) { + gui::window::name::bellSettingsTimeUnits, [this](ApplicationCommon *app, const std::string &name) { + auto layoutModel = std::make_unique(this); auto temperatureUnitModel = std::make_unique(app); auto timeUnitsProvider = std::make_shared(app); auto presenter = std::make_unique( - timeUnitsProvider, std::move(temperatureUnitModel)); + this, timeUnitsProvider, std::move(temperatureUnitModel), std::move(layoutModel)); return std::make_unique(app, std::move(presenter)); }); diff --git a/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/models/TimeUnitsModel.hpp b/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/models/TimeUnitsModel.hpp index 96c30fcb509350e6bf91d33e2329ed0ef0788d7a..c36f1f8417954381b26fbcb4767a2405ae2cfea0 100644 --- a/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/models/TimeUnitsModel.hpp +++ b/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/models/TimeUnitsModel.hpp @@ -43,6 +43,9 @@ namespace app::bell_settings [[nodiscard]] auto getMinimalItemSpaceRequired() const -> unsigned int override; [[nodiscard]] auto getTemperatureUnit() const -> utils::temperature::Temperature::Unit; + + [[nodiscard]] auto getTimeFormat() const -> utils::time::Locale::TimeFormat; + auto setTemperatureUnit(utils::temperature::Temperature::Unit unit) -> void; protected: diff --git a/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/presenter/TimeUnitsPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/presenter/TimeUnitsPresenter.hpp index 29886b7b8c7fcf8978872667e4173f21740741c3..cff6c25d5d500f45763fbe56da8cf5e19146ac79 100644 --- a/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/presenter/TimeUnitsPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/presenter/TimeUnitsPresenter.hpp @@ -10,6 +10,7 @@ namespace app::bell_settings { class AbstractTemperatureUnitModel; + class AbstractLayoutModel; class TimeUnitsWindowContract { @@ -35,8 +36,10 @@ namespace app::bell_settings class TimeUnitsWindowPresenter : public TimeUnitsWindowContract::Presenter { public: - explicit TimeUnitsWindowPresenter(std::shared_ptr pagesProvider, - std::unique_ptr temperatureUnitModel); + explicit TimeUnitsWindowPresenter(app::ApplicationCommon *app, + std::shared_ptr pagesProvider, + std::unique_ptr temperatureUnitModel, + std::unique_ptr layoutModel); auto getPagesProvider() const -> std::shared_ptr override; auto clearData() -> void override; @@ -45,7 +48,9 @@ namespace app::bell_settings auto createData() -> void override; private: + app::ApplicationCommon *app{}; std::shared_ptr pagesProvider; std::unique_ptr temperatureUnitModel; + std::unique_ptr layoutModel; }; } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.cpp index aba244ab4d342aa2cbb95f9a06500b0d0ec68b64..be386cae9e8b74bed77aff7ace400a6cbfba8116 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/TimeUnitsModel.cpp @@ -120,6 +120,11 @@ namespace app::bell_settings #endif } + auto TimeUnitsModel::getTimeFormat() const -> utils::time::Locale::TimeFormat + { + return timeFmtSetListItem->getTimeFmt(); + } + auto TimeUnitsModel::setTemperatureUnit(const utils::temperature::Temperature::Unit unit) -> void { #if CONFIG_ENABLE_TEMP == 1 diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/LayoutWindowPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/LayoutWindowPresenter.cpp index fad1ff3ca6b3925143f624080432c704cca833fe..5c5b4b9b89a34a734aed58607bc8ae8dbaf04138 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/LayoutWindowPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/LayoutWindowPresenter.cpp @@ -71,49 +71,20 @@ namespace app::bell_settings void LayoutWindowPresenter::initLayoutOptions() { - auto layoutsList = gui::homeScreenLayouts(); - auto layoutClassicWithTemp = layoutsList.at("ClassicWithTemp")(); - layoutClassicWithTemp->setAlarmEdit(false); - layoutClassicWithTemp->setAlarmActive(true); - layoutClassicWithTemp->setTime(clockTime); - // layoutClassicWithTemp->setTimeFormat(timeModel->getTimeFormat()); - layoutClassicWithTemp->setAlarmTime(alarmTime); - layoutClassicWithTemp->setBatteryLevelState(batteryState); - layoutClassicWithTemp->setViewState(app::home_screen::ViewState::Activated); - layoutClassicWithTemp->setTemperature(temperature); - - auto layoutClassicWithBattery = layoutsList.at("ClassicWithBattery")(); - layoutClassicWithBattery->setAlarmEdit(false); - layoutClassicWithBattery->setAlarmActive(true); - layoutClassicWithBattery->setTime(clockTime); - // Commented out to remove "AM"/"PM" from time spinner - // layoutClassicWithBattery->setTimeFormat(timeModel->getTimeFormat()); - layoutClassicWithBattery->setAlarmTime(alarmTime); - layoutClassicWithBattery->setBatteryLevelState(batteryState); - layoutClassicWithBattery->setViewState(app::home_screen::ViewState::Activated); - - auto layoutClassicWithAmPm = layoutsList.at("ClassicWithAmPm")(); - layoutClassicWithAmPm->setAlarmEdit(false); - layoutClassicWithAmPm->setAlarmActive(true); - layoutClassicWithAmPm->setTime(clockTime); - // layoutClassicWithAmPm->setTimeFormat(timeModel->getTimeFormat()); - layoutClassicWithAmPm->setAlarmTime(alarmTime); - layoutClassicWithAmPm->setBatteryLevelState(batteryState); - layoutClassicWithAmPm->setViewState(app::home_screen::ViewState::Activated); - - auto layoutClassic = layoutsList.at("Classic")(); - layoutClassic->setAlarmEdit(false); - layoutClassic->setAlarmActive(true); - layoutClassic->setTime(clockTime); - // layoutClassic->setTimeFormat(timeModel->getTimeFormat()); - layoutClassic->setAlarmTime(alarmTime); - layoutClassic->setBatteryLevelState(batteryState); - layoutClassic->setViewState(app::home_screen::ViewState::Activated); - - layoutOptions.push_back({layoutClassicWithTemp->getLayout(), "ClassicWithTemp"}); - layoutOptions.push_back({layoutClassicWithBattery->getLayout(), "ClassicWithBattery"}); - layoutOptions.push_back({layoutClassicWithAmPm->getLayout(), "ClassicWithAmPm"}); - layoutOptions.push_back({layoutClassic->getLayout(), "Classic"}); + auto layoutsList = timeModel->getTimeFormat() == utils::time::Locale::TimeFormat::FormatTime24H + ? gui::factory::getLayoutsFormat24h() + : gui::factory::getLayoutsFormat12h(); + + for (auto &layoutEntry : layoutsList) { + auto layout = layoutEntry.second(); + layout->setViewState(app::home_screen::ViewState::Activated); + layout->setTimeFormat(timeModel->getTimeFormat()); + layout->setTime(clockTime); + layout->setAlarmTime(alarmTime); + layout->setBatteryLevelState(batteryState); + layout->setTemperature(temperature); + layoutOptions.push_back({layout->getLayout(), layoutEntry.first}); + } } } // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.cpp index 80704a9ad087fb7b793407781280f1fee95b5076..e80e8d29810ca50346cce994347503bf1b82e313 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/TimeUnitsPresenter.cpp @@ -4,12 +4,21 @@ #include "models/TemperatureUnitModel.hpp" #include "presenter/TimeUnitsPresenter.hpp" +#include +#include + +#include +#include + namespace app::bell_settings { TimeUnitsWindowPresenter::TimeUnitsWindowPresenter( + app::ApplicationCommon *app, std::shared_ptr pagesProvider, - std::unique_ptr temperatureUnitModel) - : pagesProvider(std::move(pagesProvider)), temperatureUnitModel{std::move(temperatureUnitModel)} + std::unique_ptr temperatureUnitModel, + std::unique_ptr layoutModel) + : app{app}, pagesProvider(std::move(pagesProvider)), temperatureUnitModel{std::move(temperatureUnitModel)}, + layoutModel{std::move(layoutModel)} {} auto TimeUnitsWindowPresenter::getPagesProvider() const -> std::shared_ptr @@ -26,6 +35,29 @@ namespace app::bell_settings { pagesProvider->saveData(); temperatureUnitModel->set(pagesProvider->getTemperatureUnit()); + auto timeFormat = pagesProvider->getTimeFormat(); + auto currentLayout = layoutModel->getValue(); + + auto isCurrentLayout12h = true; + if (timeFormat == utils::time::Locale::TimeFormat::FormatTime24H) { + for (const auto &layout : gui::factory::getLayoutsFormat24h()) { + if (layout.first == currentLayout) { + isCurrentLayout12h = false; + break; + } + } + if (isCurrentLayout12h) { + std::string fallbackLayout; + if (currentLayout.rfind("Classic", 0) == 0) { + fallbackLayout = "Classic"; + } + else if (currentLayout.rfind("Vertical", 0) == 0) { + fallbackLayout = "VerticalSimple"; + } + auto layoutChangeRequest = std::make_shared(fallbackLayout); + app->bus.sendUnicast(layoutChangeRequest, service::name::appmgr); + } + } } auto TimeUnitsWindowPresenter::loadData() -> void diff --git a/products/BellHybrid/apps/common/CMakeLists.txt b/products/BellHybrid/apps/common/CMakeLists.txt index 09990efd952777db546172d6242729a022a3a3d1..7e3f503267b162fa63ad570a7a80c74f20df4873 100644 --- a/products/BellHybrid/apps/common/CMakeLists.txt +++ b/products/BellHybrid/apps/common/CMakeLists.txt @@ -34,12 +34,15 @@ target_sources(application-bell-common src/popups/BellTurnOffOptionWindow.cpp src/popups/BellRebootWindow.cpp src/popups/presenter/AlarmActivatedPresenter.cpp + src/widgets/AlarmIcon.cpp src/widgets/ListItems.cpp src/widgets/BellBattery.cpp src/widgets/BellStatusClock.cpp src/widgets/DuoHBox.cpp src/widgets/ProgressTimerWithSnoozeTimer.cpp src/widgets/SnoozeTimer.cpp + src/widgets/LayoutVertical.cpp + src/widgets/TimeSetSpinnerVertical.cpp src/options/BellOptionWindow.cpp src/options/BellShortOptionWindow.cpp @@ -51,6 +54,9 @@ target_sources(application-bell-common src/layouts/HomeScreenLayoutClassicWithAmPm.cpp src/layouts/HomeScreenLayoutClassicWithBattery.cpp src/layouts/HomeScreenLayoutClassicWithTemp.cpp + src/layouts/HomeScreenLayoutVertical.cpp + src/layouts/HomeScreenLayoutVerticalSimple.cpp + src/layouts/HomeScreenLayoutVerticalWithAmPm.cpp PUBLIC include/common/BellListItemProvider.hpp @@ -83,6 +89,7 @@ target_sources(application-bell-common include/common/popups/BedtimeNotificationWindow.hpp include/common/popups/BellTurnOffOptionWindow.hpp include/common/popups/BellRebootWindow.hpp + include/common/widgets/AlarmIcon.hpp include/common/widgets/BellBattery.hpp include/common/widgets/BellSideListItemWithCallbacks.hpp include/common/widgets/BellStatusClock.hpp @@ -90,6 +97,8 @@ target_sources(application-bell-common include/common/widgets/ProgressTimerWithSnoozeTimer.hpp include/common/widgets/SnoozeTimer.hpp include/common/widgets/ListItems.hpp + include/common/widgets/LayoutVertical.hpp + include/common/widgets/TimeSetSpinnerVertical.hpp include/common/options/BellOptionWindow.hpp include/common/options/BellShortOptionWindow.hpp include/common/options/OptionBellMenu.hpp @@ -99,6 +108,9 @@ target_sources(application-bell-common include/common/layouts/HomeScreenLayoutClassicWithAmPm.hpp include/common/layouts/HomeScreenLayoutClassicWithBattery.hpp include/common/layouts/HomeScreenLayoutClassicWithTemp.hpp + include/common/layouts/HomeScreenLayoutVertical.hpp + include/common/layouts/HomeScreenLayoutVerticalSimple.hpp + include/common/layouts/HomeScreenLayoutVerticalWithAmPm.hpp ) target_link_libraries(application-bell-common diff --git a/products/BellHybrid/apps/common/include/common/layouts/BaseHomeScreenLayoutProvider.hpp b/products/BellHybrid/apps/common/include/common/layouts/BaseHomeScreenLayoutProvider.hpp index 5c13f45081d2af78af37ecd73b6fb60406b35692..caaa435fe887027e59073407366c007da2d681ec 100644 --- a/products/BellHybrid/apps/common/include/common/layouts/BaseHomeScreenLayoutProvider.hpp +++ b/products/BellHybrid/apps/common/include/common/layouts/BaseHomeScreenLayoutProvider.hpp @@ -46,22 +46,19 @@ namespace gui return name; } - virtual void setAlarmTriggered() = 0; - virtual void setAlarmActive(bool val) = 0; virtual void setViewState(app::home_screen::ViewState state) = 0; - virtual void setTemperature(utils::temperature::Temperature newTemp) = 0; - virtual void setBottomDescription(const UTF8 &desc) = 0; - virtual void removeBottomDescription() = 0; + virtual void setTextDescription(const UTF8 &desc) = 0; virtual void setBatteryLevelState(const Store::Battery &batteryContext) = 0; virtual void setTime(std::time_t newTime) = 0; - virtual void setTimeFormat(utils::time::Locale::TimeFormat fmt) = 0; virtual void setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) = 0; - virtual void setSnoozeFormat(utils::time::Locale::TimeFormat fmt) = 0; - virtual void setAlarmEdit(bool val) = 0; virtual std::time_t getAlarmTime() const = 0; virtual void setAlarmTime(std::time_t newTime) = 0; - virtual void setSnoozeTime(std::time_t newTime) = 0; virtual SnoozeTimer *getSnoozeTimer() = 0; virtual Item *getLayout() = 0; + + virtual void setTemperature(utils::temperature::Temperature newTemp){}; + virtual void setTimeFormat(utils::time::Locale::TimeFormat fmt){}; + virtual void setSnoozeFormat(utils::time::Locale::TimeFormat fmt){}; + virtual void setSnoozeTime(std::time_t newTime){}; }; }; // namespace gui diff --git a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutClassic.hpp b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutClassic.hpp index 4164d827c6213481d3125f4d17720ad9307d01ae..96ff778157d14cf49adaa41bb7da659658e2c15d 100644 --- a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutClassic.hpp +++ b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutClassic.hpp @@ -51,17 +51,12 @@ namespace gui HomeScreenLayoutClassic(std::string name); virtual auto setViewState(app::home_screen::ViewState state) -> void override; - virtual auto setTemperature(utils::temperature::Temperature newTemp) -> void override; virtual auto setTime(std::time_t newTime) -> void override; - auto setAlarmTriggered() -> void override; - auto setAlarmActive(bool val) -> void override; - auto setBottomDescription(const UTF8 &desc) -> void override; - auto removeBottomDescription() -> void override; + auto setTextDescription(const UTF8 &desc) -> void override; auto setBatteryLevelState(const Store::Battery &batteryContext) -> void override; auto setTimeFormat(utils::time::Locale::TimeFormat fmt) -> void override; auto setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) -> void override; auto setSnoozeFormat(utils::time::Locale::TimeFormat fmt) -> void override; - auto setAlarmEdit(bool val) -> void override; auto getAlarmTime() const -> std::time_t override; auto setAlarmTime(std::time_t newTime) -> void override; auto setSnoozeTime(std::time_t newTime) -> void override; @@ -73,6 +68,7 @@ namespace gui auto setHeaderViewMode(HeaderViewMode mode) -> void; virtual auto buildInterface() -> void; virtual bool isBatteryVisibilityAllowed(const Store::Battery &batteryContext); + auto removeTextDescription() -> void; TimeSetFmtSpinner *time{}; DuoHBox *statusBox{}; diff --git a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVertical.hpp b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVertical.hpp new file mode 100644 index 0000000000000000000000000000000000000000..918ef8987b29094469e842d05c56a2644b572e7c --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVertical.hpp @@ -0,0 +1,60 @@ +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include "BaseHomeScreenLayoutProvider.hpp" +#include "widgets/LayoutVertical.hpp" + +#include +#include + +namespace gui +{ + + class BellBaseLayout; + class TextFixedSize; + class AlarmIcon; + class AlarmSetSpinner; + class TimeSetSpinnerVertical; + class TimeSetFmtSpinner; + class SnoozeTimer; + class BellBattery; + class DuoHBox; + class Icon; + class Item; + + namespace battery_vertical + { + constexpr auto chargingLevelHideBot = 100; + constexpr auto dischargingLevelShowTop = 20; + }; // namespace battery_vertical + + enum class ScreenMode + { + Main, + AlarmEdit, + AlarmActivatedDeactivated, + }; + + class HomeScreenLayoutVertical : public BaseHomeScreenLayoutProvider, public LayoutVertical + { + public: + HomeScreenLayoutVertical(std::string name); + + virtual auto setViewState(app::home_screen::ViewState state) -> void override; + virtual auto setTime(std::time_t newTime) -> void override; + auto setTextDescription(const UTF8 &desc) -> void override; + auto setBatteryLevelState(const Store::Battery &batteryContext) -> void override; + auto setAlarmTimeFormat(utils::time::Locale::TimeFormat fmt) -> void override; + auto getAlarmTime() const -> std::time_t override; + auto setAlarmTime(std::time_t newTime) -> void override; + + auto getSnoozeTimer() -> SnoozeTimer * override; + auto getLayout() -> Item * override; + + protected: + auto setScreenMode(ScreenMode mode) -> void; + virtual bool isBatteryVisibilityAllowed(const Store::Battery &batteryContext); + }; +}; // namespace gui diff --git a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalSimple.hpp b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalSimple.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4feea0e31ef88b7f2dc699f908334cc327a82f05 --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalSimple.hpp @@ -0,0 +1,16 @@ +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include "HomeScreenLayoutVertical.hpp" + +namespace gui +{ + + class HomeScreenLayoutVerticalSimple : public HomeScreenLayoutVertical + { + public: + HomeScreenLayoutVerticalSimple(std::string name); + }; +}; // namespace gui diff --git a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalWithAmPm.hpp b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalWithAmPm.hpp new file mode 100644 index 0000000000000000000000000000000000000000..298fd218d2fca3de3d1338f8d1e879f93a581706 --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayoutVerticalWithAmPm.hpp @@ -0,0 +1,27 @@ +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include "HomeScreenLayoutVertical.hpp" + +namespace style::homescreen_vertical_ampm +{ + constexpr inline auto alarm_margin_top = 83U; + constexpr inline auto battery_margin_bot = 68U; + constexpr inline auto fmt_margin_bot = 77U; +} // namespace style::homescreen_vertical_ampm + +namespace gui +{ + + class HomeScreenLayoutVerticalWithAmPm : public HomeScreenLayoutVertical + { + public: + HomeScreenLayoutVerticalWithAmPm(std::string name); + + auto setTime(std::time_t newTime) -> void override; + + TextFixedSize *fmt{}; + }; +}; // namespace gui diff --git a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayouts.hpp b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayouts.hpp index 14f6a46e3f89f67d7193c8061227ce273160f2e9..fed09142296b13b0955b5ae67e50a9d22caf08f2 100644 --- a/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayouts.hpp +++ b/products/BellHybrid/apps/common/include/common/layouts/HomeScreenLayouts.hpp @@ -10,8 +10,13 @@ namespace gui { class BaseHomeScreenLayoutProvider; - using LayoutGenerator = std::function; - std::map homeScreenLayouts(); -}; // namespace gui + namespace factory + { + std::map getLayoutsFormat24h(); + std::map getLayoutsFormat12h(); + + std::map getAllLayouts(); + } // namespace factory +}; // namespace gui diff --git a/products/BellHybrid/apps/common/include/common/widgets/AlarmIcon.hpp b/products/BellHybrid/apps/common/include/common/widgets/AlarmIcon.hpp new file mode 100644 index 0000000000000000000000000000000000000000..007c66d309d9b061183ce7ef73806aae145eb02a --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/widgets/AlarmIcon.hpp @@ -0,0 +1,29 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include +#include + +namespace gui +{ + class ImageBox; + + class AlarmIcon : public ImageBox + { + public: + enum class Status + { + UNKNOWN, + RINGING, + ACTIVATED, + DEACTIVATED, + SNOOZE + }; + + explicit AlarmIcon(Item *parent = nullptr, Position x = 0U, Position y = 0U, Length w = 0U, Length h = 0U); + + auto setStatus(Status status) noexcept -> void; + }; +} /* namespace gui */ diff --git a/products/BellHybrid/apps/common/include/common/widgets/BellBattery.hpp b/products/BellHybrid/apps/common/include/common/widgets/BellBattery.hpp index 5cc5e4538b33dade9c0b969a70bed2b37a9be733..031e85476439dc67749cde61d3e701268cf40f55 100644 --- a/products/BellHybrid/apps/common/include/common/widgets/BellBattery.hpp +++ b/products/BellHybrid/apps/common/include/common/widgets/BellBattery.hpp @@ -30,8 +30,8 @@ namespace gui enum class BatteryPercentMode { - Dynamic, - Static, + Show, // Show always + Hide // Never show percentage }; class BellBattery : public gui::HBox @@ -43,7 +43,7 @@ namespace gui std::uint32_t getLevel(); private: - BatteryPercentMode batteryPercentMode = BatteryPercentMode::Dynamic; + BatteryPercentMode batteryPercentMode = BatteryPercentMode::Show; TextFixedSize *percentText; Image *img; }; diff --git a/products/BellHybrid/apps/common/include/common/widgets/LayoutVertical.hpp b/products/BellHybrid/apps/common/include/common/widgets/LayoutVertical.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4211f5b7fabdae478521f40811f882c4bdc78ea5 --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/widgets/LayoutVertical.hpp @@ -0,0 +1,50 @@ +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include "layouts/BaseHomeScreenLayoutProvider.hpp" + +#include + +namespace style::homescreen_vertical +{ + constexpr inline auto side_box_w = 180U; + constexpr inline auto center_box_w = 240U; +} // namespace style::homescreen_vertical + +namespace gui +{ + class BellBaseLayout; + class TextFixedSize; + class AlarmIcon; + class AlarmSetSpinner; + class TimeSetSpinnerVertical; + class TimeSetFmtSpinner; + class SnoozeTimer; + class BellBattery; + class DuoHBox; + class Icon; + + class LayoutVertical : public HBox + { + public: + LayoutVertical( + Item *parent, const uint32_t &x = 0, const uint32_t &y = 0, const uint32_t &w = 0, const uint32_t &h = 0); + + HBox *mainScreen{}; + BellBaseLayout *setAlarmScreen{}; + Icon *alarmActivatedDeactivatedScreen{}; + AlarmIcon *alarmMainIcon{}; + BellBattery *battery{}; + + // Main Screen + TimeSetSpinnerVertical *time{}; + VBox *leftBox{}; + VBox *rightBox{}; + + // Set Alarm Screen + AlarmIcon *alarmTopIcon{}; + TimeSetFmtSpinner *setAlarmFmtSpinner{}; + }; +}; // namespace gui diff --git a/products/BellHybrid/apps/common/include/common/widgets/TimeSetSpinnerVertical.hpp b/products/BellHybrid/apps/common/include/common/widgets/TimeSetSpinnerVertical.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f85035ae9dd6313cb18b129b2a804296769ff46e --- /dev/null +++ b/products/BellHybrid/apps/common/include/common/widgets/TimeSetSpinnerVertical.hpp @@ -0,0 +1,77 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include +#include +#include +#include