From c737af962fe5ae148eb4c53609e467bad2df785c Mon Sep 17 00:00:00 2001 From: RobertPiet <70648461+RobertPiet@users.noreply.github.com> Date: Wed, 16 Dec 2020 09:54:40 +0100 Subject: [PATCH] =?UTF-8?q?[EGD-4914]=20input=20and=20display=20languages?= =?UTF-8?q?=20connection=20to=20settings=20problem=E2=80=A6=20(#1188)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [EGD-4914] input and display languages connection to settings problem solved --- image/user/db/settings_v2_002.sql | 4 +- .../ApplicationSettings.cpp | 17 +------- .../ApplicationSettings.hpp | 12 +----- .../windows/LanguageWindow.cpp | 9 ++-- .../windows/LanguageWindow.hpp | 8 +--- .../model/ApplicationManager.cpp | 43 +++++++++++++++++++ 6 files changed, 55 insertions(+), 38 deletions(-) diff --git a/image/user/db/settings_v2_002.sql b/image/user/db/settings_v2_002.sql index b7549e994c1214234e9a21797aa61af1c2d97175..52df34653427f784ada422f47b90949856a6b673 100644 --- a/image/user/db/settings_v2_002.sql +++ b/image/user/db/settings_v2_002.sql @@ -12,8 +12,8 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('gs_active_sim', 'SIM1'), ('gs_lock_pass_hash', '3333'), ('gs_lock_time', '30000'), - ('gs_display_language', 'En'), - ('gs_input_language', 'En'), + ('gs_display_language', 'English'), + ('gs_input_language', 'English'); ('bt_state', '0'), ('bt_device_visibility', '0'), ('bt_device_name', 'PurePhone'), diff --git a/module-apps/application-settings/ApplicationSettings.cpp b/module-apps/application-settings/ApplicationSettings.cpp index b8b9fa5503adf8b27523f692037922a53a14ec9f..aba674b6d480ede412317baa8351cb70d81226bc 100644 --- a/module-apps/application-settings/ApplicationSettings.cpp +++ b/module-apps/application-settings/ApplicationSettings.cpp @@ -51,15 +51,12 @@ namespace app [this](std::string value) { lockPassChanged(value); }); settings->registerValueChange(settings::SystemProperties::timeDateFormat, [this](std::string value) { timeDateChanged(value); }); - settings->registerValueChange(settings::SystemProperties::displayLanguage, - [this](std::string value) { displayLanguageChanged(value); }); } ApplicationSettings::~ApplicationSettings() { settings->unregisterValueChange(settings::SystemProperties::lockPassHash); settings->unregisterValueChange(settings::SystemProperties::timeDateFormat); - settings->unregisterValueChange(settings::SystemProperties::displayLanguage); } // Invoked upon receiving data message @@ -132,8 +129,8 @@ namespace app windowsFactory.attach(app::change_setting, [this](Application *app, const std::string &name) { return std::make_unique(app, name, settingsChangeWindow(app, this, lockPassHash)); }); - windowsFactory.attach("Languages", [this](Application *app, const std::string &name) { - return std::make_unique(app, this); + windowsFactory.attach("Languages", [](Application *app, const std::string &name) { + return std::make_unique(app); }); windowsFactory.attach("Bluetooth", [](Application *app, const std::string &name) { return std::make_unique(app); @@ -201,16 +198,6 @@ namespace app } } - void ApplicationSettings::displayLanguageChanged(std::string value) - { - displayLanguage = value; - } - - void ApplicationSettings::setDisplayLanguage(const std::string &value) - { - settings->setValue(settings::SystemProperties::displayLanguage, value); - } - void ApplicationSettings::timeDateChanged(std::string value) { auto newTimeDateFormat = utils::getNumericValue(value); diff --git a/module-apps/application-settings/ApplicationSettings.hpp b/module-apps/application-settings/ApplicationSettings.hpp index d87684ce35a762384ab7c5fb2a4fcbbd4263ec11..b70689e933e1f024679d5302b13995a79edadcde 100644 --- a/module-apps/application-settings/ApplicationSettings.hpp +++ b/module-apps/application-settings/ApplicationSettings.hpp @@ -29,14 +29,7 @@ namespace app virtual void clearPin() = 0; }; - class LanguageSetter - { - public: - virtual ~LanguageSetter() = default; - virtual void setDisplayLanguage(const std::string &language) = 0; - }; - - class ApplicationSettings : public app::Application, public SimSetter, public PinLockSetter, public LanguageSetter + class ApplicationSettings : public app::Application, public SimSetter, public PinLockSetter { public: ApplicationSettings(std::string name = name_settings, @@ -58,15 +51,12 @@ namespace app void setSim(Store::GSM::SIM sim) override; void setPin(unsigned int pin) override; void clearPin() override; - void setDisplayLanguage(const std::string &language) override; void lockPassChanged(std::string value); - void displayLanguageChanged(std::string value); void timeDateChanged(std::string value); private: unsigned int lockPassHash; bool europeanDateTimeFormat = false; // true europe format, false american format - std::string displayLanguage; }; template <> struct ManifestTraits diff --git a/module-apps/application-settings/windows/LanguageWindow.cpp b/module-apps/application-settings/windows/LanguageWindow.cpp index 856623b257ee95ae3d1b1c724253d2e3a9aa1ef6..0cc82745c1fe861880d26b0dd8b26d6d2f565cf7 100644 --- a/module-apps/application-settings/windows/LanguageWindow.cpp +++ b/module-apps/application-settings/windows/LanguageWindow.cpp @@ -16,9 +16,12 @@ namespace gui { + namespace window::name + { + constexpr inline auto languages = "Languages"; + } - LanguageWindow::LanguageWindow(app::Application *app, app::LanguageSetter *setter) - : AppWindow(app, "Languages"), setter(setter) + LanguageWindow::LanguageWindow(app::Application *app) : AppWindow(app, gui::window::name::languages) { buildInterface(); setFocusItem(options[0]); @@ -53,7 +56,7 @@ namespace gui const auto &langList = loader.getAvailableDisplayLanguages(); for (const auto &lang : langList) { options.push_back(addOptionLabel(lang, [=](gui::Item &item) { - setter->setDisplayLanguage(lang); + app::manager::Controller::changeDisplayLanguage(application, lang); return true; })); } diff --git a/module-apps/application-settings/windows/LanguageWindow.hpp b/module-apps/application-settings/windows/LanguageWindow.hpp index 2de0f3f66e140ba4ee16c28c4e7a11780960064f..a33fade0fbe92da9ae6330493914ac67aabfed09 100644 --- a/module-apps/application-settings/windows/LanguageWindow.hpp +++ b/module-apps/application-settings/windows/LanguageWindow.hpp @@ -14,11 +14,6 @@ #include "gui/widgets/BottomBar.hpp" #include "gui/widgets/TopBar.hpp" -namespace app -{ - class LanguageSetter; -} - namespace gui { @@ -28,10 +23,9 @@ namespace gui std::vector options; gui::Item *addOptionLabel(const std::string &text, std::function activatedCallback); - app::LanguageSetter *setter; public: - LanguageWindow(app::Application *app, app::LanguageSetter *setter); + LanguageWindow(app::Application *app); void onBeforeShow(ShowMode mode, SwitchData *data) override; void rebuild() override; diff --git a/module-services/service-appmgr/model/ApplicationManager.cpp b/module-services/service-appmgr/model/ApplicationManager.cpp index 469e7c5aeec3cadf29bc7ff68940003dc22792f7..66547e704702a1b40932e01bd76d3058aca8d778 100644 --- a/module-services/service-appmgr/model/ApplicationManager.cpp +++ b/module-services/service-appmgr/model/ApplicationManager.cpp @@ -219,6 +219,16 @@ namespace app::manager handleInitApplication(msg); return std::make_shared(); }); + connect(typeid(DisplayLanguageChangeRequest), [this](sys::Message *request) { + auto msg = static_cast(request); + handleDisplayLanguageChange(msg); + return msgHandled(); + }); + connect(typeid(InputLanguageChangeRequest), [this](sys::Message *request) { + auto msg = static_cast(request); + handleInputLanguageChange(msg); + return msgHandled(); + }); connect(typeid(ShutdownRequest), [this](sys::Message *) { closeApplications(); closeServices(); @@ -524,6 +534,35 @@ namespace app::manager Controller::switchBack(this); } + auto ApplicationManager::handleDisplayLanguageChange(app::manager::DisplayLanguageChangeRequest *msg) -> bool + { + const auto &requestedLanguage = msg->getLanguage(); + + if (requestedLanguage == displayLanguage) { + LOG_WARN("The selected language is already set. Ignore."); + return false; + } + displayLanguage = requestedLanguage; + settings->setValue(settings::SystemProperties::displayLanguage, displayLanguage); + utils::localize.setDisplayLanguage(displayLanguage); + rebuildActiveApplications(); + return true; + } + + auto ApplicationManager::handleInputLanguageChange(app::manager::InputLanguageChangeRequest *msg) -> bool + { + const auto &requestedLanguage = msg->getLanguage(); + + if (requestedLanguage == inputLanguage) { + LOG_WARN("The selected language is already set. Ignore."); + return false; + } + inputLanguage = requestedLanguage; + settings->setValue(settings::SystemProperties::inputLanguage, inputLanguage); + utils::localize.setInputLanguage(inputLanguage); + return true; + } + void ApplicationManager::rebuildActiveApplications() { for (const auto &app : getApplications()) { @@ -664,6 +703,10 @@ namespace app::manager } void ApplicationManager::inputLanguageChanged(std::string value) { + if (value.empty()) { + return; + } inputLanguage = value; + utils::localize.setInputLanguage(value); } } // namespace app::manager