[apps/settings] Added country to settings

Refactored Settings::MainController::handleEvent

Change-Id: Id8ad604183a64520dd785356514e87fddc50354c
This commit is contained in:
Gabriel Ozouf
2020-07-01 10:21:22 +02:00
committed by Émilie Feral
parent 1642276678
commit 51747d3d36
8 changed files with 90 additions and 45 deletions

View File

@@ -12,9 +12,10 @@ app_settings_src = $(addprefix apps/settings/,\
sub_menu/about_controller.cpp \
sub_menu/about_controller_official.cpp:+official \
sub_menu/about_controller_non_official.cpp:-official \
sub_menu/country_controller.cpp \
sub_menu/display_mode_controller.cpp \
sub_menu/exam_mode_controller_official.cpp:+official \
sub_menu/exam_mode_controller_non_official.cpp:-official \
sub_menu/display_mode_controller.cpp \
sub_menu/exam_mode_controller.cpp \
sub_menu/generic_sub_controller.cpp \
sub_menu/language_controller.cpp \

View File

@@ -23,6 +23,7 @@ MainController::MainController(Responder * parentResponder, InputEventHandlerDel
m_preferencesController(this),
m_displayModeController(this, inputEventHandlerDelegate),
m_languageController(this, Metric::CommonTopMargin),
m_countryController(this, Metric::CommonTopMargin),
m_examModeController(this),
m_aboutController(this)
{
@@ -44,52 +45,54 @@ void MainController::didBecomeFirstResponder() {
bool MainController::handleEvent(Ion::Events::Event event) {
GlobalPreferences * globalPreferences = GlobalPreferences::sharedGlobalPreferences();
if (model()->childAtIndex(selectedRow())->numberOfChildren() == 0) {
if (model()->childAtIndex(selectedRow())->label() == promptMessage()) {
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
globalPreferences->setShowPopUp(!globalPreferences->showPopUp());
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
return true;
}
return false;
}
if (model()->childAtIndex(selectedRow())->label() == I18n::Message::Brightness) {
if (event == Ion::Events::Right || event == Ion::Events::Left || event == Ion::Events::Plus || event == Ion::Events::Minus) {
int delta = Ion::Backlight::MaxBrightness/GlobalPreferences::NumberOfBrightnessStates;
int direction = (event == Ion::Events::Right || event == Ion::Events::Plus) ? delta : -delta;
globalPreferences->setBrightnessLevel(globalPreferences->brightnessLevel()+direction);
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
return true;
}
return false;
}
if (model()->childAtIndex(selectedRow())->label() == I18n::Message::Language) {
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
stackController()->push(&m_languageController);
return true;
}
return false;
int rowIndex = selectedRow();
if (hasPrompt() && rowIndex == k_indexOfPopUpCell) {
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
globalPreferences->setShowPopUp(!globalPreferences->showPopUp());
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
return true;
}
return false;
}
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
GenericSubController * subController = nullptr;
int rowIndex = selectedRow();
if (rowIndex == k_indexOfDisplayModeCell) {
subController = &m_displayModeController;
} else if (rowIndex == k_indexOfBrightnessCell || rowIndex == k_indexOfLanguageCell) {
assert(false);
} else if (rowIndex == k_indexOfExamModeCell) {
subController = &m_examModeController;
} else if (rowIndex == k_indexOfAboutCell + hasPrompt()) {
subController = &m_aboutController;
} else {
subController = &m_preferencesController;
}
subController->setMessageTreeModel(model()->childAtIndex(selectedRow()));
StackViewController * stack = stackController();
stack->push(subController);
if (rowIndex == k_indexOfBrightnessCell
&& (event == Ion::Events::Left || event == Ion::Events::Right || event == Ion::Events::Minus || event == Ion::Events::Plus)) {
int delta = Ion::Backlight::MaxBrightness/GlobalPreferences::NumberOfBrightnessStates;
int direction = (event == Ion::Events::Right || event == Ion::Events::Plus) ? delta : -delta;
globalPreferences->setBrightnessLevel(globalPreferences->brightnessLevel()+direction);
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
return true;
}
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
assert(rowIndex != k_indexOfBrightnessCell);
/* The About cell can either be found at index k_indexOfExamModeCell + 1 or
* k_indexOfExamModeCell + 2, depending on whether there is a Pop-Up cell.
* Since the Pop-Up cell has been handled above, we can use those two
* indices for the About cell. */
ViewController * subControllers[k_indexOfAboutCell + 2] = {
&m_preferencesController,
&m_displayModeController,
&m_preferencesController,
&m_preferencesController,
nullptr, //&m_brightnessController
&m_preferencesController,
&m_languageController,
&m_countryController,
&m_examModeController,
&m_aboutController,
&m_aboutController
};
ViewController * selectedSubController = subControllers[rowIndex];
assert(selectedSubController);
if (model()->childAtIndex(rowIndex)->numberOfChildren() != 0) {
static_cast<GenericSubController *>(selectedSubController)->setMessageTreeModel(model()->childAtIndex(rowIndex));
}
stackController()->push(selectedSubController);
return true;
}
return false;
}
@@ -168,6 +171,11 @@ void MainController::willDisplayCellForIndex(HighlightCell * cell, int index) {
static_cast<MessageTableCellWithChevronAndMessage *>(cell)->setSubtitle(I18n::LanguageNames[index]);
return;
}
if (index == k_indexOfCountryCell) {
int index = (int)(globalPreferences->country());
static_cast<MessageTableCellWithChevronAndMessage *>(cell)->setSubtitle(I18n::CountryNames[index]);
return;
}
if (hasPrompt() && index == k_indexOfPopUpCell) {
MessageTableCellWithSwitch * mySwitchCell = (MessageTableCellWithSwitch *)cell;
SwitchView * mySwitch = (SwitchView *)mySwitchCell->accessoryView();

View File

@@ -5,6 +5,7 @@
#include <apps/shared/settings_message_tree.h>
#include "message_table_cell_with_gauge_with_separator.h"
#include "sub_menu/about_controller.h"
#include "sub_menu/country_controller.h"
#include "sub_menu/display_mode_controller.h"
#include "sub_menu/exam_mode_controller.h"
#include "sub_menu/language_controller.h"
@@ -45,7 +46,8 @@ private:
constexpr static int k_indexOfBrightnessCell = k_indexOfComplexFormatCell + 1;
constexpr static int k_indexOfFontCell = k_indexOfBrightnessCell + 1;
constexpr static int k_indexOfLanguageCell = k_indexOfFontCell + 1;
constexpr static int k_indexOfExamModeCell = k_indexOfLanguageCell + 1;
constexpr static int k_indexOfCountryCell = k_indexOfLanguageCell + 1;
constexpr static int k_indexOfExamModeCell = k_indexOfCountryCell + 1;
/* Pop-up cell and About cell are located at the same index because pop-up
* cell is optional. We must always correct k_indexOfAboutCell with
* hasPrompt() (TODO: make hasPrompt() constexpr and correct
@@ -56,7 +58,7 @@ private:
StackViewController * stackController() const;
I18n::Message promptMessage() const;
bool hasPrompt() const { return promptMessage() != I18n::Message::Default; }
constexpr static int k_numberOfSimpleChevronCells = 7;
constexpr static int k_numberOfSimpleChevronCells = (Ion::Display::Height - Metric::TitleBarHeight) / Metric::ParameterCellHeight + 1;
MessageTableCellWithChevronAndMessage m_cells[k_numberOfSimpleChevronCells];
MessageTableCellWithGaugeWithSeparator m_brightnessCell;
MessageTableCellWithSwitch m_popUpCell;
@@ -64,6 +66,7 @@ private:
PreferencesController m_preferencesController;
DisplayModeController m_displayModeController;
LanguageController m_languageController;
CountryController m_countryController;
ExamModeController m_examModeController;
AboutController m_aboutController;

View File

@@ -14,6 +14,7 @@ constexpr SettingsMessageTree s_modelMenu[] =
SettingsMessageTree(I18n::Message::Brightness),
SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren),
SettingsMessageTree(I18n::Message::Language),
SettingsMessageTree(I18n::Message::Country),
SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren),
SettingsMessageTree(I18n::Message::BetaPopUp),
SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)};

View File

@@ -14,6 +14,7 @@ constexpr SettingsMessageTree s_modelMenu[] =
SettingsMessageTree(I18n::Message::Brightness),
SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren),
SettingsMessageTree(I18n::Message::Language),
SettingsMessageTree(I18n::Message::Country),
SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren),
SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)};

View File

@@ -14,6 +14,7 @@ constexpr SettingsMessageTree s_modelMenu[] =
SettingsMessageTree(I18n::Message::Brightness),
SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren),
SettingsMessageTree(I18n::Message::Language),
SettingsMessageTree(I18n::Message::Country),
SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren),
SettingsMessageTree(I18n::Message::UpdatePopUp),
SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)};

View File

@@ -0,0 +1,13 @@
#include "country_controller.h"
namespace Settings {
bool CountryController::handleEvent(Ion::Events::Event event) {
if (Shared::CountryController::handleEvent(event) || event == Ion::Events::Left) {
static_cast<StackViewController *>(parentResponder())->pop();
return true;
}
return false;
}
}

View File

@@ -0,0 +1,17 @@
#ifndef SETTING_COUNTRY_CONTROLLER_H
#define SETTING_COUNTRY_CONTROLLER_H
#include <escher.h>
#include "../../shared/country_controller.h"
namespace Settings {
class CountryController : public Shared::CountryController {
public:
using Shared::CountryController::CountryController;
bool handleEvent(Ion::Events::Event event) override;
};
}
#endif