From ba8f0ac32d86266ac0082ceecb98970b1f19a6de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20M=C3=B3=C5=BCd=C5=BCy=C5=84ski?= Date: Thu, 4 Feb 2021 20:09:05 +0100 Subject: [PATCH] [EGD-5448] Add EULA window Added EULA window required for onBoarding procedure. Onboarding settings added. --- image/assets/lang/English.json | 2 + image/assets/licenses/Deutsch/eula.txt | 1 + image/assets/licenses/English/eula.txt | 1 + image/assets/licenses/Espanol/eula.txt | 1 + image/assets/licenses/Polski/eula.txt | 1 + image/user/db/settings_v2_002.sql | 2 + .../ApplicationOnBoarding.cpp | 22 ++++- .../ApplicationOnBoarding.hpp | 3 + .../application-onboarding/CMakeLists.txt | 8 +- .../data/OnBoardingSwitchData.hpp | 2 +- .../model/EULARepository.cpp | 33 +++++++ .../model/EULARepository.hpp | 29 +++++++ .../presenter/EULALicenseWindowPresenter.cpp | 22 +++++ .../presenter/EULALicenseWindowPresenter.hpp | 47 ++++++++++ .../windows/EULALicenseWindow.cpp | 86 +++++++++++++++++++ .../windows/EULALicenseWindow.hpp | 34 ++++++++ .../windows/OnBoardingLanguagesWindow.cpp | 8 +- .../windows/OnBoardingLanguagesWindow.hpp | 6 +- .../windows/OnBoardingMainWindow.cpp | 18 ++-- .../windows/OnBoardingMainWindow.hpp | 4 +- .../windows/StartConfigurationWindow.cpp | 24 +++--- .../windows/StartConfigurationWindow.hpp | 2 +- .../windows/SettingsMainWindow.cpp | 2 +- module-gui/gui/widgets/Style.hpp | 1 + .../agents/settings/SystemSettings.hpp | 13 +-- module-utils/Utils.cpp | 20 +++++ module-utils/Utils.hpp | 5 +- module-utils/i18n/i18n.cpp | 2 +- module-utils/i18n/i18n.hpp | 3 +- 29 files changed, 355 insertions(+), 47 deletions(-) create mode 100755 image/assets/licenses/Deutsch/eula.txt create mode 100755 image/assets/licenses/English/eula.txt create mode 100755 image/assets/licenses/Espanol/eula.txt create mode 100755 image/assets/licenses/Polski/eula.txt create mode 100644 module-apps/application-onboarding/model/EULARepository.cpp create mode 100644 module-apps/application-onboarding/model/EULARepository.hpp create mode 100644 module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.cpp create mode 100644 module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp create mode 100644 module-apps/application-onboarding/windows/EULALicenseWindow.cpp create mode 100644 module-apps/application-onboarding/windows/EULALicenseWindow.hpp diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index f2b279f5caa2ea2a04948746e15d64d6b0a50233..a2f168d95d909673977efd8a8f21058c2fdbd16d 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -61,6 +61,7 @@ "common_results_prefix": "Results: ", "common_search": "SEARCH", "common_empty_list": "Default Info: No elements on list.", + "common_accept": "ACCEPT", "locale_12hour_min": "%I:%M %p", "locale_12hour_min_short": "%I:%M", "locale_24hour_min": "%H:%M", @@ -307,6 +308,7 @@ "app_messages_thread_from_this": "From this message", "app_messages_thread_you": "You: ", "app_onboarding_start_configuration": "

Hello!



Let's configure your Mudita Pure.", + "app_onboarding_eula_license": "License agreement (EULA)", "app_settings_title_main": "Settings", "app_settings_title_main_new": "Settings New", "app_settings_bt": "Bluetooth", diff --git a/image/assets/licenses/Deutsch/eula.txt b/image/assets/licenses/Deutsch/eula.txt new file mode 100755 index 0000000000000000000000000000000000000000..91044187c61440fac0b0c8636348bc9219bfe908 --- /dev/null +++ b/image/assets/licenses/Deutsch/eula.txt @@ -0,0 +1 @@ +Mudita Pure Software-Lizenzvereinbarung

ANMERKUNG: DURCH DIE VERWENDUNG VON MUDITA PURE AKZEPTIERT DER BENUTZER DIE FOLGENDE SOFTWARE-LIZENZVEREINBARUNG. DAS GERÄT KANN NUR ORDNUNGSGEMÄSS VERWENDET WERDEN, WENN DIE LIZENZ AKZEPTIERT WIRD.



DAHER SOLLTE DER BENUTZER DIE LIZENZ GRÜNDLICH LESEN, BEVOR ER MUDITA PURE VERWENDET ODER SOFTWARE-UPDATES HERUNTERLÄDT.



WENN DER BENUTZER DEN BEDINGUNGEN DIESER LIZENZ NICHT ZUSTIMMT, DÜRFEN DIE SOFTWARE ODER HERUNTERLADBARE UPDATES NICHT VERWENDET WERDEN.



Begriffsbestimmungen:

Software - Mudita Pure-Systemsoftware, Schnittstellen und deren Inhalt (einschließlich Schriftarten, Sounds, Dokumente und alle anderen auf dem Gerät gespeicherten Voreinstellungen);

Update - jegliche Software-Aktualisierung, einschließlich der Einführung zusätzlicher oder geänderter Funktionen oder anderer Software;

Mudita - Mudita sp. z o.o. [GmbH] mit Sitz in Warschau (Adresse: ul. Jana Czeczota 6, 02-607 Warschau, Polen) eingetragen im polnischen Handelsregister des nationalen Gerichtsregisters unter der KRS-Nummer: 0000467620, Ust.-Id.Nr.: 5252558282, Grundkapital in Höhe von 21.000,00 PLN;

Benutzer - jegliche Person, die rechtmäßig Eigentümer eines Mudita Pure-Geräts geworden ist, um es zu verwenden.



