From 7afd68ac760eafc4c65cc2f8c118d9eac182afaf Mon Sep 17 00:00:00 2001 From: Wojtek Rzepecki Date: Mon, 25 Oct 2021 11:38:02 +0200 Subject: [PATCH] [EGD-7852] Fix batteryr screens switch fix of switch from dead/charging battery screens --- .../ApplicationDesktop.cpp | 19 +++++++++++++++++-- .../ApplicationDesktop.hpp | 3 +++ .../model/ApplicationManagerCommon.cpp | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/module-apps/application-desktop/ApplicationDesktop.cpp b/module-apps/application-desktop/ApplicationDesktop.cpp index 6e2e6c4727d11ea78ddc38581f516e2f4030a133..dd7e570f769a3214d8ae309abf0c53f8021cefa4 100644 --- a/module-apps/application-desktop/ApplicationDesktop.cpp +++ b/module-apps/application-desktop/ApplicationDesktop.cpp @@ -197,10 +197,25 @@ namespace app return false; } + bool ApplicationDesktop::isPopupPermitted([[maybe_unused]] gui::popup::ID popupId) const + { + if (blockAllPopups) { + return false; + } + return true; + } + void ApplicationDesktop::handleLowBatteryNotification(manager::actions::ActionParamsPtr &&data) { auto lowBatteryState = static_cast(data.get()); + auto currentWindow = getCurrentWindow(); + if (currentWindow->getName() == app::window::name::dead_battery || + currentWindow->getName() == app::window::name::charging_battery) { + data->ignoreCurrentWindowOnStack = true; + } + if (lowBatteryState->isActive()) { + blockAllPopups = true; if (lowBatteryState->isCharging()) { switchWindow(app::window::name::charging_battery, std::move(data)); } @@ -209,10 +224,10 @@ namespace app } } else { - auto currentWindow = getCurrentWindow(); + blockAllPopups = false; if (currentWindow->getName() == app::window::name::dead_battery || currentWindow->getName() == app::window::name::charging_battery) { - app::manager::Controller::sendAction(this, app::manager::actions::Home); + app::manager::Controller::sendAction(this, app::manager::actions::Home, std::move(data)); } } } diff --git a/module-apps/application-desktop/include/application-desktop/ApplicationDesktop.hpp b/module-apps/application-desktop/include/application-desktop/ApplicationDesktop.hpp index a28968b7962438143b75c9f556ae19afe937036e..dedabf44057d4b3f67fc51f55a650ed5c77ec24e 100644 --- a/module-apps/application-desktop/include/application-desktop/ApplicationDesktop.hpp +++ b/module-apps/application-desktop/include/application-desktop/ApplicationDesktop.hpp @@ -39,6 +39,8 @@ namespace app // done void handleNotificationsChanged(std::unique_ptr notificationsParams) override; + bool isPopupPermitted(gui::popup::ID popupId) const override; + void setOsUpdateVersion(const std::string &value); private: @@ -46,6 +48,7 @@ namespace app void handleLowBatteryNotification(manager::actions::ActionParamsPtr &&data); DBNotificationsHandler dbNotificationHandler; sys::MessagePointer handleAsyncResponse(sys::ResponseMessage *resp) override; + bool blockAllPopups = false; }; template <> struct ManifestTraits diff --git a/module-services/service-appmgr/model/ApplicationManagerCommon.cpp b/module-services/service-appmgr/model/ApplicationManagerCommon.cpp index 3ef2816b533714076df8c3dc8c7436191fd0fd05..53362a64ddd9fdb0bc9101711f57269290d5e58b 100644 --- a/module-services/service-appmgr/model/ApplicationManagerCommon.cpp +++ b/module-services/service-appmgr/model/ApplicationManagerCommon.cpp @@ -449,7 +449,8 @@ namespace app::manager { action.setTargetApplication(resolveHomeApplication()); - SwitchRequest switchRequest(service::name::appmgr, resolveHomeApplication(), resolveHomeWindow(), nullptr); + SwitchRequest switchRequest( + service::name::appmgr, resolveHomeApplication(), resolveHomeWindow(), std::move(action.params)); return handleSwitchApplication(&switchRequest) ? ActionProcessStatus::Accepted : ActionProcessStatus::Dropped; }