M image/user/db/settings_v2_002.sql => image/user/db/settings_v2_002.sql +2 -2
@@ 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'),
M module-apps/application-settings/ApplicationSettings.cpp => module-apps/application-settings/ApplicationSettings.cpp +2 -15
@@ 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<gui::OptionWindow>(app, name, settingsChangeWindow(app, this, lockPassHash));
});
- windowsFactory.attach("Languages", [this](Application *app, const std::string &name) {
- return std::make_unique<gui::LanguageWindow>(app, this);
+ windowsFactory.attach("Languages", [](Application *app, const std::string &name) {
+ return std::make_unique<gui::LanguageWindow>(app);
});
windowsFactory.attach("Bluetooth", [](Application *app, const std::string &name) {
return std::make_unique<gui::BtWindow>(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<bool>(value);
M module-apps/application-settings/ApplicationSettings.hpp => module-apps/application-settings/ApplicationSettings.hpp +1 -11
@@ 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<ApplicationSettings>
M module-apps/application-settings/windows/LanguageWindow.cpp => module-apps/application-settings/windows/LanguageWindow.cpp +6 -3
@@ 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;
}));
}
M module-apps/application-settings/windows/LanguageWindow.hpp => module-apps/application-settings/windows/LanguageWindow.hpp +1 -7
@@ 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<gui::Item *> options;
gui::Item *addOptionLabel(const std::string &text, std::function<bool(Item &)> 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;
M module-services/service-appmgr/model/ApplicationManager.cpp => module-services/service-appmgr/model/ApplicationManager.cpp +43 -0
@@ 219,6 219,16 @@ namespace app::manager
handleInitApplication(msg);
return std::make_shared<sys::ResponseMessage>();
});
+ connect(typeid(DisplayLanguageChangeRequest), [this](sys::Message *request) {
+ auto msg = static_cast<DisplayLanguageChangeRequest *>(request);
+ handleDisplayLanguageChange(msg);
+ return msgHandled();
+ });
+ connect(typeid(InputLanguageChangeRequest), [this](sys::Message *request) {
+ auto msg = static_cast<InputLanguageChangeRequest *>(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