[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.
This commit is contained in:
Dawid Wojtas
2024-04-04 13:39:48 +02:00
committed by Marcin Łyda
parent 40afdb710d
commit f361257528
17 changed files with 82 additions and 28 deletions

View File

@@ -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),

View File

@@ -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(

View File

@@ -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;

View File

@@ -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(

View File

@@ -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;

View File

@@ -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(

View File

@@ -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;

View File

@@ -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(

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;