~aleteoryx/muditaos

a8884a87a9f1155652778978d89d2c5933889439 — Mateusz Piesta 4 years ago 88e4ccf
[BH-1185] Proper handling of snooze on/off

Fixed bug causing snooze on/off settings not being
handled properly.

Snooze indicator update.
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