~aleteoryx/muditaos

43148cea15fb632bdecccba873ec5921ee128a42 — Alek Rudnik 4 years ago a951f85
[EGD-5778] Add signal strength dBM inidcator

Refactored signal strength logic and arranged it
as seprated widget.
Added option to display signal strength as dBM or
bar graph.
M image/assets/lang/English.json => image/assets/lang/English.json +2 -0
@@ 77,6 77,8 @@
  "home_modes_connected": "CONNECTED",
  "home_modes_notdisturb": "DO NOT DISTURB",
  "home_modes_offline": "OFFLINE",
  "topbar_battery_charging": "Charg",
  "topbar_battery_plugged": "Plug",
  "app_alarm_clock_title_main": "Alarm clock",
  "app_alarm_clock_repeat_never": "Never",
  "app_alarm_clock_repeat_everyday": "Everyday",

M module-gui/gui/widgets/CMakeLists.txt => module-gui/gui/widgets/CMakeLists.txt +3 -0
@@ 25,6 25,9 @@ target_sources( ${PROJECT_NAME}
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetBase.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetText.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetBase.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetText.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Text.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextBlock.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextDocument.cpp"

M module-gui/gui/widgets/TopBar.cpp => module-gui/gui/widgets/TopBar.cpp +13 -21
@@ 10,22 10,27 @@
#include "Style.hpp"
#include "TopBar/BatteryWidgetBar.hpp"
#include "TopBar/BatteryWidgetText.hpp"
#include "TopBar/SignalStrengthWidgetBar.hpp"
#include "TopBar/SignalStrengthWidgetText.hpp"
#include "common_data/EventStore.hpp"

namespace gui::top_bar
{
    constexpr auto batteryWidgetAsText = false;
    using BatteryWidgetType = std::conditional<batteryWidgetAsText, BatteryWidgetText, BatteryWidgetBar>::type;
    constexpr auto signalWidgetAsText = false;
    using SignalWidgetType =
        std::conditional<signalWidgetAsText, SignalStrengthWidgetText, SignalStrengthWidgetBar>::type;

    namespace networkTechnology
    {
        constexpr uint32_t x = 80;
        constexpr uint32_t x = 100;
        constexpr uint32_t y = 21;
        constexpr uint32_t w = 130;
        constexpr uint32_t h = 20;
    } // namespace networkTechnology

    static constexpr uint32_t signalOffset  = 35;
    static constexpr uint32_t signalOffset  = 20;
    static constexpr uint32_t batteryOffset = 413;

    TopBar::TimeMode TopBar::timeMode = TimeMode::TIME_24H;


@@ 80,15 85,10 @@ namespace gui::top_bar

    void TopBar::prepareWidget()
    {
        signal[0] = new gui::Image(this, signalOffset, 17, 0, 0, "signal0");
        signal[1] = new gui::Image(this, signalOffset, 17, 0, 0, "signal1");
        signal[2] = new gui::Image(this, signalOffset, 17, 0, 0, "signal2");
        signal[3] = new gui::Image(this, signalOffset, 17, 0, 0, "signal3");
        signal[4] = new gui::Image(this, signalOffset, 17, 0, 0, "signal4");
        signal[5] = new gui::Image(this, signalOffset, 17, 0, 0, "signal5");
        updateSignalStrength();

        batteryWidget = new BatteryWidgetType(this, batteryOffset, 15, 60, 24);
        signalWidget  = new SignalWidgetType(this, signalOffset, 17, 70, 24);

        updateSignalStrength();

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


@@ 180,17 180,9 @@ namespace gui::top_bar

    bool TopBar::updateSignalStrength()
    {
        for (uint32_t i = 0; i < signalImgCount; i++) {
            signal[i]->setVisible(false);
        }
        if (configuration.isEnabled(Indicator::Signal)) {
            auto rssiBar = Store::GSM::get()->getSignalStrength().rssiBar;
            if (rssiBar < Store::RssiBar::noOfSupprtedBars) {
                signal[static_cast<size_t>(rssiBar)]->setVisible(true);
                return true;
            }
            return false;
        }
        auto signalStrength = Store::GSM::get()->getSignalStrength();
        signalWidget->show(signalStrength, configuration.isEnabled(Indicator::Signal));

        return true;
    }


M module-gui/gui/widgets/TopBar.hpp => module-gui/gui/widgets/TopBar.hpp +10 -7
@@ 7,12 7,16 @@
#include "Label.hpp"
#include "Rect.hpp"
#include "TopBar/SIM.hpp"
#include "TopBar/BatteryWidgetBase.hpp"
#include <common_data/EventStore.hpp>

#include <vector>
#include <map>

namespace gui
{
    class SignalStrengthWidgetBase;
    class BatteryWidgetBase;
} // namespace gui
namespace gui::top_bar
{
    enum class Indicator


@@ 75,15 79,14 @@ namespace gui::top_bar
        static uint32_t time;

      protected:
        Label *timeLabel                    = nullptr;
        Label *networkAccessTechnologyLabel = nullptr;
        Image *signal[static_cast<size_t>(Store::RssiBar::noOfSupprtedBars)];
        Label *timeLabel                       = nullptr;
        Label *networkAccessTechnologyLabel    = nullptr;
        SignalStrengthWidgetBase *signalWidget = nullptr;
        Image *lock;
        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;
        gui::BatteryWidgetBase *batteryWidget = nullptr;
        gui::SIM *sim                    = nullptr;
        BatteryWidgetBase *batteryWidget = nullptr;
        Configuration configuration;
        static TimeMode timeMode;


A module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp +46 -0
@@ 0,0 1,46 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SignalStrengthWidgetBar.hpp"
#include <string>
#include <Image.hpp>
#include <unordered_map>

namespace gui
{
    namespace
    {
        constexpr auto signal0 = "signal0";
        constexpr auto signal1 = "signal1";
        constexpr auto signal2 = "signal2";
        constexpr auto signal3 = "signal3";
        constexpr auto signal4 = "signal4";
        constexpr auto signal5 = "signal5";

        using SignalMap           = std::unordered_map<Store::RssiBar, std::string>;
        const SignalMap signalMap = {{Store::RssiBar::zero, signal0},
                                     {Store::RssiBar::one, signal1},
                                     {Store::RssiBar::two, signal2},
                                     {Store::RssiBar::three, signal3},
                                     {Store::RssiBar::four, signal4},
                                     {Store::RssiBar::five, signal5}};
    } // namespace

    SignalStrengthWidgetBar::SignalStrengthWidgetBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
        : SignalStrengthWidgetBase(parent, x, y, w, h)
    {
        img                             = new Image(this, signalMap.at(Store::RssiBar::zero));
        constexpr auto signalBarMarginX = 10u;
        img->setMargins(gui::Margins(signalBarMarginX, 0, 0, 0));
    }

    void SignalStrengthWidgetBar::show(const Store::SignalStrength data, bool shown)
    {
        setVisible(shown);
        if (shown) {
            img->set(signalMap.at(data.rssiBar));
            return;
        }
    }

} // namespace gui

A module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp +21 -0
@@ 0,0 1,21 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "SignalStrengthWidgetBase.hpp"

namespace gui
{
    class Image;

    class SignalStrengthWidgetBar : public SignalStrengthWidgetBase
    {
        Image *img = nullptr;

      public:
        SignalStrengthWidgetBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);

        void show(const Store::SignalStrength data, bool shown) override;
    };
} // namespace gui

A module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp +13 -0
@@ 0,0 1,13 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SignalStrengthWidgetBase.hpp"

namespace gui
{
    SignalStrengthWidgetBase::SignalStrengthWidgetBase(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
        : HBox(parent, x, y, w, h)
    {
        setBorderColor(gui::ColorNoColor);
    }
} // namespace gui

A module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp +17 -0
@@ 0,0 1,17 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "BoxLayout.hpp"
#include <common_data/EventStore.hpp>

namespace gui
{
    class SignalStrengthWidgetBase : public HBox
    {
      public:
        SignalStrengthWidgetBase(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);
        virtual void show(const Store::SignalStrength data, bool shown) = 0;
    };
} // namespace gui

A module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp +32 -0
@@ 0,0 1,32 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SignalStrengthWidgetText.hpp"
#include "Label.hpp"
#include "common_data/EventStore.hpp"
#include <Utils.hpp>
#include <Style.hpp>

namespace gui
{
    SignalStrengthWidgetText::SignalStrengthWidgetText(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
        : SignalStrengthWidgetBase(parent, x, y, w, h)
    {
        label = new Label(this, 0, 0, 0, 0);
        label->setFilled(false);
        label->setBorderColor(gui::ColorNoColor);
        label->setFont(style::header::font::modes);
        label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        label->setMaximumSize(this->getWidth(), this->getHeight());
    }

    void SignalStrengthWidgetText::show(const Store::SignalStrength data, bool shown)
    {
        setVisible(shown);
        if (shown) {
            label->setText(utils::to_string(data.rssidBm) + " dBm");
            return;
        }
    }

} // namespace gui

A module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp +21 -0
@@ 0,0 1,21 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "SignalStrengthWidgetBase.hpp"

namespace gui
{
    class Label;
    class SignalStrengthWidgetText : public SignalStrengthWidgetBase
    {
      public:
        SignalStrengthWidgetText(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);

        void show(const Store::SignalStrength data, bool shown) override;

      private:
        Label *label = nullptr;
    };
} // namespace gui