~aleteoryx/muditaos

f361257528674efa640f07170c61638c419fc6bc — Dawid Wojtas 1 year, 8 months ago 40afdb7
[BH-1933] Perform a deep refresh in settings

After passing to the next menu from list with labels
the deep refresh must be performed to avoid ghosting
on the screen.
17 files changed, 82 insertions(+), 28 deletions(-)

M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp
M products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp
M products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp
M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp
M products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp
M products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp
M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp
M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp
M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp
M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp
M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp
M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp
M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp => products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +6 -4
@@ 137,7 137,7 @@ namespace app
                                                                                                 std::move(songsModel));
                auto audioErrorModel = std::make_unique<bell_settings::AudioErrorModel>();
                auto presenter       = std::make_unique<bell_settings::SettingsPresenter>(
                    std::move(provider), bedtimeModel, *audioModel, std::move(audioErrorModel));
                    app, std::move(provider), bedtimeModel, *audioModel, std::move(audioErrorModel));
                return std::make_unique<gui::BellSettingsBedtimeToneWindow>(app, std::move(presenter));
            });



@@ 192,7 192,8 @@ namespace app
                auto frontlightModel = std::make_unique<bell_settings::FrontlightModel>(app);
                auto audioErrorModel = std::make_unique<bell_settings::AudioErrorModel>();
                auto presenter =
                    std::make_unique<bell_settings::PrewakeUpWindowPresenter>(std::move(provider),
                    std::make_unique<bell_settings::PrewakeUpWindowPresenter>(app,
                                                                              std::move(provider),
                                                                              std::move(prewakeUpSettingsModel),
                                                                              *audioModel,
                                                                              std::move(frontlightModel),


@@ 230,7 231,7 @@ namespace app
                auto audioErrorModel  = std::make_unique<bell_settings::AudioErrorModel>();

                auto presenter = std::make_unique<bell_settings::SnoozePresenter>(
                    std::move(provider), std::move(snoozeSettingsModel), *audioModel, std::move(audioErrorModel));
                    app, std::move(provider), std::move(snoozeSettingsModel), *audioModel, std::move(audioErrorModel));
                return std::make_unique<gui::BellSettingsAlarmSettingsSnoozeWindow>(app, std::move(presenter));
            });
        windowsFactory.attach(


@@ 263,7 264,8 @@ namespace app
                auto provider  = std::make_unique<bell_settings::AlarmSettingsListItemProvider>(*alarmSettingsModel,
                                                                                               std::move(songsModel));
                auto audioErrorModel = std::make_unique<bell_settings::AudioErrorModel>();
                auto presenter       = std::make_unique<bell_settings::AlarmSettingsPresenter>(std::move(provider),
                auto presenter       = std::make_unique<bell_settings::AlarmSettingsPresenter>(app,
                                                                                         std::move(provider),
                                                                                         std::move(alarmSettingsModel),
                                                                                         *audioModel,
                                                                                         std::move(frontlightModel),

M products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp +8 -4
@@ 5,12 5,13 @@

namespace app::bell_settings
{
    SettingsPresenter::SettingsPresenter(std::unique_ptr<BedtimeSettingsListItemProvider> &&provider,
    SettingsPresenter::SettingsPresenter(ApplicationCommon *app,
                                         std::unique_ptr<BedtimeSettingsListItemProvider> &&provider,
                                         std::shared_ptr<AbstractBedtimeModel> model,
                                         AbstractAudioModel &audioModel,
                                         std::unique_ptr<AudioErrorModel> &&audioErrorModel)
        : provider{std::move(provider)}, model{std::move(model)}, audioModel{audioModel}, audioErrorModel{std::move(
                                                                                              audioErrorModel)}
        : app{app}, provider{std::move(provider)}, model{std::move(model)}, audioModel{audioModel},
          audioErrorModel{std::move(audioErrorModel)}
    {
        auto playSound = [this](const UTF8 &val) {
            auto onStartCallback = [this, val](audio::RetCode retCode) {


@@ 38,7 39,10 @@ namespace app::bell_settings
        this->provider->onToneChange = playSound;
        this->provider->onToneProceed = [this](const auto &path) { return validatePath(path); };

        this->provider->onVolumeEnter  = playSound;
        this->provider->onVolumeEnter = [this, playSound](const auto &val) {
            getView()->deepRefresh();
            playSound(val);
        };
        this->provider->onVolumeExit   = [this](const auto &) { this->stopSound(); };
        this->provider->onVolumeChange = [this, playSound](const auto &val) {
            this->audioModel.setVolume(

M products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp +4 -1
@@ 26,6 26,7 @@ namespace app::bell_settings
          public:
            virtual ~View() noexcept                 = default;
            virtual auto exit() -> void              = 0;
            virtual auto deepRefresh() -> void       = 0;
            virtual auto handleError() -> void       = 0;
            virtual auto handleDeletedFile() -> void = 0;
        };


@@ 45,7 46,8 @@ namespace app::bell_settings
    class SettingsPresenter : public BedtimeSettingsWindowContract::Presenter
    {
      public:
        SettingsPresenter(std::unique_ptr<BedtimeSettingsListItemProvider> &&provider,
        SettingsPresenter(ApplicationCommon *app,
                          std::unique_ptr<BedtimeSettingsListItemProvider> &&provider,
                          std::shared_ptr<AbstractBedtimeModel> model,
                          AbstractAudioModel &audioModel,
                          std::unique_ptr<AudioErrorModel> &&audioErrorModel);


@@ 62,6 64,7 @@ namespace app::bell_settings
        auto showAudioError(gui::AudioErrorType errorType) const -> void;
        auto validatePath(const UTF8 &path) const -> bool;

        ApplicationCommon *app;
        std::shared_ptr<BedtimeSettingsListItemProvider> provider;
        std::shared_ptr<AbstractBedtimeModel> model;
        AbstractAudioModel &audioModel;

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp +10 -6
@@ 6,12 6,13 @@

namespace app::bell_settings
{
    AlarmSettingsPresenter::AlarmSettingsPresenter(std::unique_ptr<AlarmSettingsListItemProvider> &&provider,
    AlarmSettingsPresenter::AlarmSettingsPresenter(ApplicationCommon *app,
                                                   std::unique_ptr<AlarmSettingsListItemProvider> &&provider,
                                                   std::unique_ptr<AbstractAlarmSettingsModel> &&settingsModel,
                                                   AbstractAudioModel &audioModel,
                                                   std::unique_ptr<AbstractFrontlightModel> &&frontlight,
                                                   std::unique_ptr<AudioErrorModel> &&audioErrorModel)
        : provider{std::move(provider)}, settingsModel{std::move(settingsModel)}, audioModel{audioModel},
        : app{app}, provider{std::move(provider)}, settingsModel{std::move(settingsModel)}, audioModel{audioModel},
          frontlight{std::move(frontlight)}, audioErrorModel{std::move(audioErrorModel)}
    {



@@ 37,12 38,15 @@ namespace app::bell_settings

        this->provider->onExit = [this]() { getView()->exit(); };

        this->provider->onToneEnter  = playSound;
        this->provider->onToneExit   = [this](const auto &) { stopSound(); };
        this->provider->onToneChange = playSound;
        this->provider->onToneEnter   = playSound;
        this->provider->onToneExit    = [this](const auto &) { stopSound(); };
        this->provider->onToneChange  = playSound;
        this->provider->onToneProceed = [this](const auto &path) { return validatePath(path); };

        this->provider->onVolumeEnter  = playSound;
        this->provider->onVolumeEnter = [this, playSound](const auto &val) {
            getView()->deepRefresh();
            playSound(val);
        };
        this->provider->onVolumeExit   = [this](const auto &) { stopSound(); };
        this->provider->onVolumeChange = [this, playSound](const auto &val) {
            this->audioModel.setVolume(

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp +7 -4
@@ 28,9 28,10 @@ namespace app::bell_settings
        {
          public:
            virtual ~View() noexcept = default;
            virtual void exit()      = 0;
            virtual void handleError()       = 0;
            virtual void handleDeletedFile() = 0;
            virtual auto exit() -> void              = 0;
            virtual auto deepRefresh() -> void       = 0;
            virtual auto handleError() -> void       = 0;
            virtual auto handleDeletedFile() -> void = 0;
        };

        class Presenter : public BasePresenter<View>


@@ 49,7 50,8 @@ namespace app::bell_settings
    class AlarmSettingsPresenter : public AlarmSettingsWindowContract::Presenter
    {
      public:
        AlarmSettingsPresenter(std::unique_ptr<AlarmSettingsListItemProvider> &&provider,
        AlarmSettingsPresenter(ApplicationCommon *app,
                               std::unique_ptr<AlarmSettingsListItemProvider> &&provider,
                               std::unique_ptr<AbstractAlarmSettingsModel> &&settingsModel,
                               AbstractAudioModel &audioModel,
                               std::unique_ptr<AbstractFrontlightModel> &&frontlight,


@@ 68,6 70,7 @@ namespace app::bell_settings
        auto showAudioError(gui::AudioErrorType errorType) const -> void;
        auto validatePath(const UTF8 &path) const -> bool;

        ApplicationCommon *app;
        std::shared_ptr<AlarmSettingsListItemProvider> provider;
        std::unique_ptr<AbstractAlarmSettingsModel> settingsModel;
        AbstractAudioModel &audioModel;

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp +7 -3
@@ 6,12 6,13 @@

namespace app::bell_settings
{
    PrewakeUpWindowPresenter::PrewakeUpWindowPresenter(std::unique_ptr<PrewakeUpListItemProvider> &&provider,
    PrewakeUpWindowPresenter::PrewakeUpWindowPresenter(ApplicationCommon *app,
                                                       std::unique_ptr<PrewakeUpListItemProvider> &&provider,
                                                       std::unique_ptr<AbstractPrewakeUpSettingsModel> &&model,
                                                       AbstractAudioModel &audioModel,
                                                       std::unique_ptr<AbstractFrontlightModel> &&frontlight,
                                                       std::unique_ptr<AudioErrorModel> &&audioErrorModel)
        : provider{std::move(provider)}, model{std::move(model)}, audioModel{audioModel},
        : app{app}, provider{std::move(provider)}, model{std::move(model)}, audioModel{audioModel},
          frontlight{std::move(frontlight)}, audioErrorModel{std::move(audioErrorModel)}
    {
        auto playSound = [this](const UTF8 &val) {


@@ 41,7 42,10 @@ namespace app::bell_settings
        this->provider->onToneChange = playSound;
        this->provider->onToneProceed = [this](const auto &path) { return validatePath(path); };

        this->provider->onVolumeEnter  = playSound;
        this->provider->onVolumeEnter = [this, playSound](const auto &val) {
            getView()->deepRefresh();
            playSound(val);
        };
        this->provider->onVolumeExit   = [this](const auto &) { stopSound(); };
        this->provider->onVolumeChange = [this, playSound](const auto &val) {
            this->audioModel.setVolume(

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp +4 -1
@@ 28,6 28,7 @@ namespace app::bell_settings
          public:
            virtual ~View() noexcept                 = default;
            virtual auto exit() -> void              = 0;
            virtual auto deepRefresh() -> void       = 0;
            virtual auto handleError() -> void       = 0;
            virtual auto handleDeletedFile() -> void = 0;
        };


@@ 47,7 48,8 @@ namespace app::bell_settings
    class PrewakeUpWindowPresenter : public PrewakeUpWindowContract::Presenter
    {
      public:
        PrewakeUpWindowPresenter(std::unique_ptr<PrewakeUpListItemProvider> &&provider,
        PrewakeUpWindowPresenter(ApplicationCommon *app,
                                 std::unique_ptr<PrewakeUpListItemProvider> &&provider,
                                 std::unique_ptr<AbstractPrewakeUpSettingsModel> &&model,
                                 AbstractAudioModel &audioModel,
                                 std::unique_ptr<AbstractFrontlightModel> &&frontlight,


@@ 65,6 67,7 @@ namespace app::bell_settings
        auto showAudioError(gui::AudioErrorType errorType) const -> void;
        auto validatePath(const UTF8 &path) const -> bool;

        ApplicationCommon *app;
        std::shared_ptr<PrewakeUpListItemProvider> provider;
        std::unique_ptr<AbstractPrewakeUpSettingsModel> model;
        AbstractAudioModel &audioModel;

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp +8 -4
@@ 6,12 6,13 @@

namespace app::bell_settings
{
    SnoozePresenter::SnoozePresenter(std::unique_ptr<SnoozeListItemProvider> &&provider,
    SnoozePresenter::SnoozePresenter(ApplicationCommon *app,
                                     std::unique_ptr<SnoozeListItemProvider> &&provider,
                                     std::unique_ptr<AbstractSnoozeSettingsModel> &&snoozeSettingsModel,
                                     AbstractAudioModel &audioModel,
                                     std::unique_ptr<AudioErrorModel> &&audioErrorModel)
        : provider{std::move(provider)}, snoozeSettingsModel{std::move(snoozeSettingsModel)}, audioModel{audioModel},
          audioErrorModel{std::move(audioErrorModel)}
        : app{app}, provider{std::move(provider)}, snoozeSettingsModel{std::move(snoozeSettingsModel)},
          audioModel{audioModel}, audioErrorModel{std::move(audioErrorModel)}
    {
        auto playSound = [this](const UTF8 &val) {
            auto onStartCallback = [this, val](audio::RetCode retCode) {


@@ 40,7 41,10 @@ namespace app::bell_settings
        this->provider->onToneChange = playSound;
        this->provider->onToneProceed = [this](const auto &path) { return validatePath(path); };

        this->provider->onVolumeEnter  = playSound;
        this->provider->onVolumeEnter = [this, playSound](const auto &val) {
            getView()->deepRefresh();
            playSound(val);
        };
        this->provider->onVolumeExit   = [this](const auto &) { stopSound(); };
        this->provider->onVolumeChange = [this, playSound](const auto &val) {
            this->audioModel.setVolume(

M products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp +4 -1
@@ 24,6 24,7 @@ namespace app::bell_settings
      public:
        virtual ~View() noexcept                 = default;
        virtual auto exit() -> void              = 0;
        virtual auto deepRefresh() -> void       = 0;
        virtual auto handleError() -> void       = 0;
        virtual auto handleDeletedFile() -> void = 0;
    };


@@ 42,7 43,8 @@ namespace app::bell_settings
    class SnoozePresenter : public AbstractSnoozePresenter
    {
      public:
        SnoozePresenter(std::unique_ptr<SnoozeListItemProvider> &&provider,
        SnoozePresenter(ApplicationCommon *app,
                        std::unique_ptr<SnoozeListItemProvider> &&provider,
                        std::unique_ptr<AbstractSnoozeSettingsModel> &&snoozeSettingsModel,
                        AbstractAudioModel &audioModel,
                        std::unique_ptr<AudioErrorModel> &&audioErrorModel);


@@ 58,6 60,7 @@ namespace app::bell_settings
        auto showAudioError(gui::AudioErrorType errorType) const -> void;
        auto validatePath(const UTF8 &path) const -> bool;

        ApplicationCommon *app;
        std::shared_ptr<SnoozeListItemProvider> provider;
        std::unique_ptr<AbstractSnoozeSettingsModel> snoozeSettingsModel;
        AbstractAudioModel &audioModel;

M products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp +5 -0
@@ 72,6 72,11 @@ namespace gui
            BellFinishedWindowData::Factory::create("circle_success_big", gui::name::window::main_window));
    }

    void BellSettingsBedtimeToneWindow::deepRefresh()
    {
        getApplication()->render(gui::RefreshModes::GUI_REFRESH_DEEP);
    }

    void BellSettingsBedtimeToneWindow::onClose(CloseReason reason)
    {
        if (reason != CloseReason::Popup) {

M products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp +1 -0
@@ 25,6 25,7 @@ namespace gui
        bool onInput(const InputEvent &inputEvent) override;
        void rebuild() override;
        void exit() override;
        void deepRefresh() override;
        void handleError() override;
        void handleDeletedFile() override;


M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp +5 -0
@@ 77,6 77,11 @@ namespace gui
            BellFinishedWindowData::Factory::create("circle_success_big", BellSettingsAlarmSettingsMenuWindow::name));
    }

    void BellSettingsAlarmSettingsSnoozeWindow::deepRefresh()
    {
        getApplication()->render(gui::RefreshModes::GUI_REFRESH_DEEP);
    }

    void BellSettingsAlarmSettingsSnoozeWindow::onClose(Window::CloseReason reason)
    {
        if (reason != CloseReason::Popup) {

M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp +1 -0
@@ 25,6 25,7 @@ namespace gui
        void onClose(CloseReason reason) override;
        void rebuild() override;
        void exit() override;
        void deepRefresh() override;
        void handleError() override;
        void handleDeletedFile() override;


M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp +5 -0
@@ 70,6 70,11 @@ namespace gui
            BellFinishedWindowData::Factory::create("circle_success_big", BellSettingsAlarmSettingsMenuWindow::name));
    }

    void BellSettingsAlarmSettingsWindow::deepRefresh()
    {
        getApplication()->render(gui::RefreshModes::GUI_REFRESH_DEEP);
    }

    void BellSettingsAlarmSettingsWindow::onClose(CloseReason reason)
    {
        if (reason != CloseReason::Popup) {

M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp +1 -0
@@ 27,6 27,7 @@ namespace gui
        bool onInput(const InputEvent &inputEvent) override;
        void rebuild() override;
        void exit() override;
        void deepRefresh() override;
        void handleError() override;
        void handleDeletedFile() override;


M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp +5 -0
@@ 74,6 74,11 @@ namespace gui
            BellFinishedWindowData::Factory::create("circle_success_big", BellSettingsAlarmSettingsMenuWindow::name));
    }

    void BellSettingsPrewakeUpWindow::deepRefresh()
    {
        getApplication()->render(gui::RefreshModes::GUI_REFRESH_DEEP);
    }

    void BellSettingsPrewakeUpWindow::onClose(CloseReason reason)
    {
        if (reason != CloseReason::Popup) {

M products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp +1 -0
@@ 26,6 26,7 @@ namespace gui
        bool onInput(const InputEvent &inputEvent) override;
        void rebuild() override;
        void exit() override;
        void deepRefresh() override;
        void handleError() override;
        void handleDeletedFile() override;