A image/assets/images/logo_no_text.vpi => image/assets/images/logo_no_text.vpi +0 -0
M image/assets/lang/English.json => image/assets/lang/English.json +34 -39
@@ 77,28 77,28 @@
"home_modes_connected": "CONNECTED",
"home_modes_notdisturb": "DO NOT DISTURB",
"home_modes_offline": "OFFLINE",
- "app_alarm_clock_title_main" : "Alarm clock",
- "app_alarm_clock_repeat_never" : "Never",
- "app_alarm_clock_repeat_everyday" : "Everyday",
- "app_alarm_clock_repeat_week_days" : "Week Days",
- "app_alarm_clock_repeat_custom" : "Custom",
- "app_alarm_clock_no_alarms_information" : "<text align='center' color='9'>No alarms yet.<p>Press <b>left arrow</b> to add new.</p></text>",
+ "app_alarm_clock_title_main": "Alarm clock",
+ "app_alarm_clock_repeat_never": "Never",
+ "app_alarm_clock_repeat_everyday": "Everyday",
+ "app_alarm_clock_repeat_week_days": "Week Days",
+ "app_alarm_clock_repeat_custom": "Custom",
+ "app_alarm_clock_no_alarms_information": "<text align='center' color='9'>No alarms yet.<p>Press <b>left arrow</b> to add new.</p></text>",
"app_alarm_clock_options_title": "Options",
"app_alarm_clock_options_edit": "Edit",
"app_alarm_clock_options_delete": "Delete",
"app_alarm_clock_options_turn_off_all_alarms": "Turn off all alarms",
"app_alarm_clock_delete_confirmation": "Delete this alarm?",
- "app_alarm_clock_new_alarm_title" : "New alarm",
- "app_alarm_clock_edit_alarm_title" : "Edit alarm",
- "app_alarm_clock_sound" : "Sound",
- "app_alarm_clock_snooze" : "Snooze",
- "app_alarm_clock_repeat" :"Repeat",
- "app_alarm_clock_snooze_5_min" : "5 min",
- "app_alarm_clock_snooze_10_min" : "10 min",
- "app_alarm_clock_snooze_15_min" : "15 min",
- "app_alarm_clock_snooze_30_min" : "30 min",
- "app_alarm_clock_play_pause" : "PLAY/PAUSE",
- "app_alarm_clock_edit" : "EDIT",
+ "app_alarm_clock_new_alarm_title": "New alarm",
+ "app_alarm_clock_edit_alarm_title": "Edit alarm",
+ "app_alarm_clock_sound": "Sound",
+ "app_alarm_clock_snooze": "Snooze",
+ "app_alarm_clock_repeat": "Repeat",
+ "app_alarm_clock_snooze_5_min": "5 min",
+ "app_alarm_clock_snooze_10_min": "10 min",
+ "app_alarm_clock_snooze_15_min": "15 min",
+ "app_alarm_clock_snooze_30_min": "30 min",
+ "app_alarm_clock_play_pause": "PLAY/PAUSE",
+ "app_alarm_clock_edit": "EDIT",
"app_calendar_title_main": "Calendar",
"app_calendar_options_title": "Options",
"app_calendar_options_edit": "Edit",
@@ 136,17 136,14 @@
"app_calendar_all_day": "All day",
"app_calendar_new_edit_event_start": "Start",
"app_calendar_new_edit_event_end": "End",
-
"app_calculator_title_main": "Calculator",
"app_calculator_equals": "EQUALS",
"app_calculator_decimal_separator": ".",
"app_calculator_error": "Error",
-
"app_options_invalid_option": " <Invalid Option> ",
"app_options_contact_details": "Contact details",
"app_options_contact_add": "Add to contacts",
"app_options_contact_edit": "Edit Contact",
-
"app_notes_title_main": "Notes",
"app_notes_edit_new_note": "Edit/New Note",
"app_notes_copy_text": "Copy text",
@@ 157,7 154,6 @@
"app_notes_note_delete_confirmation": "Do you really want to delete this note?",
"app_notes_no_notes": "<text align='center' color='9'>No notes yet.<p>Press <b>left arrow</b> to add new.</p></text>",
"app_notes_search_no_results": "No notes found.",
-
"app_calllog_title_main": "Calls",
"app_calllog_new_note": "New Note",
"app_calllog_save": "SAVE",
@@ 173,7 169,6 @@
"app_calllog_options_title": "Options",
"app_calllog_options_delete_call": "Delete call",
"app_calllog_delete_call_confirmation": "Do you really want to delete this call from the list?",
-
"app_desktop_unlock": "UNLOCK",
"app_desktop_lock": "LOCK",
"app_desktop_menu": "MENU",
@@ 182,7 177,7 @@
"app_desktop_info_mmi_none_specified_failed": "Operation failed",
"app_desktop_info_mmi_none_specified_success": "Operation successful",
"app_desktop_info_mmi_common_failed": "failed",
- "app_desktop_info_mmi_common_no_meassage" :"not",
+ "app_desktop_info_mmi_common_no_meassage": "not",
"app_desktop_info_mmi_common_mmi_not_supported": "not supported",
"app_desktop_info_mmi_common_enabled": "enabled",
"app_desktop_info_mmi_common_disabled": "disabled",
@@ 192,7 187,7 @@
"app_desktop_info_mmi_common_sync": "sync",
"app_desktop_info_mmi_common_async": "async",
"app_desktop_info_mmi_common_all_disabled": "all disabled",
- "app_desktop_info_mmi_common_deactivated":"deactivated",
+ "app_desktop_info_mmi_common_deactivated": "deactivated",
"app_desktop_info_mmi_common_activated": "activated",
"app_desktop_info_mmi_common_query": "query",
"app_desktop_info_mmi_clir_according_to_subscription": "CLIR according to subscription",
@@ 221,12 216,12 @@
"app_desktop_info_mmi_clip_unknown": "CLIP unknown",
"app_desktop_info_mmi_call_waiting_activated": " call waiting activated",
"app_desktop_info_mmi_call_waiting_deactivated": "call waiting deactivated",
- "app_desktop_info_mmi_call_forwarding" : "Call forwarding",
- "app_desktop_info_mmi_call_barring" : "Call barring",
- "app_desktop_info_mmi_call_waiting" : "Call waiting",
- "app_desktop_info_mmi_clip" : "Caller ID displayed (CLIP)",
- "app_desktop_info_mmi_clir" : "Caller ID suppressed (CLIR)",
- "app_desktop_info_mmi_imei" : "IMEI (MEID)",
+ "app_desktop_info_mmi_call_forwarding": "Call forwarding",
+ "app_desktop_info_mmi_call_barring": "Call barring",
+ "app_desktop_info_mmi_call_waiting": "Call waiting",
+ "app_desktop_info_mmi_clip": "Caller ID displayed (CLIP)",
+ "app_desktop_info_mmi_clir": "Caller ID suppressed (CLIR)",
+ "app_desktop_info_mmi_imei": "IMEI (MEID)",
"app_desktop_info_mmi_result_success": "Success",
"app_desktop_info_mmi_result_failed": "Failed",
"app_desktop_header_sim_setup": "<text><token>$SIM</token> setup</text>",
@@ 275,7 270,6 @@
"app_desktop_clear": "CLEAR",
"app_desktop_clear_all": "CLEAR ALL",
"app_desktop_replay": "REPLY",
-
"app_call_call": "CALL",
"app_call_clear": "CLEAR",
"app_call_reject": "REJECT",
@@ 310,6 304,7 @@
"app_messages_thread_not_sent": "Not sent: ",
"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_settings_title_main": "Settings",
"app_settings_title_main_new": "Settings New",
"app_settings_bt": "Bluetooth",
@@ 390,8 385,8 @@
"app_settings_network_sim1": "Sim1",
"app_settings_network_sim2": "Sim2",
"app_settings_network_sim_none": "No Sim",
- "app_settings_network_voice_over_lte" : "VoLTE (experimental)",
- "app_settings_network_apn_settings" : "APN settings",
+ "app_settings_network_voice_over_lte": "VoLTE (experimental)",
+ "app_settings_network_apn_settings": "APN settings",
"app_settings_toggle_on": "ON",
"app_settings_toggle_off": "OFF",
"app_settings_security_lock_screen_passcode": "Lock screen passcode",
@@ 402,11 397,11 @@
"app_settings_security_wrong_passcode": "Wrong passcode!",
"app_settings_security_passcode_changed_successfully": "Passcode changed successfully!",
"app_settings_security_passcode_disabled": "Passcode disabled!",
- "app_settings_apn_settings_no_apns" : "<text align='center' color='9'>No APNs yet.<p>Press <b>left arrow</b> to add new.</p></text>",
- "app_settings_apn_options" : "Options",
- "app_settings_apn_options_delete" : "Delete",
- "app_settings_apn_options_edit" : "Edit",
- "app_settings_apn_options_set_as_default" : "Set as default",
+ "app_settings_apn_settings_no_apns": "<text align='center' color='9'>No APNs yet.<p>Press <b>left arrow</b> to add new.</p></text>",
+ "app_settings_apn_options": "Options",
+ "app_settings_apn_options_delete": "Delete",
+ "app_settings_apn_options_edit": "Edit",
+ "app_settings_apn_options_set_as_default": "Set as default",
"app_settings_new_edit_apn": "New/Edit APN",
"app_settings_apn_name": "Name",
"app_settings_apn_APN": "APN",
@@ 414,7 409,7 @@
"app_settings_apn_password": "Password",
"app_settings_apn_authtype": "Authentication type",
"app_settings_apn_apntype": "APN Type",
- "app_settings_apn_apnprotocol" : "APN Protocol",
+ "app_settings_apn_apnprotocol": "APN Protocol",
"app_settings_title_color_test": "Display available colors",
"app_settings_toolbar_reset": "RESET",
"app_phonebook_title_main": "Contacts",
M image/assets/lang/Polski.json => image/assets/lang/Polski.json +1 -0
@@ 102,6 102,7 @@
"app_call_is_calling": "dzwoni",
"app_call_call_ended": "zakończono",
"app_call_contact": "KONTAKT",
+ "app_onboarding_start_configuration": "<text font='gt_pressura' weight='light' size='46'><p>Witaj!</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Zacznijmy konfigurację Mudita Pure.</text>",
"app_settings_title_main": "Ustawienia",
"app_settings_bt": "Bluetooth",
"app_settings_date_and_time": "Data i Czas",
M module-apps/CMakeLists.txt => module-apps/CMakeLists.txt +1 -0
@@ 51,6 51,7 @@ set(APPLICATIONS
settings-new
call
notes
+ onboarding
phonebook
messages
calllog
M module-apps/application-notes/ApplicationNotes.cpp => module-apps/application-notes/ApplicationNotes.cpp +3 -3
@@ 19,6 19,7 @@
#include <module-apps/windows/OptionWindow.hpp>
#include <module-apps/windows/Dialog.hpp>
#include <module-services/service-db/service-db/DBNotificationMessage.hpp>
+#include <utility>
namespace app
{
@@ 28,7 29,7 @@ namespace app
} // namespace
ApplicationNotes::ApplicationNotes(std::string name, std::string parent, StartInBackground startInBackground)
- : Application(name, parent, startInBackground, NotesStackSize)
+ : Application(std::move(name), std::move(parent), startInBackground, NotesStackSize)
{
bus.channels.push_back(sys::BusChannel::ServiceDBNotifications);
}
@@ 43,8 44,7 @@ namespace app
}
if (msgl->messageType == MessageType::DBServiceNotification) {
- auto msg = dynamic_cast<db::NotificationMessage *>(msgl);
- if (msg != nullptr) {
+ if (auto msg = dynamic_cast<db::NotificationMessage *>(msgl); msg != nullptr) {
// window-specific actions
if (msg->interface == db::Interface::Name::Notes) {
for (auto &[name, window] : windowsStack) {
A module-apps/application-onboarding/ApplicationOnBoarding.cpp => module-apps/application-onboarding/ApplicationOnBoarding.cpp +99 -0
@@ 0,0 1,99 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include <utility>
+
+#include "ApplicationOnBoarding.hpp"
+
+#include "windows/OnBoardingMainWindow.hpp"
+#include "windows/StartConfigurationWindow.hpp"
+#include "windows/OnBoardingLanguagesWindow.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>
+
+namespace app
+{
+ namespace
+ {
+ constexpr auto OnBoardingStackSize = 4096U;
+ } // namespace
+
+ ApplicationOnBoarding::ApplicationOnBoarding(std::string name,
+ std::string parent,
+ StartInBackground startInBackground)
+ : Application(std::move(name), std::move(parent), startInBackground, OnBoardingStackSize)
+ {
+ using namespace gui::top_bar;
+ topBarManager->enableIndicators({Indicator::Signal,
+ Indicator::Time,
+ Indicator::Battery,
+ Indicator::SimCard,
+ Indicator::NetworkAccessTechnology});
+
+ bus.channels.push_back(sys::BusChannel::ServiceDBNotifications);
+ }
+
+ // Invoked upon receiving data message
+ sys::MessagePointer ApplicationOnBoarding::DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp)
+ {
+ auto retMsg = Application::DataReceivedHandler(msgl);
+ // if message was handled by application's template there is no need to process further.
+ if (reinterpret_cast<sys::ResponseMessage *>(retMsg.get())->retCode == sys::ReturnCodes::Success) {
+ return retMsg;
+ }
+
+ return msgNotHandled();
+ }
+
+ sys::ReturnCodes ApplicationOnBoarding::InitHandler()
+ {
+ const auto ret = Application::InitHandler();
+ if (ret != sys::ReturnCodes::Success) {
+ return ret;
+ }
+
+ createUserInterface();
+ setActiveWindow(gui::name::window::main_window);
+
+ connect(typeid(manager::GetCurrentDisplayLanguageResponse), [&](sys::Message *msg) {
+ if (gui::window::name::onBoarding_languages == getCurrentWindow()->getName()) {
+ switchWindow(gui::window::name::onBoarding_start_configuration, nullptr);
+ return msgHandled();
+ }
+ else {
+ return msgNotHandled();
+ }
+ });
+
+ return ret;
+ }
+
+ sys::ReturnCodes ApplicationOnBoarding::DeinitHandler()
+ {
+ return sys::ReturnCodes::Success;
+ }
+
+ sys::ReturnCodes ApplicationOnBoarding::SwitchPowerModeHandler(const sys::ServicePowerMode mode)
+ {
+ return sys::ReturnCodes::Success;
+ }
+
+ void ApplicationOnBoarding::createUserInterface()
+ {
+ windowsFactory.attach(gui::name::window::main_window, [](Application *app, const std::string &name) {
+ return std::make_unique<gui::OnBoardingMainWindow>(app);
+ });
+ windowsFactory.attach(gui::window::name::onBoarding_languages, [](Application *app, const std::string &name) {
+ return std::make_unique<gui::OnBoardingLanguagesWindow>(app);
+ });
+ windowsFactory.attach(gui::window::name::onBoarding_start_configuration,
+ [](Application *app, const std::string &name) {
+ return std::make_unique<gui::StartConfigurationWindow>(app);
+ });
+ }
+
+ void ApplicationOnBoarding::destroyUserInterface()
+ {}
+} // namespace app
A module-apps/application-onboarding/ApplicationOnBoarding.hpp => module-apps/application-onboarding/ApplicationOnBoarding.hpp +41 -0
@@ 0,0 1,41 @@
+// 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 "Application.hpp"
+
+namespace gui::window::name
+{
+ inline constexpr auto onBoarding_languages = "OnBoardingLanguages";
+ inline constexpr auto onBoarding_start_configuration = "OnBoardingStartingConfiguration";
+} // namespace gui::window::name
+
+namespace app
+{
+ inline constexpr auto name_onboarding = "ApplicationOnBoarding";
+
+ class ApplicationOnBoarding : public Application
+ {
+ public:
+ explicit ApplicationOnBoarding(std::string name = name_onboarding,
+ std::string parent = {},
+ StartInBackground startInBackground = {false});
+
+ sys::MessagePointer DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp) override;
+ sys::ReturnCodes InitHandler() override;
+ sys::ReturnCodes DeinitHandler() override;
+ sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override;
+
+ void createUserInterface() override;
+ void destroyUserInterface() override;
+ };
+
+ template <> struct ManifestTraits<ApplicationOnBoarding>
+ {
+ static auto GetManifest() -> manager::ApplicationManifest
+ {
+ return {{manager::actions::Launch}};
+ }
+ };
+} // namespace app
A module-apps/application-onboarding/CMakeLists.txt => module-apps/application-onboarding/CMakeLists.txt +28 -0
@@ 0,0 1,28 @@
+include_directories( ${CMAKE_PROJECT_NAME}
+ PUBLIC
+ "${CMAKE_CURRENT_LIST_DIR}"
+)
+
+include_directories( ${PROJECT_NAME}
+ PUBLIC
+ "${CMAKE_CURRENT_LIST_DIR}"
+)
+
+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"
+ 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"
+)
+target_include_directories(${PROJECT_NAME}
+ PRIVATE
+ service-db
+)
A module-apps/application-onboarding/data/OnBoardingSwitchData.hpp => module-apps/application-onboarding/data/OnBoardingSwitchData.hpp +19 -0
@@ 0,0 1,19 @@
+// 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 <SwitchData.hpp>
+#include <json/json11.hpp>
+#include <utility>
+
+namespace gui
+{
+
+ class OnBoardingSwitchData : public gui::SwitchData
+ {
+ public:
+ OnBoardingSwitchData() : SwitchData("onBoardingSwitchData")
+ {}
+ };
+} // namespace gui
A module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp => module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.cpp +30 -0
@@ 0,0 1,30 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "application-onboarding/ApplicationOnBoarding.hpp"
+#include "OnBoardingLanguagesWindow.hpp"
+#include <module-gui/gui/input/InputEvent.hpp>
+
+namespace gui
+{
+ OnBoardingLanguagesWindow::OnBoardingLanguagesWindow(app::Application *app)
+ : LanguagesWindow(app, window::name::onBoarding_languages)
+ {}
+
+ void OnBoardingLanguagesWindow::onBeforeShow(ShowMode mode, SwitchData *data)
+ {
+ bottomBar->setActive(gui::BottomBar::Side::RIGHT, false);
+
+ LanguagesWindow::onBeforeShow(mode, data);
+ }
+
+ bool OnBoardingLanguagesWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortPress() && inputEvent.is(KeyCode::KEY_RF)) {
+ return true;
+ }
+ else {
+ return LanguagesWindow::onInput(inputEvent);
+ }
+ }
+} /* namespace gui */
A module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp => module-apps/application-onboarding/windows/OnBoardingLanguagesWindow.hpp +19 -0
@@ 0,0 1,19 @@
+// 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 <module-apps/application-settings-new/windows/LanguagesWindow.hpp>
+
+namespace gui
+{
+ class OnBoardingLanguagesWindow : public LanguagesWindow
+ {
+ public:
+ explicit OnBoardingLanguagesWindow(app::Application *app);
+
+ private:
+ void onBeforeShow(ShowMode mode, SwitchData *data) override;
+ bool onInput(const gui::InputEvent &inputEvent) override;
+ };
+} /* namespace gui */
A module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp => module-apps/application-onboarding/windows/OnBoardingMainWindow.cpp +52 -0
@@ 0,0 1,52 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include <i18n/i18n.hpp>
+#include <Style.hpp>
+
+#include <InputEvent.hpp>
+
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+
+#include "module-apps/application-onboarding/data/OnBoardingSwitchData.hpp"
+#include "OnBoardingMainWindow.hpp"
+
+namespace gui
+{
+ OnBoardingMainWindow::OnBoardingMainWindow(app::Application *app) : AppWindow(app, gui::name::window::main_window)
+ {
+ buildInterface();
+ }
+
+ void OnBoardingMainWindow::buildInterface()
+ {
+ AppWindow::buildInterface();
+
+ 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");
+ }
+
+ top_bar::Configuration OnBoardingMainWindow::configureTopBar(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);
+ return appConfiguration;
+ }
+
+ bool OnBoardingMainWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortPress() && inputEvent.is(KeyCode::KEY_ENTER)) {
+ application->switchWindow(gui::window::name::onBoarding_languages,
+ gui::ShowMode::GUI_SHOW_INIT,
+ std::make_unique<gui::OnBoardingSwitchData>());
+
+ return true;
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+
+} // namespace gui
A module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp => module-apps/application-onboarding/windows/OnBoardingMainWindow.hpp +23 -0
@@ 0,0 1,23 @@
+// 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 <memory>
+
+#include <AppWindow.hpp>
+#include <module-gui/gui/widgets/Image.hpp>
+
+namespace gui
+{
+ class OnBoardingMainWindow : public gui::AppWindow
+ {
+ public:
+ explicit OnBoardingMainWindow(app::Application *app);
+
+ bool onInput(const gui::InputEvent &inputEvent) override;
+
+ void buildInterface() override;
+ top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration) override;
+ };
+} // namespace gui
A module-apps/application-onboarding/windows/StartConfigurationWindow.cpp => module-apps/application-onboarding/windows/StartConfigurationWindow.cpp +53 -0
@@ 0,0 1,53 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include <i18n/i18n.hpp>
+#include <Style.hpp>
+
+#include <InputEvent.hpp>
+
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+#include "module-apps/application-onboarding/data/OnBoardingSwitchData.hpp"
+
+#include "StartConfigurationWindow.hpp"
+
+namespace gui
+{
+ StartConfigurationWindow::StartConfigurationWindow(app::Application *app)
+ : AppWindow(app, gui::window::name::onBoarding_start_configuration)
+ {
+ buildInterface();
+ }
+
+ void StartConfigurationWindow::buildInterface()
+ {
+ AppWindow::buildInterface();
+
+ bottomBar->setActive(gui::BottomBar::Side::CENTER, true);
+ bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(::style::strings::common::start));
+ 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"));
+ }
+
+ bool StartConfigurationWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortPress()) {
+ if (inputEvent.is(KeyCode::KEY_RF)) {
+ application->switchWindow(gui::window::name::onBoarding_languages,
+ gui::ShowMode::GUI_SHOW_INIT,
+ std::make_unique<gui::OnBoardingSwitchData>());
+ }
+ return true;
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+
+} // namespace gui
A module-apps/application-onboarding/windows/StartConfigurationWindow.hpp => module-apps/application-onboarding/windows/StartConfigurationWindow.hpp +22 -0
@@ 0,0 1,22 @@
+// 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 <memory>
+
+#include <AppWindow.hpp>
+#include <module-gui/gui/widgets/Icon.hpp>
+
+namespace gui
+{
+ class StartConfigurationWindow : public gui::AppWindow
+ {
+ public:
+ explicit StartConfigurationWindow(app::Application *app);
+
+ bool onInput(const gui::InputEvent &inputEvent) override;
+
+ void buildInterface() override;
+ };
+} // namespace gui
M module-apps/application-settings-new/CMakeLists.txt => module-apps/application-settings-new/CMakeLists.txt +0 -1
@@ 16,7 16,6 @@ target_sources( ${PROJECT_NAME}
PRIVATE
ApplicationSettings.cpp
models/ApnSettingsModel.cpp
- models/LanguagesModel.cpp
models/NewApnModel.cpp
widgets/timeWidget.cpp
widgets/ChangePasscodeLockHandler.cpp
D module-apps/application-settings-new/models/LanguagesModel.cpp => module-apps/application-settings-new/models/LanguagesModel.cpp +0 -12
@@ 1,12 0,0 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
-// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
-
-#include <service-appmgr/service-appmgr/messages/GetCurrentDisplayLanguageRequest.hpp>
-#include <service-appmgr/service-appmgr/model/ApplicationManager.hpp>
-#include "LanguagesModel.hpp"
-
-void LanguagesModel::requestCurrentDisplayLanguage()
-{
- application->bus.sendUnicast(std::make_shared<app::manager::GetCurrentDisplayLanguageRequest>(),
- app::manager::ApplicationManager::ServiceName);
-}
D module-apps/application-settings-new/models/LanguagesModel.hpp => module-apps/application-settings-new/models/LanguagesModel.hpp +0 -18
@@ 1,18 0,0 @@
-// 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 <Application.hpp>
-
-class LanguagesModel
-{
- public:
- explicit LanguagesModel(app::Application *application) : application(application)
- {}
-
- void requestCurrentDisplayLanguage();
-
- private:
- app::Application *application = nullptr;
-};
M module-apps/application-settings-new/windows/LanguagesWindow.cpp => module-apps/application-settings-new/windows/LanguagesWindow.cpp +7 -17
@@ 4,21 4,24 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "application-settings-new/data/LanguagesData.hpp"
#include "LanguagesWindow.hpp"
+
+#include <utility>
#include "OptionSetting.hpp"
#include "service-appmgr/Controller.hpp"
namespace gui
{
- LanguagesWindow::LanguagesWindow(app::Application *app)
- : BaseSettingsWindow(app, window::name::languages), langList(loader.getAvailableDisplayLanguages()),
- languagesModel(app)
+ LanguagesWindow::LanguagesWindow(app::Application *app, std::string name)
+ : BaseSettingsWindow(app, std::move(name)), langList(loader.getAvailableDisplayLanguages())
{
setTitle(utils::localize.get("app_settings_title_languages"));
- languagesModel.requestCurrentDisplayLanguage();
}
void LanguagesWindow::onBeforeShow(ShowMode mode, SwitchData *data)
{
+ selectedLanguage = utils::localize.getDisplayLanguage();
+ setLanguageIndex();
+
refreshOptionsList(selectedLanguageIndex);
}
@@ 42,19 45,6 @@ namespace gui
return options;
}
- auto LanguagesWindow::handleSwitchData(SwitchData *data) -> bool
- {
- auto *languagesData = dynamic_cast<LanguagesData *>(data);
- if (languagesData == nullptr) {
- return false;
- }
-
- selectedLanguage = languagesData->getCurrentDisplayLanguage();
- setLanguageIndex();
-
- return true;
- }
-
void LanguagesWindow::setLanguageIndex()
{
for (unsigned int langIndex = 0; langIndex < langList.size(); ++langIndex) {
M module-apps/application-settings-new/windows/LanguagesWindow.hpp => module-apps/application-settings-new/windows/LanguagesWindow.hpp +3 -5
@@ 3,7 3,7 @@
#pragma once
-#include "application-settings-new/models/LanguagesModel.hpp"
+#include "application-settings-new/ApplicationSettings.hpp"
#include "BaseSettingsWindow.hpp"
#include <i18n/i18n.hpp>
@@ 12,17 12,15 @@ namespace gui
class LanguagesWindow : public BaseSettingsWindow
{
public:
- explicit LanguagesWindow(app::Application *app);
+ explicit LanguagesWindow(app::Application *app, std::string name = window::name::languages);
- private:
+ protected:
auto buildOptionsList() -> std::list<Option> override;
- auto handleSwitchData(SwitchData *data) -> bool override;
void onBeforeShow(ShowMode mode, SwitchData *data) override;
void setLanguageIndex();
utils::LangLoader loader;
const std::vector<Language> langList;
- LanguagesModel languagesModel;
Language selectedLanguage;
unsigned int selectedLanguageIndex{0};
};
M module-gui/gui/widgets/Icon.cpp => module-gui/gui/widgets/Icon.cpp +13 -20
@@ 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 "Icon.hpp"
@@ 9,40 9,33 @@
using namespace gui;
-namespace style
+namespace style::icon
{
- namespace img
- {
- constexpr uint32_t x = 176;
- constexpr uint32_t y = 90;
- } // namespace img
- namespace text
- {
- constexpr uint32_t x = 40;
- constexpr uint32_t y = 247;
- constexpr uint32_t w = 400;
- constexpr uint32_t h = 80;
- } // namespace text
-} // namespace style
+ inline constexpr gui::Length image_bottom_margin = 30;
+} // namespace style::icon
Icon::Icon(Item *parent,
const uint32_t &x,
const uint32_t &y,
const uint32_t &w,
const uint32_t &h,
- const UTF8 imageName,
+ const UTF8 &imageName,
const UTF8 &str)
- : Rect(parent, x, y, w, h)
+ : VBox(parent, x, y, w, h)
{
setEdges(RectangleEdge::None);
setPenFocusWidth(style::window::default_border_no_focus_w);
setPenWidth(style::window::default_border_no_focus_w);
+ setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
- new Image(this, style::img::x, style::img::y, imageName);
- text = new Text(this, style::text::x, style::text::y, style::text::w, style::text::h);
- text->setRichText(str);
+ auto image = new Image(this, imageName);
+ image->setMargins(Margins(0, 0, 0, style::icon::image_bottom_margin));
+
+ auto text = new Text(this, 0, 0, 0, 0);
+ text->setMaximumSize(w, h);
text->setTextType(TextType::MultiLine);
text->setEditMode(EditMode::Browse);
text->setEdges(RectangleEdge::None);
text->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
+ text->setRichText(str);
}
M module-gui/gui/widgets/Icon.hpp => module-gui/gui/widgets/Icon.hpp +4 -5
@@ 1,24 1,23 @@
-// 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
+#include <BoxLayout.hpp>
#include <Text.hpp>
#include <Image.hpp>
namespace gui
{
- class Icon : public Rect
+ class Icon : public VBox
{
- Text *text = nullptr;
-
public:
Icon(Item *parent,
const uint32_t &x,
const uint32_t &y,
const uint32_t &w,
const uint32_t &h,
- const UTF8 imageName,
+ const UTF8 &imageName,
const UTF8 &text);
~Icon() override = default;
M module-gui/gui/widgets/Image.cpp => module-gui/gui/widgets/Image.cpp +7 -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 "../core/DrawCommand.hpp"
@@ 25,6 25,12 @@ namespace gui
setPosition(x, y);
}
+ Image::Image(Item *parent, const UTF8 &imageName) : Rect(parent, 0, 0, 0, 0), imageMap{nullptr}
+ {
+ type = ItemType::IMAGE;
+ set(imageName);
+ }
+
Image::Image(const UTF8 &imageName) : imageMap{nullptr}
{
type = ItemType::IMAGE;
M module-gui/gui/widgets/Image.hpp => module-gui/gui/widgets/Image.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
@@ 24,6 24,7 @@ namespace gui
Image();
/// create new Image element and resize it to size needed by selected Image
Image(const UTF8 &);
+ Image(Item *parent, const UTF8 &imageName);
/// Create new Image element on position x,y w&h will be *ignored*
Image(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h, const UTF8 = UTF8{""});
Image(Item *parent, uint32_t x, uint32_t y, const UTF8 imgName = UTF8{""})
M module-gui/gui/widgets/InputMode.cpp => module-gui/gui/widgets/InputMode.cpp +1 -1
@@ 66,7 66,7 @@ const std::string &InputMode::get()
actualInputMode == input_mode.find(InputMode::phone)->second) {
return input_mode.at(modeNow());
}
- return utils::localize.getInputLanguage(actualInputMode);
+ return utils::localize.getInputLanguageFilename(actualInputMode);
}
void InputMode::show_input_type()
M module-services/service-appmgr/model/ApplicationManager.cpp => module-services/service-appmgr/model/ApplicationManager.cpp +10 -15
@@ 117,8 117,6 @@ namespace app::manager
{
blockingTimer->setInterval(default_application_locktime_ms);
utils::localize.setFallbackLanguage(utils::localize.DefaultLanguage);
- utils::localize.setDisplayLanguage(displayLanguage);
- utils::localize.setInputLanguage(inputLanguage);
settings->registerValueChange(
settings::SystemProperties::displayLanguage,
[this](std::string value) { displayLanguageChanged(value); },
@@ 243,7 241,7 @@ namespace app::manager
connect(typeid(DisplayLanguageChangeRequest), [this](sys::Message *request) {
auto msg = static_cast<DisplayLanguageChangeRequest *>(request);
handleDisplayLanguageChange(msg);
- return msgHandled();
+ return std::make_shared<GetCurrentDisplayLanguageResponse>(utils::localize.getDisplayLanguage());
});
connect(typeid(InputLanguageChangeRequest), [this](sys::Message *request) {
auto msg = static_cast<InputLanguageChangeRequest *>(request);
@@ 281,7 279,7 @@ namespace app::manager
return std::make_shared<sys::ResponseMessage>();
});
connect(typeid(GetCurrentDisplayLanguageRequest), [&](sys::Message *request) {
- return std::make_shared<GetCurrentDisplayLanguageResponse>(displayLanguage);
+ return std::make_shared<GetCurrentDisplayLanguageResponse>(utils::localize.getDisplayLanguage());
});
connect(typeid(UpdateInProgress), [this](sys::Message *) {
closeApplicationsOnUpdate();
@@ 613,14 611,13 @@ namespace app::manager
{
const auto &requestedLanguage = msg->getLanguage();
- if (requestedLanguage == displayLanguage) {
+ if (requestedLanguage == utils::localize.getDisplayLanguage()) {
LOG_WARN("The selected language is already set. Ignore.");
return false;
}
- displayLanguage = requestedLanguage;
settings->setValue(
- settings::SystemProperties::displayLanguage, displayLanguage, settings::SettingsScope::Global);
- utils::localize.setDisplayLanguage(displayLanguage);
+ settings::SystemProperties::displayLanguage, requestedLanguage, settings::SettingsScope::Global);
+ utils::localize.setDisplayLanguage(requestedLanguage);
rebuildActiveApplications();
return true;
}
@@ 629,13 626,13 @@ namespace app::manager
{
const auto &requestedLanguage = msg->getLanguage();
- if (requestedLanguage == inputLanguage) {
+ if (requestedLanguage == utils::localize.getInputLanguage()) {
LOG_WARN("The selected language is already set. Ignore.");
return false;
}
- inputLanguage = requestedLanguage;
- settings->setValue(settings::SystemProperties::inputLanguage, inputLanguage, settings::SettingsScope::Global);
- utils::localize.setInputLanguage(inputLanguage);
+ settings->setValue(
+ settings::SystemProperties::inputLanguage, requestedLanguage, settings::SettingsScope::Global);
+ utils::localize.setInputLanguage(requestedLanguage);
return true;
}
@@ 817,8 814,7 @@ namespace app::manager
if (value.empty()) {
return;
}
- displayLanguage = value;
- utils::localize.setDisplayLanguage(displayLanguage);
+ utils::localize.setDisplayLanguage(value);
rebuildActiveApplications();
}
void ApplicationManager::lockTimeChanged(std::string value)
@@ 834,7 830,6 @@ namespace app::manager
if (value.empty()) {
return;
}
- inputLanguage = value;
utils::localize.setInputLanguage(value);
}
} // namespace app::manager
M module-services/service-appmgr/service-appmgr/model/ApplicationManager.hpp => module-services/service-appmgr/service-appmgr/model/ApplicationManager.hpp +0 -2
@@ 157,8 157,6 @@ namespace app::manager
void displayLanguageChanged(std::string value);
void lockTimeChanged(std::string value);
void inputLanguageChanged(std::string value);
- std::string inputLanguage;
- std::string displayLanguage;
};
} // namespace app::manager
M module-utils/i18n/i18n.cpp => module-utils/i18n/i18n.cpp +11 -2
@@ 74,7 74,7 @@ namespace utils
inputLanguage = lang;
}
- const std::string &i18n::getInputLanguage(const std::string &inputMode)
+ const std::string &i18n::getInputLanguageFilename(const std::string &inputMode)
{
// if language pack returned nothing then try default language
if (inputLanguage.empty()) {
@@ 86,6 86,16 @@ namespace utils
return inputLanguageFilename;
}
+ const std::string &i18n::getInputLanguage()
+ {
+ return inputLanguage;
+ }
+
+ const std::string &i18n::getDisplayLanguage()
+ {
+ return currentDisplayLanguage;
+ }
+
const std::string &i18n::get(const std::string &str)
{
// if language pack returned nothing then try default language
@@ 122,5 132,4 @@ namespace utils
{
fallbackLanguageName = std::move(lang);
}
-
} // namespace utils
M module-utils/i18n/i18n.hpp => module-utils/i18n/i18n.hpp +3 -1
@@ 44,7 44,9 @@ 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();
const std::string &get(const std::string &str);
void setDisplayLanguage(const Language &lang);
void setFallbackLanguage(const Language &lang);
M source/main.cpp => source/main.cpp +4 -0
@@ 19,6 19,7 @@
#include <application-meditation/ApplicationMeditation.hpp>
#include <application-calculator/ApplicationCalculator.hpp>
#include <application-alarm-clock/ApplicationAlarmClock.hpp>
+#include <application-onboarding/ApplicationOnBoarding.hpp>
// services
#include <service-appmgr/model/ApplicationManager.hpp>
@@ 154,6 155,9 @@ int main()
#ifdef ENABLE_APP_ALARM_CLOCK
applications.push_back(app::CreateLauncher<app::ApplicationAlarmClock>(app::name_alarm_clock));
#endif
+#ifdef ENABLE_APP_ONBOARDING
+ applications.push_back(app::CreateLauncher<app::ApplicationOnBoarding>(app::name_onboarding));
+#endif
// start application manager
return sysmgr->RunService(
std::make_shared<app::manager::ApplicationManager>(