~aleteoryx/muditaos

3b08e4c358c58c836b9aaa2c8d41e5c300e18f9d — Mateusz Grzywacz 5 years ago 69186c8
[EGD-4932] new battery icons + battery in TopBar rework
M module-apps/Application.cpp => module-apps/Application.cpp +5 -9
@@ 126,7 126,7 @@ namespace app
        if (state == State::ACTIVE_FORGROUND) {
            auto window = getCurrentWindow();
            if (Store::Battery::get().state == Store::Battery::State::Charging) {
                window->batteryCharging(true);
                window->batteryChargingChange(true);
            }
            else {
                window->updateBatteryLevel(Store::Battery::get().level);


@@ 298,7 298,7 @@ namespace app
    sys::MessagePointer Application::handleBatteryLevel(sys::Message *msgl)
    {
        auto msg = static_cast<sevm::BatteryLevelMessage *>(msgl);
        LOG_INFO("Application battery level: %d", msg->levelPercents);
        LOG_INFO("Battery level: %d", msg->levelPercents);

        if (getCurrentWindow()->updateBatteryLevel(msg->levelPercents)) {
            refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST);


@@ 310,16 310,12 @@ namespace app
    {
        auto *msg = static_cast<sevm::BatteryPlugMessage *>(msgl);
        if (msg->plugged == true) {
            LOG_INFO("Application charger connected");
            getCurrentWindow()->batteryCharging(true);
            refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST);
            LOG_INFO("Charger connected");
        }
        else {
            LOG_INFO("Application charger disconnected");
            getCurrentWindow()->batteryCharging(false);
            refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST);
            LOG_INFO("Charger disconnected");
        }

        getCurrentWindow()->batteryChargingChange(msg->plugged);
        refreshWindow(gui::RefreshModes::GUI_REFRESH_FAST);
        return msgHandled();
    }

M module-apps/windows/AppWindow.cpp => module-apps/windows/AppWindow.cpp +3 -3
@@ 55,9 55,9 @@ namespace gui
        topBar->setActive(TopBar::Elements::SIGNAL, false);
    }

    bool AppWindow::batteryCharging(bool charging)
    bool AppWindow::batteryChargingChange(bool charging)
    {
        topBar->setBatteryCharging(charging);
        topBar->setBatteryChargingChange(charging);
        return true;
    }



@@ 73,7 73,7 @@ namespace gui
        // 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;
        if (topBar != nullptr) {
            return topBar->setBatteryLevel(percentage);
            return topBar->setBatteryBars(percentage);
        }
        return false;
    }

M module-apps/windows/AppWindow.hpp => module-apps/windows/AppWindow.hpp +1 -1
@@ 60,7 60,7 @@ namespace gui
        };
        virtual bool onDatabaseMessage(sys::Message *msg);

        bool batteryCharging(bool charging);
        bool batteryChargingChange(bool charging);
        bool setSIM();
        // updates battery level in the window
        bool updateBatteryLevel(uint32_t percentage);

