M image/assets/lang/English.json => image/assets/lang/English.json +2 -0
@@ 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": "<text font='gt_pressura' weight='light' size='46'><p>Hello!</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Let's configure your Mudita Pure.</text>",
+ "app_onboarding_eula_license": "License agreement (EULA)",
"app_settings_title_main": "Settings",
"app_settings_title_main_new": "Settings New",
"app_settings_bt": "Bluetooth",
A image/assets/licenses/Deutsch/eula.txt => image/assets/licenses/Deutsch/eula.txt +1 -0
@@ 0,0 1,1 @@
+<text font='gt_pressura' weight='bold' size='32'><b>Mudita Pure Software-Lizenzvereinbarung</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>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.<br></br><br></br>DAHER SOLLTE DER BENUTZER DIE LIZENZ GRÜNDLICH LESEN, BEVOR ER MUDITA PURE VERWENDET ODER SOFTWARE-UPDATES HERUNTERLÄDT.<br></br><br></br>WENN DER BENUTZER DEN BEDINGUNGEN DIESER LIZENZ NICHT ZUSTIMMT, DÜRFEN DIE SOFTWARE ODER HERUNTERLADBARE UPDATES NICHT VERWENDET WERDEN.<br></br><br></br>Begriffsbestimmungen:<br></br>Software - Mudita Pure-Systemsoftware, Schnittstellen und deren Inhalt (einschließlich Schriftarten, Sounds, Dokumente und alle anderen auf dem Gerät gespeicherten Voreinstellungen);<br></br>Update - jegliche Software-Aktualisierung, einschließlich der Einführung zusätzlicher oder geänderter Funktionen oder anderer Software;<br></br>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;<br></br>Benutzer - jegliche Person, die rechtmäßig Eigentümer eines Mudita Pure-Geräts geworden ist, um es zu verwenden.<br></br><br></br>Lizenzbedingungen:<br></br> 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:<br></br> a) die Software und das Update auf dem Mudita Pure-Gerät zu speichern;<br></br> b) eine einzelne Kopie der Software und des Updates außerhalb des Mudita Pure-Geräts zu speichern;<br></br> c) die Software oder das Update auf dem Mudita Pure-Gerät zu starten, anzuzeigen und zu verwenden.<br></br> 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.<br></br> 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.<br></br> 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.<br></br> 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.</text>
A image/assets/licenses/English/eula.txt => image/assets/licenses/English/eula.txt +1 -0
@@ 0,0 1,1 @@
+<text font='gt_pressura' weight='bold' size='32'><b>Mudita Pure software licence agreement</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>NOTE: BY USING MUDITA PURE, THE USER ACCEPTS THE FOLLOWING SOFTWARE LICENCE AGREEMENT. THE DEVICE CANNOT BE USED PROPERLY UNLESS THE LICENCE IS ACCEPTED.<br></br><br></br>THEREFORE, BEFORE USING MUDITA PURE OR DOWNLOADING ANY SOFTWARE UPDATES, THE USER SHOULD READ THE LICENCE THOROUGHLY.<br></br><br></br>IF THE USER DOES NOT AGREE TO THE TERMS OF THIS LICENCE, THE SOFTWARE OR ANY DOWNLOADABLE UPDATES CANNOT BE USED.<br></br><br></br>Definitions:<br></br>Software - Mudita Pure system software, interfaces, and its contents (including fonts, sounds, documents, and all the other default data saved on the device);<br></br>Update - any update of the Software, including the introduction of any additional or changed features or other software;<br></br>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;<br></br>User - any person who has lawfully become the owner of a Mudita Pure device in order to use it.<br></br><br></br>Licence terms and conditions:<br></br> 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:<br></br> a) store the Software and the Update on the Mudita Pure device;<br></br> b) store a single copy of the Software and the Update outside the Mudita Pure device;<br></br> c) boot up, display, and use the Software or the Update on the Mudita Pure device.<br></br> 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.<br></br> 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.<br></br> 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.<br></br> 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.</text>
A image/assets/licenses/Espanol/eula.txt => image/assets/licenses/Espanol/eula.txt +1 -0
@@ 0,0 1,1 @@
+<text font='gt_pressura' weight='bold' size='32'><b>Acuerdo de licencia de software de Mudita Pure</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>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.<br></br><br></br>POR LO TANTO, ANTES DE UTILIZAR MUDITA PURE O DESCARGAR CUALQUIER ACTUALIZACIÓN DE SOFTWARE, EL USUARIO DEBE LEER EL ACUERDO DETENIDAMENTE.<br></br><br></br>SI EL USUARIO NO ESTÁ DE ACUERDO CON LAS CONDICIONES DE ESTE CONTRATO, NO PODRÁ USAR EL SOFTWARE NI CUALQUIER ACTUALIZACIÓN DESCARGABLE.<br></br><br></br>Conceptos:<br></br>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).<br></br>Actualización: cualquier actualización del Software, incluyendo la introducción de cualquier característica adicional o modificada, así como otro software.<br></br>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;<br></br>Usuario: cualquier persona que sea propietario legítimo de un dispositivo Mudita Pure con intención de usarlo.<br></br><br></br>Términos y condiciones del acuerdo:<br></br> 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:<br></br> a) almacenar el Software y la Actualización en el dispositivo Mudita Pure;<br></br> b) almacenar una sola copia del Software y de la Actualización fuera del dispositivo Mudita Pure;<br></br> c) iniciar, mostrar y utilizar el Software y la Actualización en el dispositivo Mudita Pure.<br></br> 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.<br></br> 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.<br></br> 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.<br></br> 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.</text>
A image/assets/licenses/Polski/eula.txt => image/assets/licenses/Polski/eula.txt +1 -0
@@ 0,0 1,1 @@
+<text font='gt_pressura' weight='bold' size='32'><b>Umowa licencyjna na oprogramowanie Mudita Pure</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>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.<br></br><br></br>W ZWIĄZKU Z TYM, PRZED UŻYCIEM MUDITA PURE LUB POBRANIEM UAKTUALNIENIA JEGO OPROGRAMOWANIA NALEŻY DOKŁADNIE PRZECZYTAĆ TEKST LICENCJI.<br></br><br></br>JEŻELI UŻYTKOWNIK NIE ZGADZA SIĘ Z POSTANOWIENIAMI NINIEJSZEJ LICENCJI, NIE MOŻE UŻYWAĆ OPROGRAMOWANIA, ANI POBIERAĆ I UŻYWAĆ AKTUALIZACJI. <br></br><br></br>Definicje:<br></br>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).<br></br>Aktualizacja - należy przez to rozumieć uaktualnianie Oprogramowania, w tym dodanie/zmianę funkcji lub zastąpienie Oprogramowania nowym oprogramowaniem.<br></br>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 <br></br>Użytkownik - osoba, która zgodnie z prawem stała się posiadaczem urządzenia Mudita Pure w celu korzystania z niego.<br></br><br></br>Warunki licencji:<br></br> 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:<br></br> a) przechowywania Oprogramowania i/lub Aktualizacji w pamięci urządzenia Mudita Pure,<br></br> b) przechowywania jednej kopii Oprogramowania i/lub Aktualizacji poza pamięcią urządzenia Mudita Pure,<br></br> c) uruchamiania, wyświetlania i korzystania z Oprogramowania lub/i Aktualizacji na urządzeniu Mudita Pure.<br></br> 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ę.<br></br> 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.<br></br> 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.<br></br> 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ń.</text>
M image/user/db/settings_v2_002.sql => image/user/db/settings_v2_002.sql +2 -0
@@ 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'),
M module-apps/application-onboarding/ApplicationOnBoarding.cpp => module-apps/application-onboarding/ApplicationOnBoarding.cpp +18 -4
@@ 8,10 8,12 @@
#include "windows/OnBoardingMainWindow.hpp"
#include "windows/StartConfigurationWindow.hpp"
#include "windows/OnBoardingLanguagesWindow.hpp"
+#include "windows/EULALicenseWindow.hpp"
#include <service-db/DBMessage.hpp>
#include <module-services/service-appmgr/service-appmgr/messages/GetCurrentDisplayLanguageResponse.hpp>
#include <module-apps/application-settings-new/data/LanguagesData.hpp>
+#include <module-services/service-db/agents/settings/SystemSettings.hpp>
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<gui::OnBoardingMainWindow>(app);
+ return std::make_unique<app::onBoarding::OnBoardingMainWindow>(app);
});
windowsFactory.attach(gui::window::name::onBoarding_languages, [](Application *app, const std::string &name) {
- return std::make_unique<gui::OnBoardingLanguagesWindow>(app);
+ return std::make_unique<app::onBoarding::OnBoardingLanguagesWindow>(app);
});
windowsFactory.attach(gui::window::name::onBoarding_start_configuration,
[](Application *app, const std::string &name) {
- return std::make_unique<gui::StartConfigurationWindow>(app);
+ return std::make_unique<app::onBoarding::StartConfigurationWindow>(app);
});
+ windowsFactory.attach(gui::window::name::onBoarding_eula, [&](Application *app, const std::string &name) {
+ auto eulaRepository = std::make_unique<app::onBoarding::EULARepository>("assets/licenses", "eula.txt");
+ auto presenter = std::make_unique<app::onBoarding::EULALicenseWindowPresenter>([&]() { acceptEULA(); },
+ std::move(eulaRepository));
+ return std::make_unique<app::onBoarding::EULALicenseWindow>(app, std::move(presenter));
+ });
}
void ApplicationOnBoarding::destroyUserInterface()
{}
+
} // namespace app
M module-apps/application-onboarding/ApplicationOnBoarding.hpp => module-apps/application-onboarding/ApplicationOnBoarding.hpp +3 -0
@@ 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;
};
M module-apps/application-onboarding/CMakeLists.txt => module-apps/application-onboarding/CMakeLists.txt +7 -1
@@ 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
M module-apps/application-onboarding/data/OnBoardingSwitchData.hpp => module-apps/application-onboarding/data/OnBoardingSwitchData.hpp +1 -1
@@ 7,7 7,7 @@
#include <json/json11.hpp>
#include <utility>
-namespace gui
+namespace app::onBoarding
{
class OnBoardingSwitchData : public gui::SwitchData
A module-apps/application-onboarding/model/EULARepository.cpp => module-apps/application-onboarding/model/EULARepository.cpp +33 -0
@@ 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 <module-utils/gsl/gsl_util>
+#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
A module-apps/application-onboarding/model/EULARepository.hpp => module-apps/application-onboarding/model/EULARepository.hpp +29 -0
@@ 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
A module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.cpp => module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.cpp +22 -0
@@ 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<AbstractEULARepository> &&eulaRepository)
+ : acceptEULAApp(std::move(acceptEULAApp)), eulaRepository{std::move(eulaRepository)}
+ {}
+
+ void EULALicenseWindowPresenter::acceptEULA()
+ {
+ acceptEULAApp();
+ }
+
+ std::string EULALicenseWindowPresenter::getEULA()
+ {
+ return eulaRepository->getEulaText();
+ }
+} // namespace app::onBoarding
A module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp => module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp +47 -0
@@ 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 <module-apps/application-onboarding/model/EULARepository.hpp>
+
+#include "functional"
+#include "string"
+#include "BasePresenter.hpp"
+
+using Function = std::function<void()>;
+
+namespace app::onBoarding
+{
+ class EULALicenseWindowContract
+ {
+ public:
+ class View
+ {
+ public:
+ virtual ~View() noexcept = default;
+ };
+ class Presenter : public BasePresenter<EULALicenseWindowContract::View>
+ {
+ 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<AbstractEULARepository> &&eulaRepository);
+
+ void acceptEULA() override;
+ std::string getEULA() override;
+
+ private:
+ std::function<void()> acceptEULAApp;
+ std::unique_ptr<AbstractEULARepository> eulaRepository;
+ };
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/EULALicenseWindow.cpp => module-apps/application-onboarding/windows/EULALicenseWindow.cpp +86 -0
@@ 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 <i18n/i18n.hpp>
+#include <Style.hpp>
+
+#include <module-apps/application-notes/style/NotePreviewStyle.hpp>
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+#include <module-apps/application-onboarding/data/OnBoardingSwitchData.hpp>
+
+namespace app::onBoarding
+{
+ EULALicenseWindow::EULALicenseWindow(app::Application *app,
+ std::unique_ptr<EULALicenseWindowContract::Presenter> &&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<OnBoardingSwitchData>());
+ }
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/EULALicenseWindow.hpp => module-apps/application-onboarding/windows/EULALicenseWindow.hpp +34 -0
@@ 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 <module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp>
+
+#include <module-gui/gui/widgets/Label.hpp>
+#include <module-gui/gui/widgets/Text.hpp>
+#include <module-gui/gui/input/InputEvent.hpp>
+
+namespace app::onBoarding
+{
+ class EULALicenseWindow : public gui::AppWindow, public EULALicenseWindowContract::View
+ {
+ public:
+ explicit EULALicenseWindow(app::Application *app,
+ std::unique_ptr<EULALicenseWindowContract::Presenter> &&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<EULALicenseWindowContract::Presenter> presenter;
+ gui::Text *eulaText = nullptr;
+ };
+} // namespace app::onBoarding
M module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp => module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp +4 -4
@@ 5,13 5,13 @@
#include "OnBoardingLanguagesWindow.hpp"
#include <module-gui/gui/input/InputEvent.hpp>
-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 {
M module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp => module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp +3 -3
@@ 5,15 5,15 @@
#include <module-apps/application-settings-new/windows/LanguagesWindow.hpp>
-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 */
M module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp => module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp +9 -9
@@ 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<gui::OnBoardingSwitchData>());
+ std::make_unique<OnBoardingSwitchData>());
return true;
}
M module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp => module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp +2 -2
@@ 8,7 8,7 @@
#include <AppWindow.hpp>
#include <module-gui/gui/widgets/Image.hpp>
-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
M module-apps/application-onboarding/windows/StartConfigurationWindow.cpp => module-apps/application-onboarding/windows/StartConfigurationWindow.cpp +12 -12
@@ 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<gui::OnBoardingSwitchData>());
+ std::make_unique<OnBoardingSwitchData>());
}
return true;
}
M module-apps/application-onboarding/windows/StartConfigurationWindow.hpp => module-apps/application-onboarding/windows/StartConfigurationWindow.hpp +1 -1
@@ 8,7 8,7 @@
#include <AppWindow.hpp>
#include <module-gui/gui/widgets/Icon.hpp>
-namespace gui
+namespace app::onBoarding
{
class StartConfigurationWindow : public gui::AppWindow
{
M module-apps/application-settings-new/windows/SettingsMainWindow.cpp => module-apps/application-settings-new/windows/SettingsMainWindow.cpp +1 -1
@@ 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"
M module-gui/gui/widgets/Style.hpp => module-gui/gui/widgets/Style.hpp +1 -0
@@ 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";
M module-services/service-db/agents/settings/SystemSettings.hpp => module-services/service-db/agents/settings/SystemSettings.hpp +7 -6
@@ 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
{
M module-utils/Utils.cpp => module-utils/Utils.cpp +20 -0
@@ 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<char[]>(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
M module-utils/Utils.hpp => module-utils/Utils.hpp +4 -1
@@ 132,7 132,7 @@ namespace utils
}
}
- auto fractionalPart = static_cast<unsigned long int>(roundl(frac));
+ auto fractionalPart = static_cast<unsigned long int>(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
M module-utils/i18n/i18n.cpp => module-utils/i18n/i18n.cpp +1 -1
@@ 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"
M module-utils/i18n/i18n.hpp => module-utils/i18n/i18n.hpp +2 -1
@@ 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();