~aleteoryx/muditaos

22b07dd2d0e3651e07c64687805d944aaf37faae — Maciej Gibowicz 2 years ago 139abae
[BH-1648] Add shortcuts instruction to settings

The user should be able to return to the shortcuts instruction at any
time. The instructions are available in the settings.
28 files changed, 256 insertions(+), 128 deletions(-)

M harmony_changelog.md
M image/system_a/data/lang/Deutsch.json
M image/system_a/data/lang/English.json
M image/system_a/data/lang/Espanol.json
M image/system_a/data/lang/Francais.json
M image/system_a/data/lang/Polski.json
M products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp
M products/BellHybrid/apps/application-bell-onboarding/CMakeLists.txt
M products/BellHybrid/apps/application-bell-onboarding/include/application-bell-onboarding/BellOnBoardingNames.hpp
M products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingShortcutsWindowPresenter.cpp
M products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingShortcutsWindowPresenter.hpp
M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp
M products/BellHybrid/apps/application-bell-settings/CMakeLists.txt
M products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp
A products/BellHybrid/apps/application-bell-settings/presenter/ShortcutsWindowPresenter.cpp
A products/BellHybrid/apps/application-bell-settings/presenter/ShortcutsWindowPresenter.hpp
M products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.cpp
M products/BellHybrid/apps/common/CMakeLists.txt
A products/BellHybrid/apps/common/include/common/BellCommonNames.hpp
R products/BellHybrid/apps/{application-bell-onboarding/layouts/OnBoardingShortcutsLayoutClassic => common/include/common/layouts/ShortcutsLayoutClassic}.hpp
R products/BellHybrid/apps/{application-bell-onboarding/layouts/OnBoardingShortcutsLayoutProvider => common/include/common/layouts/ShortcutsLayoutProvider}.hpp
R products/BellHybrid/apps/{application-bell-onboarding/layouts/OnBoardingShortcutsLayouts => common/include/common/layouts/ShortcutsLayouts}.hpp
M products/BellHybrid/apps/common/include/common/options/OptionBellMenu.hpp
R products/BellHybrid/apps/{application-bell-onboarding/windows/OnBoardingShortcutsWindow => common/include/common/windows/ShortcutsWindow}.hpp
A products/BellHybrid/apps/common/include/common/windows/ShortcutsWindowContract.hpp
R products/BellHybrid/apps/{application-bell-onboarding/layouts/OnBoardingShortcutsLayoutClassic => common/src/layouts/ShortcutsLayoutClassic}.cpp
R products/BellHybrid/apps/{application-bell-onboarding/layouts/OnBoardingShortcutsLayouts => common/src/layouts/ShortcutsLayouts}.cpp
R products/BellHybrid/apps/{application-bell-onboarding/windows/OnBoardingShortcutsWindow => common/src/windows/ShortcutsWindow}.cpp
M harmony_changelog.md => harmony_changelog.md +1 -0
@@ 10,6 10,7 @@

### Added
* Added notification when charger is connected
* Added shortcuts instruction to settings

### Changed / Improved
* Disabled USB MTP protocol

M image/system_a/data/lang/Deutsch.json => image/system_a/data/lang/Deutsch.json +4 -3
@@ 39,9 39,9 @@
    "app_bell_onboarding_info_deep_click_warning": "Sie haben tief gedr\u00fcckt",
    "app_bell_onboarding_info_light_click": "Leichter Klick um fortzufahren",
    "app_bell_onboarding_info_rotate": "Drehen um auszuw\u00e4hlen",
    "app_bell_onboarding_shortcuts_question": "M\u00f6chten Sie sich die Anleitung f\u00fcr die Kurzbefehle ansehen?",
    "app_bell_onboarding_shortcuts_skip": "\u00dcberspringen",
    "app_bell_onboarding_shortcuts_start": "Start",
    "app_bell_onboarding_shortcuts_question": "Lernen Sie, wie man Tastenkombinationen verwendet",
    "app_bell_onboarding_shortcuts_skip": "Sp\u00e4ter \u00fcberpr\u00fcfen",
    "app_bell_onboarding_shortcuts_start": "Erfahren Sie, wie",
    "app_bell_onboarding_shortcuts_step_battery": "Batteriestatus: R\u00fcckseite im Hauptbildschirm 2 Sek. dr\u00fccken",
    "app_bell_onboarding_shortcuts_step_bedside_lamp": "Nachttischleuchte: Vorderlicht 2 Sek. dr\u00fccken",
    "app_bell_onboarding_shortcuts_step_deep_press": "Zum Aktivieren oder Deaktivieren des Alarms tief eindr\u00fccken",


@@ 97,6 97,7 @@
    "app_bell_settings_frontlight_mode_top_message": "Frontlichtmodus",
    "app_bell_settings_frontlight_top_message": "Lichtst\u00e4rke des Frontlichts",
    "app_bell_settings_language": "Sprache",
    "app_bell_settings_shortcuts": "Verkn\u00fcpfungen",
    "app_bell_settings_layout": "Zifferblatt",
    "app_bell_settings_temp_scale": "Temperaturskala",
    "app_bell_settings_time_units": "Zeit",

