diff --git a/module-apps/Application.cpp b/module-apps/Application.cpp index 98be0146e..59ee2ac61 100644 --- a/module-apps/Application.cpp +++ b/module-apps/Application.cpp @@ -23,6 +23,7 @@ #include "Application.hpp" #include "MessageType.hpp" #include "messages/AppMessage.hpp" +#include "windows/AppWindow.hpp" namespace app { @@ -139,14 +140,29 @@ sys::Message_t Application::DataReceivedHandler(sys::DataMessage* msgl) { { sevm::BatteryLevelMessage* msg = static_cast(msgl); LOG_INFO("Application battery level: %d", msg->levelPercents ); + + if( currentWindow ) { + if( currentWindow->updateBatteryLevel( msg->levelPercents ) ) + refreshWindow( gui::RefreshModes::GUI_REFRESH_FAST ); + } + + handled = true; } else if(msgl->messageType == static_cast(MessageType::EVMChargerPlugged) ) { sevm::BatteryPlugMessage* msg = static_cast(msgl); - if(msg->plugged == true) + if(msg->plugged == true) { + //TODO show plug icon LOG_INFO("Application charger connected" ); - else + } + else { + //hide plug icon LOG_INFO("Application charger disconnected" ); + } + + refreshWindow( gui::RefreshModes::GUI_REFRESH_FAST ); + + handled = true; } else if(msgl->messageType == static_cast(MessageType::AppSwitch) ) { @@ -224,7 +240,7 @@ sys::Message_t Application::DataReceivedHandler(sys::DataMessage* msgl) { //for all windows call rebuild method for( auto it = windows.begin(); it!= windows.end(); it++) it->second->rebuild(); - //if application has focus call deeprefresh + //if application has focus call deep refresh if( state == State::ACTIVE_FORGROUND ) refreshWindow( gui::RefreshModes::GUI_REFRESH_DEEP ); handled = true; diff --git a/module-apps/Application.hpp b/module-apps/Application.hpp index d598c88bb..0c3d31373 100644 --- a/module-apps/Application.hpp +++ b/module-apps/Application.hpp @@ -12,7 +12,7 @@ #include //module-gui #include "gui/Common.hpp" -#include "gui/widgets/Window.hpp" +//#include "gui/widgets/Window.hpp" #include "gui/input/Translator.hpp" //module-sys #include "Service/Service.hpp" @@ -24,6 +24,10 @@ #include "SwitchData.hpp" +namespace gui { + class AppWindow; +}; + namespace app { /* @@ -126,9 +130,9 @@ protected: /** * Map containing application's windows */ - std::map windows; - gui::Window* currentWindow = nullptr; - gui::Window* previousWindow = nullptr; + std::map windows; + gui::AppWindow* currentWindow = nullptr; + gui::AppWindow* previousWindow = nullptr; /** * Flag defines whether keyboard input is processed */ diff --git a/module-apps/application-calendar/ApplicationCalendar.cpp b/module-apps/application-calendar/ApplicationCalendar.cpp index 11736c187..408d3f31c 100644 --- a/module-apps/application-calendar/ApplicationCalendar.cpp +++ b/module-apps/application-calendar/ApplicationCalendar.cpp @@ -7,6 +7,7 @@ * @details */ +#include #include "windows/CalendarMainWindow.hpp" #include "ApplicationCalendar.hpp" @@ -53,10 +54,10 @@ sys::ReturnCodes ApplicationCalendar::SleepHandler() { void ApplicationCalendar::createUserInterface() { - gui::Window* win = new CalendarMainWindow(this, "Main"); + gui::AppWindow* win = new CalendarMainWindow(this, "Main"); win->setSize( 480, 600 ); - windows.insert(std::pair(win->getName(), win)); + windows.insert( std::pair(win->getName(), win)); } void ApplicationCalendar::destroyUserInterface() { diff --git a/module-apps/application-call/ApplicationCall.cpp b/module-apps/application-call/ApplicationCall.cpp index 1e4b97738..dfec38f4c 100644 --- a/module-apps/application-call/ApplicationCall.cpp +++ b/module-apps/application-call/ApplicationCall.cpp @@ -71,16 +71,16 @@ sys::ReturnCodes ApplicationCall::SleepHandler() { void ApplicationCall::createUserInterface() { - gui::Window* window = nullptr; + gui::AppWindow* window = nullptr; window = new gui::CallMainWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); window = new gui::EnterNumberWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); window = new gui::EmergencyCallWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); } void ApplicationCall::setDisplayedNumber( std::string num ) { diff --git a/module-apps/application-clock/ApplicationClock.cpp b/module-apps/application-clock/ApplicationClock.cpp index afaf5f1ba..c7c55d12b 100644 --- a/module-apps/application-clock/ApplicationClock.cpp +++ b/module-apps/application-clock/ApplicationClock.cpp @@ -122,7 +122,7 @@ sys::ReturnCodes ApplicationClock::SleepHandler() { void ApplicationClock::createUserInterface() { gui::ClockMainWindow* mainWindow = new gui::ClockMainWindow(this); - windows.insert(std::pair(mainWindow->getName(), mainWindow)); + windows.insert(std::pair(mainWindow->getName(), mainWindow)); } diff --git a/module-apps/application-desktop/ApplicationDesktop.cpp b/module-apps/application-desktop/ApplicationDesktop.cpp index a904af339..a8a5f4b96 100644 --- a/module-apps/application-desktop/ApplicationDesktop.cpp +++ b/module-apps/application-desktop/ApplicationDesktop.cpp @@ -85,19 +85,19 @@ sys::ReturnCodes ApplicationDesktop::SleepHandler() { void ApplicationDesktop::createUserInterface() { - gui::Window* window = nullptr; + gui::AppWindow* window = nullptr; window = new gui::DesktopMainWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); window = new gui::PinLockWindow(this); - windows.insert(std::pair( window->getName(), window)); + windows.insert(std::pair( window->getName(), window)); window = new gui::MenuWindow(this); - windows.insert(std::pair( window->getName(), window)); + windows.insert(std::pair( window->getName(), window)); window = new gui::PowerOffWindow(this); - windows.insert(std::pair( window->getName(), window)); + windows.insert(std::pair( window->getName(), window)); } bool ApplicationDesktop::getScreenLocked() { diff --git a/module-apps/application-settings/ApplicationSettings.cpp b/module-apps/application-settings/ApplicationSettings.cpp index 70c51df8b..7865a8545 100644 --- a/module-apps/application-settings/ApplicationSettings.cpp +++ b/module-apps/application-settings/ApplicationSettings.cpp @@ -71,13 +71,13 @@ sys::ReturnCodes ApplicationSettings::SleepHandler() { void ApplicationSettings::createUserInterface() { - gui::Window* window = nullptr; + gui::AppWindow* window = nullptr; window = new gui::SettingsMainWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); window = new gui::LanguageWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); } void ApplicationSettings::destroyUserInterface() { diff --git a/module-apps/application-viewer/ApplicationViewer.cpp b/module-apps/application-viewer/ApplicationViewer.cpp index 0441121e0..22a6686d0 100644 --- a/module-apps/application-viewer/ApplicationViewer.cpp +++ b/module-apps/application-viewer/ApplicationViewer.cpp @@ -89,10 +89,10 @@ sys::ReturnCodes ApplicationViewer::SleepHandler() { void ApplicationViewer::createUserInterface() { - gui::Window* window = nullptr; + gui::AppWindow* window = nullptr; window = new gui::ViewWindow(this); - windows.insert(std::pair(window->getName(), window)); + windows.insert(std::pair(window->getName(), window)); } void ApplicationViewer::destroyUserInterface() { diff --git a/module-apps/application-viewer/windows/ViewWindow.cpp b/module-apps/application-viewer/windows/ViewWindow.cpp index 720b2be2e..6da7c8e51 100644 --- a/module-apps/application-viewer/windows/ViewWindow.cpp +++ b/module-apps/application-viewer/windows/ViewWindow.cpp @@ -10,6 +10,8 @@ #include "gui/widgets/Image.hpp" #include "gui/core/ImageManager.hpp" #include "ViewWindow.hpp" +#include "AppWindow.hpp" +#include "Application.hpp" namespace gui { diff --git a/module-apps/windows/AppWindow.cpp b/module-apps/windows/AppWindow.cpp index b0297e84c..3f4bdc73d 100644 --- a/module-apps/windows/AppWindow.cpp +++ b/module-apps/windows/AppWindow.cpp @@ -8,6 +8,7 @@ */ #include "i18/i18.hpp" #include "AppWindow.hpp" +#include "Application.hpp" namespace gui { @@ -28,6 +29,7 @@ void AppWindow::destroyInterface() { void AppWindow::rebuild() { } + void AppWindow::buildInterface() { bottomBar = new gui::BottomBar( this, 0, 599-50, 480, 50 ); bottomBar->setActive( BottomBar::Side::LEFT, false ); @@ -40,4 +42,44 @@ void AppWindow::buildInterface() { topBar->setActive(TopBar::Elements::SIGNAL, false ); } +uint32_t AppWindow::calculateBatteryLavel( uint32_t percentage ) { + if( percentage <=5 ) + return 0; + if( percentage <=27 ) + return 1; + if( percentage <=50 ) + return 2; + if( percentage <=73 ) + return 3; + if( percentage <=95 ) + return 4; + + return 5; +} + +//updates battery level in the window +bool AppWindow::updateBatteryLevel( uint32_t percentage ) { + //get old value of battery level, calcualte new level and comapre both + //if they are different make a change and return true, otherwise return false; + uint32_t oldLevel = topBar->getBatteryLevel(); + uint32_t newLevel = calculateBatteryLavel( percentage ); + if( oldLevel != newLevel ) { + topBar->setBatteryLevel( newLevel ); + return true; + } + + return false; +} +//updates battery level in the window +bool AppWindow::updateSignalStrength( uint32_t strength ) { + return false; +} + +std::list AppWindow::buildDrawList() { + //update top bar and bottom bar + topBar->setBatteryLevel( topBar->getBatteryLevel()); + + return Window::buildDrawList(); +} + } /* namespace gui */ diff --git a/module-apps/windows/AppWindow.hpp b/module-apps/windows/AppWindow.hpp index a85958d7d..08291d92a 100644 --- a/module-apps/windows/AppWindow.hpp +++ b/module-apps/windows/AppWindow.hpp @@ -12,7 +12,10 @@ #include "gui/widgets/TopBar.hpp" #include "gui/widgets/BottomBar.hpp" #include "gui/widgets/Window.hpp" -#include "Application.hpp" + +namespace app { + class Application; +}; namespace gui { @@ -34,6 +37,7 @@ protected: * Pointer to the application object that owns the window. */ app::Application* application = nullptr; + uint32_t calculateBatteryLavel( uint32_t percentage ); public: AppWindow( app::Application* app, std::string name, uint32_t id=GUIWindowID++ ); @@ -43,10 +47,15 @@ public: app::Application* getApplication() { return application; }; void setApplication( app::Application* app ) { application = app; }; + //updates battery level in the window + bool updateBatteryLevel( uint32_t percentage ); + //updates battery level in the window + bool updateSignalStrength( uint32_t strength ); + void rebuild() override; void buildInterface() override; void destroyInterface() override; - + std::list buildDrawList() override; }; } /* namespace gui */ diff --git a/module-gui/gui/widgets/TopBar.cpp b/module-gui/gui/widgets/TopBar.cpp index 4af68cb54..6518a030d 100644 --- a/module-gui/gui/widgets/TopBar.cpp +++ b/module-gui/gui/widgets/TopBar.cpp @@ -89,4 +89,12 @@ void TopBar::setActive( TopBar::Elements element, bool active ) { }; } +void TopBar::setBatteryLevel( uint32_t level ) { + batteryLevel = level; + for( uint32_t i=0; isetVisible( false ); + } + battery[level]->setVisible( true ); +} + } /* namespace gui */ diff --git a/module-gui/gui/widgets/TopBar.hpp b/module-gui/gui/widgets/TopBar.hpp index 3a8643523..0d1bde268 100644 --- a/module-gui/gui/widgets/TopBar.hpp +++ b/module-gui/gui/widgets/TopBar.hpp @@ -45,11 +45,13 @@ public: /** * @brief Sets charge level of the battery. This will cause appropriate image to be displayed. */ - void setBatteryLevel( uint32_t level ) { batteryLevel = level; }; + void setBatteryLevel( uint32_t level ); /** * @brief Sets signal strength. This will cause appropriate image to be displayed. */ void setSignalStrength( uint32_t sth) { signalStrength = sth; }; + uint32_t getBatteryLevel() {return batteryLevel; }; + uint32_t getSignalStrength() {return signalStrength; }; }; } /* namespace gui */