From 43148cea15fb632bdecccba873ec5921ee128a42 Mon Sep 17 00:00:00 2001 From: Alek Rudnik Date: Wed, 17 Feb 2021 22:10:27 +0100 Subject: [PATCH] [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. --- image/assets/lang/English.json | 2 + module-gui/gui/widgets/CMakeLists.txt | 3 ++ module-gui/gui/widgets/TopBar.cpp | 34 ++++++-------- module-gui/gui/widgets/TopBar.hpp | 17 ++++--- .../TopBar/SignalStrengthWidgetBar.cpp | 46 +++++++++++++++++++ .../TopBar/SignalStrengthWidgetBar.hpp | 21 +++++++++ .../TopBar/SignalStrengthWidgetBase.cpp | 13 ++++++ .../TopBar/SignalStrengthWidgetBase.hpp | 17 +++++++ .../TopBar/SignalStrengthWidgetText.cpp | 32 +++++++++++++ .../TopBar/SignalStrengthWidgetText.hpp | 21 +++++++++ 10 files changed, 178 insertions(+), 28 deletions(-) create mode 100644 module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp create mode 100644 module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp create mode 100644 module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp create mode 100644 module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp create mode 100644 module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp create mode 100644 module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index 25e7730f05817b3b121e31637c7000fb4f977c8c..7312c4121a103ecca833e89021184a0cfeba000c 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -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", diff --git a/module-gui/gui/widgets/CMakeLists.txt b/module-gui/gui/widgets/CMakeLists.txt index 315ce88c06357c8236906a8e91ba1c6eb9c53cb1..fa76f5ad92e90364281404a0f0b181d0bf3e9ee1 100644 --- a/module-gui/gui/widgets/CMakeLists.txt +++ b/module-gui/gui/widgets/CMakeLists.txt @@ -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" diff --git a/module-gui/gui/widgets/TopBar.cpp b/module-gui/gui/widgets/TopBar.cpp index 6c978dfe33aeb1854587a57b5e53950c56655422..109652bd82f5c41f1ac89b7b6242c21eddd0f9db 100644 --- a/module-gui/gui/widgets/TopBar.cpp +++ b/module-gui/gui/widgets/TopBar.cpp @@ -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::type; + constexpr auto signalWidgetAsText = false; + using SignalWidgetType = + std::conditional::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(rssiBar)]->setVisible(true); - return true; - } - return false; - } + auto signalStrength = Store::GSM::get()->getSignalStrength(); + signalWidget->show(signalStrength, configuration.isEnabled(Indicator::Signal)); + return true; } diff --git a/module-gui/gui/widgets/TopBar.hpp b/module-gui/gui/widgets/TopBar.hpp index 7cd08d77e31c01197bebde8fa4b6e170595d1b52..d87d7d6f7e775797ab900ac9bd71f8cc40fafb54 100644 --- a/module-gui/gui/widgets/TopBar.hpp +++ b/module-gui/gui/widgets/TopBar.hpp @@ -7,12 +7,16 @@ #include "Label.hpp" #include "Rect.hpp" #include "TopBar/SIM.hpp" -#include "TopBar/BatteryWidgetBase.hpp" #include #include #include +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(Store::RssiBar::noOfSupprtedBars)]; + Label *timeLabel = nullptr; + Label *networkAccessTechnologyLabel = nullptr; + SignalStrengthWidgetBase *signalWidget = nullptr; Image *lock; - std::array batteryBars = {nullptr}; std::map 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; diff --git a/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cb009f45a312842d034291b9f0defea2962e4435 --- /dev/null +++ b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp @@ -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 +#include +#include + +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; + 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 diff --git a/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp new file mode 100644 index 0000000000000000000000000000000000000000..eec5040cea1353c90f4d50ea0933170388f735d5 --- /dev/null +++ b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp @@ -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 diff --git a/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a907b8157fb3a2258d5003d7a7fbce7e28db54ee --- /dev/null +++ b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp @@ -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 diff --git a/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp new file mode 100644 index 0000000000000000000000000000000000000000..de878e3f4575294130eda3c566dc2c831d372ad7 --- /dev/null +++ b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp @@ -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 + +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 diff --git a/module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e40092771c6a786ddbf53e61cac1711a90103db9 --- /dev/null +++ b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp @@ -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 +#include + +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 diff --git a/module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp new file mode 100644 index 0000000000000000000000000000000000000000..341cd06d046c84bdf95a6bd526b76c5e6e96db90 --- /dev/null +++ b/module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp @@ -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