~aleteoryx/muditaos

592d314418e4a805fe828031cc29b5b1072e16c1 — Lukasz Mastalerz 2 years ago a21a2fd
[BH-1696] Charging notifications improvements

Fixes and improvements for charging notifications
M products/BellHybrid/apps/Application.cpp => products/BellHybrid/apps/Application.cpp +1 -1
@@ 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<gui::ChargingNotificationWindow>(app);
                                          return std::make_unique<gui::ChargingInProgressNotificationWindow>(app);
                                      });
                break;
            case ID::ChargingDoneNotification:

M products/BellHybrid/apps/application-bell-relaxation/presenter/RelaxationTimerSelectPresenter.cpp => products/BellHybrid/apps/application-bell-relaxation/presenter/RelaxationTimerSelectPresenter.cpp +2 -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

#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<minutes> valuesRange{
        minutes::zero(), 5min, 10min, 15min, 30min, 45min, 60min, 90min, 8760h};
    const std::vector<minutes> valuesRange{minutes::zero(), 5min, 10min, 15min, 30min, 45min, 60min, 90min, 8760h};
} // namespace

namespace app::relaxation

M products/BellHybrid/apps/common/include/common/popups/ChargingNotificationWindow.hpp => products/BellHybrid/apps/common/include/common/popups/ChargingNotificationWindow.hpp +14 -3
@@ 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 */

M products/BellHybrid/apps/common/src/popups/ChargingNotificationWindow.cpp => products/BellHybrid/apps/common/src/popups/ChargingNotificationWindow.cpp +41 -22
@@ 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::PopupRequestParams>(gui::popup::ID::ChargingNotification));
        application->returnToPreviousWindow();
            std::make_unique<gui::PopupRequestParams>(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::PopupRequestParams>(gui::popup::ID::ChargingNotification));
        ChargingNotificationWindow::returnToPreviousWindow();
    }

} /* namespace gui */