Lizenzbedingungen:

1. Nach Zustimmung des Benutzers zu diesen Lizenzbedingungen gewährt Mudita dem Mudita Pure-Benutzer eine Softwarelizenz. Beim Herunterladen eines Updates wird auch eine Lizenz für ein solches Update erteilt. Unter dieser Lizenz erhält der Benutzer ein nicht-exklusives, territorial uneingeschränktes Recht zur Nutzung der Software oder des Updates auf einem einzelnen MUDITA PURE-Gerät, um:

a) die Software und das Update auf dem Mudita Pure-Gerät zu speichern;

b) eine einzelne Kopie der Software und des Updates außerhalb des Mudita Pure-Geräts zu speichern;

c) die Software oder das Update auf dem Mudita Pure-Gerät zu starten, anzuzeigen und zu verwenden.

2. Jedes Mudita Pure-Gerät, das dem Benutzer rechtmäßig gehört, gewährt dem Benutzer eine Software-/Update-Lizenz, die ausschließlich für das individuelle Gerät aktiviert ist. Somit erhält der Benutzer mit jedem Mudita Pure-Gerät eine weitere separate Lizenz.

3. Mudita genehmigt weder, dass die in dieser Lizenz enthaltene(n) Software und Updates gleichzeitig auf mehr als einem Mudita Pure-Gerät installiert werden, noch dass die Software und Updates über das Internet verteilt oder geteilt werden, um sie auf mehreren Geräten gleichzeitig zu nutzen, mit Ausnahme der in dieser Lizenz angegebenen Fälle.

4. Die Lizenz gewährt dem Benutzer kein Recht, die Software und das Update für einen anderen Zweck als die Verwendung des Mudita Pure-Geräts gemäß den im Handbuch beschriebenen vorgesehenen Zwecken zu verwenden.

5. Die Lizenz gilt für die Dauer des Besitzes des Mudita Pure-Geräts durch den Benutzer und läuft vorzeitig ab, falls der Benutzer gegen deren Nutzungsbedingungen verstößt.
diff --git a/image/assets/licenses/English/eula.txt b/image/assets/licenses/English/eula.txt new file mode 100755 index 0000000000000000000000000000000000000000..2444904d73d1a17838195acacdc244c9451322e2 --- /dev/null +++ b/image/assets/licenses/English/eula.txt @@ -0,0 +1 @@ +Mudita Pure software licence agreement

NOTE: BY USING MUDITA PURE, THE USER ACCEPTS THE FOLLOWING SOFTWARE LICENCE AGREEMENT. THE DEVICE CANNOT BE USED PROPERLY UNLESS THE LICENCE IS ACCEPTED.



THEREFORE, BEFORE USING MUDITA PURE OR DOWNLOADING ANY SOFTWARE UPDATES, THE USER SHOULD READ THE LICENCE THOROUGHLY.



IF THE USER DOES NOT AGREE TO THE TERMS OF THIS LICENCE, THE SOFTWARE OR ANY DOWNLOADABLE UPDATES CANNOT BE USED.



Definitions:

Software - Mudita Pure system software, interfaces, and its contents (including fonts, sounds, documents, and all the other default data saved on the device);

Update - any update of the Software, including the introduction of any additional or changed features or other software;

Mudita - Mudita sp. z o.o. based in Warsaw (address: ul. Jana Czeczota 9, 02-607 Warsaw, Poland) registered in the Polish Register of Entrepreneurs of the National Court Register under KRS number: 0000467620, tax ID number: 5252558282, share capital of PLN 21,000.00;

User - any person who has lawfully become the owner of a Mudita Pure device in order to use it.



Licence terms and conditions:

1. Upon the User's agreement to the terms and conditions of this licence, Mudita grants the Mudita Pure User a Software licence. Upon downloading an Update, a licence for such Update is granted as well. Under such licence, the User receives a non-exclusive, territorially unrestricted right to use the Software or the Update on a single MUDITA PURE device to:

a) store the Software and the Update on the Mudita Pure device;

b) store a single copy of the Software and the Update outside the Mudita Pure device;

c) boot up, display, and use the Software or the Update on the Mudita Pure device.

2. Every Mudita Pure device lawfully owned by the User grants the User a Software/Update licence coupled solely with the particular device. Thus, with every Mudita Pure owned, the User gains another separate licence.

3. Mudita does not allow Software and Updates covered by this licence to be installed on more than one Mudita Pure device at the same time, nor does it allow distributing or sharing the Software and Updates over the internet to be used on multiple devices at the same time, except for the cases specified in this licence.

4. The licence does not grant the User any right to use the Software and the Update for any other purpose than to use the Mudita Pure device in line with its intended functions detailed in the manual.

5. The licence is valid for the duration of the User's possession of the Mudita Pure device and expires earlier if the User violates its terms and conditions.
diff --git a/image/assets/licenses/Espanol/eula.txt b/image/assets/licenses/Espanol/eula.txt new file mode 100755 index 0000000000000000000000000000000000000000..9ac4649288141fd357aef12456113fc5f655b7a6 --- /dev/null +++ b/image/assets/licenses/Espanol/eula.txt @@ -0,0 +1 @@ +Acuerdo de licencia de software de Mudita Pure

NOTA: AL USAR MUDITA PURE, EL USUARIO ACEPTA EL SIGUIENTE ACUERDO DE LICENCIA DE SOFTWARE. EL DISPOSITIVO NO PUEDE USARSE ADECUADAMENTE A MENOS QUE SE ACEPTE EL ACUERDO.



POR LO TANTO, ANTES DE UTILIZAR MUDITA PURE O DESCARGAR CUALQUIER ACTUALIZACIÓN DE SOFTWARE, EL USUARIO DEBE LEER EL ACUERDO DETENIDAMENTE.



