From 12bbabc93e75a4c0434f847e8ccd2b8ecb01263d Mon Sep 17 00:00:00 2001 From: Wojtek Rzepecki Date: Wed, 28 Apr 2021 11:55:35 +0200 Subject: [PATCH] [EGD-6254] Add meditation end timeout Added timeout on meditation end screen to automatically return to main screen of meditation app. --- .../windows/MeditationTimerWindow.cpp | 15 ++++++++++++++- .../windows/MeditationTimerWindow.hpp | 4 +++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/module-apps/application-meditation/windows/MeditationTimerWindow.cpp b/module-apps/application-meditation/windows/MeditationTimerWindow.cpp index bc497c76ea857efa8f106f64557d7ecff0afe8e7..207d9f4b0e895c64413bd9d355ce0616688013ce 100644 --- a/module-apps/application-meditation/windows/MeditationTimerWindow.cpp +++ b/module-apps/application-meditation/windows/MeditationTimerWindow.cpp @@ -8,6 +8,7 @@ #include "application-meditation/data/MeditationTimerData.hpp" #include "Names.hpp" +#include #include #include @@ -16,7 +17,17 @@ using namespace gui; -MeditationTimerWindow::MeditationTimerWindow(app::Application *app) : AppWindow{app, name::window::main_window} +namespace +{ + constexpr std::chrono::seconds endScreenTimeoutTime{5}; +} // namespace + +MeditationTimerWindow::MeditationTimerWindow(app::Application *app) + : AppWindow{app, name::window::main_window}, + endScreenTimeout{sys::TimerFactory::createSingleShotTimer( + app, "MeditationEndScreenTimeout", endScreenTimeoutTime, [this](sys::Timer &) { + application->switchWindow(app::window::name::meditation_main_window); + })} { MeditationTimerWindow::buildInterface(); } @@ -86,6 +97,7 @@ auto MeditationTimerWindow::onInput(const InputEvent &inputEvent) -> bool { if (inputEvent.isShortPress()) { if (finished) { + endScreenTimeout.stop(); application->switchWindow(app::window::name::meditation_main_window); return true; } @@ -158,6 +170,7 @@ void MeditationTimerWindow::setVisibleMeditationEnd() meditationInfo->setText(std::move(textParsed)); meditationInfo->setVisible(true); bottomBar->setVisible(false); + endScreenTimeout.start(); } void MeditationTimerWindow::invalidate() noexcept diff --git a/module-apps/application-meditation/windows/MeditationTimerWindow.hpp b/module-apps/application-meditation/windows/MeditationTimerWindow.hpp index 819dd8d1b5c00c6f7a3978193cc37637502e7b21..4d0b3dedae7fb662d4ba0a844a32abacd0b90059 100644 --- a/module-apps/application-meditation/windows/MeditationTimerWindow.hpp +++ b/module-apps/application-meditation/windows/MeditationTimerWindow.hpp @@ -1,10 +1,11 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// 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 "AppWindow.hpp" +#include #include namespace gui @@ -19,6 +20,7 @@ namespace gui bool finished = false; std::chrono::seconds meditationTime{0}; std::chrono::seconds meditationIntervalPeriod{0}; + sys::TimerHandle endScreenTimeout; void setWidgetVisible(bool topBar, bool bottomBar, bool counter); void setVisibleRunning();