M image/system_a/data/lang/English.json => image/system_a/data/lang/English.json +4 -3
@@ 72,9 72,9 @@
    "app_bell_onboarding_info_deep_click_warning": "You've deep pressed",
    "app_bell_onboarding_info_light_click": "Light click to continue",
    "app_bell_onboarding_info_rotate": "Rotate to select",
    "app_bell_onboarding_shortcuts_question": "Do you want to see Shortcuts instruction?",
    "app_bell_onboarding_shortcuts_skip": "Skip",
    "app_bell_onboarding_shortcuts_start": "Start",
    "app_bell_onboarding_shortcuts_question": "Learn how to use button shortcuts",
    "app_bell_onboarding_shortcuts_skip": "Check later",
    "app_bell_onboarding_shortcuts_start": "Learn how",
    "app_bell_onboarding_shortcuts_step_battery": "Long press back (2s) on the home view to see battery status",
    "app_bell_onboarding_shortcuts_step_bedside_lamp": "Long press frontlight (2s) to turn on a bedside lamp",
    "app_bell_onboarding_shortcuts_step_deep_press": "Deep press to activate or deactivate the alarm",


@@ 131,6 131,7 @@
    "app_bell_settings_frontlight_mode_top_message": "Frontlight mode",
    "app_bell_settings_frontlight_top_message": "Frontlight intensity",
    "app_bell_settings_language": "Language",
    "app_bell_settings_shortcuts": "Shortcuts",
    "app_bell_settings_layout": "Clock face",
    "app_bell_settings_temp_scale": "Temperature scale",
    "app_bell_settings_time_units": "Time",

M image/system_a/data/lang/Espanol.json => image/system_a/data/lang/Espanol.json +4 -3
@@ 38,9 38,9 @@
    "app_bell_onboarding_info_deep_click_warning": "Has presionado muy profundo",
    "app_bell_onboarding_info_light_click": "Click ligeramente para continuar",
    "app_bell_onboarding_info_rotate": "Girar para seleccionar",
    "app_bell_onboarding_shortcuts_question": "\u00bfQuieres ver instrucciones de accesos directos?",
    "app_bell_onboarding_shortcuts_skip": "Saltar",
    "app_bell_onboarding_shortcuts_start": "Comenzar",
    "app_bell_onboarding_shortcuts_question": "Aprende a utilizar los atajos de botones",
    "app_bell_onboarding_shortcuts_skip": "Ver luego",
    "app_bell_onboarding_shortcuts_start": "Aprender c\u00f3mo",
    "app_bell_onboarding_shortcuts_step_battery": "Mant\u00e9n pulsado Volver atr\u00e1s (2 s) para comprobar bater\u00eda",
    "app_bell_onboarding_shortcuts_step_bedside_lamp": "Mant\u00e9n pulsada la luz frontal (2 s) para encenderla",
    "app_bell_onboarding_shortcuts_step_deep_press": "Mantener pulsado para activar o desactivar la alarma",


@@ 96,6 96,7 @@
    "app_bell_settings_frontlight_mode_top_message": "Modo de luz frontal",
    "app_bell_settings_frontlight_top_message": "Intensidad de luz frontal",
    "app_bell_settings_language": "Idioma",
    "app_bell_settings_shortcuts": "Atajos",
    "app_bell_settings_layout": "Esfera del reloj",
    "app_bell_settings_temp_scale": "Escala de temperatura",
    "app_bell_settings_time_units": "Hora",

M image/system_a/data/lang/Francais.json => image/system_a/data/lang/Francais.json +4 -3
@@ 40,9 40,9 @@
    "app_bell_onboarding_info_deep_click_warning": "Vous avez appuy\u00e9 fort",
    "app_bell_onboarding_info_light_click": "Cliquer doucement pour continuer",
    "app_bell_onboarding_info_rotate": "<text>Tourner pour<br />s\u00e9lectionner</text>",
    "app_bell_onboarding_shortcuts_question": "Voulez-vous voir les instructions sur les raccourcis ?",
    "app_bell_onboarding_shortcuts_skip": "Ignorer",
    "app_bell_onboarding_shortcuts_start": "Commencer",
    "app_bell_onboarding_shortcuts_question": "Apprenez \u00e0 utiliser les raccourcis de boutons",
    "app_bell_onboarding_shortcuts_skip": "Consulter plus tard",
    "app_bell_onboarding_shortcuts_start": "Apprendre",
    "app_bell_onboarding_shortcuts_step_battery": "Pressez 2 sec Retour pour voir l'\u00e9tat de la batterie",
    "app_bell_onboarding_shortcuts_step_bedside_lamp": "Pressez 2 sec l'\u00e9clairage avant pour allumer une lampe",
    "app_bell_onboarding_shortcuts_step_deep_press": "Appuyez fort pour activer ou d\u00e9sactiver l'alarme",


@@ 98,6 98,7 @@
    "app_bell_settings_frontlight_mode_top_message": "Mode",
    "app_bell_settings_frontlight_top_message": "Intensit\u00e9",
    "app_bell_settings_language": "Langue",
    "app_bell_settings_shortcuts": "Raccourcis",
    "app_bell_settings_layout": "Cadran",
    "app_bell_settings_temp_scale": "\u00c9chelle de temp\u00e9rature",
    "app_bell_settings_time_units": "Temps",