M module-gui/gui/widgets/TopBar.cpp => module-gui/gui/widgets/TopBar.cpp +50 -36
@@ 43,16 43,16 @@ namespace gui

    void TopBar::batteryShowBars(uint32_t val)
    {
        if (val > battery.size()) {
        if (val > batteryBars.size()) {
            LOG_ERROR("Trying to set battery level out of scope");
            val = battery.size();
            val = batteryBars.size();
        }
        for (unsigned int i = 0; i < battery.size(); ++i) {
        for (unsigned int i = 0; i < batteryBars.size(); ++i) {
            if (elements.battery) {
                battery[i]->setVisible(val >= i);
                batteryBars[i]->setVisible(i == val);
            }
            else {
                battery[i]->setVisible(false);
                batteryBars[i]->setVisible(false);
            }
        }
    }


@@ 69,7 69,7 @@ namespace gui
        updateSignalStrength();

        // icons for battery
        battery = {
        batteryBars = {
            new gui::Image(this, batteryOffset, 15, 0, 0, "battery_low_W_M"),
            new gui::Image(this, batteryOffset, 15, 0, 0, "battery1_W_M"),
            new gui::Image(this, batteryOffset, 15, 0, 0, "battery2_W_M"),


@@ 79,12 79,13 @@ namespace gui
        };
        batteryShowBars(0);

        charging = new Label(this, batteryOffset, 15, 30, this->drawArea.h);
        charging->setFilled(false);
        charging->setBorderColor(gui::ColorNoColor);
        charging->setFont(style::header::font::title);
        charging->setText("Z");
        charging->setVisible(false);
        batteryChargings[Store::Battery::State::Charging] =
            new gui::Image(this, batteryOffset, 15, 0, 0, "battery_charging_W_M");
        batteryChargings[Store::Battery::State::PluggedNotCharging] =
            new gui::Image(this, batteryOffset, 15, 0, 0, "battery_charging_ready_W_M");
        for (auto &el : batteryChargings) {
            el.second->setVisible(false);
        }

        const auto design_sim_offset = 376; // this offset is not final, but it is pixel Purefect
        sim                          = new SIM(this, design_sim_offset, 12);


@@ 123,15 124,17 @@ namespace gui
        case Elements::BATTERY: {
            elements.battery = active;
            if (Store::Battery::get().state == Store::Battery::State::Discharging) {
                setBatteryLevel(active ? Store::Battery::get().level : 0);
                setBatteryBars(active ? Store::Battery::get().level : 0);
            }
            else {
                // plugged
                if (active) {
                    setBatteryCharging(true);
                    setBatteryChargingChange(true);
                }
                else {
                    charging->setVisible(false);
                    setBatteryLevel(0);
                    for (auto &el : batteryChargings) {
                        el.second->setVisible(false);
                    }
                }
            }
        } break;


@@ 162,10 165,10 @@ namespace gui
        };
    }

    uint32_t calculateBatteryLavel(uint32_t percentage)
    uint32_t calculateBatteryBars(uint32_t percentage)
    {
        uint32_t level = 0;
        if (percentage <= 5)
        if (percentage <= 5) // level critical
            level = 0;
        else if (percentage <= 27)
            level = 1;


@@ 178,38 181,49 @@ namespace gui
        else
            level = 5;

        if (level >= batteryLevelCount) {
        if (level >= batteryBarsCount) {
            LOG_ERROR("Battery level calculations are done wrong!");
            return batteryLevelCount - 1;
            return batteryBarsCount - 1;
        }
        return level;
    }

    bool TopBar::setBatteryLevel(uint32_t percent)
    bool TopBar::setBatteryBars(uint32_t percent)
    {
        if (Store::Battery::get().state != Store::Battery::State::Discharging) {

            return false;
        }
        charging->setVisible(false);
        batteryShowBars(calculateBatteryLavel(percent));
        for (auto &el : batteryChargings) {
            el.second->setVisible(false);
        }
        batteryShowBars(calculateBatteryBars(percent));
        return true;
    }

    void TopBar::setBatteryCharging(bool plugged)
    void TopBar::setBatteryChargingChange(bool plugged)
    {
        if (plugged) {
            batteryShowBars(0);
        }
        if (charging == nullptr)
            return;
        if (plugged) {
            charging->setVisible(true);
            batteryShowBars(0);
        }
        else {
            charging->setVisible(false);
            setBatteryLevel(Store::Battery::get().level);
        switch (Store::Battery::get().state) {

        case Store::Battery::State::Discharging:
            setBatteryBars(Store::Battery::get().level);
            break;
        case Store::Battery::State::Charging:
            break;
        case Store::Battery::State::PluggedNotCharging:
            break;
        }
        if (plugged) {}
        //        if (battery == nullptr)
        //            return;
        //        if (plugged) {
        //            chargingPending->setVisible(true);
        //                        batteryShowBars(0);
        //        }
        //        else {
        //            chargingPending->setVisible(false);
        //
        //        }
    }

    bool TopBar::updateSignalStrength()

M module-gui/gui/widgets/TopBar.hpp => module-gui/gui/widgets/TopBar.hpp +8 -6
@@ 9,11 9,12 @@
#include "Rect.hpp"
#include "TopBar/SIM.hpp"
#include <common_data/EventStore.hpp>
#include <map>

namespace gui
{

    static const uint32_t batteryLevelCount = 6;
    static const uint32_t batteryBarsCount  = 6;
    static const uint32_t signalImgCount    = 6;

    /// Header of most of design Windows


@@ 55,9 56,10 @@ namespace gui
        Label *networkAccessTechnologyLabel = nullptr;
        Image *signal[static_cast<size_t>(Store::RssiBar::noOfSupprtedBars)];
        Image *lock;
        std::array<Image *, batteryLevelCount> battery = {nullptr};
        Label *charging                                = nullptr;
        gui::SIM *sim                                  = nullptr;
        std::array<Image *, batteryBarsCount> batteryBars              = {nullptr};
        std::map<const Store::Battery::State, Image *> batteryChargings = {
            {Store::Battery::State::Charging, nullptr}, {Store::Battery::State::PluggedNotCharging, nullptr}};
        gui::SIM *sim = nullptr;
        void prepareWidget();
        static TimeMode timeMode;



@@ 89,9 91,9 @@ namespace gui
         * displayed.
         * @return if display should be refreshed or not
         */
        bool setBatteryLevel(uint32_t percent);
        bool setBatteryBars(uint32_t percent);

        void setBatteryCharging(bool plugged);
        void setBatteryChargingChange(bool plugged);

        /**
         * @brief updates signal strength. This will cause appropriate image to be displayed.

M module-utils/common_data/EventStore.hpp => module-utils/common_data/EventStore.hpp +1 -0
@@ 25,6 25,7 @@ namespace Store
        {
            Discharging,
            Charging,
            PluggedNotCharging,
        } state            = State::Discharging;
        unsigned int level = 0;