From 3612d255399473b50bf4ac2ac4d6bb07c4bddebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 6 Feb 2020 16:21:04 +0100 Subject: [PATCH] [apps/settings] AboutController::m_view should live inside the Settings app This fixes the following bug: AboutController::view was built at first call of "AboutController::view()" but the Settings can be rebuilt later and the pointers might have moved (hence the ones used in AboutController::view constructor which is not rebuilt then) --- apps/settings/sub_menu/about_controller.cpp | 3 ++- apps/settings/sub_menu/about_controller.h | 5 ++++- apps/settings/sub_menu/about_controller_non_official.cpp | 8 ++++---- apps/settings/sub_menu/about_controller_official.cpp | 5 +++-- apps/settings/sub_menu/selectable_view_with_messages.cpp | 7 ++----- apps/settings/sub_menu/selectable_view_with_messages.h | 2 +- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/apps/settings/sub_menu/about_controller.cpp b/apps/settings/sub_menu/about_controller.cpp index 12f28f996..2f93ebf75 100644 --- a/apps/settings/sub_menu/about_controller.cpp +++ b/apps/settings/sub_menu/about_controller.cpp @@ -5,7 +5,8 @@ namespace Settings { AboutController::AboutController(Responder * parentResponder) : - GenericSubController(parentResponder) + GenericSubController(parentResponder), + m_view(&m_selectableTableView) { for (int i = 0; i < k_totalNumberOfCell; i++) { m_cells[i].setMessageFont(KDFont::LargeFont); diff --git a/apps/settings/sub_menu/about_controller.h b/apps/settings/sub_menu/about_controller.h index 47fca25d5..d44817836 100644 --- a/apps/settings/sub_menu/about_controller.h +++ b/apps/settings/sub_menu/about_controller.h @@ -2,6 +2,7 @@ #define SETTINGS_ABOUT_CONTROLLER_H #include "generic_sub_controller.h" +#include "selectable_view_with_messages.h" #include "../../hardware_test/pop_up_controller.h" namespace Settings { @@ -9,13 +10,15 @@ namespace Settings { class AboutController : public GenericSubController { public: AboutController(Responder * parentResponder); - View * view() override; + View * view() override { return &m_view; } + void viewWillAppear() override; bool handleEvent(Ion::Events::Event event) override; HighlightCell * reusableCell(int index, int type) override; int reusableCellCount(int type) override; void willDisplayCellForIndex(HighlightCell * cell, int index) override; private: constexpr static int k_totalNumberOfCell = 3; + SelectableViewWithMessages m_view; MessageTableCellWithBuffer m_cells[k_totalNumberOfCell]; HardwareTest::PopUpController m_hardwareTestPopUpController; }; diff --git a/apps/settings/sub_menu/about_controller_non_official.cpp b/apps/settings/sub_menu/about_controller_non_official.cpp index b83089b94..bf6cff8b2 100644 --- a/apps/settings/sub_menu/about_controller_non_official.cpp +++ b/apps/settings/sub_menu/about_controller_non_official.cpp @@ -3,10 +3,10 @@ namespace Settings { -View * AboutController::view() { - static I18n::Message cautionMessages[] = {I18n::Message::AboutWarning1, I18n::Message::AboutWarning2, I18n::Message::AboutWarning3, I18n::Message::AboutWarning4}; - static SelectableViewWithMessages view(&m_selectableTableView, cautionMessages, 4); - return &view; +void AboutController::viewWillAppear() { + GenericSubController::viewWillAppear(); + I18n::Message cautionMessages[] = {I18n::Message::AboutWarning1, I18n::Message::AboutWarning2, I18n::Message::AboutWarning3, I18n::Message::AboutWarning4}; + m_view.setMessages(cautionMessages, sizeof(cautionMessages)/sizeof(I18n::Message)); } } diff --git a/apps/settings/sub_menu/about_controller_official.cpp b/apps/settings/sub_menu/about_controller_official.cpp index 8d7dca621..f46c96d2e 100644 --- a/apps/settings/sub_menu/about_controller_official.cpp +++ b/apps/settings/sub_menu/about_controller_official.cpp @@ -2,8 +2,9 @@ namespace Settings { -View * AboutController::view() { - return GenericSubController::view(); +void AboutController::viewWillAppear() { + GenericSubController::viewWillAppear(); + m_view.setMessages(nullptr, 0); } } diff --git a/apps/settings/sub_menu/selectable_view_with_messages.cpp b/apps/settings/sub_menu/selectable_view_with_messages.cpp index 79cb8ee7b..9ba391f3a 100644 --- a/apps/settings/sub_menu/selectable_view_with_messages.cpp +++ b/apps/settings/sub_menu/selectable_view_with_messages.cpp @@ -6,14 +6,11 @@ using namespace Shared; namespace Settings { -SelectableViewWithMessages::SelectableViewWithMessages(SelectableTableView * selectableTableView, I18n::Message * messages, int numberOfMessages) : +SelectableViewWithMessages::SelectableViewWithMessages(SelectableTableView * selectableTableView) : m_selectableTableView(selectableTableView), - m_numberOfMessages(numberOfMessages) + m_numberOfMessages(0) { for (int i = 0; i < k_maxNumberOfLines; i++) { - if (i < numberOfMessages) { - m_messageLines[i].setMessage(messages[i]); - } m_messageLines[i].setFont(KDFont::SmallFont); m_messageLines[i].setAlignment(0.5f, 0.5f); m_messageLines[i].setBackgroundColor(Palette::WallScreen); diff --git a/apps/settings/sub_menu/selectable_view_with_messages.h b/apps/settings/sub_menu/selectable_view_with_messages.h index f5fe17896..393deec30 100644 --- a/apps/settings/sub_menu/selectable_view_with_messages.h +++ b/apps/settings/sub_menu/selectable_view_with_messages.h @@ -8,7 +8,7 @@ namespace Settings { class SelectableViewWithMessages : public View { public: - SelectableViewWithMessages(SelectableTableView * selectableTableView, I18n::Message * messages = nullptr, int numberOfMessages = 0); + SelectableViewWithMessages(SelectableTableView * selectableTableView); void drawRect(KDContext * ctx, KDRect rect) const override; void setMessages(I18n::Message * messages, int numberOfMessages); private: