From 36b9b20e5eefa7cf5879a7c69e0b09a5ee569a10 Mon Sep 17 00:00:00 2001 From: Wojciech Rzepecki Date: Wed, 8 Dec 2021 13:54:10 +0100 Subject: [PATCH] [EGD-8083] Add wallpaper option Added connection of wallpaper window to settings --- image/user/db/settings_v2_002-devel.sql | 1 + image/user/db/settings_v2_002.sql | 1 + .../ApplicationSettings.cpp | 14 ++++++- .../application-settings/CMakeLists.txt | 1 + .../data/WallpaperOption.hpp | 14 +++++++ .../ApplicationSettings.hpp | 13 ++++++ .../display-keypad/WallpaperOptionModel.cpp | 31 ++++++++++++++ .../display-keypad/WallpaperOptionModel.hpp | 23 +++++++++++ .../display-keypad/DisplayAndKeypadWindow.cpp | 2 +- .../display-keypad/WallpaperWindow.cpp | 40 ++++++++++--------- .../display-keypad/WallpaperWindow.hpp | 10 ++--- .../agents/settings/SystemSettings.hpp | 5 +++ 12 files changed, 129 insertions(+), 26 deletions(-) create mode 100644 module-apps/application-settings/data/WallpaperOption.hpp create mode 100644 module-apps/application-settings/models/display-keypad/WallpaperOptionModel.cpp create mode 100644 module-apps/application-settings/models/display-keypad/WallpaperOptionModel.hpp diff --git a/image/user/db/settings_v2_002-devel.sql b/image/user/db/settings_v2_002-devel.sql index 8528603ea8e7e19b198d55b5e9130b8397a3bfe2..2273ab0254126c043d7c8eee14c6ce27ac9a6863 100644 --- a/image/user/db/settings_v2_002-devel.sql +++ b/image/user/db/settings_v2_002-devel.sql @@ -39,6 +39,7 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('\EventManager\\br_auto_mode', '0'), ('\EventManager\\br_level', '50.0f'), ('keypad_light_state', '0'), + ('wallpaper_option', '0'), ('gs_current_timezone_name', ''), ('gs_current_timezone_rules', ''), ('\ServiceTime\\gs_automatic_date_and_time_is_on', '1'), diff --git a/image/user/db/settings_v2_002.sql b/image/user/db/settings_v2_002.sql index 7cc9264d460c3909c3ceaede1145d53dbb608c8b..42007e6e7a200391c985bf9cb6d80d8cc4e5988a 100644 --- a/image/user/db/settings_v2_002.sql +++ b/image/user/db/settings_v2_002.sql @@ -40,6 +40,7 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('\EventManager\\br_auto_mode', '0'), ('\EventManager\\br_level', '50.0f'), ('keypad_light_state', '0'), + ('wallpaper_option', '0'), ('gs_current_timezone_name', ''), ('gs_current_timezone_rules', ''), ('\ServiceTime\\gs_automatic_date_and_time_is_on', '1'), diff --git a/module-apps/application-settings/ApplicationSettings.cpp b/module-apps/application-settings/ApplicationSettings.cpp index b58497d7d517a904704d86458a90413eeeddae70..57cb2a366cf3bf4c518bf892887674c721a82bd7 100644 --- a/module-apps/application-settings/ApplicationSettings.cpp +++ b/module-apps/application-settings/ApplicationSettings.cpp @@ -441,7 +441,7 @@ namespace app return std::make_unique(app); }); windowsFactory.attach(gui::window::name::wallpaper, [](ApplicationCommon *app, const std::string &name) { - return std::make_unique(app); + return std::make_unique(app, static_cast(app)); }); windowsFactory.attach(gui::window::name::quotes, [](ApplicationCommon *app, const std::string &name) { return std::make_unique(app); @@ -692,6 +692,18 @@ namespace app ::settings::SettingsScope::Global); } + auto ApplicationSettings::getWallpaperOption() -> gui::WallpaperOption + { + return static_cast(utils::getNumericValue( + settings->getValue(::settings::Wallpaper::option, ::settings::SettingsScope::Global))); + } + + void ApplicationSettings::setWallpaperOption(gui::WallpaperOption option) + { + settings->setValue( + ::settings::Wallpaper::option, std::to_string(static_cast(option)), ::settings::SettingsScope::Global); + } + auto ApplicationSettings::getNotificationsWhenLocked() const noexcept -> bool { return notificationsWhenLocked; diff --git a/module-apps/application-settings/CMakeLists.txt b/module-apps/application-settings/CMakeLists.txt index aa13b4999af4031a86f14459dfa835d574922917..ce7ca219a7bf85f479c1da5dde75648562383ede 100644 --- a/module-apps/application-settings/CMakeLists.txt +++ b/module-apps/application-settings/CMakeLists.txt @@ -17,6 +17,7 @@ target_sources(application-settings models/display-keypad/CategoriesModel.cpp models/display-keypad/QuotesModel.cpp models/display-keypad/DisplayModeModel.cpp + models/display-keypad/WallpaperOptionModel.cpp models/network/ApnSettingsModel.cpp models/network/NewApnModel.cpp models/network/SimContactsImportModel.cpp diff --git a/module-apps/application-settings/data/WallpaperOption.hpp b/module-apps/application-settings/data/WallpaperOption.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a88487df129089e6a6bf574b207feacbbb8973a0 --- /dev/null +++ b/module-apps/application-settings/data/WallpaperOption.hpp @@ -0,0 +1,14 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +namespace gui +{ + enum class WallpaperOption + { + Clock = 0, + Quote, + Logo + }; +} // namespace gui diff --git a/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp b/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp index a068473999de53fe060f8b4d4a128f843519a88f..42b6d759f09506302ed9cf8184bc00c43292d72d 100644 --- a/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp +++ b/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp @@ -12,6 +12,7 @@ #include #include #include +#include class AudioStopNotification; // Forward declaration @@ -64,6 +65,14 @@ namespace app virtual void setKeypadBacklightState(bsp::keypad_backlight::State state) = 0; }; + class WallpaperSettings + { + public: + virtual ~WallpaperSettings() = default; + virtual auto getWallpaperOption() -> gui::WallpaperOption = 0; + virtual void setWallpaperOption(gui::WallpaperOption option) = 0; + }; + class DndSettings { public: @@ -111,6 +120,7 @@ namespace app public settingsInterface::OperatorsSettings, public settingsInterface::ScreenLightSettings, public settingsInterface::KeypdBacklightSettings, + public settingsInterface::WallpaperSettings, public settingsInterface::DndSettings, public settingsInterface::OfflineSettings, public settingsInterface::ConnectionSettings, @@ -155,6 +165,9 @@ namespace app auto getKeypadBacklightState() -> bsp::keypad_backlight::State override; void setKeypadBacklightState(bsp::keypad_backlight::State keypadLightState) override; + auto getWallpaperOption() -> gui::WallpaperOption override; + void setWallpaperOption(gui::WallpaperOption option) override; + auto getNotificationsWhenLocked() const noexcept -> bool override; void setNotificationsWhenLocked(bool on) noexcept override; auto getCallsFromFavourite() const noexcept -> bool override; diff --git a/module-apps/application-settings/models/display-keypad/WallpaperOptionModel.cpp b/module-apps/application-settings/models/display-keypad/WallpaperOptionModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7340c671da88fb0327d53c41244f27ef529eb373 --- /dev/null +++ b/module-apps/application-settings/models/display-keypad/WallpaperOptionModel.cpp @@ -0,0 +1,31 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "WallpaperOptionModel.hpp" + +namespace gui +{ + WallpaperOptionModel::WallpaperOptionModel(app::settingsInterface::WallpaperSettings *settings) : settings(settings) + {} + + void WallpaperOptionModel::update() + { + wallpaperOption = settings->getWallpaperOption(); + } + + void WallpaperOptionModel::saveValue(WallpaperOption option) + { + settings->setWallpaperOption(option); + wallpaperOption = option; + } + + auto WallpaperOptionModel::isCurrentOption(WallpaperOption option) -> bool + { + return wallpaperOption == option; + } + + auto WallpaperOptionModel::isQuoteOptionSelected() -> bool + { + return wallpaperOption == WallpaperOption::Quote; + } +} // namespace gui diff --git a/module-apps/application-settings/models/display-keypad/WallpaperOptionModel.hpp b/module-apps/application-settings/models/display-keypad/WallpaperOptionModel.hpp new file mode 100644 index 0000000000000000000000000000000000000000..6d157b9bb017d72ceb7832b13dfbf62e663462a5 --- /dev/null +++ b/module-apps/application-settings/models/display-keypad/WallpaperOptionModel.hpp @@ -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 + +namespace gui +{ + class WallpaperOptionModel + { + public: + explicit WallpaperOptionModel(app::settingsInterface::WallpaperSettings *settings); + void update(); + void saveValue(WallpaperOption option); + auto isCurrentOption(WallpaperOption option) -> bool; + auto isQuoteOptionSelected() -> bool; + + private: + app::settingsInterface::WallpaperSettings *settings = nullptr; + WallpaperOption wallpaperOption = WallpaperOption::Clock; + }; +} // namespace gui diff --git a/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp b/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp index 619efa11b6ea6720e495314848407f7f1ab537ee..ac5e863f91dcf5468be38e43229222ca91755270 100644 --- a/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp +++ b/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp @@ -59,8 +59,8 @@ namespace gui addMenu(utils::translate("app_settings_display_display_light"), gui::window::name::display_light); #if DISABLED_SETTINGS_OPTIONS == 1 addMenu(utils::translate("app_settings_display_font_size"), gui::window::name::font_size); - addMenu(utils::translate("app_settings_display_wallpaper"), gui::window::name::wallpaper); #endif // DISABLED_SETTINGS_OPTIONS + addMenu(utils::translate("app_settings_display_wallpaper"), gui::window::name::wallpaper); addMenu(utils::translate("app_settings_display_keypad_light"), gui::window::name::keypad_light); addMenu(utils::translate("app_settings_display_input_language"), gui::window::name::input_language); addOnOffOption(utils::translate("app_settings_display_dark_mode"), [this](gui::Item & /*item*/) { diff --git a/module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp b/module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp index 001b26b6c730a09d84d3aaae500528ecb73100fe..049ad6a76f342608b7a5fabd737e2722ff92152e 100644 --- a/module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp +++ b/module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp @@ -9,7 +9,18 @@ namespace gui { - WallpaperWindow::WallpaperWindow(app::ApplicationCommon *app) : BaseSettingsWindow(app, window::name::wallpaper) + + namespace + { + const std::vector> wallpaperOptions = { + {"app_settings_display_wallpaper_logo", WallpaperOption::Logo}, + {"app_settings_display_wallpaper_clock", WallpaperOption::Clock}, + {"app_settings_display_wallpaper_quotes", WallpaperOption::Quote}}; + } // namespace + + WallpaperWindow::WallpaperWindow(app::ApplicationCommon *app, app::settingsInterface::WallpaperSettings *settings) + : BaseSettingsWindow(app, window::name::wallpaper), optionModel{ + std::make_unique(settings)} { setTitle(utils::translate("app_settings_display_wallpaper")); } @@ -18,11 +29,12 @@ namespace gui { std::list optionsList; - auto addCheckOption = [&](UTF8 text, bool &Switch) { + for (const auto &[text, option] : wallpaperOptions) { optionsList.emplace_back(std::make_unique( - text, + utils::translate(text), [&](gui::Item &item) mutable { - switchHandler(Switch); + optionModel->saveValue(option); + refreshOptionsList(); return true; }, [=](gui::Item &item) { @@ -32,14 +44,11 @@ namespace gui return true; }, this, - Switch ? gui::option::SettingRightItem::Checked : gui::option::SettingRightItem::Disabled)); - }; - - addCheckOption(utils::translate("app_settings_display_wallpaper_logo"), isWallpaperLogoSwitchOn); - addCheckOption(utils::translate("app_settings_display_wallpaper_clock"), isWallpaperClockSwitchOn); - addCheckOption(utils::translate("app_settings_display_wallpaper_quotes"), isWallpaperQuotesSwitchOn); + optionModel->isCurrentOption(option) ? gui::option::SettingRightItem::Checked + : gui::option::SettingRightItem::Disabled)); + } - if (isWallpaperQuotesSwitchOn) { + if (optionModel->isQuoteOptionSelected()) { optionsList.emplace_back(std::make_unique( utils::translate("app_settings_display_wallpaper_edit_quotes"), [=](gui::Item &item) { @@ -59,14 +68,9 @@ namespace gui return optionsList; } - void WallpaperWindow::switchHandler(bool &optionSwitch) + void WallpaperWindow::onBeforeShow(ShowMode mode, SwitchData *data) { - isWallpaperQuotesSwitchOn = false; - isWallpaperClockSwitchOn = false; - isWallpaperLogoSwitchOn = false; - - optionSwitch = !optionSwitch; + optionModel->update(); refreshOptionsList(); } - } // namespace gui diff --git a/module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp b/module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp index 525eafd84a2ea876d4de80475ce1c7debccab882..d9c5100c0d8d1432512924f13dff1a54e1778447 100644 --- a/module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp +++ b/module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp @@ -4,6 +4,7 @@ #pragma once #include +#include namespace gui { @@ -12,16 +13,13 @@ namespace gui class WallpaperWindow : public BaseSettingsWindow { public: - explicit WallpaperWindow(app::ApplicationCommon *app); + explicit WallpaperWindow(app::ApplicationCommon *app, app::settingsInterface::WallpaperSettings *settings); private: - void switchHandler(bool &onOffSwitch); auto buildOptionsList() -> std::list