From 230eb7c34349d28649500938c68ca6398f46b024 Mon Sep 17 00:00:00 2001 From: Przemyslaw Brudny Date: Thu, 18 Feb 2021 18:54:16 +0100 Subject: [PATCH] [EGD-5816] Device freeze after cancelling a call Reverted changed proposed by PR [EGD-5598] GuiTimer refreshWindow on Count and custom stop. Signed-off-by: Przemyslaw Brudny --- module-apps/GuiTimer.cpp | 8 +--- module-apps/GuiTimer.hpp | 5 +-- .../application-call/windows/CallWindow.cpp | 1 + .../widgets/MeditationTimer.cpp | 16 ++++--- .../widgets/MeditationTimer.hpp | 2 + .../windows/MeditationTimerWindow.cpp | 2 + .../windows/DisplayLightWindow.cpp | 12 ++--- .../windows/DisplayLightWindow.hpp | 4 +- module-sys/Service/Service.hpp | 41 +---------------- module-sys/Service/Timer.cpp | 21 ++++----- module-sys/Service/Timer.hpp | 45 +------------------ 11 files changed, 42 insertions(+), 115 deletions(-) diff --git a/module-apps/GuiTimer.cpp b/module-apps/GuiTimer.cpp index 9ca0a9f233aba40656f77e354c12b16800900330..6fb0c1e21d2b549d8d9cfe87483ed06a42ab906c 100644 --- a/module-apps/GuiTimer.cpp +++ b/module-apps/GuiTimer.cpp @@ -44,17 +44,13 @@ namespace app {} GuiTimer::GuiTimer(const std::string &name, Application *parent, gui::ms timeout, gui::Timer::Type type) - : sys::Timer(name, parent, timeout, toSysTimerType(type), sys::UserTimerIDGenerator()), sysapi{*this, parent} + : sys::Timer(name, parent, timeout, toSysTimerType(type)), sysapi{*this} {} void GuiTimer::Sysapi::connect(gui::Item *item) { if (item != nullptr) { - parent.connect([item, this](sys::Timer &timer) { - if (item->onTimer(parent)) { - app->refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST); - } - }); + parent.connect([item, this](sys::Timer &timer) { item->onTimer(parent); }); } } } // namespace app diff --git a/module-apps/GuiTimer.hpp b/module-apps/GuiTimer.hpp index 163584a802c45853e93381657b7c4521822dd195..706a50f12f66e0f12491b9bb1f29d1367e739f4f 100644 --- a/module-apps/GuiTimer.hpp +++ b/module-apps/GuiTimer.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -49,11 +49,10 @@ namespace app { friend Application; GuiTimer &parent; - Application *app = nullptr; void connect(gui::Item *item); public: - Sysapi(GuiTimer &parent, Application *app) : parent(parent), app(app) + Sysapi(GuiTimer &parent) : parent(parent) {} } sysapi; }; diff --git a/module-apps/application-call/windows/CallWindow.cpp b/module-apps/application-call/windows/CallWindow.cpp index cbe301fcd4b11bfd0ed96481ccaea6ba91477d4b..d909af5295f7d8c7297d5b9ff7a575ebbb142e0f 100644 --- a/module-apps/application-call/windows/CallWindow.cpp +++ b/module-apps/application-call/windows/CallWindow.cpp @@ -412,6 +412,7 @@ namespace gui updateDuration(std::chrono::system_clock::to_time_t(systemUnitDuration)); callDuration++; LOG_DEBUG("Update duration timer callback - %" PRIu32, static_cast(callDuration.count())); + application->refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST); return true; }; timer->start(); diff --git a/module-apps/application-meditation/widgets/MeditationTimer.cpp b/module-apps/application-meditation/widgets/MeditationTimer.cpp index a392acde6f5b0d410f2ea5206056ef86c33aa71b..ca5c1feae1f083e108021526a411b5e62d29ff3c 100644 --- a/module-apps/application-meditation/widgets/MeditationTimer.cpp +++ b/module-apps/application-meditation/widgets/MeditationTimer.cpp @@ -50,11 +50,6 @@ namespace gui timer->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center)); timer->setEditMode(EditMode::Browse); - dimensionChangedCallback = [&](gui::Item &, const BoundingBox &newDim) -> bool { - setArea({newDim.x, newDim.y, newDim.w, newDim.h}); - return true; - }; - onReset(); } @@ -69,6 +64,7 @@ namespace gui { updateTimer(); progressBar->setPercentageValue(calculatePercentageValue()); + application->refreshWindow(RefreshModes::GUI_REFRESH_FAST); } void MeditationTimer::updateTimer() @@ -80,6 +76,13 @@ namespace gui timer->setText(remainingDuration.str(Duration::DisplayedFormat::Fixed0M0S)); } + auto MeditationTimer::onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) -> bool + { + setPosition(newDim.x, newDim.y); + setSize(newDim.w, newDim.h); + return true; + } + void MeditationTimer::reset(std::chrono::seconds _duration, std::chrono::seconds _intervalPeriod) noexcept { assert(_duration != std::chrono::seconds::zero()); // Pre-condition check. @@ -110,7 +113,8 @@ namespace gui auto MeditationTimer::onTimerTimeout(Item &self, Timer &timerTask) -> bool { if (isStopped() || isFinished()) { - application->getTimers().detachTimer("MeditationTimer"); + timerTask.stop(); + detachTimer(timerTask); if (isFinished() && timeoutCallback != nullptr) { timeoutCallback(); diff --git a/module-apps/application-meditation/widgets/MeditationTimer.hpp b/module-apps/application-meditation/widgets/MeditationTimer.hpp index 66b7f20289580686037f5989779a2f711485180f..12db5342d679b721d9e17b64af6a48ab357c03db 100644 --- a/module-apps/application-meditation/widgets/MeditationTimer.hpp +++ b/module-apps/application-meditation/widgets/MeditationTimer.hpp @@ -25,6 +25,8 @@ namespace gui app::ApplicationMeditation *app, Item *_parent = nullptr); + [[nodiscard]] auto onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) -> bool override; + void start(); void stop(); void reset(std::chrono::seconds _duration, std::chrono::seconds period = std::chrono::seconds::zero()) noexcept; diff --git a/module-apps/application-meditation/windows/MeditationTimerWindow.cpp b/module-apps/application-meditation/windows/MeditationTimerWindow.cpp index 4e102a0aab47c982f45703e09084b77497a1fb55..62f3fe1962590337c5700de123ce077bfc416615 100644 --- a/module-apps/application-meditation/windows/MeditationTimerWindow.cpp +++ b/module-apps/application-meditation/windows/MeditationTimerWindow.cpp @@ -68,10 +68,12 @@ void MeditationTimerWindow::onBeforeShow(ShowMode mode, SwitchData *data) setVisibleRunning(); auto onMeditationEnd = [&]() -> void { setVisibleMeditationEnd(); + application->refreshWindow(RefreshModes::GUI_REFRESH_FAST); }; timer->registerTimeoutCallback(onMeditationEnd); timer->reset(meditationTime, meditationIntervalPeriod); timer->start(); + application->refreshWindow(RefreshModes::GUI_REFRESH_FAST); }; timer->registerTimeoutCallback(onPreparation); diff --git a/module-apps/application-settings-new/windows/DisplayLightWindow.cpp b/module-apps/application-settings-new/windows/DisplayLightWindow.cpp index 01fc0aa48dff64ef8a9fff2c86da4287585f98dc..9b91ba25db2a925300d2ea7faaccee344f6002f1 100644 --- a/module-apps/application-settings-new/windows/DisplayLightWindow.cpp +++ b/module-apps/application-settings-new/windows/DisplayLightWindow.cpp @@ -21,20 +21,21 @@ namespace gui isDisplayLightSwitchOn = values.lightOn; isAutoLightSwitchOn = values.mode == screen_light_control::ScreenLightMode::Automatic; brightnessValue = values.parameters.manualModeBrightness; - timerName = "AmbientLightTimer"; setTitle(utils::localize.get("app_settings_display_display_light")); - auto timerTask = std::make_unique( - timerName, application, gui::lighting::AMBIENT_LIGHT_TIMER_MS, Timer::Type::Continous); + timerTask = std::make_unique( + "AmbientLightTimer", application, gui::lighting::AMBIENT_LIGHT_TIMER_MS, Timer::Type::Continous); timerCallback = [this](Item &it, Timer &task) { return onTimerTimeout(it, task); }; timerTask->start(); application->connect(std::move(timerTask), this); } - void DisplayLightWindow::onClose() + DisplayLightWindow::~DisplayLightWindow() { - application->detachTimer(timerName); + if (timerTask != nullptr) { + timerTask->stop(); + } } auto DisplayLightWindow::onTimerTimeout(Item &self, Timer &task) -> bool @@ -42,6 +43,7 @@ namespace gui ambientLight = bsp::light_sensor::readout(); refreshOptionsList(); + application->refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST); return true; } diff --git a/module-apps/application-settings-new/windows/DisplayLightWindow.hpp b/module-apps/application-settings-new/windows/DisplayLightWindow.hpp index a3ec34fecbdb0784cd5b94ae6ca70e269e3af8b1..69f63eae6cc7e6fb2126d003b8d3385bf3e624b8 100644 --- a/module-apps/application-settings-new/windows/DisplayLightWindow.hpp +++ b/module-apps/application-settings-new/windows/DisplayLightWindow.hpp @@ -20,7 +20,7 @@ namespace gui { public: DisplayLightWindow(app::Application *app, app::settingsInterface::ScreenLightSettings *screenLightSettings); - void onClose() override; + ~DisplayLightWindow(); private: auto buildOptionsList() -> std::list