~aleteoryx/muditaos

6cbefdc7e1a437e5df1b44d85acde6e19b41e766 — Mateusz Grzegorzek 4 years ago f8dd719
[BH-865] About screen in Settings

Implement AboutYourBellWindow.
M image/assets/lang/English.json => image/assets/lang/English.json +7 -0
@@ 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": "<text>OS version: <token>$VERSION</token></text>",
  "app_bell_settings_advanced_about_storage_title": "Storage",
  "app_bell_settings_advanced_about_storage_text": "<text><token>$USED_MEMORY</token>MB of <token>$TOTAL_MEMORY</token>MB used</text>",
  "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",

M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp => products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +11 -0
@@ 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<gui::BellSettingsAlarmSettingsWindow>(app, std::move(presenter));
            });

        windowsFactory.attach(
            gui::AboutYourBellWindow::name, [](ApplicationCommon *app, [[maybe_unused]] const std::string &name) {
                auto aboutYourBellModel = std::make_shared<bell_settings::AboutYourBellModel>(app);
                auto aboutYourBellPresenter =
                    std::make_unique<bell_settings::AboutYourBellWindowPresenter>(std::move(aboutYourBellModel));
                return std::make_unique<gui::AboutYourBellWindow>(app, std::move(aboutYourBellPresenter));
            });

        attachPopups({gui::popup::ID::AlarmActivated, gui::popup::ID::AlarmDeactivated});
    }


M products/BellHybrid/apps/application-bell-settings/CMakeLists.txt => products/BellHybrid/apps/application-bell-settings/CMakeLists.txt +8 -0
@@ 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

M products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp => products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp +13 -0
@@ 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

A products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp => products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.cpp +78 -0
@@ 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 <BellSettingsStyle.hpp>
#include <widgets/advanced/AboutYourBellListItem.hpp>

#include <ListView.hpp>
#include <product/version.hpp>
#include <purefs/filesystem_paths.hpp>
#include <sys/statvfs.h>

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

A products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.hpp => products/BellHybrid/apps/application-bell-settings/models/advanced/AboutYourBellModel.hpp +28 -0
@@ 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 <Application.hpp>
#include <InternalModel.hpp>
#include <ListItemProvider.hpp>

namespace app::bell_settings
{
    class AboutYourBellModel : public app::InternalModel<gui::ListItem *>, 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

A products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.cpp +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

#include "AboutYourBellWindowPresenter.hpp"
#include <models/advanced/AboutYourBellModel.hpp>

namespace app::bell_settings
{
    AboutYourBellWindowPresenter::AboutYourBellWindowPresenter(std::shared_ptr<AboutYourBellModel> pagesProvider)
        : pagesProvider(std::move(pagesProvider))
    {}

    auto AboutYourBellWindowPresenter::createData() -> void
    {
        pagesProvider->createData();
    }

    auto AboutYourBellWindowPresenter::getPagesProvider() const -> std::shared_ptr<AboutYourBellModel>
    {
        return pagesProvider;
    }
} // namespace app::bell_settings

A products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/advanced/AboutYourBellWindowPresenter.hpp +42 -0
@@ 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 <apps-common/BasePresenter.hpp>
#include <memory>

namespace app::bell_settings
{
    class AboutYourBellModel;

    class AboutYourBellWindowContract
    {
      public:
        class View
        {
          public:
            virtual ~View() noexcept = default;
        };

        class Presenter : public BasePresenter<AboutYourBellWindowContract::View>
        {
          public:
            virtual ~Presenter() noexcept                                                = default;
            virtual auto getPagesProvider() const -> std::shared_ptr<AboutYourBellModel> = 0;
            virtual auto createData() -> void                                            = 0;
        };
    };

    class AboutYourBellWindowPresenter : public AboutYourBellWindowContract::Presenter
    {
      public:
        explicit AboutYourBellWindowPresenter(std::shared_ptr<AboutYourBellModel> pagesProvider);

        auto createData() -> void override;
        auto getPagesProvider() const -> std::shared_ptr<AboutYourBellModel> override;

      private:
        std::shared_ptr<AboutYourBellModel> pagesProvider;
    };
} // namespace app::bell_settings

A products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp => products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.cpp +47 -0
@@ 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 <BellSettingsStyle.hpp>
#include <Text.hpp>

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 */

A products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.hpp => products/BellHybrid/apps/application-bell-settings/widgets/advanced/AboutYourBellListItem.hpp +25 -0
@@ 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 <ListItem.hpp>
#include <module-gui/gui/widgets/RichTextParser.hpp>

namespace gui
{
    class Text;
    class VBox;

    class AboutYourBellListItem : public ListItem
    {
      public:
        using TokenMap = std::optional<text::RichTextParser::TokenMap>;
        AboutYourBellListItem(const std::string &title, const std::string &value, TokenMap valueTokenMap = {});

      private:
        VBox *body{};
        Text *title{};
        Text *value{};
    };
} /* namespace gui */

A products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.cpp +40 -0
@@ 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 <application-settings/windows/WindowNames.hpp>
#include <i18n/i18n.hpp>
#include <models/advanced/AboutYourBellModel.hpp>

namespace gui
{
    AboutYourBellWindow::AboutYourBellWindow(
        app::ApplicationCommon *app,
        std::shared_ptr<app::bell_settings::AboutYourBellWindowContract::Presenter> 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

A products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp => products/BellHybrid/apps/application-bell-settings/windows/advanced/AboutYourBellWindow.hpp +26 -0
@@ 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 <presenter/advanced/AboutYourBellWindowPresenter.hpp>

#include <apps-common/windows/AppWindow.hpp>
#include <ListView.hpp>

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<app::bell_settings::AboutYourBellWindowContract::Presenter> presenter);

      private:
        void buildInterface() override;

        ListView *list{};
        std::shared_ptr<app::bell_settings::AboutYourBellWindowContract::Presenter> presenter;
    };
} // namespace gui

M products/BellHybrid/apps/application-bell-settings/windows/advanced/BellSettingsAdvancedWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/advanced/BellSettingsAdvancedWindow.cpp +2 -0
@@ 8,6 8,7 @@
#include <common/options/OptionBellMenu.hpp>
#include <apps-common/messages/DialogMetadataMessage.hpp>
#include <apps-common/windows/Dialog.hpp>
#include <windows/advanced/AboutYourBellWindow.hpp>

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;
    }