A art/phone/application_onboarding/Info.png => art/phone/application_onboarding/Info.png +0 -0
A art/phone/application_onboarding/Success.png => art/phone/application_onboarding/Success.png +0 -0
A art/phone/application_onboarding/Update.png => art/phone/application_onboarding/Update.png +0 -0
A image/assets/images/info_icon_W_G.vpi => image/assets/images/info_icon_W_G.vpi +0 -0
A image/assets/images/success_icon_W_G.vpi => image/assets/images/success_icon_W_G.vpi +0 -0
A image/assets/images/update_icon_W_G.vpi => image/assets/images/update_icon_W_G.vpi +0 -0
M image/assets/lang/English.json => image/assets/lang/English.json +8 -0
@@ 9,6 9,7 @@
"common_use": "USE",
"common_ok": "OK",
"common_back": "BACK",
+ "common_skip": "SKIP",
"common_set": "SET",
"common_yes": "Yes",
"common_no": "No",
@@ 313,8 314,15 @@
"app_messages_thread_not_sent": "Not sent: ",
"app_messages_thread_from_this": "From this message",
"app_messages_thread_you": "You: ",
+ "app_onboarding_title": "Onboarding",
"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_onboarding_title_configuration": "Configuration",
+ "app_onboarding_title_update_info": "MuditaOS update",
+ "app_onboarding_skip_confirm": "<text>Sim setup is required for network connection. Skip the setup anyway? </text>",
+ "app_onboarding_configuration_successful": "<text>Your Pure was configured</text><br></br><text>successfully.</text>",
+ "app_onboarding_no_configuration": "<text>Your Pure is not configured.</text><br></br><text>You can go to Settings to.</text><br></br><text>configure it.</text>",
+ "app_onboarding_update_info": "<text>New Mudita OS version is available.</text><br></br><text>To update your Pure Phone, please</text><br></br><text>visit: </text><text font='gt_pressura' weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>and follow the instructions.</text>",
"app_settings_title_main": "Settings",
"app_settings_title_main_new": "Settings New",
"app_settings_bt": "Bluetooth",
M module-apps/application-alarm-clock/windows/AlarmClockOptions.cpp => module-apps/application-alarm-clock/windows/AlarmClockOptions.cpp +13 -13
@@ 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 "AlarmClockOptions.hpp"
@@ 23,18 23,18 @@ namespace app::alarmClock
Application *application,
AbstractAlarmsRepository &alarmsRepository)
{
- gui::DialogMetadata meta;
- meta.text = utils::localize.get("app_alarm_clock_delete_confirmation");
- meta.title = utils::localize.get("app_alarm_clock_title_main");
- meta.icon = "phonebook_contact_delete_trashcan";
- meta.action = [record, application, &alarmsRepository] {
- alarmsRepository.remove(
- record, [application](bool) { application->switchWindow(gui::name::window::main_window); });
- return true;
- };
-
- application->switchWindow(style::alarmClock::window::name::dialogYesNo,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_alarm_clock_title_main"),
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_alarm_clock_delete_confirmation"),
+ "",
+ [record, application, &alarmsRepository] {
+ alarmsRepository.remove(record, [application](bool) {
+ application->switchWindow(gui::name::window::main_window);
+ });
+ return true;
+ }});
+ application->switchWindow(style::alarmClock::window::name::dialogYesNo, std::move(metaData));
}
} // namespace
M module-apps/application-calendar/ApplicationCalendar.cpp => module-apps/application-calendar/ApplicationCalendar.cpp +22 -20
@@ 157,28 157,30 @@ namespace app
if (equivalentWindow == EquivalentWindow::AllEventsWindow) {
popToWindow(gui::name::window::main_window);
}
- gui::DialogMetadata meta;
- meta.text = utils::localize.get("app_calendar_no_events_information");
- meta.title = title;
- meta.icon = "phonebook_empty_grey_circle_W_G";
- meta.action = [=]() -> bool {
- LOG_DEBUG("Switch to new event window");
- std::unique_ptr<EventRecordData> eventData = std::make_unique<EventRecordData>();
- eventData->setDescription(style::window::calendar::new_event);
- auto event = std::make_shared<EventsRecord>();
- event->date_from = dateFilter;
- event->date_till = dateFilter + std::chrono::hours(utils::time::Locale::max_hour_24H_mode) +
- std::chrono::minutes(utils::time::Locale::max_minutes);
- eventData->setData(event);
-
- switchWindow(
- style::window::calendar::name::new_edit_event, gui::ShowMode::GUI_SHOW_INIT, std::move(eventData));
- return true;
- };
LOG_DEBUG("Switch to no events window");
- switchWindow(style::window::calendar::name::no_events_window,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ title,
+ "phonebook_empty_grey_circle_W_G",
+ utils::localize.get("app_calendar_no_events_information"),
+ "",
+ [=]() -> bool {
+ LOG_DEBUG("Switch to new event window");
+ std::unique_ptr<EventRecordData> eventData = std::make_unique<EventRecordData>();
+ eventData->setDescription(style::window::calendar::new_event);
+ auto event = std::make_shared<EventsRecord>();
+ event->date_from = dateFilter;
+ event->date_till = dateFilter + std::chrono::hours(utils::time::Locale::max_hour_24H_mode) +
+ std::chrono::minutes(utils::time::Locale::max_minutes);
+ eventData->setData(event);
+
+ switchWindow(
+ style::window::calendar::name::new_edit_event, gui::ShowMode::GUI_SHOW_INIT, std::move(eventData));
+ return true;
+ }});
+
+ switchWindow(style::window::calendar::name::no_events_window, std::move(metaData));
}
} /* namespace app */
M module-apps/application-calendar/windows/CalendarEventsOptionsWindow.cpp => module-apps/application-calendar/windows/CalendarEventsOptionsWindow.cpp +18 -17
@@ 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 "CalendarEventsOptionsWindow.hpp"
@@ 47,7 47,7 @@ namespace gui
return false;
}
- eventRecord = item->getData();
+ eventRecord = item->getData();
clearOptions();
options = eventsOptionsList();
addOptions(options);
@@ 57,22 57,23 @@ namespace gui
auto CalendarEventsOptions::eventDelete() -> bool
{
LOG_DEBUG("Switch to delete event window");
- gui::DialogMetadata meta;
- meta.action = [=]() -> bool {
- LOG_INFO("Delete calendar event %d", static_cast<int>(eventRecord->ID));
- DBServiceAPI::GetQuery(
- application, db::Interface::Name::Events, std::make_unique<db::query::events::Remove>(eventRecord->ID));
- const uint32_t numberOfIgnoredWindows = 3;
- application->returnToPreviousWindow(numberOfIgnoredWindows);
- return true;
- };
- meta.text = utils::localize.get("app_calendar_event_delete_confirmation");
- meta.title = eventRecord->title;
- meta.icon = "phonebook_contact_delete_trashcan";
-
- this->application->switchWindow(style::window::calendar::name::dialog_yes_no,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ eventRecord->title,
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_calendar_event_delete_confirmation"),
+ "",
+ [=]() -> bool {
+ LOG_INFO("Delete calendar event %d", static_cast<int>(eventRecord->ID));
+ DBServiceAPI::GetQuery(application,
+ db::Interface::Name::Events,
+ std::make_unique<db::query::events::Remove>(eventRecord->ID));
+ const uint32_t numberOfIgnoredWindows = 3;
+ application->returnToPreviousWindow(numberOfIgnoredWindows);
+ return true;
+ }});
+ this->application->switchWindow(
+ style::window::calendar::name::dialog_yes_no, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return true;
}
} // namespace gui
M module-apps/application-call/ApplicationCall.cpp => module-apps/application-call/ApplicationCall.cpp +3 -5
@@ 233,11 233,9 @@ namespace app
const std::string &icon,
const std::string &text)
{
- gui::DialogMetadata meta;
- meta.icon = icon;
- meta.text = text;
- meta.action = std::move(action);
- switchWindow(app::window::name_dialogConfirm, std::make_unique<gui::DialogMetadataMessage>(std::move(meta)));
+ auto metaData =
+ std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{"", icon, text, "", std::move(action)});
+ switchWindow(app::window::name_dialogConfirm, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return true;
}
M module-apps/application-calllog/ApplicationCallLog.cpp => module-apps/application-calllog/ApplicationCallLog.cpp +14 -13
@@ 107,19 107,20 @@ namespace app
bool ApplicationCallLog::removeCalllogEntry(const CalllogRecord &record)
{
LOG_DEBUG("Removing CalllogRecord: %" PRIu32, record.ID);
- gui::DialogMetadata meta;
- meta.action = [=]() -> bool {
- if (DBServiceAPI::CalllogRemove(this, record.ID) == false) {
- LOG_ERROR("CalllogRemove id=%" PRIu32 " failed", record.ID);
- return false;
- }
- this->switchWindow(calllog::settings::MainWindowStr);
- return true;
- };
- meta.title = record.name;
- meta.text = utils::localize.get("app_calllog_delete_call_confirmation");
- meta.icon = "phonebook_contact_delete_trashcan";
- switchWindow(calllog::settings::DialogYesNoStr, std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{record.name,
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_calllog_delete_call_confirmation"),
+ "",
+ [=]() -> bool {
+ if (DBServiceAPI::CalllogRemove(this, record.ID) == false) {
+ LOG_ERROR("CalllogRemove id=%" PRIu32 " failed", record.ID);
+ return false;
+ }
+ this->switchWindow(calllog::settings::MainWindowStr);
+ return true;
+ }});
+ switchWindow(calllog::settings::DialogYesNoStr, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return true;
}
M module-apps/application-messages/ApplicationMessages.cpp => module-apps/application-messages/ApplicationMessages.cpp +15 -14
@@ 190,12 190,13 @@ namespace app
auto result = dynamic_cast<ContactGetByIDResult *>(response);
if (result != nullptr) {
const auto &contact = result->getResult();
- gui::DialogMetadata meta;
- meta.action = [this, record]() { return onRemoveSmsThreadConfirmed(*record); };
- meta.text = utils::localize.get("app_messages_thread_delete_confirmation");
- meta.title = contact.getFormattedName();
- meta.icon = "phonebook_contact_delete_trashcan";
- switchWindow(gui::name::window::dialog_yes_no, std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{contact.getFormattedName(),
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_messages_thread_delete_confirmation"),
+ "",
+ [this, record]() { return onRemoveSmsThreadConfirmed(*record); }});
+ switchWindow(gui::name::window::dialog_yes_no, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return true;
}
return false;
@@ 227,14 228,13 @@ namespace app
bool ApplicationMessages::removeSms(const SMSRecord &record)
{
LOG_DEBUG("Removing sms: %" PRIu32, record.ID);
-
- gui::DialogMetadata meta;
- meta.action = [this, record] { return onRemoveSmsConfirmed(record); };
- meta.text = utils::localize.get("app_messages_message_delete_confirmation");
- meta.title = record.body;
- meta.icon = "phonebook_contact_delete_trashcan";
-
- switchWindow(gui::name::window::dialog_yes_no, std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{record.body,
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_messages_message_delete_confirmation"),
+ "",
+ [this, record] { return onRemoveSmsConfirmed(record); }});
+ switchWindow(gui::name::window::dialog_yes_no, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return true;
}
@@ 285,6 285,7 @@ namespace app
auto data = std::make_unique<gui::DialogMetadataMessage>(meta);
data->ignoreCurrentWindowOnStack = true;
switchWindow(gui::name::window::dialog, std::make_unique<gui::DialogMetadataMessage>(meta));
+
return true;
}
M module-apps/application-notes/windows/NotesOptions.cpp => module-apps/application-notes/windows/NotesOptions.cpp +14 -11
@@ 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 "NotesOptions.hpp"
@@ 26,16 26,19 @@ namespace app::notes
void removeNote(const NotesRecord &record, Application *application, AbstractNotesRepository ¬esRepository)
{
- gui::DialogMetadata meta;
- meta.action = [record, application, ¬esRepository] {
- notesRepository.remove(
- record, [application](bool) { application->switchWindow(gui::name::window::main_window); });
- return true;
- };
- meta.text = utils::localize.get("app_notes_note_delete_confirmation");
- meta.icon = "phonebook_contact_delete_trashcan";
- application->switchWindow(gui::name::window::note_confirm_dialog,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_alarm_clock_title_main"),
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_notes_note_delete_confirmation"),
+ "",
+ [record, application, ¬esRepository] {
+ notesRepository.remove(record, [application](bool) {
+ application->switchWindow(gui::name::window::main_window);
+ });
+ return true;
+ }});
+ application->switchWindow(
+ gui::name::window::note_confirm_dialog, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
}
} // namespace
M module-apps/application-onboarding/ApplicationOnBoarding.cpp => module-apps/application-onboarding/ApplicationOnBoarding.cpp +20 -0
@@ 9,11 9,16 @@
#include "windows/StartConfigurationWindow.hpp"
#include "windows/OnBoardingLanguagesWindow.hpp"
#include "windows/EULALicenseWindow.hpp"
+#include "windows/ConfigurationSuccessfulDialogWindow.hpp"
+#include "windows/NoConfigurationDialogWindow.hpp"
+#include "windows/UpdateDialogWindow.hpp"
+#include "windows/SkipDialogWindow.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>
+#include <module-apps/windows/Dialog.hpp>
namespace app
{
@@ 105,6 110,21 @@ namespace app
std::move(eulaRepository));
return std::make_unique<app::onBoarding::EULALicenseWindow>(app, std::move(presenter));
});
+ windowsFactory.attach(gui::window::name::onBoarding_configuration_successful,
+ [](Application *app, const std::string &name) {
+ return std::make_unique<app::onBoarding::ConfigurationSuccessfulDialogWindow>(app);
+ });
+ windowsFactory.attach(gui::window::name::onBoarding_no_configuration,
+ [](Application *app, const std::string &name) {
+ return std::make_unique<app::onBoarding::NoConfigurationDialogWindow>(app);
+ });
+ windowsFactory.attach(gui::window::name::onBoarding_update, [](Application *app, const std::string &name) {
+ return std::make_unique<app::onBoarding::UpdateDialogWindow>(app);
+ });
+
+ windowsFactory.attach(gui::window::name::onBoarding_skip, [](Application *app, const std::string &name) {
+ return std::make_unique<app::onBoarding::SkipDialogWindow>(app);
+ });
attachPopups({gui::popup::ID::Volume});
}
M module-apps/application-onboarding/ApplicationOnBoarding.hpp => module-apps/application-onboarding/ApplicationOnBoarding.hpp +7 -3
@@ 7,9 7,13 @@
namespace gui::window::name
{
- inline constexpr auto onBoarding_languages = "OnBoardingLanguages";
- inline constexpr auto onBoarding_start_configuration = "OnBoardingStartingConfiguration";
- inline constexpr auto onBoarding_eula = "OnBoardingEula";
+ inline constexpr auto onBoarding_languages = "OnBoardingLanguages";
+ inline constexpr auto onBoarding_start_configuration = "OnBoardingStartingConfiguration";
+ inline constexpr auto onBoarding_eula = "OnBoardingEula";
+ inline constexpr auto onBoarding_configuration_successful = "OnBoardingConfigurationSuccessful";
+ inline constexpr auto onBoarding_no_configuration = "OnBoardingNoConfiguration";
+ inline constexpr auto onBoarding_update = "OnBoardingUpdate";
+ inline constexpr auto onBoarding_skip = "OnBoardingSkipConfirm";
} // namespace gui::window::name
namespace app
M module-apps/application-onboarding/CMakeLists.txt => module-apps/application-onboarding/CMakeLists.txt +12 -3
@@ 10,7 10,7 @@ include_directories( ${PROJECT_NAME}
target_sources(${PROJECT_NAME}
- PRIVATE
+ PRIVATE
"${CMAKE_CURRENT_LIST_DIR}/ApplicationOnBoarding.cpp"
"${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingMainWindow.cpp"
"${CMAKE_CURRENT_LIST_DIR}/windows/StartConfigurationWindow.cpp"
@@ 18,7 18,11 @@ target_sources(${PROJECT_NAME}
"${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}/windows/ConfigurationSuccessfulDialogWindow.cpp"
+ "${CMAKE_CURRENT_LIST_DIR}/windows/NoConfigurationDialogWindow.cpp"
+ "${CMAKE_CURRENT_LIST_DIR}/windows/UpdateDialogWindow.cpp"
+ "${CMAKE_CURRENT_LIST_DIR}/windows/SkipDialogWindow.cpp"
+ PUBLIC
"${CMAKE_CURRENT_LIST_DIR}/ApplicationOnBoarding.hpp"
"${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingMainWindow.hpp"
"${CMAKE_CURRENT_LIST_DIR}/windows/StartConfigurationWindow.hpp"
@@ 27,7 31,12 @@ target_sources(${PROJECT_NAME}
"${CMAKE_CURRENT_LIST_DIR}/windows/EULALicenseWindow.hpp"
"${CMAKE_CURRENT_LIST_DIR}/presenter/EULALicenseWindowPresenter.hpp"
"${CMAKE_CURRENT_LIST_DIR}/model/EULARepository.hpp"
-)
+ "${CMAKE_CURRENT_LIST_DIR}/windows/ConfigurationSuccessfulDialogWindow.hpp"
+ "${CMAKE_CURRENT_LIST_DIR}/windows/NoConfigurationDialogWindow.hpp"
+ "${CMAKE_CURRENT_LIST_DIR}/windows/UpdateDialogWindow.hpp"
+ "${CMAKE_CURRENT_LIST_DIR}/windows/SkipDialogWindow.hpp"
+
+ )
target_include_directories(${PROJECT_NAME}
PRIVATE
service-db
A module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.cpp => module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.cpp +43 -0
@@ 0,0 1,43 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "ConfigurationSuccessfulDialogWindow.hpp"
+
+#include <i18n/i18n.hpp>
+#include <Style.hpp>
+
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+#include <module-apps/application-onboarding/data/OnBoardingSwitchData.hpp>
+#include <module-apps/messages/DialogMetadataMessage.hpp>
+
+namespace app::onBoarding
+{
+ ConfigurationSuccessfulDialogWindow::ConfigurationSuccessfulDialogWindow(app::Application *app)
+ : gui::Dialog(app, gui::window::name::onBoarding_configuration_successful)
+ {
+ bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::start));
+ bottomBar->setActive(gui::BottomBar::Side::RIGHT, false);
+ }
+
+ bool ConfigurationSuccessfulDialogWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortPress()) {
+ if (inputEvent.is(gui::KeyCode::KEY_ENTER)) {
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_onboarding_title_update_info"),
+ "update_icon_W_G",
+ utils::localize.get("app_onboarding_update_info"),
+ "",
+ [=]() -> bool { return true; }});
+ application->switchWindow(
+ gui::window::name::onBoarding_update, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
+ return true;
+ }
+
+ if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_RF)) {
+ return true;
+ }
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.hpp => module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.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 "Dialog.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 ConfigurationSuccessfulDialogWindow : public gui::Dialog
+ {
+ public:
+ explicit ConfigurationSuccessfulDialogWindow(app::Application *app);
+
+ bool onInput(const gui::InputEvent &inputEvent) override;
+ };
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/NoConfigurationDialogWindow.cpp => module-apps/application-onboarding/windows/NoConfigurationDialogWindow.cpp +43 -0
@@ 0,0 1,43 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "NoConfigurationDialogWindow.hpp"
+
+#include <i18n/i18n.hpp>
+#include <Style.hpp>
+
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+#include <module-apps/application-onboarding/data/OnBoardingSwitchData.hpp>
+#include <module-apps/messages/DialogMetadataMessage.hpp>
+
+namespace app::onBoarding
+{
+ NoConfigurationDialogWindow::NoConfigurationDialogWindow(app::Application *app)
+ : gui::Dialog(app, gui::window::name::onBoarding_no_configuration)
+ {
+ bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::start));
+ bottomBar->setActive(gui::BottomBar::Side::RIGHT, false);
+ }
+
+ bool NoConfigurationDialogWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortPress()) {
+ if (inputEvent.is(gui::KeyCode::KEY_ENTER)) {
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_onboarding_title_update_info"),
+ "update_icon_W_G",
+ utils::localize.get("app_onboarding_update_info"),
+ "",
+ [=]() -> bool { return true; }});
+ application->switchWindow(
+ gui::window::name::onBoarding_update, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
+ return true;
+ }
+
+ if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_RF)) {
+ return true;
+ }
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/NoConfigurationDialogWindow.hpp => module-apps/application-onboarding/windows/NoConfigurationDialogWindow.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 "Dialog.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 NoConfigurationDialogWindow : public gui::Dialog
+ {
+ public:
+ explicit NoConfigurationDialogWindow(app::Application *app);
+
+ bool onInput(const gui::InputEvent &inputEvent) override;
+ };
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/SkipDialogWindow.cpp => module-apps/application-onboarding/windows/SkipDialogWindow.cpp +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
+
+#include "SkipDialogWindow.hpp"
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+
+namespace app::onBoarding
+{
+ SkipDialogWindow::SkipDialogWindow(app::Application *app)
+ : gui::DialogYesNo(app, gui::window::name::onBoarding_skip)
+ {
+ topBar->configure(configureTopBar(application->getTopBarConfiguration()));
+ }
+
+ gui::top_bar::Configuration SkipDialogWindow::configureTopBar(gui::top_bar::Configuration appConfiguration)
+ {
+ appConfiguration.set(gui::top_bar::Indicator::Time, true);
+ 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;
+ }
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/SkipDialogWindow.hpp => module-apps/application-onboarding/windows/SkipDialogWindow.hpp +17 -0
@@ 0,0 1,17 @@
+// 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 "Dialog.hpp"
+
+namespace app::onBoarding
+{
+ class SkipDialogWindow : public gui::DialogYesNo
+ {
+ public:
+ explicit SkipDialogWindow(app::Application *app);
+
+ gui::top_bar::Configuration configureTopBar(gui::top_bar::Configuration appConfiguration) override;
+ };
+} // namespace app::onBoarding
M module-apps/application-onboarding/windows/StartConfigurationWindow.cpp => module-apps/application-onboarding/windows/StartConfigurationWindow.cpp +41 -1
@@ 7,7 7,10 @@
#include <InputEvent.hpp>
#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+#include <module-apps/windows/DialogMetadata.hpp>
+#include <module-apps/messages/DialogMetadataMessage.hpp>
#include "module-apps/application-onboarding/data/OnBoardingSwitchData.hpp"
+#include "module-apps/application-onboarding/ApplicationOnBoarding.hpp"
#include "StartConfigurationWindow.hpp"
@@ 27,6 30,8 @@ namespace app::onBoarding
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));
+ bottomBar->setActive(gui::BottomBar::Side::LEFT, true);
+ bottomBar->setText(gui::BottomBar::Side::LEFT, utils::localize.get(::style::strings::common::skip));
new gui::Icon(this,
0,
@@ 45,9 50,44 @@ namespace app::onBoarding
gui::ShowMode::GUI_SHOW_INIT,
std::make_unique<OnBoardingSwitchData>());
}
+ if (inputEvent.is(gui::KeyCode::KEY_ENTER)) {
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_onboarding_title_configuration"),
+ "success_icon_W_G",
+ utils::localize.get("app_onboarding_configuration_successful"),
+ "",
+ [=]() -> bool { return true; }});
+ application->switchWindow(gui::window::name::onBoarding_configuration_successful,
+ gui::ShowMode::GUI_SHOW_INIT,
+ std::move(metaData));
+ }
+ if (inputEvent.is(gui::KeyCode::KEY_LF)) {
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ utils::localize.get("app_onboarding_title"),
+ "info_icon_W_G",
+ utils::localize.get("app_onboarding_skip_confirm"),
+ "",
+ [=]() -> bool {
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_onboarding_title_configuration"),
+ "info_icon_W_G",
+ utils::localize.get("app_onboarding_no_configuration"),
+ "",
+ [=]() -> bool { return true; }});
+
+ application->switchWindow(gui::window::name::onBoarding_no_configuration,
+ gui::ShowMode::GUI_SHOW_INIT,
+ std::move(metaData));
+ return true;
+ }});
+
+ application->switchWindow(
+ gui::window::name::onBoarding_skip, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
+ }
return true;
}
return AppWindow::onInput(inputEvent);
}
-} // namespace gui
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/UpdateDialogWindow.cpp => module-apps/application-onboarding/windows/UpdateDialogWindow.cpp +37 -0
@@ 0,0 1,37 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#include "UpdateDialogWindow.hpp"
+
+#include <i18n/i18n.hpp>
+#include <Style.hpp>
+
+#include <module-apps/application-onboarding/ApplicationOnBoarding.hpp>
+#include <module-apps/application-onboarding/data/OnBoardingSwitchData.hpp>
+#include <module-apps/messages/DialogMetadataMessage.hpp>
+
+namespace app::onBoarding
+{
+ UpdateDialogWindow::UpdateDialogWindow(app::Application *app)
+ : gui::Dialog(app, gui::window::name::onBoarding_update)
+ {
+ bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::ok));
+ bottomBar->setActive(gui::BottomBar::Side::RIGHT, false);
+ }
+
+ bool UpdateDialogWindow::onInput(const gui::InputEvent &inputEvent)
+ {
+ if (inputEvent.isShortPress()) {
+ if (inputEvent.is(gui::KeyCode::KEY_ENTER)) {
+ application->switchWindow(gui::window::name::onBoarding_start_configuration,
+ gui::ShowMode::GUI_SHOW_INIT,
+ std::make_unique<OnBoardingSwitchData>());
+ return true;
+ }
+ if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_RF)) {
+ return true;
+ }
+ }
+ return AppWindow::onInput(inputEvent);
+ }
+} // namespace app::onBoarding
A module-apps/application-onboarding/windows/UpdateDialogWindow.hpp => module-apps/application-onboarding/windows/UpdateDialogWindow.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 "Dialog.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 UpdateDialogWindow : public gui::Dialog
+ {
+ public:
+ explicit UpdateDialogWindow(app::Application *app);
+
+ bool onInput(const gui::InputEvent &inputEvent) override;
+ };
+} // namespace app::onBoarding
M module-apps/application-phonebook/windows/PhonebookContactOptions.cpp => module-apps/application-phonebook/windows/PhonebookContactOptions.cpp +51 -44
@@ 80,33 80,32 @@ namespace gui
auto PhonebookContactOptions::contactBlock(bool shouldBeBlocked) -> bool
{
LOG_DEBUG("Blocking contact: %" PRIu32, contact->ID);
- std::unique_ptr<DialogMetadata> meta = std::make_unique<DialogMetadata>();
+ std::string dialogText;
- meta->action = [=]() -> bool {
- contact->addToBlocked(shouldBeBlocked);
- DBServiceAPI::ContactUpdate(this->application, *contact);
- if (shouldBeBlocked) {
- showNotification(NotificationType::Block);
- }
- else {
- showNotification(NotificationType::Unblock);
- }
-
- return true;
- };
if (shouldBeBlocked) {
- meta->text = utils::localize.get("app_phonebook_options_block_confirm");
+ dialogText = utils::localize.get("app_phonebook_options_block_confirm");
}
else {
- meta->text = utils::localize.get("app_phonebook_options_unblock_confirm");
+ dialogText = utils::localize.get("app_phonebook_options_unblock_confirm");
}
auto contactRec = DBServiceAPI::ContactGetByID(this->application, contact->ID);
auto cont = !contactRec->empty() ? contactRec->front() : ContactRecord{};
- meta->title = cont.getFormattedName();
- meta->icon = "phonebook_contact_delete_trashcan";
- application->switchWindow(gui::window::name::dialog_yes_no,
- std::make_unique<gui::DialogMetadataMessage>(std::move(*meta)));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ cont.getFormattedName(), "phonebook_contact_delete_trashcan", dialogText, "", [=]() -> bool {
+ contact->addToBlocked(shouldBeBlocked);
+ DBServiceAPI::ContactUpdate(this->application, *contact);
+ if (shouldBeBlocked) {
+ showNotification(NotificationType::Block);
+ }
+ else {
+ showNotification(NotificationType::Unblock);
+ }
+ return true;
+ }});
+
+ application->switchWindow(gui::window::name::dialog_yes_no, std::move(metaData));
return true;
}
@@ 115,46 114,54 @@ namespace gui
LOG_DEBUG("Removing contact: %" PRIu32, contact->ID);
std::unique_ptr<DialogMetadata> meta = std::make_unique<DialogMetadata>();
- meta->action = [=]() -> bool {
- if (!DBServiceAPI::ContactRemove(this->application, contact->ID)) {
- LOG_ERROR("Contact id=%" PRIu32 " remove failed", contact->ID);
- return false;
- }
- showNotification(NotificationType::Delete);
- return true;
- };
- meta->text = utils::localize.get("app_phonebook_options_delete_confirm");
auto contactRec = DBServiceAPI::ContactGetByID(this->application, contact->ID);
auto cont = !contactRec->empty() ? contactRec->front() : ContactRecord{};
- meta->title = cont.getFormattedName();
- meta->icon = "phonebook_contact_delete_trashcan";
- application->switchWindow(gui::window::name::dialog_yes_no,
- std::make_unique<DialogMetadataMessage>(std::move(*meta)));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{cont.getFormattedName(),
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_phonebook_options_delete_confirm"),
+ "",
+ [=]() -> bool {
+ if (!DBServiceAPI::ContactRemove(this->application, contact->ID)) {
+ LOG_ERROR("Contact id=%" PRIu32 " remove failed", contact->ID);
+ return false;
+ }
+ showNotification(NotificationType::Delete);
+ return true;
+ }});
+
+ application->switchWindow(gui::window::name::dialog_yes_no, std::move(metaData));
return true;
}
auto PhonebookContactOptions::showNotification(NotificationType notificationType) -> bool
{
- DialogMetadata meta;
- meta.icon = "info_big_circle_W_G";
+ std::string dialogText;
+
switch (notificationType) {
case NotificationType::Block:
- meta.text = utils::localize.get("app_phonebook_options_block_notification");
+ dialogText = utils::localize.get("app_phonebook_options_block_notification");
break;
case NotificationType::Delete:
- meta.text = utils::localize.get("app_phonebook_options_delete_notification");
+ dialogText = utils::localize.get("app_phonebook_options_delete_notification");
break;
case NotificationType::Unblock:
- meta.text = utils::localize.get("app_phonebook_options_unblock_notification");
+ dialogText = utils::localize.get("app_phonebook_options_unblock_notification");
break;
}
- meta.action = [=]() -> bool {
- this->application->switchWindow(gui::name::window::main_window);
- return true;
- };
- meta.title = contact->getFormattedName(ContactRecord::NameFormatType::Title);
- application->switchWindow(gui::window::name::dialog_confirm,
- std::make_unique<gui::DialogMetadataMessage>(std::move(meta)));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{contact->getFormattedName(ContactRecord::NameFormatType::Title),
+ "info_big_circle_W_G",
+ dialogText,
+ "",
+ [=]() -> bool {
+ this->application->switchWindow(gui::name::window::main_window);
+ return true;
+ }});
+
+ application->switchWindow(gui::window::name::dialog_confirm, std::move(metaData));
return true;
}
} // namespace gui
M module-apps/application-phonebook/windows/PhonebookNewContact.cpp => module-apps/application-phonebook/windows/PhonebookNewContact.cpp +25 -29
@@ 204,7 204,6 @@ namespace gui
void PhonebookNewContact::showDialogDuplicatedNumber(const utils::PhoneNumber::View &duplicatedNumber)
{
- std::unique_ptr<DialogMetadata> meta = std::make_unique<DialogMetadata>();
auto matchedContact = DBServiceAPI::MatchContactByPhoneNumber(application, duplicatedNumber);
auto oldContactRecord = (matchedContact != nullptr) ? *matchedContact : ContactRecord{};
@@ 212,21 211,19 @@ namespace gui
contact->ID = oldContactRecord.ID;
}
- meta->action = [=]() -> bool {
- if (!DBServiceAPI::ContactUpdate(application, *contact)) {
- LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID);
- return false;
- }
- application->switchWindow(gui::name::window::main_window);
- return true;
- };
std::string duplicatedNumberPhrase = utils::localize.get("app_phonebook_duplicate_numbers");
phonebookUtils::fillContactData(duplicatedNumberPhrase, oldContactRecord);
- meta->text = duplicatedNumberPhrase;
- meta->title = duplicatedNumber.getFormatted();
- meta->icon = "info_big_circle_W_G";
- application->switchWindow(gui::window::name::dialog_yes_no,
- std::make_unique<gui::DialogMetadataMessage>(std::move(*meta)));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ duplicatedNumber.getFormatted(), "info_big_circle_W_G", duplicatedNumberPhrase, "", [=]() -> bool {
+ if (!DBServiceAPI::ContactUpdate(application, *contact)) {
+ LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID);
+ return false;
+ }
+ application->switchWindow(gui::name::window::main_window);
+ return true;
+ }});
+ application->switchWindow(gui::window::name::dialog_yes_no, std::move(metaData));
}
void PhonebookNewContact::showDialogDuplicatedSpeedDialNumber()
@@ 238,26 235,25 @@ namespace gui
contact->ID = oldContactRecord.ID;
}
- std::unique_ptr<DialogMetadata> metadata = std::make_unique<DialogMetadata>();
- metadata->action = [=]() -> bool {
- if (!DBServiceAPI::ContactUpdate(application, *contact)) {
- LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID);
- return false;
- }
- application->switchWindow(gui::name::window::main_window);
- return true;
- };
std::string duplicatedSpeedDialPhrase = utils::localize.get("app_phonebook_duplicate_numbers");
phonebookUtils::fillContactData(duplicatedSpeedDialPhrase, oldContactRecord);
std::string duplicatedSpeedDialTitle = utils::localize.get("app_phonebook_duplicate_speed_dial_title");
phonebookUtils::fillContactData(duplicatedSpeedDialTitle, oldContactRecord);
- metadata->text = duplicatedSpeedDialPhrase;
- metadata->title = duplicatedSpeedDialTitle;
- metadata->icon = "phonebook_empty_grey_circle_speed_dial";
- metadata->iconText = contact->speeddial;
- application->switchWindow(gui::window::name::dialog_yes_no_icon_txt,
- std::make_unique<gui::DialogMetadataMessage>(std::move(*metadata)));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{duplicatedSpeedDialTitle,
+ "phonebook_empty_grey_circle_speed_dial",
+ duplicatedSpeedDialPhrase,
+ contact->speeddial,
+ [=]() -> bool {
+ if (!DBServiceAPI::ContactUpdate(application, *contact)) {
+ LOG_ERROR("Contact id=%" PRIu32 " update failed", contact->ID);
+ return false;
+ }
+ application->switchWindow(gui::name::window::main_window);
+ return true;
+ }});
+ application->switchWindow(gui::window::name::dialog_yes_no_icon_txt, std::move(metaData));
}
} // namespace gui
M module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp +24 -20
@@ 102,17 102,19 @@ namespace gui
lockState = lockHandler.checkPasscode(app->getLockPassHash());
if (ChangePasscodeAction::OnlyCheckCurrentPasscode == changePasscodeAction &&
lockState == PinLock::LockState::NewPasscodeRequired) {
- DialogMetadata meta;
- meta.icon = "big_circle_placeholder";
- meta.text = utils::localize.get("app_settings_security_passcode_disabled");
- meta.title = utils::localize.get("app_settings_security_change_passcode");
- meta.action = [this]() {
- application->switchWindow(gui::window::name::security);
- return true;
- };
application->setLockScreenPasscodeOn(false);
- application->switchWindow(gui::window::name::dialog_confirm,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_settings_security_change_passcode"),
+ "big_circle_placeholder",
+ utils::localize.get("app_settings_security_passcode_disabled"),
+ "",
+ [this]() {
+ application->switchWindow(gui::window::name::security);
+ return true;
+ }});
+ application->switchWindow(
+ gui::window::name::dialog_confirm, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return;
}
break;
@@ 162,17 164,19 @@ namespace gui
break;
}
case PinLock::LockState::Unlocked: {
- DialogMetadata meta;
- meta.icon = "big_circle_placeholder";
- meta.text = utils::localize.get("app_settings_security_passcode_changed_successfully");
- meta.title = utils::localize.get("app_settings_security_change_passcode");
- meta.action = [this]() {
- application->switchWindow(gui::window::name::security);
- return true;
- };
application->setLockScreenPasscodeOn(true);
- application->switchWindow(gui::window::name::dialog_confirm,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(
+ gui::DialogMetadata{utils::localize.get("app_settings_security_change_passcode"),
+ "big_circle_placeholder",
+ utils::localize.get("app_settings_security_passcode_changed_successfully"),
+ "",
+ [this]() {
+ application->switchWindow(gui::window::name::security);
+ return true;
+ }});
+ application->switchWindow(
+ gui::window::name::dialog_confirm, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
break;
}
default: {
M module-apps/application-settings-new/windows/QuotesOptionsWindow.cpp => module-apps/application-settings-new/windows/QuotesOptionsWindow.cpp +13 -13
@@ 46,19 46,19 @@ namespace gui
optionsList.emplace_back(std::make_unique<gui::option::OptionSettings>(
utils::translateI18("app_settings_display_wallpaper_quotes_delete"),
[=](gui::Item &item) {
- gui::DialogMetadata meta;
- meta.text = utils::localize.get("app_settings_display_wallpaper_quotes_delete_confirmation");
- meta.title = quote.quote;
- meta.icon = "phonebook_contact_delete_trashcan";
- meta.action = [this]() {
- auto backToQuotesMainWindow = 2;
- quotesModel->remove(quote);
- application->returnToPreviousWindow(backToQuotesMainWindow);
- return true;
- };
-
- application->switchWindow(gui::window::name::quotes_dialog_yes_no,
- std::make_unique<gui::DialogMetadataMessage>(meta));
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ quote.quote,
+ "phonebook_contact_delete_trashcan",
+ utils::localize.get("app_settings_display_wallpaper_quotes_delete_confirmation"),
+ "",
+ [this]() {
+ auto backToQuotesMainWindow = 2;
+ quotesModel->remove(quote);
+ application->returnToPreviousWindow(backToQuotesMainWindow);
+ return true;
+ }});
+ application->switchWindow(
+ gui::window::name::quotes_dialog_yes_no, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
return true;
},
[=](gui::Item &item) {
M module-apps/windows/Dialog.cpp => module-apps/windows/Dialog.cpp +62 -89
@@ 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 "Dialog.hpp"
@@ 9,69 9,31 @@
using namespace gui;
-namespace style
-{
- namespace image
- {
- constexpr uint32_t x = 176;
- constexpr uint32_t y = 132;
- } // namespace image
- namespace text
- {
- constexpr uint32_t x = 40;
- constexpr uint32_t y = 290;
- constexpr uint32_t w = 400;
- constexpr uint32_t h = 132;
- } // namespace text
- namespace no
- {
- constexpr uint32_t x = 75;
- constexpr uint32_t y = 415;
- constexpr uint32_t w = 150;
- constexpr uint32_t h = 75;
- } // namespace no
- namespace yes
- {
- constexpr uint32_t x = 255;
- constexpr uint32_t y = 415;
- constexpr uint32_t w = 150;
- constexpr uint32_t h = 75;
- } // namespace yes
- namespace icontext
- {
- constexpr uint32_t x = image::x;
- constexpr uint32_t y = image::y + 40;
- constexpr uint32_t w = 130;
- constexpr uint32_t h = 100;
- } // namespace icontext
-
-} // namespace style
-
Dialog::Dialog(app::Application *app, const std::string &name) : gui::AppWindow(app, name)
{
AppWindow::buildInterface();
-
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
-
setTitle("");
- icon = new Image(this, style::image::x, style::image::y, "");
+ icon = new Icon(this,
+ style::window::default_left_margin,
+ style::header::height,
+ style::window::default_body_width,
+ style::window::default_body_height,
+ "",
+ "");
- text = new Text(this, style::text::x, style::text::y, style::text::w, style::text::h);
- text->setRichText("lol");
- text->setTextType(TextType::MultiLine);
- text->setEditMode(EditMode::Browse);
- text->setEdges(RectangleEdge::None);
- text->setFont(style::window::font::medium);
- text->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
+ icon->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Top));
+ icon->image->setMargins(Margins(0, icon::image_top_margin, 0, icon::image_bottom_margin));
}
void Dialog::onBeforeShow(ShowMode mode, SwitchData *data)
{
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
setTitle(metadata->get().title);
- text->setRichText(metadata->get().text);
- icon->set(metadata->get().icon);
+ icon->text->setRichText(metadata->get().text);
+ icon->image->set(metadata->get().icon);
+ icon->resizeItems();
}
}
@@ 100,43 62,44 @@ void DialogConfirm::onBeforeShow(ShowMode mode, SwitchData *data)
DialogYesNo::DialogYesNo(app::Application *app, const std::string &name) : Dialog(app, name)
{
- no = new Label(
- this, style::no::x, style::no::y, style::no::w, style::no::h, utils::localize.get(style::strings::common::no));
- no->setPenWidth(0);
- no->setPenFocusWidth(3);
- no->setFilled(false);
- no->setBorderColor(ColorFullBlack);
- no->setEdges(RectangleEdge::Bottom | RectangleEdge::Top);
- no->setFont(style::window::font::big);
- no->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
- no->activatedCallback = [=](Item &) -> bool {
- application->returnToPreviousWindow();
- return true;
- };
+ icon->text->setMinimumSize(style::window::default_body_width, dialog::style::option::iconTextH);
+ icon->text->setMaximumSize(style::window::default_body_width, dialog::style::option::iconTextH);
+ icon->text->setMargins(Margins(0, 0, 0, icon::image_bottom_margin));
+ icon->text->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Top));
+
+ hBox = new HBox(icon, 0, 0, 0, 0);
+ hBox->setMinimumSize(style::window::default_body_width, dialog::style::option::h);
+ hBox->setAlignment(Alignment(gui::Alignment::Horizontal::Center));
+ hBox->setEdges(RectangleEdge::None);
- yes = new Label(this,
- style::yes::x,
- style::yes::y,
- style::yes::w,
- style::yes::h,
- utils::localize.get(style::strings::common::yes));
- yes->setPenWidth(0);
- yes->setPenFocusWidth(3);
- yes->setFilled(false);
- yes->setBorderColor(ColorFullBlack);
- yes->setEdges(RectangleEdge::Bottom | RectangleEdge::Top);
- yes->setFont(style::window::font::big);
- yes->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
- yes->activatedCallback = [=](Item &) -> bool { return false; };
-
- no->setNavigationItem(NavigationDirection::RIGHT, yes);
- yes->setNavigationItem(NavigationDirection::LEFT, no);
- no->setNavigationItem(NavigationDirection::LEFT, yes);
- yes->setNavigationItem(NavigationDirection::RIGHT, no);
+ no = createYesNoOption(hBox, gui::dialog::Option::NO);
+ yes = createYesNoOption(hBox, gui::dialog::Option::YES);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("common_confirm"));
+}
- setFocusItem(no);
+Label *DialogYesNo::createYesNoOption(Item *parent, const gui::dialog::Option &optionName)
+{
+ Label *option = new Label(parent, 0, 0, 0, 0, "");
+ if (optionName == gui::dialog::Option::YES) {
+ option->setText(utils::localize.get(style::strings::common::yes));
+ option->activatedCallback = [=](Item &) -> bool { return false; };
+ }
+ else if (optionName == gui::dialog::Option::NO) {
+ option->setText(utils::localize.get(style::strings::common::no));
+ option->setMargins(Margins(0, 0, dialog::style::option::margin, 0));
+ option->activatedCallback = [=](Item &) -> bool {
+ application->returnToPreviousWindow();
+ return true;
+ };
+ }
+ option->setMinimumSize(dialog::style::option::w, dialog::style::option::h);
+ option->setPenWidth(0);
+ option->setPenFocusWidth(3);
+ option->setEdges(RectangleEdge::Bottom | RectangleEdge::Top);
+ option->setFont(style::window::font::big);
+ option->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
+ return option;
}
void DialogYesNo::onBeforeShow(ShowMode mode, SwitchData *data)
@@ 145,20 108,30 @@ void DialogYesNo::onBeforeShow(ShowMode mode, SwitchData *data)
Dialog::onBeforeShow(mode, metadata);
auto foo = metadata->get().action;
yes->activatedCallback = [=](Item &) -> bool { return foo(); };
+ hBox->resizeItems();
+
+ no->setNavigationItem(NavigationDirection::RIGHT, yes);
+ yes->setNavigationItem(NavigationDirection::LEFT, no);
+ no->setNavigationItem(NavigationDirection::LEFT, yes);
+ yes->setNavigationItem(NavigationDirection::RIGHT, no);
+
setFocusItem(no);
}
}
DialogYesNoIconTxt::DialogYesNoIconTxt(app::Application *app, const std::string &name) : DialogYesNo(app, name)
{
- iconText = new Text(this, style::icontext::x, style::icontext::y, style::icontext::w, style::icontext::h);
+ iconText = new Label(this,
+ style::window::default_left_margin,
+ style::header::height,
+ style::window::default_body_width,
+ dialog::style::iconTextLabel::h,
+ "");
+
iconText->setText("");
- iconText->setTextType(TextType::SingleLine);
- iconText->setEditMode(EditMode::Browse);
iconText->setEdges(RectangleEdge::None);
iconText->setFont(style::window::font::largelight);
- iconText->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::None));
- setFocusItem(no);
+ iconText->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
}
void DialogYesNoIconTxt::onBeforeShow(ShowMode mode, SwitchData *data)
M module-apps/windows/Dialog.hpp => module-apps/windows/Dialog.hpp +35 -6
@@ 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
@@ 7,6 7,7 @@
#include <Text.hpp>
#include <functional>
#include <DialogMetadata.hpp>
+#include <module-gui/gui/widgets/Icon.hpp>
namespace gui::window::name
{
@@ 16,7 17,31 @@ namespace gui::window::name
namespace gui
{
- class Image;
+ namespace dialog
+ {
+ enum Option
+ {
+ YES,
+ NO
+ };
+
+ namespace style
+ {
+ namespace option
+ {
+ inline constexpr auto w = 150;
+ inline constexpr auto h = 75;
+ inline constexpr auto margin = 30;
+ inline constexpr auto iconTextH = 99;
+ } // namespace option
+
+ namespace iconTextLabel
+ {
+ inline constexpr auto h = 188;
+ } // namespace iconTextLabel
+
+ } // namespace style
+ } // namespace dialog
/// @brief base Dialog class
///
@@ 24,8 49,7 @@ namespace gui
class Dialog : public AppWindow
{
protected:
- Text *text = nullptr;
- Image *icon = nullptr;
+ Icon *icon = nullptr;
public:
Dialog(app::Application *app, const std::string &name);
@@ 51,12 75,17 @@ namespace gui
class DialogYesNo : public Dialog
{
protected:
- Label *yes = nullptr, *no = nullptr;
+ Label *yes = nullptr;
+ Label *no = nullptr;
+ HBox *hBox = nullptr;
public:
DialogYesNo(app::Application *app, const std::string &name);
void onBeforeShow(ShowMode mode, SwitchData *data) override;
+
+ private:
+ Label *createYesNoOption(Item *parent, const gui::dialog::Option &optionName);
};
/// @brief Yes/No Icon Text Dialog class
@@ 65,7 94,7 @@ namespace gui
class DialogYesNoIconTxt : public DialogYesNo
{
protected:
- Text *iconText = nullptr;
+ Label *iconText = nullptr;
public:
DialogYesNoIconTxt(app::Application *app, const std::string &name);
M module-apps/windows/NoEvents.cpp => module-apps/windows/NoEvents.cpp +0 -3
@@ 42,9 42,6 @@ NoEvents::NoEvents(app::Application *app, const std::string &name) : gui::Dialog
{
arrow = new gui::Image(this, style::arrow::x, style::arrow::y, 0, 0, "arrow_left");
cross = new gui::Image(this, style::cross::x, style::cross::y, 0, 0, "cross");
-
- icon->setPosition(style::icon::x, style::icon::y);
- text->setPosition(style::text::x, style::text::y);
}
void NoEvents::onBeforeShow(ShowMode mode, SwitchData *data)
M module-gui/gui/widgets/Icon.cpp => module-gui/gui/widgets/Icon.cpp +4 -10
@@ 9,11 9,6 @@
using namespace gui;
-namespace style::icon
-{
- inline constexpr gui::Length image_bottom_margin = 30;
-} // namespace style::icon
-
Icon::Icon(Item *parent,
const uint32_t &x,
const uint32_t &y,
@@ 24,18 19,17 @@ Icon::Icon(Item *parent,
: 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));
- auto image = new Image(this, imageName);
- image->setMargins(Margins(0, 0, 0, style::icon::image_bottom_margin));
+ image = new Image(this, imageName);
+ image->setMargins(Margins(0, 0, 0, icon::image_bottom_margin));
- auto text = new Text(this, 0, 0, 0, 0);
+ 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->setFont(style::window::font::medium);
text->setRichText(str);
}
M module-gui/gui/widgets/Icon.hpp => module-gui/gui/widgets/Icon.hpp +9 -0
@@ 9,6 9,12 @@
namespace gui
{
+ namespace icon
+ {
+ inline constexpr auto image_top_margin = 30;
+ inline constexpr auto image_bottom_margin = 33;
+ } // namespace icon
+
class Icon : public VBox
{
public:
@@ 21,6 27,9 @@ namespace gui
const UTF8 &text);
~Icon() override = default;
+
+ Text *text = nullptr;
+ Image *image = nullptr;
};
}; // namespace gui
M module-gui/gui/widgets/Style.hpp => module-gui/gui/widgets/Style.hpp +1 -0
@@ 147,6 147,7 @@ namespace style
inline constexpr auto use = "common_use";
inline constexpr auto ok = "common_ok";
inline constexpr auto back = "common_back";
+ inline constexpr auto skip = "common_skip";
inline constexpr auto set = "common_set";
inline constexpr auto yes = "common_yes";
inline constexpr auto no = "common_no";
M module-services/service-desktop/endpoints/calendarEvents/CalendarEventsHelper.cpp => module-services/service-desktop/endpoints/calendarEvents/CalendarEventsHelper.cpp +4 -4
@@ 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 "EventsRecord.hpp"
@@ 356,9 356,9 @@ auto CalendarEventsHelper::ICalEventFromJson(json11::Json eventObj) const -> ICa
auto CalendarEventsHelper::createDBEntry(Context &context) -> sys::ReturnCodes
{
- auto eventsJsonObj = context.getBody();
- auto eventsJsonArray = eventsJsonObj[json::calendar::events].array_items();
- bool ret = true;
+ const auto eventsJsonObj = context.getBody();
+ const auto eventsJsonArray = eventsJsonObj[json::calendar::events].array_items();
+ bool ret = true;
for (auto event : eventsJsonArray) {
auto icalEvent = ICalEventFromJson(event);