~aleteoryx/muditaos

c737af962fe5ae148eb4c53609e467bad2df785c — RobertPiet 5 years ago 4e0f72e
[EGD-4914] input and display languages connection to settings problem… (#1188)

* [EGD-4914] input and display languages connection to settings problem solved
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