SI EL USUARIO NO ESTÁ DE ACUERDO CON LAS CONDICIONES DE ESTE CONTRATO, NO PODRÁ USAR EL SOFTWARE NI CUALQUIER ACTUALIZACIÓN DESCARGABLE.



Conceptos:

Software: el sistema de software de Mudita Pure, su interfaz y su contenido (que incluye fuentes, sonidos, documentos y el resto de datos guardados en el dispositivo por defecto).

Actualización: cualquier actualización del Software, incluyendo la introducción de cualquier característica adicional o modificada, así como otro software.

Mudita: Mudita sp. z o.o. con sede en Varsovia (dirección: ul. Jana Czeczota 6, 02-607 Warszawa, Polonia) que figura en el Registro Judicial Nacional de Emprendedores polaco con el número KRS: 0000467620, número de identificación del contribuyente: 5252558282, capital social de 21 000,00 PLN;

Usuario: cualquier persona que sea propietario legítimo de un dispositivo Mudita Pure con intención de usarlo.



Términos y condiciones del acuerdo:

1. Previo acuerdo del Usuario con los términos y condiciones de este contrato, Mudita otorga al usuario de Mudita Pure permiso para utilizar su Software. Al descargar una Actualización, también se otorga el permiso de la misma. Con dicha licencia, el Usuario recibe el derecho no exclusivo y sin restricciones territoriales para utilizar el Software o sus Actualizaciones en un solo dispositivo MUDITA PURE para:

a) almacenar el Software y la Actualización en el dispositivo Mudita Pure;

b) almacenar una sola copia del Software y de la Actualización fuera del dispositivo Mudita Pure;

c) iniciar, mostrar y utilizar el Software y la Actualización en el dispositivo Mudita Pure.

2. Cada dispositivo Mudita Pure que sea propiedad legal de un Usuario, otorga al Usuario el permiso para usar el Software/Actualizaciones únicamente desde un dispositivo particular. Por lo tanto, con cada dispositivo Mudita Pure en propiedad, el Usuario obtiene una licencia por separado.

3. Mudita no permite que el Software y las Actualizaciones cubiertas por dicho permiso se usen en más de un dispositivo Mudita Pure a la vez; tampoco permite distribuir o compartir el Software y las Actualizaciones a través de internet para ser usadas en varios dispositivos a la vez, a excepción de los casos que se indican en este acuerdo.

4. La licencia no otorga al Usuario el derecho de usar el Software o las Actualizaciones para cualquier otro fin que no sea el dispositivo Mudita Pure y de acuerdo a las funciones designadas que se detallan en este manual.

5. La licencia será válida mientras el Usuario posea el dispositivo Mudita Pure y expirará si el Usuario infringe los términos y condiciones.
diff --git a/image/assets/licenses/Polski/eula.txt b/image/assets/licenses/Polski/eula.txt new file mode 100755 index 0000000000000000000000000000000000000000..8f5b1f41bcd9e0cecf39d1f49ecf63ba1bbe0cf8 --- /dev/null +++ b/image/assets/licenses/Polski/eula.txt @@ -0,0 +1 @@ +Umowa licencyjna na oprogramowanie Mudita Pure

WAŻNE: UŻYWAJĄC URZĄDZENIA MUDITA PURE, UŻYTKOWNIK AKCEPTUJE TREŚĆ PONIŻSZEJ UMOWY LICENCYJNEJ NA JEGO OPROGRAMOWANIE. BEZ JEJ AKCEPTACJI NIEMOŻLIWE JEST PRAWIDŁOWE KORZYSTANIE Z URZĄDZENIA.



W ZWIĄZKU Z TYM, PRZED UŻYCIEM MUDITA PURE LUB POBRANIEM UAKTUALNIENIA JEGO OPROGRAMOWANIA NALEŻY DOKŁADNIE PRZECZYTAĆ TEKST LICENCJI.



JEŻELI UŻYTKOWNIK NIE ZGADZA SIĘ Z POSTANOWIENIAMI NINIEJSZEJ LICENCJI, NIE MOŻE UŻYWAĆ OPROGRAMOWANIA, ANI POBIERAĆ I UŻYWAĆ AKTUALIZACJI.



Definicje:

Oprogramowanie - należy przez to rozumieć oprogramowanie systemowe Mudita Pure, interfejsy oraz jego zawartość (w tym czcionki, dźwięki, dokumentację i inne dane zapisane w pamięci urządzenia w wersji fabrycznej).

Aktualizacja - należy przez to rozumieć uaktualnianie Oprogramowania, w tym dodanie/zmianę funkcji lub zastąpienie Oprogramowania nowym oprogramowaniem.

Mudita - Mudita sp. z o.o. z siedzibą w Warszawie (adres: ul. Jana Czeczota 9 02-607 Warszawa, Polska), wpisana do rejestru przedsiębiorców Krajowego Rejestru Sądowego pod numerem KRS: 0000467620, NIP: 5252558282, kapitał zakładowy 21.100,00 PLN

Użytkownik - osoba, która zgodnie z prawem stała się posiadaczem urządzenia Mudita Pure w celu korzystania z niego.



Warunki licencji:

1. Z chwilą akceptacji przez Użytkownika warunków niniejszej licencji, Mudita udziela Użytkownikowi urządzenia Mudita Pure licencji na Oprogramowanie, zaś z chwilą pobrania przez Użytkownika Aktualizacji, także licencji do takiej Aktualizacji, w ramach której Użytkownik otrzymuje niewyłączne, nieograniczone terytorialnie, prawo do korzystania z nich na jednym urządzeniu MUDITA PURE w zakresie:

a) przechowywania Oprogramowania i/lub Aktualizacji w pamięci urządzenia Mudita Pure,

b) przechowywania jednej kopii Oprogramowania i/lub Aktualizacji poza pamięcią urządzenia Mudita Pure,

c) uruchamiania, wyświetlania i korzystania z Oprogramowania lub/i Aktualizacji na urządzeniu Mudita Pure.