M image/system_a/data/lang/Polski.json => image/system_a/data/lang/Polski.json +4 -3
@@ 39,9 39,9 @@
    "app_bell_onboarding_info_deep_click_warning": "G\u0142\u0119boko wci\u015bni\u0119ty",
    "app_bell_onboarding_info_light_click": "Kliknij lekko, aby kontynuowa\u0107",
    "app_bell_onboarding_info_rotate": "Obr\u00f3\u0107, aby wybra\u0107",
    "app_bell_onboarding_shortcuts_question": "Czy chcesz zobaczy\u0107 instrukcj\u0119 Skr\u00f3t\u00f3w?",
    "app_bell_onboarding_shortcuts_skip": "Pomi\u0144",
    "app_bell_onboarding_shortcuts_start": "Start",
    "app_bell_onboarding_shortcuts_question": "Dowiedz si\u0119 jak u\u017cywa\u0107 skr\u00f3t\u00f3w przycisk\u00f3w",
    "app_bell_onboarding_shortcuts_skip": "Sprawd\u017a p\u00f3\u017aniej",
    "app_bell_onboarding_shortcuts_start": "Dowiedz si\u0119, jak",
    "app_bell_onboarding_shortcuts_step_battery": "Przytrzymaj wstecz (2s) na ekranie g\u0142\u00f3wnym, aby zobaczy\u0107 status baterii",
    "app_bell_onboarding_shortcuts_step_bedside_lamp": "Przytrzymaj przycisk \u015bwiat\u0142a (2s), aby w\u0142\u0105czy\u0107 lampk\u0119 nocn\u0105",
    "app_bell_onboarding_shortcuts_step_deep_press": "Kliknij g\u0142\u0119boko, aby aktywowa\u0107 lub dezaktywowa\u0107 alarm",


@@ 97,6 97,7 @@
    "app_bell_settings_frontlight_mode_top_message": "Tryb pod\u015bwietlenia",
    "app_bell_settings_frontlight_top_message": "Intensywno\u015b\u0107 pod\u015bwietlenia",
    "app_bell_settings_language": "J\u0119zyk",
    "app_bell_settings_shortcuts": "Skr\u00f3ty",
    "app_bell_settings_layout": "Tarcza zegara",
    "app_bell_settings_temp_scale": "Skala temperatury",
    "app_bell_settings_time_units": "Czas",

M products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp => products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp +3 -3
@@ 12,7 12,6 @@
#include <windows/OnBoardingWelcomeWindow.hpp>
#include <windows/OnBoardingInstructionPromptWindow.hpp>
#include <windows/OnBoardingShortcutsOptionWindow.hpp>
#include <windows/OnBoardingShortcutsWindow.hpp>

#include <service-appmgr/ServiceApplicationManagerName.hpp>
#include <service-appmgr/messages/GetCurrentDisplayLanguageResponse.hpp>


@@ 21,6 20,7 @@
#include <common/BellPowerOffPresenter.hpp>
#include <common/windows/BellFinishedWindow.hpp>
#include <common/windows/BellWelcomeWindow.hpp>
#include <common/windows/ShortcutsWindow.hpp>
#include <common/models/LayoutModel.hpp>

#include <application-bell-settings/models/TemperatureUnitModel.hpp>


