From f361257528674efa640f07170c61638c419fc6bc Mon Sep 17 00:00:00 2001 From: Dawid Wojtas Date: Thu, 4 Apr 2024 13:39:48 +0200 Subject: [PATCH] [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. --- .../ApplicationBellSettings.cpp | 10 ++++++---- .../presenter/BedtimeSettingsPresenter.cpp | 12 ++++++++---- .../presenter/BedtimeSettingsPresenter.hpp | 5 ++++- .../alarm_settings/AlarmSettingsPresenter.cpp | 16 ++++++++++------ .../alarm_settings/AlarmSettingsPresenter.hpp | 11 +++++++---- .../alarm_settings/PrewakeUpPresenter.cpp | 10 +++++++--- .../alarm_settings/PrewakeUpPresenter.hpp | 5 ++++- .../presenter/alarm_settings/SnoozePresenter.cpp | 12 ++++++++---- .../presenter/alarm_settings/SnoozePresenter.hpp | 5 ++++- .../windows/BellSettingsBedtimeToneWindow.cpp | 5 +++++ .../windows/BellSettingsBedtimeToneWindow.hpp | 1 + .../BellSettingsAlarmSettingsSnoozeWindow.cpp | 5 +++++ .../BellSettingsAlarmSettingsSnoozeWindow.hpp | 1 + .../BellSettingsAlarmSettingsWindow.cpp | 5 +++++ .../BellSettingsAlarmSettingsWindow.hpp | 1 + .../BellSettingsPrewakeUpWindow.cpp | 5 +++++ .../BellSettingsPrewakeUpWindow.hpp | 1 + 17 files changed, 82 insertions(+), 28 deletions(-) diff --git a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp index da65ea109..7c8745a0b 100644 --- a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +++ b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp @@ -137,7 +137,7 @@ namespace app std::move(songsModel)); auto audioErrorModel = std::make_unique(); auto presenter = std::make_unique( - std::move(provider), bedtimeModel, *audioModel, std::move(audioErrorModel)); + app, std::move(provider), bedtimeModel, *audioModel, std::move(audioErrorModel)); return std::make_unique(app, std::move(presenter)); }); @@ -192,7 +192,8 @@ namespace app auto frontlightModel = std::make_unique(app); auto audioErrorModel = std::make_unique(); auto presenter = - std::make_unique(std::move(provider), + std::make_unique(app, + std::move(provider), std::move(prewakeUpSettingsModel), *audioModel, std::move(frontlightModel), @@ -230,7 +231,7 @@ namespace app auto audioErrorModel = std::make_unique(); auto presenter = std::make_unique( - 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(app, std::move(presenter)); }); windowsFactory.attach( @@ -263,7 +264,8 @@ namespace app auto provider = std::make_unique(*alarmSettingsModel, std::move(songsModel)); auto audioErrorModel = std::make_unique(); - auto presenter = std::make_unique(std::move(provider), + auto presenter = std::make_unique(app, + std::move(provider), std::move(alarmSettingsModel), *audioModel, std::move(frontlightModel), diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp index 73296ba37..fca4c35f7 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.cpp @@ -5,12 +5,13 @@ namespace app::bell_settings { - SettingsPresenter::SettingsPresenter(std::unique_ptr &&provider, + SettingsPresenter::SettingsPresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::shared_ptr model, AbstractAudioModel &audioModel, std::unique_ptr &&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( diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp index 8aafa510e..1fce74817 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/BedtimeSettingsPresenter.hpp @@ -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 &&provider, + SettingsPresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::shared_ptr model, AbstractAudioModel &audioModel, std::unique_ptr &&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 provider; std::shared_ptr model; AbstractAudioModel &audioModel; diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp index 45eafe4f4..60fe9d7ea 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.cpp @@ -6,12 +6,13 @@ namespace app::bell_settings { - AlarmSettingsPresenter::AlarmSettingsPresenter(std::unique_ptr &&provider, + AlarmSettingsPresenter::AlarmSettingsPresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::unique_ptr &&settingsModel, AbstractAudioModel &audioModel, std::unique_ptr &&frontlight, std::unique_ptr &&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( diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp index 8a9d0a2f4..36fc93e22 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/AlarmSettingsPresenter.hpp @@ -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 @@ -49,7 +50,8 @@ namespace app::bell_settings class AlarmSettingsPresenter : public AlarmSettingsWindowContract::Presenter { public: - AlarmSettingsPresenter(std::unique_ptr &&provider, + AlarmSettingsPresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::unique_ptr &&settingsModel, AbstractAudioModel &audioModel, std::unique_ptr &&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 provider; std::unique_ptr settingsModel; AbstractAudioModel &audioModel; diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp index 66610928c..f4fc2c896 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.cpp @@ -6,12 +6,13 @@ namespace app::bell_settings { - PrewakeUpWindowPresenter::PrewakeUpWindowPresenter(std::unique_ptr &&provider, + PrewakeUpWindowPresenter::PrewakeUpWindowPresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::unique_ptr &&model, AbstractAudioModel &audioModel, std::unique_ptr &&frontlight, std::unique_ptr &&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( diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp index a056cb42b..1ff92557b 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/PrewakeUpPresenter.hpp @@ -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 &&provider, + PrewakeUpWindowPresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::unique_ptr &&model, AbstractAudioModel &audioModel, std::unique_ptr &&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 provider; std::unique_ptr model; AbstractAudioModel &audioModel; diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp index 0327052fe..2f100887c 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.cpp @@ -6,12 +6,13 @@ namespace app::bell_settings { - SnoozePresenter::SnoozePresenter(std::unique_ptr &&provider, + SnoozePresenter::SnoozePresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::unique_ptr &&snoozeSettingsModel, AbstractAudioModel &audioModel, std::unique_ptr &&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( diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp index dd5c4441e..d064d65bb 100644 --- a/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp +++ b/products/BellHybrid/apps/application-bell-settings/presenter/alarm_settings/SnoozePresenter.hpp @@ -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 &&provider, + SnoozePresenter(ApplicationCommon *app, + std::unique_ptr &&provider, std::unique_ptr &&snoozeSettingsModel, AbstractAudioModel &audioModel, std::unique_ptr &&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 provider; std::unique_ptr snoozeSettingsModel; AbstractAudioModel &audioModel; diff --git a/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp index 95585ecdb..0d0b4fc95 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.cpp @@ -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) { diff --git a/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp b/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp index 323a096c3..626b1388c 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/BellSettingsBedtimeToneWindow.hpp @@ -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; diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp index a2dcf893e..5256259d2 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp @@ -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) { diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp index 3b92a0399..f839f9983 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp @@ -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; diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp index bb126fd1e..178193473 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.cpp @@ -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) { diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp index 661c86e9b..b2a47f5d2 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp @@ -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; diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp index 04c618fb0..c33210d2c 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.cpp @@ -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) { diff --git a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp index 9ec7b39c0..24f211961 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/alarm_settings/BellSettingsPrewakeUpWindow.hpp @@ -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;