From 6cbefdc7e1a437e5df1b44d85acde6e19b41e766 Mon Sep 17 00:00:00 2001 From: Mateusz Grzegorzek Date: Tue, 28 Sep 2021 13:00:31 +0200 Subject: [PATCH] [BH-865] About screen in Settings Implement AboutYourBellWindow. --- image/assets/lang/English.json | 7 ++ .../ApplicationBellSettings.cpp | 11 +++ .../application-bell-settings/CMakeLists.txt | 8 ++ .../data/BellSettingsStyle.hpp | 13 ++++ .../models/advanced/AboutYourBellModel.cpp | 78 +++++++++++++++++++ .../models/advanced/AboutYourBellModel.hpp | 28 +++++++ .../advanced/AboutYourBellWindowPresenter.cpp | 22 ++++++ .../advanced/AboutYourBellWindowPresenter.hpp | 42 ++++++++++ .../advanced/AboutYourBellListItem.cpp | 47 +++++++++++ .../advanced/AboutYourBellListItem.hpp | 25 ++++++ .../windows/advanced/AboutYourBellWindow.cpp | 40 ++++++++++ .../windows/advanced/AboutYourBellWindow.hpp | 26 +++++++ .../advanced/BellSettingsAdvancedWindow.cpp | 2 + 13 files changed, 349 insertions(+) create mode 100644 products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp create mode 100644 products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.hpp create mode 100644 products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.cpp create mode 100644 products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.hpp create mode 100644 products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp create mode 100644 products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.hpp create mode 100644 products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp create mode 100644 products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index 6cc6cb9d422f939e73850cc4285c7424aed74ddc..845d7c86da21dc0bb03dd53bf098292e175d0d0d 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -581,6 +581,13 @@ "app_bell_settings_advanced": "Advanced", "app_bell_settings_advanced_time_units": "Time & units", "app_bell_settings_advanced_temp_scale": "Temperature scale", + "app_bell_settings_advanced_about": "About", + "app_bell_settings_advanced_about_product": "Mudita Harmony", + "app_bell_settings_advanced_about_version": "OS version: $VERSION", + "app_bell_settings_advanced_about_storage_title": "Storage", + "app_bell_settings_advanced_about_storage_text": "$USED_MEMORYMB of $TOTAL_MEMORYMB used", + "app_bell_settings_advanced_about_info_title": "Manual & certification info", + "app_bell_settings_advanced_about_info_text": "www.mudita.com", "app_bell_settings_alarm_settings": "Alarm settings", "app_bell_settings_alarm_settings_tone": "Alarm tone", "app_bell_settings_alarm_settings_volume": "Alarm volume", diff --git a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp index 4b150d97e5c92eed0eb8a3813aa2368c8ad13067..6359fefceaecc7e76eb80c3e0bd52a1d5b00aef4 100644 --- a/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +++ b/products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp @@ -6,13 +6,16 @@ #include "presenter/TimeUnitsPresenter.hpp" #include "models/FrontlightModel.hpp" #include "models/TemperatureUnitModel.hpp" +#include "models/advanced/AboutYourBellModel.hpp" #include "models/alarm_settings/AlarmSettingsListItemProvider.hpp" #include "models/alarm_settings/AlarmSettingsModel.hpp" #include "models/alarm_settings/PrewakeUpListItemProvider.hpp" #include "models/alarm_settings/PrewakeUpSettingsModel.hpp" #include "models/alarm_settings/SnoozeListItemProvider.hpp" #include "models/alarm_settings/SnoozeSettingsModel.hpp" +#include "presenter/advanced/AboutYourBellWindowPresenter.hpp" #include "presenter/alarm_settings/SnoozePresenter.hpp" +#include "windows/advanced/AboutYourBellWindow.hpp" #include "windows/advanced/BellSettingsAdvancedWindow.hpp" #include "windows/advanced/BellSettingsTimeUnitsWindow.hpp" #include "windows/alarm_settings/BellSettingsAlarmSettingsMenuWindow.hpp" @@ -153,6 +156,14 @@ namespace app return std::make_unique(app, std::move(presenter)); }); + windowsFactory.attach( + gui::AboutYourBellWindow::name, [](ApplicationCommon *app, [[maybe_unused]] const std::string &name) { + auto aboutYourBellModel = std::make_shared(app); + auto aboutYourBellPresenter = + std::make_unique(std::move(aboutYourBellModel)); + return std::make_unique(app, std::move(aboutYourBellPresenter)); + }); + attachPopups({gui::popup::ID::AlarmActivated, gui::popup::ID::AlarmDeactivated}); } diff --git a/products/BellHybrid/apps/application-bell-settings/CMakeLists.txt b/products/BellHybrid/apps/application-bell-settings/CMakeLists.txt index ec23077fd25a8c0864ab0c8644e5bbf69ab95756..df79e51b6b0fec6d6a8bf1d961ae92b922186436 100644 --- a/products/BellHybrid/apps/application-bell-settings/CMakeLists.txt +++ b/products/BellHybrid/apps/application-bell-settings/CMakeLists.txt @@ -27,6 +27,7 @@ target_sources(application-bell-settings models/SoundFilesModel.cpp models/TemperatureUnitModel.cpp models/TimeUnitsModel.cpp + models/advanced/AboutYourBellModel.cpp models/alarm_settings/AlarmSettingsListItemProvider.cpp models/alarm_settings/AlarmSettingsModel.cpp models/alarm_settings/PrewakeUpListItemProvider.cpp @@ -36,6 +37,7 @@ target_sources(application-bell-settings presenter/FrontlightPresenter.cpp presenter/TimeUnitsPresenter.cpp + presenter/advanced/AboutYourBellWindowPresenter.cpp presenter/alarm_settings/AlarmSettingsPresenter.cpp presenter/alarm_settings/PrewakeUpPresenter.cpp presenter/alarm_settings/SnoozePresenter.cpp @@ -44,12 +46,14 @@ target_sources(application-bell-settings widgets/TemperatureUnitListItem.cpp widgets/TimeFormatSetListItem.cpp widgets/TimeSetListItem.cpp + widgets/advanced/AboutYourBellListItem.cpp windows/BellSettingsBedtimeToneWindow.cpp windows/BellSettingsFrontlight.cpp windows/BellSettingsHomeViewWindow.cpp windows/BellSettingsTurnOffWindow.cpp windows/BellSettingsWindow.cpp + windows/advanced/AboutYourBellWindow.cpp windows/advanced/BellSettingsAdvancedWindow.cpp windows/advanced/BellSettingsTimeUnitsWindow.cpp windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.cpp @@ -59,6 +63,7 @@ target_sources(application-bell-settings models/SettingsModel.hpp models/SoundFilesModel.hpp + models/advanced/AboutYourBellModel.hpp models/alarm_settings/AbstractAlarmSettingsModel.hpp models/alarm_settings/AbstractPrewakeUpSettingsModel.hpp models/alarm_settings/AbstractSnoozeSettingsModel.hpp @@ -70,6 +75,7 @@ target_sources(application-bell-settings models/alarm_settings/SnoozeSettingsModel.hpp presenter/FrontlightPresenter.hpp + presenter/advanced/AboutYourBellWindowPresenter.hpp presenter/alarm_settings/AlarmSettingsPresenter.hpp presenter/alarm_settings/PrewakeUpPresenter.hpp presenter/alarm_settings/SnoozePresenter.hpp @@ -78,6 +84,7 @@ target_sources(application-bell-settings widgets/TemperatureUnitListItem.hpp widgets/TimeFormatSetListItem.hpp widgets/TimeSetListItem.hpp + widgets/advanced/AboutYourBellListItem.hpp windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp windows/alarm_settings/BellSettingsAlarmSettingsWindow.hpp @@ -87,6 +94,7 @@ target_sources(application-bell-settings windows/BellSettingsHomeViewWindow.hpp windows/BellSettingsTurnOffWindow.hpp windows/BellSettingsWindow.hpp + windows/advanced/AboutYourBellWindow.hpp windows/advanced/BellSettingsAdvancedWindow.hpp windows/alarm_settings/BellSettingsAlarmSettingsSnoozeWindow.hpp windows/alarm_settings/BellSettingsAlarmSettingsMenuWindow.hpp diff --git a/products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp b/products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp index 5da6149dd6cf23e7f0752a9ead546aefbf4b6503..d64021d30a18a0613fee055c9b95257be589f57c 100644 --- a/products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp +++ b/products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp @@ -36,5 +36,18 @@ namespace gui { inline constexpr auto font_center = "gt_pressura_light_46"; } + + namespace about_your_bell_window + { + inline constexpr auto height = 100U; + inline constexpr auto width = 400U; + namespace list_item + { + inline constexpr auto width = style::window::default_body_width; + inline constexpr auto height = 66; + inline constexpr auto title_height = 33; + inline constexpr auto value_height = 33; + } // namespace list_item + } // namespace about_your_bell_window } // namespace bell_settings_style } // namespace gui diff --git a/products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7e30c863670cc2e61c8dfffad9b7bc1515b0f3c0 --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp @@ -0,0 +1,78 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "AboutYourBellModel.hpp" + +#include +#include + +#include +#include +#include +#include + +namespace app::bell_settings +{ + AboutYourBellModel::AboutYourBellModel(app::ApplicationCommon *app) : application(app) + { + createData(); + } + + auto AboutYourBellModel::requestRecordsCount() -> unsigned int + { + return internalData.size(); + } + + auto AboutYourBellModel::getMinimalItemSpaceRequired() const -> unsigned int + { + return gui::bell_settings_style::about_your_bell_window::height; + } + + void AboutYourBellModel::requestRecords(const uint32_t offset, const uint32_t limit) + { + setupModel(offset, limit); + list->onProviderDataUpdate(); + } + + auto AboutYourBellModel::getItem(gui::Order order) -> gui::ListItem * + { + return getRecord(order); + } + + void AboutYourBellModel::createData() + { + internalData.push_back( + new gui::AboutYourBellListItem(utils::translate("app_bell_settings_advanced_about_product"), + utils::translate("app_bell_settings_advanced_about_version"), + gui::AboutYourBellListItem::TokenMap({{"$VERSION", std::string(VERSION)}}))); + + struct statvfs stat; + const auto result = statvfs(purefs::dir::getRootDiskPath().c_str(), &stat); + if (result < 0) { + LOG_ERROR("Getting memory info failed! result = %d", result); + return; + } + + const auto totalMB = (stat.f_frsize * stat.f_blocks) / 1024LLU / 1024LLU; + const auto usedMB = totalMB - (stat.f_bfree * stat.f_bsize) / 1024LLU / 1024LLU; + internalData.push_back(new gui::AboutYourBellListItem( + utils::translate("app_bell_settings_advanced_about_storage_title"), + utils::translate("app_bell_settings_advanced_about_storage_text"), + gui::AboutYourBellListItem::TokenMap( + {{"$USED_MEMORY", std::to_string(usedMB)}, {"$TOTAL_MEMORY", std::to_string(totalMB)}}))); + + internalData.push_back( + new gui::AboutYourBellListItem(utils::translate("app_bell_settings_advanced_about_info_title"), + utils::translate("app_bell_settings_advanced_about_info_text"))); + + for (auto item : internalData) { + item->deleteByList = false; + } + } + + void AboutYourBellModel::clearData() + { + list->reset(); + eraseInternalData(); + } +} // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.hpp b/products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7e39fa6a9d0f10bc7a18d610cbad09a530b8a653 --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.hpp @@ -0,0 +1,28 @@ +// 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 +#include +#include + +namespace app::bell_settings +{ + class AboutYourBellModel : public app::InternalModel, public gui::ListItemProvider + { + public: + explicit AboutYourBellModel(app::ApplicationCommon *app); + + void createData(); + void clearData(); + + [[nodiscard]] auto requestRecordsCount() -> unsigned int override; + [[nodiscard]] auto getMinimalItemSpaceRequired() const -> unsigned int override; + auto getItem(gui::Order order) -> gui::ListItem * override; + void requestRecords(const uint32_t offset, const uint32_t limit) override; + + private: + app::ApplicationCommon *application{}; + }; +} // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.cpp b/products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.cpp new file mode 100644 index 0000000000000000000000000000000000000000..de5756c89ed55b19463745459a84562b056a2dad --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.cpp @@ -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 + +#include "AboutYourBellWindowPresenter.hpp" +#include + +namespace app::bell_settings +{ + AboutYourBellWindowPresenter::AboutYourBellWindowPresenter(std::shared_ptr pagesProvider) + : pagesProvider(std::move(pagesProvider)) + {} + + auto AboutYourBellWindowPresenter::createData() -> void + { + pagesProvider->createData(); + } + + auto AboutYourBellWindowPresenter::getPagesProvider() const -> std::shared_ptr + { + return pagesProvider; + } +} // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.hpp b/products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8bbbad427f01fe53cefb06e5c344d20b9b76ae27 --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.hpp @@ -0,0 +1,42 @@ +// 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 +#include + +namespace app::bell_settings +{ + class AboutYourBellModel; + + class AboutYourBellWindowContract + { + public: + class View + { + public: + virtual ~View() noexcept = default; + }; + + class Presenter : public BasePresenter + { + public: + virtual ~Presenter() noexcept = default; + virtual auto getPagesProvider() const -> std::shared_ptr = 0; + virtual auto createData() -> void = 0; + }; + }; + + class AboutYourBellWindowPresenter : public AboutYourBellWindowContract::Presenter + { + public: + explicit AboutYourBellWindowPresenter(std::shared_ptr pagesProvider); + + auto createData() -> void override; + auto getPagesProvider() const -> std::shared_ptr override; + + private: + std::shared_ptr pagesProvider; + }; +} // namespace app::bell_settings diff --git a/products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp b/products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp new file mode 100644 index 0000000000000000000000000000000000000000..785e9a81ea4f17846c1033c10577dc248d8f6412 --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp @@ -0,0 +1,47 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "AboutYourBellListItem.hpp" + +#include +#include + +namespace gui +{ + AboutYourBellListItem::AboutYourBellListItem(const std::string &titleText, + const std::string &valueText, + TokenMap valueTokenMap) + { + setMinimumSize(bell_settings_style::about_your_bell_window::list_item::width, + bell_settings_style::about_your_bell_window::list_item::height); + setMargins(Margins(0, style::margins::big, 0, style::margins::big)); + activeItem = false; + + body = new VBox(this, 0, 0, 0, 0); + body->setEdges(RectangleEdge::None); + + title = new Text(body, 0, 0, 0, 0); + title->setMinimumSize(bell_settings_style::about_your_bell_window::list_item::width, + bell_settings_style::about_your_bell_window::list_item::title_height); + title->setFont(style::window::font::bigbold); + title->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Top)); + title->setText(titleText); + + value = new Text(body, 0, 0, 0, 0); + value->setMinimumSize(bell_settings_style::about_your_bell_window::list_item::width, + bell_settings_style::about_your_bell_window::list_item::value_height); + value->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Bottom)); + value->setFont(style::window::font::big); + if (valueTokenMap.has_value()) { + value->setRichText(valueText, std::move(*valueTokenMap)); + } + else { + value->setText(valueText); + } + + dimensionChangedCallback = [&]([[maybe_unused]] Item &item, const BoundingBox &newDim) -> bool { + body->setArea({0, 0, newDim.w, newDim.h}); + return true; + }; + } +} /* namespace gui */ diff --git a/products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.hpp b/products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.hpp new file mode 100644 index 0000000000000000000000000000000000000000..cbbbbbc6ce35c946f62c73d0d3513b25cab0f1fb --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.hpp @@ -0,0 +1,25 @@ +// 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 +#include + +namespace gui +{ + class Text; + class VBox; + + class AboutYourBellListItem : public ListItem + { + public: + using TokenMap = std::optional; + AboutYourBellListItem(const std::string &title, const std::string &value, TokenMap valueTokenMap = {}); + + private: + VBox *body{}; + Text *title{}; + Text *value{}; + }; +} /* namespace gui */ diff --git a/products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1046d42afa3eb62fba4cf11bf9d70f800bd7c089 --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp @@ -0,0 +1,40 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "AboutYourBellWindow.hpp" + +#include +#include +#include + +namespace gui +{ + AboutYourBellWindow::AboutYourBellWindow( + app::ApplicationCommon *app, + std::shared_ptr technicalPresenter) + : AppWindow(app, gui::window::name::technical_information), presenter(std::move(technicalPresenter)) + { + presenter->attach(this); + buildInterface(); + } + + void AboutYourBellWindow::buildInterface() + { + AppWindow::buildInterface(); + + statusBar->setVisible(false); + bottomBar->setActive(gui::BottomBar::Side::RIGHT, true); + bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::translate(::style::strings::common::back)); + + list = new ListView(this, + style::window::default_left_margin, + style::window::default_vertical_pos, + style::listview::body_width_with_scroll, + style::window::default_body_height, + presenter->getPagesProvider(), + listview::ScrollBarType::Fixed); + + setFocusItem(list); + list->rebuildList(); + } +} // namespace gui diff --git a/products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp b/products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp new file mode 100644 index 0000000000000000000000000000000000000000..98fc0c2390e79417cc6cdd9a057b044684934a17 --- /dev/null +++ b/products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp @@ -0,0 +1,26 @@ +// 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 + +#include +#include + +namespace gui +{ + class AboutYourBellWindow : public AppWindow, public app::bell_settings::AboutYourBellWindowContract::View + { + public: + static constexpr auto name = "AboutYourBellWindow"; + AboutYourBellWindow(app::ApplicationCommon *app, + std::shared_ptr presenter); + + private: + void buildInterface() override; + + ListView *list{}; + std::shared_ptr presenter; + }; +} // namespace gui diff --git a/products/BellHybrid/apps/application-bell-settings/windows/advanced/BellSettingsAdvancedWindow.cpp b/products/BellHybrid/apps/application-bell-settings/windows/advanced/BellSettingsAdvancedWindow.cpp index ec478dd1206d2764af2835164d03fea276f76e8e..5c31dd1a219d3de5695655819ad841677a81c50f 100644 --- a/products/BellHybrid/apps/application-bell-settings/windows/advanced/BellSettingsAdvancedWindow.cpp +++ b/products/BellHybrid/apps/application-bell-settings/windows/advanced/BellSettingsAdvancedWindow.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace gui { @@ -46,6 +47,7 @@ namespace gui gui::window::name::bellSettingsTimeUnits); addWinSettings(utils::translate("app_bell_settings_advanced_frontlight"), gui::window::name::bellSettingsFrontlight); + addWinSettings(utils::translate("app_bell_settings_advanced_about"), gui::AboutYourBellWindow::name); return settingsOptionList; }