@@ 115,7 115,7 @@ namespace app
        windowsFactory.attach(
            gui::window::name::onBoardingShortcutsWindow, [this](ApplicationCommon *app, const std::string &name) {
                auto presenter = std::make_unique<OnBoarding::OnBoardingShortcutsWindowPresenter>(this);
                return std::make_unique<gui::OnBoardingShortcutsWindow>(app, std::move(presenter), name);
                return std::make_unique<gui::ShortcutsWindow>(app, std::move(presenter), name);
            });

        windowsFactory.attach(


@@ 282,7 282,7 @@ namespace app
            if (inputEvent.isKeyRelease(gui::KeyCode::KEY_UP) || inputEvent.isKeyRelease(gui::KeyCode::KEY_DOWN)) {
                gui::AppWindow *window = getCurrentWindow();
                const auto shortcutsWindow = window->getName() == gui::window::name::onBoardingShortcutsWindow
                                                 ? dynamic_cast<gui::OnBoardingShortcutsWindow *>(window)
                                                 ? dynamic_cast<gui::ShortcutsWindow *>(window)
                                                 : nullptr;
                if (shortcutsWindow != nullptr) {
                    if (shortcutsWindow->isOneOfTwoLastShortcuts() && inputEvent.isKeyRelease(gui::KeyCode::KEY_UP))

M products/BellHybrid/apps/application-bell-onboarding/CMakeLists.txt => products/BellHybrid/apps/application-bell-onboarding/CMakeLists.txt +0 -7
@@ 20,12 20,9 @@ target_sources(application-bell-onboarding
        windows/OnBoardingInstructionPromptWindow.cpp
        windows/OnBoardingWelcomeWindow.cpp
        windows/OnBoardingShortcutsOptionWindow.cpp
        windows/OnBoardingShortcutsWindow.cpp
        presenter/OnBoardingLanguageWindowPresenter.cpp
        presenter/OnBoardingFinalizeWindowPresenter.cpp
        presenter/OnBoardingShortcutsWindowPresenter.cpp
        layouts/OnBoardingShortcutsLayouts.cpp
        layouts/OnBoardingShortcutsLayoutClassic.cpp

        presenter/OnBoardingLanguageWindowPresenter.hpp
        presenter/OnBoardingFinalizeWindowPresenter.hpp


@@ 36,10 33,6 @@ target_sources(application-bell-onboarding
        windows/OnBoardingInstructionPromptWindow.hpp
        windows/OnBoardingWelcomeWindow.hpp
        windows/OnBoardingShortcutsOptionWindow.hpp
        windows/OnBoardingShortcutsWindow.hpp
        layouts/OnBoardingShortcutsLayouts.hpp
        layouts/OnBoardingShortcutsLayoutProvider.hpp
        layouts/OnBoardingShortcutsLayoutClassic.hpp

    PUBLIC
        include/application-bell-onboarding/ApplicationBellOnBoarding.hpp

M products/BellHybrid/apps/application-bell-onboarding/include/application-bell-onboarding/BellOnBoardingNames.hpp => products/BellHybrid/apps/application-bell-onboarding/include/application-bell-onboarding/BellOnBoardingNames.hpp +4 -2
@@ 1,8 1,10 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <common/BellCommonNames.hpp>

namespace app
{
    inline constexpr auto applicationBellOnBoardingName = "ApplicationBellOnBoarding";


@@ 13,7 15,7 @@ namespace gui::window::name
    inline constexpr auto onBoardingOnOffWindow           = "BellOnBoardingOnOff";
    inline constexpr auto onBoardingLanguageWindow        = "BellOnBoardingLanguage";
    inline constexpr auto onBoardingShortcutsOptionWindow = "BellOnBoardingShortcutsOption";
    inline constexpr auto onBoardingShortcutsWindow       = "BellOnBoardingShortcuts";
    inline constexpr auto onBoardingShortcutsWindow       = gui::window::name::shortcutsWindow;
    inline constexpr auto onBoardingSettingsWindow        = "BellOnBoardingSettings";
    inline constexpr auto finalizeOnBoardingWindow        = "BellOnBoardingFinalize";
    inline constexpr auto informationOnBoardingWindow     = "BellOnBoardingInformation";

M products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingShortcutsWindowPresenter.cpp => products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingShortcutsWindowPresenter.cpp +22 -4
@@ 1,12 1,16 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "OnBoardingShortcutsWindowPresenter.hpp"
#include "layouts/OnBoardingShortcutsLayoutProvider.hpp"
#include <BellOnBoardingNames.hpp>
#include <common/layouts/ShortcutsLayoutProvider.hpp>
#include <common/layouts/ShortcutsLayouts.hpp>
#include <InputEvent.hpp>
#include <keymap/KeyMap.hpp>

namespace app::OnBoarding
{
    OnBoardingShortcutsWindowPresenter::OnBoardingShortcutsWindowPresenter(app::ApplicationCommon *app)
    OnBoardingShortcutsWindowPresenter::OnBoardingShortcutsWindowPresenter(app::ApplicationCommon *app) : app(app)
    {
        initLayoutOptions();
    }


@@ 33,10 37,24 @@ namespace app::OnBoarding

    void OnBoardingShortcutsWindowPresenter::initLayoutOptions()
    {
        auto layoutsList = gui::factory::getLayouts();
        const auto layoutsList = gui::factory::getLayouts();

        for (auto &layoutEntry : layoutsList) {
            layoutOptions.push_back(layoutEntry()->getLayout());
        }
    }

    bool OnBoardingShortcutsWindowPresenter::onInput(const gui::InputEvent &inputEvent, const gui::Item *currentLayout)
    {
        if (inputEvent.isShortRelease()) {
            const auto key = mapKey(inputEvent.getKeyCode());
            if (key == KeyMap::LightPress) {
                if (isLastLayout(currentLayout)) {
                    app->switchWindow(gui::window::name::onBoardingSettingsWindow);
                }
                return true;
            }
        }
        return false;
    }
} // namespace app::OnBoarding

M products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingShortcutsWindowPresenter.hpp => products/BellHybrid/apps/application-bell-onboarding/presenter/OnBoardingShortcutsWindowPresenter.hpp +5 -24
@@ 1,40 1,20 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, 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 <common/windows/ShortcutsWindowContract.hpp>
#include <apps-common/ApplicationCommon.hpp>
#include <layouts/OnBoardingShortcutsLayouts.hpp>

#include <vector>
#include <string>
#include <Item.hpp>

namespace app::OnBoarding
{
    class OnBoardingShortcutsWindowContract
    {
      public:
        class View
        {
          public:
            virtual ~View() = default;
        };

        class Presenter : public BasePresenter<OnBoardingShortcutsWindowContract::View>
        {
          public:
            virtual std::vector<gui::Item *> getLayouts() const               = 0;
            virtual bool isLastLayout(const gui::Item *layout) const          = 0;
            virtual bool isOneOfTwoLastLayouts(const gui::Item *layout) const = 0;
            virtual gui::Item *getFirstLayout() const                         = 0;
        };
    };

    class OnBoardingShortcutsWindowPresenter : public OnBoardingShortcutsWindowContract::Presenter
    class OnBoardingShortcutsWindowPresenter : public gui::ShortcutsWindowContract::Presenter
    {
      private:
        app::ApplicationCommon *app;
        std::vector<gui::Item *> layoutOptions;
        void initLayoutOptions();



@@ 45,5 25,6 @@ namespace app::OnBoarding
        bool isLastLayout(const gui::Item *layout) const override;
        bool isOneOfTwoLastLayouts(const gui::Item *layout) const override;
        gui::Item *getFirstLayout() const override;
        bool onInput(const gui::InputEvent &inputEvent, const gui::Item *currentLayout) override;
    };
} // namespace app::OnBoarding

M products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp => products/BellHybrid/apps/application-bell-settings/ApplicationBellSettings.cpp +8 -0
@@ 16,6 16,7 @@
#include "presenter/AboutYourBellWindowPresenter.hpp"
#include "presenter/alarm_settings/SnoozePresenter.hpp"
#include "presenter/FrontlightPresenter.hpp"
#include "presenter/ShortcutsWindowPresenter.hpp"
#include "windows/AboutYourBellWindow.hpp"
#include "windows/BellSettingsLanguageWindow.hpp"
#include "windows/BellSettingsLayoutWindow.hpp"


@@ 37,6 38,7 @@
#include <common/models/LayoutModel.hpp>
#include <common/windows/BellFinishedWindow.hpp>
#include <common/windows/BellTurnOffWindow.hpp>
#include <common/windows/ShortcutsWindow.hpp>
#include <common/popups/BellTurnOffOptionWindow.hpp>
#include <common/models/AudioModel.hpp>
#include <common/models/TimeModel.hpp>


@@ 240,6 242,12 @@ namespace app
                                  return std::make_unique<gui::BellDialogYesNo>(app, name);
                              });

        windowsFactory.attach(gui::window::name::bellSettingsShortcuts,
                              [&](ApplicationCommon *app, const std::string &name) {
                                  auto presenter = std::make_unique<bell_settings::ShortcutsWindowPresenter>(this);
                                  return std::make_unique<gui::ShortcutsWindow>(app, std::move(presenter), name);
                              });

        attachPopups({gui::popup::ID::AlarmActivated,
                      gui::popup::ID::AlarmDeactivated,
                      gui::popup::ID::PowerOff,

M products/BellHybrid/apps/application-bell-settings/CMakeLists.txt => products/BellHybrid/apps/application-bell-settings/CMakeLists.txt +2 -0
@@ 43,6 43,7 @@ target_sources(application-bell-settings
        presenter/AboutYourBellWindowPresenter.cpp
        presenter/LanguageWindowPresenter.cpp
        presenter/LayoutWindowPresenter.cpp
        presenter/ShortcutsWindowPresenter.cpp
        presenter/alarm_settings/AlarmSettingsPresenter.cpp
        presenter/alarm_settings/PrewakeUpPresenter.cpp
        presenter/alarm_settings/SnoozePresenter.cpp


@@ 84,6 85,7 @@ target_sources(application-bell-settings
        presenter/AboutYourBellWindowPresenter.hpp
        presenter/LanguageWindowPresenter.hpp
        presenter/LayoutWindowPresenter.hpp
        presenter/ShortcutsWindowPresenter.hpp
        presenter/alarm_settings/AlarmSettingsPresenter.hpp
        presenter/alarm_settings/PrewakeUpPresenter.hpp
        presenter/alarm_settings/SnoozePresenter.hpp

M products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp => products/BellHybrid/apps/application-bell-settings/include/application-bell-settings/ApplicationBellSettings.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 20,6 20,7 @@ namespace gui::window::name
    inline constexpr auto bellSettingsLayout       = "BellSettingsLayout";
    inline constexpr auto bellSettingsBedtimeTone  = "BellSettingsBedtimeTone";
    inline constexpr auto bellSettingsFactoryReset = "BellSettingsFactoryReset";
    inline constexpr auto bellSettingsShortcuts    = "BellSettingsShortcuts";
} // namespace gui::window::name

namespace app

A products/BellHybrid/apps/application-bell-settings/presenter/ShortcutsWindowPresenter.cpp => products/BellHybrid/apps/application-bell-settings/presenter/ShortcutsWindowPresenter.cpp +48 -0
@@ 0,0 1,48 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ShortcutsWindowPresenter.hpp"
#include <common/layouts/ShortcutsLayoutProvider.hpp>
#include <common/layouts/ShortcutsLayouts.hpp>

namespace app::bell_settings
{
    ShortcutsWindowPresenter::ShortcutsWindowPresenter(app::ApplicationCommon *app)
    {
        initLayoutOptions();
    }

    std::vector<gui::Item *> ShortcutsWindowPresenter::getLayouts() const
    {
        return layoutOptions;
    }

    gui::Item *ShortcutsWindowPresenter::getFirstLayout() const
    {
        return layoutOptions.empty() ? nullptr : layoutOptions.front();
    }

    bool ShortcutsWindowPresenter::isLastLayout(const gui::Item *layout) const
    {
        return !layoutOptions.empty() && layoutOptions.back() == layout;
    }

    bool ShortcutsWindowPresenter::isOneOfTwoLastLayouts(const gui::Item *layout) const
    {
        return isLastLayout(layout) || (layoutOptions.size() >= 2 && layoutOptions[layoutOptions.size() - 2] == layout);
    }

    void ShortcutsWindowPresenter::initLayoutOptions()
    {
        const auto layoutsList = gui::factory::getLayouts();

        for (auto &layoutEntry : layoutsList) {
            layoutOptions.push_back(layoutEntry()->getLayout());
        }
    }

    bool ShortcutsWindowPresenter::onInput(const gui::InputEvent &inputEvent, const gui::Item *currentLayout)
    {
        return false;
    }
} // namespace app::bell_settings

A products/BellHybrid/apps/application-bell-settings/presenter/ShortcutsWindowPresenter.hpp => products/BellHybrid/apps/application-bell-settings/presenter/ShortcutsWindowPresenter.hpp +29 -0
@@ 0,0 1,29 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <common/windows/ShortcutsWindowContract.hpp>
#include <apps-common/ApplicationCommon.hpp>

#include <vector>
#include <Item.hpp>

namespace app::bell_settings
{
    class ShortcutsWindowPresenter : public gui::ShortcutsWindowContract::Presenter
    {
      private:
        std::vector<gui::Item *> layoutOptions;
        void initLayoutOptions();

      public:
        explicit ShortcutsWindowPresenter(app::ApplicationCommon *app);

        std::vector<gui::Item *> getLayouts() const override;
        bool isLastLayout(const gui::Item *layout) const override;
        bool isOneOfTwoLastLayouts(const gui::Item *layout) const override;
        gui::Item *getFirstLayout() const override;
        bool onInput(const gui::InputEvent &inputEvent, const gui::Item *currentLayout) override;
    };
} // namespace app::bell_settings

M products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.cpp => products/BellHybrid/apps/application-bell-settings/windows/BellSettingsWindow.cpp +2 -0
@@ 88,6 88,8 @@ namespace gui
        addWinSettings(
            utils::translate("app_bell_settings_language"), gui::window::name::bellSettingsLanguage, defaultCallback);
        addWinSettings(
            utils::translate("app_bell_settings_shortcuts"), window::name::bellSettingsShortcuts, defaultCallback);
        addWinSettings(
            utils::translate("app_bell_settings_frontlight"), gui::BellSettingsFrontlightWindow::name, defaultCallback);
        addWinSettings(utils::translate("app_bell_settings_about"), gui::AboutYourBellWindow::name, defaultCallback);
        addWinSettings(

M products/BellHybrid/apps/common/CMakeLists.txt => products/BellHybrid/apps/common/CMakeLists.txt +8 -0
@@ 26,6 26,7 @@ target_sources(application-bell-common
        src/windows/BellTurnOffWindow.cpp
        src/windows/BellWelcomeWindow.cpp
        src/windows/SessionPausedWindow.cpp
        src/windows/ShortcutsWindow.cpp
        src/BellSideListItemWithCallbacks.cpp
        src/TimeUtils.cpp
        src/TimeUtils.cpp


@@ 65,6 66,8 @@ target_sources(application-bell-common
        src/layouts/HomeScreenLayoutVerticalSimple.cpp
        src/layouts/HomeScreenLayoutVerticalWithAmPm.cpp
        src/layouts/HomeScreenLayoutVerticalWithDate.cpp
        src/layouts/ShortcutsLayouts.cpp
        src/layouts/ShortcutsLayoutClassic.cpp

    PUBLIC
        include/common/BellListItemProvider.hpp


@@ 76,6 79,8 @@ target_sources(application-bell-common
        include/common/windows/BellTurnOffWindow.hpp
        include/common/windows/BellWelcomeWindow.hpp
        include/common/windows/SessionPausedWindow.hpp
        include/common/windows/ShortcutsWindowContract.hpp
        include/common/windows/ShortcutsWindow.hpp
        include/common/TimeUtils.hpp
        include/common/data/BatteryUtils.hpp
        include/common/data/FrontlightUtils.hpp


@@ 126,6 131,9 @@ target_sources(application-bell-common
        include/common/layouts/HomeScreenLayoutVerticalWithAmPm.hpp
        include/common/layouts/HomeScreenLayoutVerticalWithDate.hpp
        include/common/layouts/HomeScreenLayoutNames.hpp
        include/common/layouts/ShortcutsLayouts.hpp
        include/common/layouts/ShortcutsLayoutProvider.hpp
        include/common/layouts/ShortcutsLayoutClassic.hpp
)

target_link_libraries(application-bell-common

A products/BellHybrid/apps/common/include/common/BellCommonNames.hpp => products/BellHybrid/apps/common/include/common/BellCommonNames.hpp +10 -0
@@ 0,0 1,10 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

namespace gui::window::name
{
    inline constexpr auto shortcutsWindow = "BellShortcuts";

} // namespace gui::window::name

R products/BellHybrid/apps/application-bell-onboarding/layouts/OnBoardingShortcutsLayoutClassic.hpp => products/BellHybrid/apps/common/include/common/layouts/ShortcutsLayoutClassic.hpp +7 -7
@@ 1,9 1,9 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "OnBoardingShortcutsLayoutProvider.hpp"
#include "ShortcutsLayoutProvider.hpp"

#include <BoxLayout.hpp>



@@ 11,7 11,7 @@ namespace gui
{
    class BellBaseLayout;

    class OnBoardingShortcutsLayoutClassic : public OnBoardingShortcutsLayoutProvider, VBox
    class ShortcutsLayoutClassic : public ShortcutsLayoutProvider, VBox
    {
      private:
        const UTF8 image;


@@ 23,10 23,10 @@ namespace gui
        void buildInterface();

      public:
        OnBoardingShortcutsLayoutClassic(const UTF8 &image,
                                         const UTF8 &description,
                                         bool leftArrowVisible  = true,
                                         bool rightArrowVisible = true);
        ShortcutsLayoutClassic(const UTF8 &image,
                               const UTF8 &description,
                               bool leftArrowVisible  = true,
                               bool rightArrowVisible = true);

        auto getLayout() -> Item * override;
    };

R products/BellHybrid/apps/application-bell-onboarding/layouts/OnBoardingShortcutsLayoutProvider.hpp => products/BellHybrid/apps/common/include/common/layouts/ShortcutsLayoutProvider.hpp +7 -7
@@ 1,4 1,4 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 9,7 9,7 @@ namespace gui
{
    class Item;

    class OnBoardingShortcutsLayoutProvider
    class ShortcutsLayoutProvider
    {
      private:
        const UTF8 image;


@@ 18,12 18,12 @@ namespace gui
        const bool rightArrow;

      public:
        OnBoardingShortcutsLayoutProvider(const UTF8 &image,
                                          const UTF8 &description,
                                          bool leftArrow  = true,
                                          bool rightArrow = true)
        ShortcutsLayoutProvider(const UTF8 &image,
                                const UTF8 &description,
                                bool leftArrow  = true,
                                bool rightArrow = true)
            : image{image}, description{description}, leftArrow{leftArrow}, rightArrow{rightArrow} {};
        virtual ~OnBoardingShortcutsLayoutProvider() noexcept = default;
        virtual ~ShortcutsLayoutProvider() noexcept = default;

        virtual Item *getLayout() = 0;
    };

R products/BellHybrid/apps/application-bell-onboarding/layouts/OnBoardingShortcutsLayouts.hpp => products/BellHybrid/apps/common/include/common/layouts/ShortcutsLayouts.hpp +3 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 9,8 9,8 @@

namespace gui
{
    class OnBoardingShortcutsLayoutProvider;
    using LayoutGenerator = std::function<OnBoardingShortcutsLayoutProvider *()>;
    class ShortcutsLayoutProvider;
    using LayoutGenerator = std::function<ShortcutsLayoutProvider *()>;

    namespace factory
    {

M products/BellHybrid/apps/common/include/common/options/OptionBellMenu.hpp => products/BellHybrid/apps/common/include/common/options/OptionBellMenu.hpp +1 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

R products/BellHybrid/apps/application-bell-onboarding/windows/OnBoardingShortcutsWindow.hpp => products/BellHybrid/apps/common/include/common/windows/ShortcutsWindow.hpp +7 -8
@@ 1,9 1,9 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "presenter/OnBoardingShortcutsWindowPresenter.hpp"
#include "ShortcutsWindowContract.hpp"
#include <ApplicationCommon.hpp>
#include <AppWindow.hpp>
#include <apps-common/widgets/spinners/Spinners.hpp>


@@ 11,9 11,9 @@
namespace gui
{
    class SideListView;
    class OnBoardingShortcutsWindow : public AppWindow, public app::OnBoarding::OnBoardingShortcutsWindowContract::View
    class ShortcutsWindow : public AppWindow, public ShortcutsWindowContract::View
    {
        std::unique_ptr<app::OnBoarding::OnBoardingShortcutsWindowContract::Presenter> presenter;
        std::unique_ptr<ShortcutsWindowContract::Presenter> presenter;
        SideListView *sideListView = nullptr;
        WidgetSpinner *spinner     = nullptr;



@@ 23,10 23,9 @@ namespace gui
        void onValueChanged(const std::uint32_t currentValue);

      public:
        OnBoardingShortcutsWindow(
            app::ApplicationCommon *app,
            std::unique_ptr<app::OnBoarding::OnBoardingShortcutsWindowContract::Presenter> &&presenter,
            const std::string &name);
        ShortcutsWindow(app::ApplicationCommon *app,
                        std::unique_ptr<ShortcutsWindowContract::Presenter> &&presenter,
                        const std::string &name);

        bool isOneOfTwoLastShortcuts() const;
    };

A products/BellHybrid/apps/common/include/common/windows/ShortcutsWindowContract.hpp => products/BellHybrid/apps/common/include/common/windows/ShortcutsWindowContract.hpp +31 -0
@@ 0,0 1,31 @@
// Copyright (c) 2017-2023, 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 <vector>
#include <Item.hpp>

namespace gui
{
    class ShortcutsWindowContract
    {
      public:
        class View
        {
          public:
            virtual ~View() = default;
        };

        class Presenter : public app::BasePresenter<ShortcutsWindowContract::View>
        {
          public:
            virtual std::vector<gui::Item *> getLayouts() const                                     = 0;
            virtual bool isLastLayout(const gui::Item *layout) const                                = 0;
            virtual bool isOneOfTwoLastLayouts(const gui::Item *layout) const                       = 0;
            virtual gui::Item *getFirstLayout() const                                               = 0;
            virtual bool onInput(const gui::InputEvent &inputEvent, const gui::Item *currentLayout) = 0;
        };
    };
} // namespace gui

R products/BellHybrid/apps/application-bell-onboarding/layouts/OnBoardingShortcutsLayoutClassic.cpp => products/BellHybrid/apps/common/src/layouts/ShortcutsLayoutClassic.cpp +9 -9
@@ 1,7 1,7 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "OnBoardingShortcutsLayoutClassic.hpp"
#include "layouts/ShortcutsLayoutClassic.hpp"
#include <apps-common/widgets/BellBaseLayout.hpp>
#include <i18n/i18n.hpp>
#include <Style.hpp>


@@ 38,18 38,18 @@ namespace

namespace gui
{
    OnBoardingShortcutsLayoutClassic::OnBoardingShortcutsLayoutClassic(const UTF8 &image,
                                                                       const UTF8 &description,
                                                                       bool leftArrowVisible,
                                                                       bool rightArrowVisible)
        : OnBoardingShortcutsLayoutProvider(image, description),
    ShortcutsLayoutClassic::ShortcutsLayoutClassic(const UTF8 &image,
                                                   const UTF8 &description,
                                                   bool leftArrowVisible,
                                                   bool rightArrowVisible)
        : ShortcutsLayoutProvider(image, description),
          VBox(nullptr, 0, 0, style::bell_base_layout::w, style::bell_base_layout::h), image{image},
          description{description}, leftArrowVisible{leftArrowVisible}, rightArrowVisible{rightArrowVisible}
    {
        buildInterface();
    }

    void OnBoardingShortcutsLayoutClassic::buildInterface()
    void ShortcutsLayoutClassic::buildInterface()
    {
        setAlignment(Alignment::Horizontal::Center);



@@ 117,7 117,7 @@ namespace gui
        this->resizeItems();
    }

    auto OnBoardingShortcutsLayoutClassic::getLayout() -> Item *
    auto ShortcutsLayoutClassic::getLayout() -> Item *
    {
        return this;
    }

R products/BellHybrid/apps/application-bell-onboarding/layouts/OnBoardingShortcutsLayouts.cpp => products/BellHybrid/apps/common/src/layouts/ShortcutsLayouts.cpp +17 -17
@@ 1,43 1,43 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "OnBoardingShortcutsLayouts.hpp"
#include "OnBoardingShortcutsLayoutClassic.hpp"
#include "layouts/ShortcutsLayouts.hpp"
#include "layouts/ShortcutsLayoutClassic.hpp"

namespace gui::factory
{
    std::vector<LayoutGenerator> getLayouts()
    {
        return {{[]() {
                    return new OnBoardingShortcutsLayoutClassic(
                    return new ShortcutsLayoutClassic(
                        "shortcuts_step_rotate", "app_bell_onboarding_shortcuts_step_rotate", false, true);
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic("shortcuts_step_light_click",
                                                                "app_bell_onboarding_shortcuts_step_light_click");
                    return new ShortcutsLayoutClassic("shortcuts_step_light_click",
                                                      "app_bell_onboarding_shortcuts_step_light_click");
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic("shortcuts_step_deep_press",
                                                                "app_bell_onboarding_shortcuts_step_deep_press");
                    return new ShortcutsLayoutClassic("shortcuts_step_deep_press",
                                                      "app_bell_onboarding_shortcuts_step_deep_press");
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic("shortcuts_step_home_and_battery",
                                                                "app_bell_onboarding_shortcuts_step_home");
                    return new ShortcutsLayoutClassic("shortcuts_step_home_and_battery",
                                                      "app_bell_onboarding_shortcuts_step_home");
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic("shortcuts_step_home_and_battery",
                                                                "app_bell_onboarding_shortcuts_step_battery");
                    return new ShortcutsLayoutClassic("shortcuts_step_home_and_battery",
                                                      "app_bell_onboarding_shortcuts_step_battery");
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic("shortcuts_step_turn_off",
                                                                "app_bell_onboarding_shortcuts_step_turn_off");
                    return new ShortcutsLayoutClassic("shortcuts_step_turn_off",
                                                      "app_bell_onboarding_shortcuts_step_turn_off");
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic("shortcuts_step_restart",
                                                                "app_bell_onboarding_shortcuts_step_restart");
                    return new ShortcutsLayoutClassic("shortcuts_step_restart",
                                                      "app_bell_onboarding_shortcuts_step_restart");
                }},
                {[]() {
                    return new OnBoardingShortcutsLayoutClassic(
                    return new ShortcutsLayoutClassic(
                        "shortcuts_step_bedside_lamp", "app_bell_onboarding_shortcuts_step_bedside_lamp", true, false);
                }}};
    }

R products/BellHybrid/apps/application-bell-onboarding/windows/OnBoardingShortcutsWindow.cpp => products/BellHybrid/apps/common/src/windows/ShortcutsWindow.cpp +10 -20
@@ 1,27 1,24 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "OnBoardingShortcutsWindow.hpp"
#include "BellOnBoardingNames.hpp"
#include "windows/ShortcutsWindow.hpp"

#include <Style.hpp>
#include <SideListView.hpp>
#include <gui/input/InputEvent.hpp>
#include <keymap/KeyMap.hpp>

namespace gui
{
    OnBoardingShortcutsWindow::OnBoardingShortcutsWindow(
        app::ApplicationCommon *app,
        std::unique_ptr<app::OnBoarding::OnBoardingShortcutsWindowContract::Presenter> &&presenter,
        const std::string &name)
    ShortcutsWindow::ShortcutsWindow(app::ApplicationCommon *app,
                                     std::unique_ptr<ShortcutsWindowContract::Presenter> &&presenter,
                                     const std::string &name)
        : AppWindow(app, name), presenter{std::move(presenter)}
    {
        this->presenter->attach(this);
        buildInterface();
    }

    void OnBoardingShortcutsWindow::buildInterface()
    void ShortcutsWindow::buildInterface()
    {
        AppWindow::buildInterface();



@@ 44,27 41,20 @@ namespace gui
        setFocusItem(spinner);
    }

    bool OnBoardingShortcutsWindow::isOneOfTwoLastShortcuts() const
    bool ShortcutsWindow::isOneOfTwoLastShortcuts() const
    {
        auto currentLayout = spinner->getCurrentValue();
        return presenter->isOneOfTwoLastLayouts(currentLayout);
    }

    bool OnBoardingShortcutsWindow::onInput(const gui::InputEvent &inputEvent)
    bool ShortcutsWindow::onInput(const gui::InputEvent &inputEvent)
    {
        if (spinner->onInput(inputEvent)) {
            return true;
        }

        if (inputEvent.isShortRelease()) {
            const auto key = mapKey(inputEvent.getKeyCode());
            if (key == KeyMap::LightPress) {
                auto currentLayout = spinner->getCurrentValue();
                if (presenter->isLastLayout(currentLayout)) {
                    getApplication()->switchWindow(window::name::onBoardingSettingsWindow);
                }
                return true;
            }
        if (presenter->onInput(inputEvent, spinner->getCurrentValue())) {
            return true;
        }

        return AppWindow::onInput(inputEvent);