~aleteoryx/muditaos

1c0606f9c4bc98d534d7c8fb538e1f8942a42c76 — Tomasz Rybarski 4 years ago 6070d4f
[BH-1177] PowerNap Pause

Pause functionality in PowerNap app
M products/BellHybrid/apps/application-bell-meditation-timer/ApplicationBellMeditationTimer.cpp => products/BellHybrid/apps/application-bell-meditation-timer/ApplicationBellMeditationTimer.cpp +5 -4
@@ 6,10 6,10 @@
#include "windows/MeditationRunningWindow.hpp"
#include "windows/MeditationTimerWindow.hpp"
#include "windows/ReadyGoingWindow.hpp"
#include "windows/SessionPausedWindow.hpp"

#include <common/models/TimeModel.hpp>
#include <common/windows/BellFinishedWindow.hpp>
#include <common/windows/SessionPausedWindow.hpp>

namespace app
{


@@ 57,9 57,10 @@ namespace app
                                      app, settings.get(), std::move(timeModel));
                                  return std::make_unique<gui::MeditationRunningWindow>(app, std::move(presenter));
                              });
        windowsFactory.attach(gui::name::window::sessionPaused, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::SessionPausedWindow>(app);
        });
        windowsFactory.attach(gui::window::session_paused::sessionPaused,
                              [](ApplicationCommon *app, const std::string &name) {
                                  return std::make_unique<gui::SessionPausedWindow>(app);
                              });
        windowsFactory.attach(gui::window::bell_finished::defaultName,
                              [](ApplicationCommon *app, const std::string &name) {
                                  return std::make_unique<gui::BellFinishedWindow>(app);

M products/BellHybrid/apps/application-bell-meditation-timer/CMakeLists.txt => products/BellHybrid/apps/application-bell-meditation-timer/CMakeLists.txt +0 -1
@@ 28,7 28,6 @@ target_sources(application-bell-meditation-timer
        windows/MeditationRunningWindow.cpp
        windows/MeditationTimerWindow.cpp
        windows/ReadyGoingWindow.cpp
        windows/SessionPausedWindow.cpp
    PUBLIC
        include/application-bell-meditation-timer/ApplicationBellMeditationTimer.hpp
)

M products/BellHybrid/apps/application-bell-meditation-timer/include/application-bell-meditation-timer/ApplicationBellMeditationTimer.hpp => products/BellHybrid/apps/application-bell-meditation-timer/include/application-bell-meditation-timer/ApplicationBellMeditationTimer.hpp +0 -1
@@ 12,7 12,6 @@ namespace gui::name::window
    inline constexpr auto meditationTimer    = "MeditationTimerWindow";
    inline constexpr auto readyGoing         = "ReadyGoingWindow";
    inline constexpr auto sessionEnded       = "SessionEndedWindow";
    inline constexpr auto sessionPaused      = "SensionPausedWindow";
} // namespace gui::name::window

namespace app

M products/BellHybrid/apps/application-bell-meditation-timer/presenter/MeditationProgressPresenter.cpp => products/BellHybrid/apps/application-bell-meditation-timer/presenter/MeditationProgressPresenter.cpp +2 -1
@@ 7,6 7,7 @@

#include <common/models/TimeModel.hpp>
#include <common/windows/BellFinishedWindow.hpp>
#include <common/windows/SessionPausedWindow.hpp>
#include <service-appmgr/Controller.hpp>
#include <service-db/Settings.hpp>



@@ 57,7 58,7 @@ namespace app::meditation
    void MeditationProgressPresenter::pause()
    {
        timer->stop();
        app->switchWindow(gui::name::window::sessionPaused);
        app->switchWindow(gui::window::session_paused::sessionPaused);
    }

    void MeditationProgressPresenter::resume()

M products/BellHybrid/apps/application-bell-powernap/ApplicationBellPowerNap.cpp => products/BellHybrid/apps/application-bell-powernap/ApplicationBellPowerNap.cpp +5 -0
@@ 10,6 10,7 @@
#include "windows/PowerNapSessionEndedWindow.hpp"
#include <common/models/TimeModel.hpp>
#include <AlarmSoundPaths.hpp>
#include <common/windows/SessionPausedWindow.hpp>

namespace app
{


@@ 50,6 51,10 @@ namespace app
                    app, settings.get(), std::move(soundsRepository), *audioModel, std::move(timeModel));
                return std::make_unique<gui::PowerNapProgressWindow>(app, std::move(presenter));
            });
        windowsFactory.attach(gui::window::session_paused::sessionPaused,
                              [](ApplicationCommon *app, const std::string &name) {
                                  return std::make_unique<gui::SessionPausedWindow>(app);
                              });
        windowsFactory.attach(gui::window::name::powernapSessionEnded,
                              [](ApplicationCommon *app, const std::string &name) {
                                  auto presenter = std::make_unique<powernap::PowerNapSessionEndPresenter>(app);

M products/BellHybrid/apps/application-bell-powernap/presenter/PowerNapProgressPresenter.cpp => products/BellHybrid/apps/application-bell-powernap/presenter/PowerNapProgressPresenter.cpp +16 -0
@@ 11,6 11,7 @@
#include <service-db/Settings.hpp>
#include <Timers/TimerFactory.hpp>
#include <Utils.hpp>
#include <common/windows/SessionPausedWindow.hpp>

#include <gsl/assert>



@@ 44,9 45,11 @@ namespace app::powernap
    {
        Expects(timer != nullptr);
        const auto value = settings->getValue(powernapDBRecordName);
        reinterpret_cast<app::Application *>(app)->suspendIdleTimer();
        timer->reset(std::chrono::minutes{utils::getNumericValue<int>(value)});
        timer->start();
    }

    void PowerNapProgressPresenter::endNap()
    {
        napFinished = false;


@@ 54,6 57,18 @@ namespace app::powernap
        napAlarmTimer.stop();
        onNapAlarmFinished();
    }

    void PowerNapProgressPresenter::pause()
    {
        timer->stop();
        app->switchWindow(gui::window::session_paused::sessionPaused);
    }

    void PowerNapProgressPresenter::resume()
    {
        timer->start();
    }

    void PowerNapProgressPresenter::onNapFinished()
    {
        const auto filePath = soundsRepository->titleToPath(


@@ 63,6 78,7 @@ namespace app::powernap
        napAlarmTimer.start();
        napFinished = true;
    }

    void PowerNapProgressPresenter::onNapAlarmFinished()
    {
        audioModel.stopPlayedByThis({});

M products/BellHybrid/apps/application-bell-powernap/presenter/PowerNapProgressPresenter.hpp => products/BellHybrid/apps/application-bell-powernap/presenter/PowerNapProgressPresenter.hpp +4 -0
@@ 43,6 43,8 @@ namespace app::powernap
          public:
            virtual void activate()                                                 = 0;
            virtual void endNap()                                                   = 0;
            virtual void pause()                                                    = 0;
            virtual void resume()                                                   = 0;
            virtual void setTimer(std::unique_ptr<app::TimerWithCallbacks> &&timer) = 0;
            virtual void handleUpdateTimeEvent()                                    = 0;
            virtual bool isNapFinished()                                            = 0;


@@ 63,6 65,8 @@ namespace app::powernap

        void activate() override;
        void endNap() override;
        void pause() override;
        void resume() override;
        void setTimer(std::unique_ptr<app::TimerWithCallbacks> &&_timer) override;
        void handleUpdateTimeEvent() override;
        bool isNapFinished() override;

M products/BellHybrid/apps/application-bell-powernap/windows/PowerNapProgressWindow.cpp => products/BellHybrid/apps/application-bell-powernap/windows/PowerNapProgressWindow.cpp +12 -1
@@ 68,7 68,7 @@ namespace gui

        buildLayout();
        configureTimer();
        presenter->activate();
        // presenter->activate();
    }
    void PowerNapProgressWindow::buildLayout()
    {


@@ 108,6 108,10 @@ namespace gui
                presenter->endNap();
                return true;
            }
            else if (not presenter->isNapFinished() && key == KeyMap::LightPress) {
                presenter->pause();
                return true;
            }
            else if (not presenter->isNapFinished() && key == KeyMap::Back) {
                reinterpret_cast<app::Application *>(application)->resumeIdleTimer();
                presenter->endNap();


@@ 146,5 150,12 @@ namespace gui
    {
        presenter->onBeforeShow();
        updateTime();

        if (mode == ShowMode::GUI_SHOW_INIT) {
            presenter->activate();
        }
        else {
            presenter->resume();
        }
    }
} // namespace gui

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


@@ 50,6 51,7 @@ target_sources(application-bell-common
        include/common/windows/BellFinishedWindow.hpp
        include/common/windows/BellTurnOffWindow.hpp
        include/common/windows/BellWelcomeWindow.hpp
        include/common/windows/SessionPausedWindow.hpp
        include/common/TimeUtils.hpp
        include/common/models/AbstractAlarmModel.hpp
        include/common/models/AbstractBedtimeModel.hpp

M products/BellHybrid/apps/common/include/common/data/StyleCommon.hpp => products/BellHybrid/apps/common/include/common/data/StyleCommon.hpp +16 -0
@@ 18,3 18,19 @@ namespace gui::bell_style
    inline constexpr auto popup_icon_y_alignment   = 22;

} // namespace gui::bell_style

namespace itStyle
{
    namespace icon
    {
        constexpr inline auto imageLogo         = "bell_big_logo";
        constexpr inline auto imagePause        = "big_pause";
        constexpr inline auto imageTopMargin    = 112;
        constexpr inline auto imageBottomMargin = 30;
    } // namespace icon

    namespace text
    {
        constexpr inline auto font = style::window::font::verybiglight;
    } // namespace text
} // namespace itStyle

R products/BellHybrid/apps/application-bell-meditation-timer/windows/SessionPausedWindow.hpp => products/BellHybrid/apps/common/include/common/windows/SessionPausedWindow.hpp +6 -0
@@ 10,6 10,12 @@

namespace gui
{

    namespace window::session_paused
    {
        inline constexpr auto sessionPaused = "SessionPausedWindow";
    } // namespace window::session_paused

    class SessionPausedWindow : public AppWindow
    {
      public:

R products/BellHybrid/apps/application-bell-meditation-timer/windows/SessionPausedWindow.cpp => products/BellHybrid/apps/common/src/windows/SessionPausedWindow.cpp +4 -6
@@ 1,14 1,13 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApplicationBellMeditationTimer.hpp"
#include "MeditationStyle.hpp"
#include "SessionPausedWindow.hpp"
#include <common/data/StyleCommon.hpp>
#include "windows/SessionPausedWindow.hpp"

namespace gui
{
    SessionPausedWindow::SessionPausedWindow(app::ApplicationCommon *app)
        : AppWindow(app, gui::name::window::sessionPaused)
        : AppWindow(app, gui::window::session_paused::sessionPaused)
    {
        buildInterface();
    }


@@ 32,12 31,11 @@ namespace gui
        navBar->setVisible(false);

        if (icon == nullptr) {
            using namespace app::meditationStyle;

            icon = new Icon(this, 0, 0, style::window_width, style::window_height, {}, {});
            icon->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Top));
            icon->image->setMargins({0, itStyle::icon::imageTopMargin, 0, itStyle::icon::imageBottomMargin});
            icon->image->set(app::meditationStyle::itStyle::icon::imagePause, ImageTypeSpecifier::W_G);
            icon->image->set(itStyle::icon::imagePause, ImageTypeSpecifier::W_G);
            icon->text->setFont(itStyle::text::font);
            icon->text->setRichText(utils::translate("common_paused"));
        }