From 592d314418e4a805fe828031cc29b5b1072e16c1 Mon Sep 17 00:00:00 2001 From: Lukasz Mastalerz Date: Fri, 3 Nov 2023 13:59:19 +0100 Subject: [PATCH] [BH-1696] Charging notifications improvements Fixes and improvements for charging notifications --- products/BellHybrid/apps/Application.cpp | 2 +- .../RelaxationTimerSelectPresenter.cpp | 5 +- .../popups/ChargingNotificationWindow.hpp | 17 ++++- .../src/popups/ChargingNotificationWindow.cpp | 63 ++++++++++++------- 4 files changed, 58 insertions(+), 29 deletions(-) diff --git a/products/BellHybrid/apps/Application.cpp b/products/BellHybrid/apps/Application.cpp index be497c1e5cdee1c40eb7e8c85ef2545f752c1279..61e5b816f764228b2b9e49cb3bbaf27730e6ebeb 100644 --- a/products/BellHybrid/apps/Application.cpp +++ b/products/BellHybrid/apps/Application.cpp @@ -105,7 +105,7 @@ namespace app case ID::ChargingNotification: windowsFactory.attach(window::charging_notification_window, [](app::ApplicationCommon *app, const std::string &name) { - return std::make_unique(app); + return std::make_unique(app); }); break; case ID::ChargingDoneNotification: diff --git a/products/BellHybrid/apps/application-bell-relaxation/presenter/RelaxationTimerSelectPresenter.cpp b/products/BellHybrid/apps/application-bell-relaxation/presenter/RelaxationTimerSelectPresenter.cpp index 81083d98886244ee92f689863ad628de03eff451..499dc7bc7dd1baac1d4d6226075093d3f705c872 100644 --- a/products/BellHybrid/apps/application-bell-relaxation/presenter/RelaxationTimerSelectPresenter.cpp +++ b/products/BellHybrid/apps/application-bell-relaxation/presenter/RelaxationTimerSelectPresenter.cpp @@ -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 #include "RelaxationTimerSelectPresenter.hpp" @@ -12,8 +12,7 @@ namespace using namespace std::chrono_literals; using minutes = std::chrono::minutes; constexpr auto timerDefaultValue{15min}; - const static std::vector valuesRange{ - minutes::zero(), 5min, 10min, 15min, 30min, 45min, 60min, 90min, 8760h}; + const std::vector valuesRange{minutes::zero(), 5min, 10min, 15min, 30min, 45min, 60min, 90min, 8760h}; } // namespace namespace app::relaxation diff --git a/products/BellHybrid/apps/common/include/common/popups/ChargingNotificationWindow.hpp b/products/BellHybrid/apps/common/include/common/popups/ChargingNotificationWindow.hpp index 992ea2e8f88e57200b4568c7328d10278f44b5de..843b8b8e6ca965f8fdc8d3cfd0426e2af74a3e7a 100644 --- a/products/BellHybrid/apps/common/include/common/popups/ChargingNotificationWindow.hpp +++ b/products/BellHybrid/apps/common/include/common/popups/ChargingNotificationWindow.hpp @@ -24,18 +24,29 @@ namespace gui Icon *icon = nullptr; bool onInput(const InputEvent &inputEvent) override; - void returnToPreviousWindow(); + virtual void returnToPreviousWindow(); void buildInterface() override; public: - explicit ChargingNotificationWindow(app::ApplicationCommon *app); - void onBeforeShow(ShowMode mode, SwitchData *data) override; + explicit ChargingNotificationWindow(app::ApplicationCommon *app, const std::string &windowName); }; class ChargingDoneNotificationWindow : public ChargingNotificationWindow { + protected: + void returnToPreviousWindow() override; + public: explicit ChargingDoneNotificationWindow(app::ApplicationCommon *app); void onBeforeShow(ShowMode mode, SwitchData *data) override; }; + class ChargingInProgressNotificationWindow : public ChargingNotificationWindow + { + protected: + void returnToPreviousWindow() override; + + public: + explicit ChargingInProgressNotificationWindow(app::ApplicationCommon *app); + void onBeforeShow(ShowMode mode, SwitchData *data) override; + }; } /* namespace gui */ diff --git a/products/BellHybrid/apps/common/src/popups/ChargingNotificationWindow.cpp b/products/BellHybrid/apps/common/src/popups/ChargingNotificationWindow.cpp index 90f9e92971c2cf4f1ad95d889cc968a066defea6..671ca99ed3dd5ce5245b2ef01ce7f99b6f0e6ed9 100644 --- a/products/BellHybrid/apps/common/src/popups/ChargingNotificationWindow.cpp +++ b/products/BellHybrid/apps/common/src/popups/ChargingNotificationWindow.cpp @@ -21,9 +21,8 @@ namespace } // namespace namespace gui { - ChargingNotificationWindow::ChargingNotificationWindow(app::ApplicationCommon *app) - : WindowWithTimer(app, popup::window::charging_notification_window, chargingNotificationTimeout), - app::AsyncCallbackReceiver{app}, app{app} + ChargingNotificationWindow::ChargingNotificationWindow(app::ApplicationCommon *app, const std::string &windowName) + : WindowWithTimer(app, windowName, chargingNotificationTimeout), app::AsyncCallbackReceiver{app}, app{app} { buildInterface(); timerCallback = [this](Item &, sys::Timer &) { @@ -50,10 +49,31 @@ namespace gui icon->image->setMargins(Margins(0, icon::image_top_margin, 0, icon::image_bottom_margin)); icon->text->setFont(style::window::font::verybiglight); } - void ChargingNotificationWindow::onBeforeShow(ShowMode mode, [[maybe_unused]] SwitchData *data) + + bool ChargingNotificationWindow::onInput(const InputEvent &inputEvent) + { + if (inputEvent.isShortRelease(KeyCode::KEY_ENTER) || inputEvent.isShortRelease(KeyCode::KEY_RF)) { + detachTimerIfExists(); + returnToPreviousWindow(); + return true; + } + return false; + } + void ChargingNotificationWindow::returnToPreviousWindow() + { + if (application->getPreviousWindow()) { + application->returnToPreviousWindow(); + } + } + + ChargingDoneNotificationWindow::ChargingDoneNotificationWindow(app::ApplicationCommon *app) + : ChargingNotificationWindow(app, gui::popup::window::charging_done_notification_window) + {} + + void ChargingDoneNotificationWindow::onBeforeShow(ShowMode mode, [[maybe_unused]] SwitchData *data) { WindowWithTimer::onBeforeShow(mode, data); - icon->text->setRichText(std::to_string(Store::Battery::get().level) + "% " + utils::translate(chargingText)); + icon->text->setRichText(utils::translate(chargingDoneText)); icon->image->set(chargingIcon); icon->resizeItems(); statusBar->setVisible(false); @@ -61,33 +81,23 @@ namespace gui navBar->setActive(nav_bar::Side::Right, false); } - void ChargingNotificationWindow::returnToPreviousWindow() + void ChargingDoneNotificationWindow::returnToPreviousWindow() { - detachTimerIfExists(); app::manager::Controller::sendAction( application, app::manager::actions::AbortPopup, - std::make_unique(gui::popup::ID::ChargingNotification)); - application->returnToPreviousWindow(); + std::make_unique(gui::popup::ID::ChargingDoneNotification)); + ChargingNotificationWindow::returnToPreviousWindow(); } - bool ChargingNotificationWindow::onInput(const InputEvent &inputEvent) - { - if (inputEvent.isShortRelease(KeyCode::KEY_ENTER) || inputEvent.isShortRelease(KeyCode::KEY_RF)) { - returnToPreviousWindow(); - return true; - } - return false; - } - - ChargingDoneNotificationWindow::ChargingDoneNotificationWindow(app::ApplicationCommon *app) - : ChargingNotificationWindow(app) + ChargingInProgressNotificationWindow::ChargingInProgressNotificationWindow(app::ApplicationCommon *app) + : ChargingNotificationWindow(app, gui::popup::window::charging_notification_window) {} - void ChargingDoneNotificationWindow::onBeforeShow(ShowMode mode, [[maybe_unused]] SwitchData *data) + void ChargingInProgressNotificationWindow::onBeforeShow(ShowMode mode, [[maybe_unused]] SwitchData *data) { WindowWithTimer::onBeforeShow(mode, data); - icon->text->setRichText(utils::translate(chargingDoneText)); + icon->text->setRichText(std::to_string(Store::Battery::get().level) + "% " + utils::translate(chargingText)); icon->image->set(chargingIcon); icon->resizeItems(); statusBar->setVisible(false); @@ -95,4 +105,13 @@ namespace gui navBar->setActive(nav_bar::Side::Right, false); } + void ChargingInProgressNotificationWindow::returnToPreviousWindow() + { + app::manager::Controller::sendAction( + application, + app::manager::actions::AbortPopup, + std::make_unique(gui::popup::ID::ChargingNotification)); + ChargingNotificationWindow::returnToPreviousWindow(); + } + } /* namespace gui */