diff --git a/apps/on_boarding/Makefile b/apps/on_boarding/Makefile index 42d22f508..c65dbc633 100644 --- a/apps/on_boarding/Makefile +++ b/apps/on_boarding/Makefile @@ -1,5 +1,6 @@ app_on_boarding_src = $(addprefix apps/on_boarding/,\ app.cpp \ + country_controller.cpp \ language_controller.cpp \ logo_controller.cpp \ logo_view.cpp \ diff --git a/apps/on_boarding/app.cpp b/apps/on_boarding/app.cpp index f4c8697b4..ae12d0792 100644 --- a/apps/on_boarding/app.cpp +++ b/apps/on_boarding/app.cpp @@ -13,8 +13,10 @@ App::Descriptor * App::Snapshot::descriptor() { } App::App(Snapshot * snapshot) : - ::App(snapshot, &m_languageController), - m_languageController(&m_modalViewController), + ::App(snapshot, &m_stackController), + m_stackController(&m_modalViewController, &m_languageController), + m_languageController(&m_stackController), + m_countryController(&m_languageController), m_logoController() { } @@ -45,6 +47,7 @@ void App::didBecomeActive(Window * window) { void App::reinitOnBoarding() { m_languageController.resetSelection(); + m_countryController.resetSelection(); displayModalViewController(&m_logoController, 0.5f, 0.5f); } diff --git a/apps/on_boarding/app.h b/apps/on_boarding/app.h index 24a600343..a965ce087 100644 --- a/apps/on_boarding/app.h +++ b/apps/on_boarding/app.h @@ -2,6 +2,7 @@ #define ON_BOARDING_APP_H #include +#include "country_controller.h" #include "language_controller.h" #include "logo_controller.h" @@ -14,6 +15,12 @@ public: App * unpack(Container * container) override; Descriptor * descriptor() override; }; + + static App * app() { + return static_cast(Container::activeApp()); + } + + CountryController * countryController() { return &m_countryController; } int numberOfTimers() override; Timer * timerAtIndex(int i) override; bool processEvent(Ion::Events::Event) override; @@ -21,7 +28,9 @@ public: private: App(Snapshot * snapshot); void reinitOnBoarding(); + StackViewController m_stackController; LanguageController m_languageController; + CountryController m_countryController; LogoController m_logoController; }; diff --git a/apps/on_boarding/country_controller.cpp b/apps/on_boarding/country_controller.cpp new file mode 100644 index 000000000..d8d5d2482 --- /dev/null +++ b/apps/on_boarding/country_controller.cpp @@ -0,0 +1,43 @@ +#include "country_controller.h" +#include "../apps_container.h" +#include +#include + +namespace OnBoarding { + +CountryController::CountryController(Responder * parentResponder) : + Shared::CountryController( + parentResponder, + std::max( + static_cast(Metric::CommonLeftMargin), + (Ion::Display::Height - I18n::NumberOfCountries*Metric::ParameterCellHeight)/2)) +{ + static_cast(m_selectableTableView.decorator()->indicatorAtIndex(1))->setMargin( + std::max( + static_cast(Metric::CommonLeftMargin), + (Ion::Display::Height - I18n::NumberOfCountries*Metric::ParameterCellHeight)/2)); +} + +void CountryController::resetSelection() { + m_selectableTableView.deselectTable(); + /* The base ::CountryController behaviour is to highlight the previously + * chosen country. On boarding, we want the highlighted cell to be the first + * alphabetically, but with the default behaviour, it would be Canada, as it + * is the country of value 0. */ + selectCellAtLocation(0, 0); +} + +bool CountryController::handleEvent(Ion::Events::Event event) { + if (Shared::CountryController::handleEvent(event)) { + AppsContainer * appsContainer = AppsContainer::sharedAppsContainer(); + if (appsContainer->promptController()) { + Container::activeApp()->displayModalViewController(appsContainer->promptController(), 0.5f, 0.5f); + } else { + appsContainer->switchTo(appsContainer->appSnapshotAtIndex(0)); + } + return true; + } + return false; +} + +} diff --git a/apps/on_boarding/country_controller.h b/apps/on_boarding/country_controller.h new file mode 100644 index 000000000..21cdf80af --- /dev/null +++ b/apps/on_boarding/country_controller.h @@ -0,0 +1,19 @@ +#ifndef ON_BOARDING_COUNTRY_CONTROLLER_H +#define ON_BOARDING_COUNTRY_CONTROLLER_H + +#include +#include "../shared/country_controller.h" + +namespace OnBoarding { + +class CountryController : public Shared::CountryController { +public: + CountryController(Responder * parentResponder); + void resetSelection() override; + bool handleEvent(Ion::Events::Event event) override; + ViewController::DisplayParameter displayParameter() override { return ViewController::DisplayParameter::WantsMaximumSpace; } +}; + +} + +#endif diff --git a/apps/on_boarding/language_controller.cpp b/apps/on_boarding/language_controller.cpp index d4a3ae679..cbe21962f 100644 --- a/apps/on_boarding/language_controller.cpp +++ b/apps/on_boarding/language_controller.cpp @@ -1,6 +1,8 @@ #include "language_controller.h" #include "../global_preferences.h" #include "../apps_container.h" +#include "app.h" +#include "country_controller.h" #include #include @@ -23,7 +25,7 @@ bool LanguageController::handleEvent(Ion::Events::Event event) { if (appsContainer->promptController()) { Container::activeApp()->displayModalViewController(appsContainer->promptController(), 0.5f, 0.5f); } else { - appsContainer->switchTo(appsContainer->appSnapshotAtIndex(0)); + stackController()->push(App::app()->countryController()); } return true; } diff --git a/apps/on_boarding/language_controller.h b/apps/on_boarding/language_controller.h index 10ab2c995..08e23b26d 100644 --- a/apps/on_boarding/language_controller.h +++ b/apps/on_boarding/language_controller.h @@ -3,7 +3,6 @@ #include #include "../shared/language_controller.h" -#include "logo_controller.h" namespace OnBoarding { @@ -11,6 +10,10 @@ class LanguageController : public Shared::LanguageController { public: LanguageController(Responder * parentResponder); bool handleEvent(Ion::Events::Event event) override; + ViewController::DisplayParameter displayParameter() override { return ViewController::DisplayParameter::DoNotShowOwnTitle; } + +private: + StackViewController * stackController() { return static_cast(parentResponder()); } }; } diff --git a/apps/shared/country_controller.h b/apps/shared/country_controller.h index 6b92dd71d..4febf5f32 100644 --- a/apps/shared/country_controller.h +++ b/apps/shared/country_controller.h @@ -12,7 +12,7 @@ public: static I18n::Country CountryAtIndex(int i); CountryController(Responder * parentResponder, KDCoordinate verticalMargin); - void resetSelection(); + virtual void resetSelection(); View * view() override { return &m_selectableTableView; } const char * title() override {return I18n::translate(I18n::Message::Country); }