2. Każdy jeden egzemplarz urządzenia Mudita Pure, który w sposób zgodny z prawem, znalazł się w posiadaniu Użytkownika, uprawnia go do licencji na Oprogramowania lub/i Aktualizacje związane wyłącznie z tym egzemplarzem, w związku czym w zakresie każdego kolejnego egzemplarza urządzenia Mudita Pure, uzyskuje on odrębną licencję.

3. Poza przypadkami określonymi w niniejszej licencji, Mudita nie zezwala na to aby Oprogramowanie lub/i Aktualizacje objęte niniejszą licencją zainstalowane były w tym samym czasie na więcej niż jednym urządzeniu Mudita Pure, a także nie zezwala na dystrybuowanie lub udostępnianie Oprogramowania lub/i Aktualizacji przez sieć w celu używania na wielu urządzeniach w tym samym czasie.

4. Niniejsza licencja nie przyznaje Użytkownikowi żadnych praw do używania Oprogramowania lub/i Aktualizacji w celach innych niż korzystanie z urządzenia Mudita Pure zgodnie z jego funkcjami opisanymi w instrukcji obsługi.

5. Niniejsza licencja obowiązuje przez czas, w jakim Użytkownik będzie posiadał urządzenie Mudita Pure, przy czym wygasa ona wcześniej, z chwilą naruszenia przez Użytkownika jej postanowień.
diff --git a/image/user/db/settings_v2_002.sql b/image/user/db/settings_v2_002.sql index 3f28e8b0fc3ccb21307f0924dfb314b63fd11438..b1ba9f78e11d03b5b6270d47f5793d324652b775 100644 --- a/image/user/db/settings_v2_002.sql +++ b/image/user/db/settings_v2_002.sql @@ -18,6 +18,8 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('gs_lock_time', '30000'), ('gs_display_language', 'English'), ('gs_input_language', 'English'), + ('gs_eula_accepted', '0'), + ('gs_onboarding_done', '0'), ('bt_state', '0'), ('bt_device_visibility', '0'), ('bt_device_name', 'PurePhone'), diff --git a/module-apps/application-onboarding/ApplicationOnBoarding.cpp b/module-apps/application-onboarding/ApplicationOnBoarding.cpp index 5f18b099bd36c2e1a41b02b4dda2655de4f7f14e..9f02ee1283e8b45b97ffb857a607f60f0514d815 100644 --- a/module-apps/application-onboarding/ApplicationOnBoarding.cpp +++ b/module-apps/application-onboarding/ApplicationOnBoarding.cpp @@ -8,10 +8,12 @@ #include "windows/OnBoardingMainWindow.hpp" #include "windows/StartConfigurationWindow.hpp" #include "windows/OnBoardingLanguagesWindow.hpp" +#include "windows/EULALicenseWindow.hpp" #include #include #include +#include namespace app { @@ -59,7 +61,7 @@ namespace app connect(typeid(manager::GetCurrentDisplayLanguageResponse), [&](sys::Message *msg) { if (gui::window::name::onBoarding_languages == getCurrentWindow()->getName()) { - switchWindow(gui::window::name::onBoarding_start_configuration, nullptr); + switchWindow(gui::window::name::onBoarding_eula, nullptr); return msgHandled(); } else { @@ -70,6 +72,11 @@ namespace app return ret; } + void ApplicationOnBoarding::acceptEULA() + { + settings->setValue(settings::SystemProperties::eulaAccepted, "1", settings::SettingsScope::Global); + } + sys::ReturnCodes ApplicationOnBoarding::DeinitHandler() { return sys::ReturnCodes::Success; @@ -83,17 +90,24 @@ namespace app void ApplicationOnBoarding::createUserInterface() { windowsFactory.attach(gui::name::window::main_window, [](Application *app, const std::string &name) { - return std::make_unique(app); + return std::make_unique(app); }); windowsFactory.attach(gui::window::name::onBoarding_languages, [](Application *app, const std::string &name) { - return std::make_unique(app); + return std::make_unique(app); }); windowsFactory.attach(gui::window::name::onBoarding_start_configuration, [](Application *app, const std::string &name) { - return std::make_unique(app); + return std::make_unique(app); }); + windowsFactory.attach(gui::window::name::onBoarding_eula, [&](Application *app, const std::string &name) { + auto eulaRepository = std::make_unique("assets/licenses", "eula.txt"); + auto presenter = std::make_unique([&]() { acceptEULA(); }, + std::move(eulaRepository)); + return std::make_unique(app, std::move(presenter)); + }); } void ApplicationOnBoarding::destroyUserInterface() {} + } // namespace app diff --git a/module-apps/application-onboarding/ApplicationOnBoarding.hpp b/module-apps/application-onboarding/ApplicationOnBoarding.hpp index 97ea91544b086642bc4c8b8d67b6a45809feb290..d6e01a630b12e26241d41d25649c48ca691e5b36 100644 --- a/module-apps/application-onboarding/ApplicationOnBoarding.hpp +++ b/module-apps/application-onboarding/ApplicationOnBoarding.hpp @@ -9,6 +9,7 @@ namespace gui::window::name { inline constexpr auto onBoarding_languages = "OnBoardingLanguages"; inline constexpr auto onBoarding_start_configuration = "OnBoardingStartingConfiguration"; + inline constexpr auto onBoarding_eula = "OnBoardingEula"; } // namespace gui::window::name namespace app @@ -27,6 +28,8 @@ namespace app sys::ReturnCodes DeinitHandler() override; sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override; + void acceptEULA(); + void createUserInterface() override; void destroyUserInterface() override; }; diff --git a/module-apps/application-onboarding/CMakeLists.txt b/module-apps/application-onboarding/CMakeLists.txt index a31755e5c5b229b5368e36a0a224d09302ede328..8e5fc96df473ac528c832dcab61f5728f2106987 100644 --- a/module-apps/application-onboarding/CMakeLists.txt +++ b/module-apps/application-onboarding/CMakeLists.txt @@ -8,19 +8,25 @@ include_directories( ${PROJECT_NAME} "${CMAKE_CURRENT_LIST_DIR}" ) -target_sources( ${PROJECT_NAME} +target_sources(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_LIST_DIR}/ApplicationOnBoarding.cpp" "${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingMainWindow.cpp" "${CMAKE_CURRENT_LIST_DIR}/windows/StartConfigurationWindow.cpp" "${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingLanguagesWindow.cpp" + "${CMAKE_CURRENT_LIST_DIR}/windows/EULALicenseWindow.cpp" + "${CMAKE_CURRENT_LIST_DIR}/presenter/EULALicenseWindowPresenter.cpp" + "${CMAKE_CURRENT_LIST_DIR}/model/EULARepository.cpp" PUBLIC "${CMAKE_CURRENT_LIST_DIR}/ApplicationOnBoarding.hpp" "${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingMainWindow.hpp" "${CMAKE_CURRENT_LIST_DIR}/windows/StartConfigurationWindow.hpp" "${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingLanguagesWindow.hpp" "${CMAKE_CURRENT_LIST_DIR}/data/OnBoardingSwitchData.hpp" + "${CMAKE_CURRENT_LIST_DIR}/windows/EULALicenseWindow.hpp" + "${CMAKE_CURRENT_LIST_DIR}/presenter/EULALicenseWindowPresenter.hpp" + "${CMAKE_CURRENT_LIST_DIR}/model/EULARepository.hpp" ) target_include_directories(${PROJECT_NAME} PRIVATE diff --git a/module-apps/application-onboarding/data/OnBoardingSwitchData.hpp b/module-apps/application-onboarding/data/OnBoardingSwitchData.hpp index c1b4ffb4b5fe658615b95d8eb2556c96631708f9..ae0e775084031bf2a6ee2d4cbddbf324af0cf2bc 100644 --- a/module-apps/application-onboarding/data/OnBoardingSwitchData.hpp +++ b/module-apps/application-onboarding/data/OnBoardingSwitchData.hpp @@ -7,7 +7,7 @@ #include #include -namespace gui +namespace app::onBoarding { class OnBoardingSwitchData : public gui::SwitchData diff --git a/module-apps/application-onboarding/model/EULARepository.cpp b/module-apps/application-onboarding/model/EULARepository.cpp new file mode 100644 index 0000000000000000000000000000000000000000..25261e9c807cfd6fb0b7c62f2215b45a0c7e982a --- /dev/null +++ b/module-apps/application-onboarding/model/EULARepository.cpp @@ -0,0 +1,33 @@ +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include +#include "module-utils/i18n/i18n.hpp" +#include "module-utils/Utils.hpp" + +#include "EULARepository.hpp" + +namespace app::onBoarding +{ + EULARepository::EULARepository(std::filesystem::path licensesPath, std::filesystem::path fileName) + : licensesPath(std::move(licensesPath)), fileName(std::move(fileName)) + {} + + std::string EULARepository::getEulaText() + { + auto displayLanguageName = utils::localize.getDisplayLanguage(); + auto eulaFile = utils::filesystem::openFile(licensesPath / displayLanguageName / fileName); + auto fileHandlerCleanup = gsl::finally([&eulaFile]() { utils::filesystem::closeFile(eulaFile); }); + + if (eulaFile == nullptr) { + eulaFile = utils::filesystem::openFile(licensesPath / utils::i18n::DefaultLanguage / fileName); + + if (eulaFile == nullptr) { + throw std::runtime_error("EULA assets missing in system!"); + } + } + auto eulaText = utils::filesystem::readFile(eulaFile); + + return eulaText; + } +} // namespace app::onBoarding diff --git a/module-apps/application-onboarding/model/EULARepository.hpp b/module-apps/application-onboarding/model/EULARepository.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c84540c653c2f5059402b248fe1bca6c69cd0b33 --- /dev/null +++ b/module-apps/application-onboarding/model/EULARepository.hpp @@ -0,0 +1,29 @@ +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include "filesystem" + +namespace app::onBoarding +{ + class AbstractEULARepository + { + public: + virtual ~AbstractEULARepository() noexcept = default; + + virtual std::string getEulaText() = 0; + }; + + class EULARepository : public AbstractEULARepository + { + public: + EULARepository(std::filesystem::path licensesPath, std::filesystem::path fileName); + + std::string getEulaText() override; + + private: + const std::filesystem::path licensesPath; + const std::filesystem::path fileName; + }; +} // namespace app::onBoarding diff --git a/module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.cpp b/module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.cpp new file mode 100644 index 0000000000000000000000000000000000000000..af09461cab97aea93ccff0a3f5ccf6918f26ceba --- /dev/null +++ b/module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.cpp @@ -0,0 +1,22 @@ +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "EULALicenseWindowPresenter.hpp" + +namespace app::onBoarding +{ + EULALicenseWindowPresenter::EULALicenseWindowPresenter(Function acceptEULAApp, + std::unique_ptr &&eulaRepository) + : acceptEULAApp(std::move(acceptEULAApp)), eulaRepository{std::move(eulaRepository)} + {} + + void EULALicenseWindowPresenter::acceptEULA() + { + acceptEULAApp(); + } + + std::string EULALicenseWindowPresenter::getEULA() + { + return eulaRepository->getEulaText(); + } +} // namespace app::onBoarding diff --git a/module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp b/module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp new file mode 100644 index 0000000000000000000000000000000000000000..b8473cec9d0960aaf0a2bc57bba564765e75f829 --- /dev/null +++ b/module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp @@ -0,0 +1,47 @@ +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include + +#include "functional" +#include "string" +#include "BasePresenter.hpp" + +using Function = std::function; + +namespace app::onBoarding +{ + class EULALicenseWindowContract + { + public: + class View + { + public: + virtual ~View() noexcept = default; + }; + class Presenter : public BasePresenter + { + public: + ~Presenter() noexcept override = default; + + virtual void acceptEULA() = 0; + virtual std::string getEULA() = 0; + }; + }; + + class EULALicenseWindowPresenter : public EULALicenseWindowContract::Presenter + { + public: + explicit EULALicenseWindowPresenter(Function acceptEULAApplication, + std::unique_ptr &&eulaRepository); + + void acceptEULA() override; + std::string getEULA() override; + + private: + std::function acceptEULAApp; + std::unique_ptr eulaRepository; + }; +} // namespace app::onBoarding diff --git a/module-apps/application-onboarding/windows/EULALicenseWindow.cpp b/module-apps/application-onboarding/windows/EULALicenseWindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ee85fcf9469c96cb92b903a86d67d707aa8d70ea --- /dev/null +++ b/module-apps/application-onboarding/windows/EULALicenseWindow.cpp @@ -0,0 +1,86 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "EULALicenseWindow.hpp" + +#include +#include + +#include +#include +#include + +namespace app::onBoarding +{ + EULALicenseWindow::EULALicenseWindow(app::Application *app, + std::unique_ptr &&windowPresenter) + : gui::AppWindow(app, gui::window::name::onBoarding_eula), presenter{std::move(windowPresenter)} + { + presenter->attach(this); + buildInterface(); + } + + EULALicenseWindow::~EULALicenseWindow() noexcept + { + destroyInterface(); + } + + void EULALicenseWindow::rebuild() + { + destroyInterface(); + buildInterface(); + } + + void EULALicenseWindow::destroyInterface() + { + erase(); + } + + void EULALicenseWindow::buildInterface() + { + AppWindow::buildInterface(); + + setTitle(utils::localize.get("app_onboarding_eula_license")); + + namespace previewStyle = app::notes::style::preview; + eulaText = new gui::Text( + this, previewStyle::LeftMargin, previewStyle::TopMargin, previewStyle::Width, previewStyle::text::Height); + eulaText->setEdges(gui::RectangleEdge::None); + eulaText->setFont(::style::window::font::medium); + eulaText->setAlignment(gui::Alignment{gui::Alignment::Vertical::Top}); + eulaText->setPenFocusWidth(::style::window::default_border_focus_w); + eulaText->setPenWidth(::style::window::default_border_rect_no_focus); + eulaText->setEditMode(gui::EditMode::Scroll); + eulaText->setCursorStartPosition(gui::CursorStartPosition::DocumentBegin); + + bottomBar->setActive(gui::BottomBar::Side::LEFT, true); + + bottomBar->setActive(gui::BottomBar::Side::CENTER, true); + bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(::style::strings::common::accept)); + + bottomBar->setActive(gui::BottomBar::Side::RIGHT, true); + bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(::style::strings::common::back)); + + setFocusItem(eulaText); + } + + void EULALicenseWindow::onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) + { + eulaText->setRichText(presenter->getEULA()); + } + + bool EULALicenseWindow::onInput(const gui::InputEvent &inputEvent) + { + if (inputEvent.isShortPress()) { + if (inputEvent.is(gui::KeyCode::KEY_ENTER)) { + + presenter->acceptEULA(); + + application->switchWindow(gui::window::name::onBoarding_start_configuration, + gui::ShowMode::GUI_SHOW_INIT, + std::make_unique()); + } + } + return AppWindow::onInput(inputEvent); + } +} // namespace app::onBoarding diff --git a/module-apps/application-onboarding/windows/EULALicenseWindow.hpp b/module-apps/application-onboarding/windows/EULALicenseWindow.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a40bf836eefb1978bc0a7d234846e4a1bfc92e16 --- /dev/null +++ b/module-apps/application-onboarding/windows/EULALicenseWindow.hpp @@ -0,0 +1,34 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include "AppWindow.hpp" + +#include + +#include +#include +#include + +namespace app::onBoarding +{ + class EULALicenseWindow : public gui::AppWindow, public EULALicenseWindowContract::View + { + public: + explicit EULALicenseWindow(app::Application *app, + std::unique_ptr &&windowPresenter); + ~EULALicenseWindow() noexcept override; + + void onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) override; + bool onInput(const gui::InputEvent &inputEvent) override; + + void rebuild() override; + void buildInterface() override; + void destroyInterface() override; + + private: + std::unique_ptr presenter; + gui::Text *eulaText = nullptr; + }; +} // namespace app::onBoarding diff --git a/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp b/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp index 3ba8af78282c3a0a10569feb2419c52d6bbb4b38..c27fe607eda6c2d04dcb9c464a3bb3df0fd5c705 100644 --- a/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp +++ b/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp @@ -5,13 +5,13 @@ #include "OnBoardingLanguagesWindow.hpp" #include -namespace gui +namespace app::onBoarding { OnBoardingLanguagesWindow::OnBoardingLanguagesWindow(app::Application *app) - : LanguagesWindow(app, window::name::onBoarding_languages) + : LanguagesWindow(app, gui::window::name::onBoarding_languages) {} - void OnBoardingLanguagesWindow::onBeforeShow(ShowMode mode, SwitchData *data) + void OnBoardingLanguagesWindow::onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) { bottomBar->setActive(gui::BottomBar::Side::RIGHT, false); @@ -20,7 +20,7 @@ namespace gui bool OnBoardingLanguagesWindow::onInput(const gui::InputEvent &inputEvent) { - if (inputEvent.isShortPress() && inputEvent.is(KeyCode::KEY_RF)) { + if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_RF)) { return true; } else { diff --git a/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp b/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp index 587aaea5385135f38715447a3c445f1891ff13e5..3158c4583ec32b60c8737d7b7ca4cac5ca6ea585 100644 --- a/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp +++ b/module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp @@ -5,15 +5,15 @@ #include -namespace gui +namespace app::onBoarding { - class OnBoardingLanguagesWindow : public LanguagesWindow + class OnBoardingLanguagesWindow : public gui::LanguagesWindow { public: explicit OnBoardingLanguagesWindow(app::Application *app); private: - void onBeforeShow(ShowMode mode, SwitchData *data) override; + void onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) override; bool onInput(const gui::InputEvent &inputEvent) override; }; } /* namespace gui */ diff --git a/module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp b/module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp index 84a3d3a48f3efd61d3ab562252beb30073e177bb..605d6c2ddf5ae4b0cad1321458678e2fbf73a363 100644 --- a/module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp +++ b/module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp @@ -11,7 +11,7 @@ #include "module-apps/application-onboarding/data/OnBoardingSwitchData.hpp" #include "OnBoardingMainWindow.hpp" -namespace gui +namespace app::onBoarding { OnBoardingMainWindow::OnBoardingMainWindow(app::Application *app) : AppWindow(app, gui::name::window::main_window) { @@ -25,24 +25,24 @@ namespace gui bottomBar->setActive(gui::BottomBar::Side::CENTER, true); bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(::style::strings::common::start)); - new Image(this, 0, 0, 0, 0, "logo"); + new gui::Image(this, 0, 0, 0, 0, "logo"); } - top_bar::Configuration OnBoardingMainWindow::configureTopBar(top_bar::Configuration appConfiguration) + gui::top_bar::Configuration OnBoardingMainWindow::configureTopBar(gui::top_bar::Configuration appConfiguration) { - appConfiguration.set(top_bar::Indicator::Time, false); - appConfiguration.set(top_bar::Indicator::Battery, false); - appConfiguration.set(top_bar::Indicator::SimCard, false); - appConfiguration.set(top_bar::Indicator::Signal, false); + appConfiguration.set(gui::top_bar::Indicator::Time, false); + appConfiguration.set(gui::top_bar::Indicator::Battery, false); + appConfiguration.set(gui::top_bar::Indicator::SimCard, false); + appConfiguration.set(gui::top_bar::Indicator::Signal, false); return appConfiguration; } bool OnBoardingMainWindow::onInput(const gui::InputEvent &inputEvent) { - if (inputEvent.isShortPress() && inputEvent.is(KeyCode::KEY_ENTER)) { + if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_ENTER)) { application->switchWindow(gui::window::name::onBoarding_languages, gui::ShowMode::GUI_SHOW_INIT, - std::make_unique()); + std::make_unique()); return true; } diff --git a/module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp b/module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp index ed21f783071c43f214b61a62a9524ad61b7ddb8f..aa48c9ae41409840b6e3124d4982641d53ea2ecc 100644 --- a/module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp +++ b/module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp @@ -8,7 +8,7 @@ #include #include -namespace gui +namespace app::onBoarding { class OnBoardingMainWindow : public gui::AppWindow { @@ -18,6 +18,6 @@ namespace gui bool onInput(const gui::InputEvent &inputEvent) override; void buildInterface() override; - top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration) override; + gui::top_bar::Configuration configureTopBar(gui::top_bar::Configuration appConfiguration) override; }; } // namespace gui diff --git a/module-apps/application-onboarding/windows/StartConfigurationWindow.cpp b/module-apps/application-onboarding/windows/StartConfigurationWindow.cpp index 48282ee8b1c72e51d46eefa1f2dbc821cd175e5e..91d03291f195f683138e96ecf711644eb8270b39 100644 --- a/module-apps/application-onboarding/windows/StartConfigurationWindow.cpp +++ b/module-apps/application-onboarding/windows/StartConfigurationWindow.cpp @@ -11,10 +11,10 @@ #include "StartConfigurationWindow.hpp" -namespace gui +namespace app::onBoarding { StartConfigurationWindow::StartConfigurationWindow(app::Application *app) - : AppWindow(app, gui::window::name::onBoarding_start_configuration) + : gui::AppWindow(app, gui::window::name::onBoarding_start_configuration) { buildInterface(); } @@ -28,22 +28,22 @@ namespace gui bottomBar->setActive(gui::BottomBar::Side::RIGHT, true); bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(::style::strings::common::back)); - new Icon(this, - 0, - 0, - style::window_width, - style::window::default_body_height, - "logo_no_text", - utils::localize.get("app_onboarding_start_configuration")); + new gui::Icon(this, + 0, + 0, + style::window_width, + style::window::default_body_height, + "logo_no_text", + utils::localize.get("app_onboarding_start_configuration")); } bool StartConfigurationWindow::onInput(const gui::InputEvent &inputEvent) { if (inputEvent.isShortPress()) { - if (inputEvent.is(KeyCode::KEY_RF)) { - application->switchWindow(gui::window::name::onBoarding_languages, + if (inputEvent.is(gui::KeyCode::KEY_RF)) { + application->switchWindow(gui::window::name::onBoarding_eula, gui::ShowMode::GUI_SHOW_INIT, - std::make_unique()); + std::make_unique()); } return true; } diff --git a/module-apps/application-onboarding/windows/StartConfigurationWindow.hpp b/module-apps/application-onboarding/windows/StartConfigurationWindow.hpp index 55c26e54cf827f075e3015caa37a7e2de9cd82e0..4e91f84555492b8df22576e224d482deda731fc8 100644 --- a/module-apps/application-onboarding/windows/StartConfigurationWindow.hpp +++ b/module-apps/application-onboarding/windows/StartConfigurationWindow.hpp @@ -8,7 +8,7 @@ #include #include -namespace gui +namespace app::onBoarding { class StartConfigurationWindow : public gui::AppWindow { diff --git a/module-apps/application-settings-new/windows/SettingsMainWindow.cpp b/module-apps/application-settings-new/windows/SettingsMainWindow.cpp index b2fa5f16fb27a6ba6a2add0134f55d4775baf718..f0a8c78fa90dea2d86f1b0d77ea87f61a4c9a6ae 100644 --- a/module-apps/application-settings-new/windows/SettingsMainWindow.cpp +++ b/module-apps/application-settings-new/windows/SettingsMainWindow.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "SettingsMainWindow.hpp" diff --git a/module-gui/gui/widgets/Style.hpp b/module-gui/gui/widgets/Style.hpp index 700e044e1935bf00edce4cb49b707e26e397fb04..f71acd11e4486b39369e619ff1ac1c0f3af08d93 100644 --- a/module-gui/gui/widgets/Style.hpp +++ b/module-gui/gui/widgets/Style.hpp @@ -151,6 +151,7 @@ namespace style inline constexpr auto stop = "common_stop"; inline constexpr auto resume = "common_resume"; inline constexpr auto pause = "common_pause"; + inline constexpr auto accept = "common_accept"; // days inline constexpr auto Monday = "common_monday"; inline constexpr auto Tuesday = "common_tuesday"; diff --git a/module-services/service-db/agents/settings/SystemSettings.hpp b/module-services/service-db/agents/settings/SystemSettings.hpp index 2ab317fece8ea721fc8f678b3ce0555a7115e2f8..e2374f5ea077b583fdaf1c12db8142276b2aef22 100644 --- a/module-services/service-db/agents/settings/SystemSettings.hpp +++ b/module-services/service-db/agents/settings/SystemSettings.hpp @@ -7,16 +7,17 @@ namespace settings { namespace SystemProperties { - constexpr inline auto activeSim = "gs_active_sim"; - constexpr inline auto lockPassHash = "gs_lock_pass_hash"; - constexpr inline auto lockScreenPasscodeIsOn = "gs_lock_screen_passcode_is_on"; - constexpr inline auto lockTime = "gs_lock_time"; - constexpr inline auto displayLanguage = "gs_display_language"; - constexpr inline auto inputLanguage = "gs_input_language"; + constexpr inline auto activeSim = "gs_active_sim"; + constexpr inline auto lockPassHash = "gs_lock_pass_hash"; + constexpr inline auto lockScreenPasscodeIsOn = "gs_lock_screen_passcode_is_on"; + constexpr inline auto lockTime = "gs_lock_time"; + constexpr inline auto displayLanguage = "gs_display_language"; + constexpr inline auto inputLanguage = "gs_input_language"; constexpr inline auto automaticDateAndTimeIsOn = "gs_automatic_date_and_time_is_on"; constexpr inline auto automaticTimeZoneIsOn = "gs_automatic_time_zone_is_on"; constexpr inline auto timeFormat = "gs_time_format"; constexpr inline auto dateFormat = "gs_date_format"; + constexpr inline auto eulaAccepted = "gs_eula_accepted"; } // namespace SystemProperties namespace Bluetooth { diff --git a/module-utils/Utils.cpp b/module-utils/Utils.cpp index 3b5e9bf6e80ce813497b38cedafd1ba297ff16ab..9231a072091ed7b292fe38581d3e01432b5d0250 100644 --- a/module-utils/Utils.cpp +++ b/module-utils/Utils.cpp @@ -86,6 +86,26 @@ namespace utils::filesystem return ret; } + std::FILE *openFile(const std::filesystem::path &filePath) noexcept + { + return std::fopen(filePath.c_str(), "r"); + } + + std::string readFile(std::FILE *file) noexcept + { + uint32_t fsize = utils::filesystem::filelength(file); + auto stream = std::make_unique(fsize + 1); + std::fread(stream.get(), 1, fsize, file); + + return stream.get(); + } + + void closeFile(std::FILE *file) noexcept + { + if (file != nullptr) { + std::fclose(file); + } + } } // namespace utils::filesystem namespace utils diff --git a/module-utils/Utils.hpp b/module-utils/Utils.hpp index ad39f142c11efdacc29069dd685c4bb00cad6931..48de3023a8b72fdc5bc39a9cf20589c86fbe8787 100644 --- a/module-utils/Utils.hpp +++ b/module-utils/Utils.hpp @@ -132,7 +132,7 @@ namespace utils } } - auto fractionalPart = static_cast(roundl(frac)); + auto fractionalPart = static_cast(roundl(frac)); auto fractionalPartLength = std::to_string(fractionalPart).length(); if (fractionalPartLength > precision) { base += 1; @@ -265,5 +265,8 @@ namespace utils void computeCRC32(std::FILE *file, unsigned long *outCrc32) noexcept; [[nodiscard]] std::string generateRandomId(std::size_t length = 0) noexcept; [[nodiscard]] std::string getline(std::FILE *stream, uint32_t length = 1024) noexcept; + [[nodiscard]] std::FILE *openFile(const std::filesystem::path &filePath) noexcept; + [[nodiscard]] std::string readFile(std::FILE *file) noexcept; + void closeFile(std::FILE *file) noexcept; } // namespace filesystem } // namespace utils diff --git a/module-utils/i18n/i18n.cpp b/module-utils/i18n/i18n.cpp index 64dfb2dffac428195433e8228033b15e4489ec6b..e1d964ce689e072b3653a61ea59782e7c3d83735 100644 --- a/module-utils/i18n/i18n.cpp +++ b/module-utils/i18n/i18n.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "log/log.hpp" diff --git a/module-utils/i18n/i18n.hpp b/module-utils/i18n/i18n.hpp index eb7a128d7ec366f3ff5fa1c893de46332bcf3cc3..0d195dc3b6ad1200df2b51fd577896fb3795195a 100644 --- a/module-utils/i18n/i18n.hpp +++ b/module-utils/i18n/i18n.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -44,6 +44,7 @@ namespace utils virtual ~i18n() = default; void setInputLanguage(const Language &lang); + const std::string &getInputLanguage(const std::string &inputMode); const std::string &getInputLanguageFilename(const std::string &inputMode); const std::string &getInputLanguage(); const std::string &getDisplayLanguage();