M module-apps/Application.cpp => module-apps/Application.cpp +10 -3
@@ 70,10 70,12 @@ namespace app
uint32_t stackDepth,
sys::ServicePriority priority)
: Service(std::move(name), std::move(parent), stackDepth, priority),
- default_window(gui::name::window::main_window), windowsStack(this), startInBackground{startInBackground},
- callbackStorage{std::make_unique<CallbackStorage>()}, settings(std::make_unique<settings::Settings>(this))
+ default_window(gui::name::window::main_window), windowsStack(this),
+ keyTranslator{std::make_unique<gui::KeyInputSimpleTranslation>()}, startInBackground{startInBackground},
+ callbackStorage{std::make_unique<CallbackStorage>()}, topBarManager{std::make_unique<TopBarManager>()},
+ settings(std::make_unique<settings::Settings>(this))
{
- keyTranslator = std::make_unique<gui::KeyInputSimpleTranslation>();
+ topBarManager->enableIndicators({gui::top_bar::Indicator::Time});
busChannels.push_back(sys::BusChannels::ServiceCellularNotifications);
longPressTimer = std::make_unique<sys::Timer>("LongPress", this, key_timer_ms);
@@ 693,6 695,11 @@ namespace app
item->attachTimer(std::move(timer));
}
+ const gui::top_bar::Configuration &Application::getTopBarConfiguration() const noexcept
+ {
+ return topBarManager->getConfiguration();
+ }
+
void Application::addActionReceiver(manager::actions::ActionId actionId, OnActionReceived &&callback)
{
receivers.insert_or_assign(actionId, std::move(callback));
M module-apps/Application.hpp => module-apps/Application.hpp +4 -0
@@ 25,6 25,7 @@
#include <string> // for string
#include <utility> // for move, pair
#include <vector> // for vector
+#include "TopBarManager.hpp"
#include "WindowsFactory.hpp"
#include "WindowsStack.hpp"
@@ 369,6 370,8 @@ namespace app
void addActionReceiver(manager::actions::ActionId actionId, OnActionReceived &&callback);
+ std::unique_ptr<TopBarManager> topBarManager;
+
/// application's settings
std::unique_ptr<settings::Settings> settings;
virtual void timeFormatChanged(std::string value);
@@ 378,6 381,7 @@ namespace app
bool isTimeFormat12() const noexcept;
void setLockScreenPasscodeOn(bool screenPasscodeOn) noexcept;
bool isLockScreenPasscodeOn() const noexcept;
+ const gui::top_bar::Configuration &getTopBarConfiguration() const noexcept;
};
/// Parameter pack used by application launch action.
M module-apps/CMakeLists.txt => module-apps/CMakeLists.txt +1 -0
@@ 15,6 15,7 @@ set( SOURCES
"Application.cpp"
"GuiTimer.cpp"
"WindowsFactory.cpp"
+ "TopBarManager.cpp"
"AsyncTask.cpp"
"CallbackStorage.cpp"
"windows/AppWindow.cpp"
A module-apps/TopBarManager.cpp => module-apps/TopBarManager.cpp +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
+
+#include "TopBarManager.hpp"
+
+namespace app
+{
+ void TopBarManager::enableIndicators(const gui::top_bar::Indicators &indicators)
+ {
+ topBarConfiguration.enable(indicators);
+ }
+
+ auto TopBarManager::getConfiguration() const noexcept -> const gui::top_bar::Configuration &
+ {
+ return topBarConfiguration;
+ }
+} // namespace app
A module-apps/TopBarManager.hpp => module-apps/TopBarManager.hpp +19 -0
@@ 0,0 1,19 @@
+// 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 <TopBar.hpp>
+
+namespace app
+{
+ class TopBarManager
+ {
+ public:
+ void enableIndicators(const gui::top_bar::Indicators &indicators);
+ [[nodiscard]] auto getConfiguration() const noexcept -> const gui::top_bar::Configuration &;
+
+ private:
+ gui::top_bar::Configuration topBarConfiguration;
+ };
+} // namespace app
M module-apps/application-alarm-clock/windows/AlarmClockMainWindow.cpp => module-apps/application-alarm-clock/windows/AlarmClockMainWindow.cpp +0 -1
@@ 32,7 32,6 @@ namespace app::alarmClock
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::Switch));
M module-apps/application-alarm-clock/windows/CustomRepeatWindow.cpp => module-apps/application-alarm-clock/windows/CustomRepeatWindow.cpp +0 -3
@@ 18,9 18,6 @@ namespace app::alarmClock
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
- topBar->setActive(gui::TopBar::Elements::SIM, false);
- topBar->setActive(gui::TopBar::Elements::NETWORK_ACCESS_TECHNOLOGY, false);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setActive(gui::BottomBar::Side::CENTER, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-alarm-clock/windows/NewEditAlarmWindow.cpp => module-apps/application-alarm-clock/windows/NewEditAlarmWindow.cpp +0 -1
@@ 21,7 21,6 @@ namespace app::alarmClock
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setActive(gui::BottomBar::Side::CENTER, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-antenna/windows/AlgoParamsWindow.cpp => module-apps/application-antenna/windows/AlgoParamsWindow.cpp +0 -4
@@ 39,10 39,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::TIME, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
setTitle(utils::localize.get("app_desktop_tools_antenna"));
lowBandBox = new gui::VBox(this,
M module-apps/application-antenna/windows/AntennaMainWindow.cpp => module-apps/application-antenna/windows/AntennaMainWindow.cpp +0 -4
@@ 48,10 48,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::TIME, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
setTitle(utils::localize.get("app_desktop_tools_antenna"));
for (auto title : titlesText) {
M module-apps/application-antenna/windows/ScanModesWindow.cpp => module-apps/application-antenna/windows/ScanModesWindow.cpp +0 -4
@@ 37,10 37,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::TIME, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
setTitle(utils::localize.get("app_desktop_tools_antenna"));
modeButtonParams.insert(std::pair<uint32_t, std::string>(scanModes::Auto, "AUTO"));
M module-apps/application-calendar/windows/AllEventsWindow.cpp => module-apps/application-calendar/windows/AllEventsWindow.cpp +0 -1
@@ 34,7 34,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
M module-apps/application-calendar/windows/CustomRepeatWindow.cpp => module-apps/application-calendar/windows/CustomRepeatWindow.cpp +0 -1
@@ 28,7 28,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-calendar/windows/DayEventsWindow.cpp => module-apps/application-calendar/windows/DayEventsWindow.cpp +0 -1
@@ 64,7 64,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
M module-apps/application-calendar/windows/EventDetailWindow.cpp => module-apps/application-calendar/windows/EventDetailWindow.cpp +0 -1
@@ 28,7 28,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setActive(gui::BottomBar::Side::LEFT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-calendar/windows/EventReminderWindow.cpp => module-apps/application-calendar/windows/EventReminderWindow.cpp +11 -4
@@ 38,14 38,21 @@ namespace gui
buildInterface();
}
+ top_bar::Configuration EventReminderWindow::configureTopBar(top_bar::Configuration appConfiguration)
+ {
+ using namespace top_bar;
+ appConfiguration.enable({Indicator::Signal,
+ Indicator::Time,
+ Indicator::Battery,
+ Indicator::SimCard,
+ Indicator::NetworkAccessTechnology});
+ return appConfiguration;
+ }
+
void EventReminderWindow::buildInterface()
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::BATTERY, true);
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(gui::TopBar::Elements::TIME, true);
-
bottomBar->setActive(gui::BottomBar::Side::CENTER, true);
bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(style::strings::common::ok));
bottomBar->setBorderColor(ColorNoColor);
M module-apps/application-calendar/windows/EventReminderWindow.hpp => module-apps/application-calendar/windows/EventReminderWindow.hpp +1 -0
@@ 42,6 42,7 @@ namespace gui
void rebuild() override;
void buildInterface() override;
void destroyInterface() override;
+ top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration) override;
auto handleSwitchData(SwitchData *data) -> bool override;
};
M module-apps/application-calendar/windows/NewEditEventWindow.cpp => module-apps/application-calendar/windows/NewEditEventWindow.cpp +0 -1
@@ 25,7 25,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::TIME, true);
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setActive(gui::BottomBar::Side::CENTER, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-call/ApplicationCall.cpp => module-apps/application-call/ApplicationCall.cpp +6 -0
@@ 33,6 33,12 @@ namespace app
ApplicationCall::ApplicationCall(std::string name, std::string parent, StartInBackground startInBackground)
: Application(name, parent, startInBackground, app::call_stack_size)
{
+ using namespace gui::top_bar;
+ topBarManager->enableIndicators({Indicator::Signal,
+ Indicator::Time,
+ Indicator::Battery,
+ Indicator::SimCard,
+ Indicator::NetworkAccessTechnology});
addActionReceiver(manager::actions::Call, [this](auto &&data) {
switchWindow(window::name_call, std::forward<decltype(data)>(data));
return msgHandled();
M module-apps/application-call/windows/CallWindow.cpp => module-apps/application-call/windows/CallWindow.cpp +0 -4
@@ 58,10 58,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(gui::TopBar::Elements::BATTERY, true);
- topBar->setActive(gui::TopBar::Elements::SIGNAL, true);
- topBar->setActive(gui::TopBar::Elements::TIME, true);
-
bottomBar->setActive(BottomBar::Side::CENTER, true);
bottomBar->setActive(BottomBar::Side::RIGHT, true);
M module-apps/application-call/windows/EnterNumberWindow.cpp => module-apps/application-call/windows/EnterNumberWindow.cpp +0 -4
@@ 58,10 58,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("common_add"));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get("app_call_clear"));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
- topBar->setActive(TopBar::Elements::TIME, true);
-
numberLabel = new gui::Label(this, numberLabel::x, numberLabel::y, numberLabel::w, numberLabel::h);
numberLabel->setPenWidth(numberLabel::borderW);
numberLabel->setFont(style::window::font::largelight);
M module-apps/application-calllog/windows/CallLogDetailsWindow.cpp => module-apps/application-calllog/windows/CallLogDetailsWindow.cpp +0 -2
@@ 82,8 82,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::call));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::TIME, true);
-
// NOTE: height of all labels is set using decorators
// Information
M module-apps/application-calllog/windows/CallLogMainWindow.cpp => module-apps/application-calllog/windows/CallLogMainWindow.cpp +0 -2
@@ 47,8 47,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::TIME, true);
-
list = new gui::ListView(this, mainWindow::x, mainWindow::y, mainWindow::w, mainWindow::h, calllogModel);
setFocusItem(list);
M module-apps/application-desktop/ApplicationDesktop.cpp => module-apps/application-desktop/ApplicationDesktop.cpp +6 -0
@@ 37,6 37,12 @@ namespace app
ApplicationDesktop::ApplicationDesktop(std::string name, std::string parent, StartInBackground startInBackground)
: Application(name, parent, startInBackground), lockHandler(this)
{
+ using namespace gui::top_bar;
+ topBarManager->enableIndicators({Indicator::Signal,
+ Indicator::Time,
+ Indicator::Battery,
+ Indicator::SimCard,
+ Indicator::NetworkAccessTechnology});
busChannels.push_back(sys::BusChannels::ServiceDBNotifications);
addActionReceiver(app::manager::actions::RequestPin, [this](auto &&data) {
M module-apps/application-desktop/windows/DesktopMainWindow.cpp => module-apps/application-desktop/windows/DesktopMainWindow.cpp +20 -6
@@ 35,8 35,6 @@ namespace gui
AppWindow::buildInterface();
bottomBar->setActive(BottomBar::Side::CENTER, true);
- topBar->setActive(
- {{TopBar::Elements::SIGNAL, true}, {TopBar::Elements::LOCK, true}, {TopBar::Elements::BATTERY, true}});
using namespace style::desktop;
@@ 75,6 73,20 @@ namespace gui
notifications = nullptr;
}
+ top_bar::Configuration DesktopMainWindow::configureTopBar(top_bar::Configuration appConfiguration)
+ {
+ auto app = getAppDesktop();
+ const auto isLocked = app->lockHandler.isScreenLocked();
+ updateTopBarConfiguration(isLocked, appConfiguration);
+ return appConfiguration;
+ }
+
+ void DesktopMainWindow::updateTopBarConfiguration(bool isScreenLocked, top_bar::Configuration &configuration)
+ {
+ configuration.set(top_bar::Indicator::Lock, isScreenLocked);
+ configuration.set(top_bar::Indicator::Time, !isScreenLocked);
+ }
+
DesktopMainWindow::DesktopMainWindow(app::Application *app) : AppWindow(app, app::window::name::desktop_main_window)
{
buildInterface();
@@ 89,13 101,18 @@ namespace gui
void DesktopMainWindow::setVisibleState()
{
auto app = getAppDesktop();
+ applyToTopBar([isLocked = app->lockHandler.isScreenLocked()](top_bar::Configuration configuration) {
+ updateTopBarConfiguration(isLocked, configuration);
+ return configuration;
+ });
+
if (app->lockHandler.isScreenLocked()) {
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("app_desktop_unlock"));
bottomBar->setActive(BottomBar::Side::RIGHT, false);
bottomBar->setText(BottomBar::Side::LEFT,
utils::localize.get("app_desktop_emergency"),
app->lockHandler.isScreenBlocked());
- topBar->setActive(TopBar::Elements::LOCK, true);
+
inputCallback = nullptr;
setFocusItem(nullptr);
buildNotifications(app);
@@ 104,8 121,6 @@ namespace gui
std::make_shared<TimersProcessingStopMessage>(), service::name::service_time, application);
}
else {
- topBar->setActive(TopBar::Elements::LOCK, false);
-
if (!buildNotifications(app)) {
LOG_ERROR("Couldn't fit in all notifications");
}
@@ 146,7 161,6 @@ namespace gui
if (inputEvent.is(KeyCode::KEY_PND)) {
app->lockHandler.lockScreen();
setVisibleState();
- application->setSuspendFlag(true);
return true;
}
// long press of '0' key is translated to '+'
M module-apps/application-desktop/windows/DesktopMainWindow.hpp => module-apps/application-desktop/windows/DesktopMainWindow.hpp +3 -0
@@ 81,11 81,14 @@ namespace gui
void rebuild() override;
void buildInterface() override;
void destroyInterface() override;
+ top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration) override;
+
bool updateTime(const UTF8 &timeStr) override;
bool updateTime(const uint32_t ×tamp, bool mode24H) override;
private:
void invalidate() noexcept;
+ static void updateTopBarConfiguration(bool isScreenLocked, top_bar::Configuration &configuration);
gui::KeyInputMappedTranslation translator;
};
M module-apps/application-desktop/windows/LockWindow.cpp => module-apps/application-desktop/windows/LockWindow.cpp +0 -1
@@ 14,7 14,6 @@ namespace gui
void LockWindow::build()
{
buildBottomBar();
- buildTopBar();
buildTitleBar();
buildInfoTexts();
}
M module-apps/application-desktop/windows/LockWindow.hpp => module-apps/application-desktop/windows/LockWindow.hpp +0 -1
@@ 58,7 58,6 @@ namespace gui
protected:
virtual void buildBottomBar();
virtual void buildTitleBar() = 0;
- virtual void buildTopBar() = 0;
private:
[[nodiscard]] auto getText(TextType type) noexcept -> gui::Text *;
M module-apps/application-desktop/windows/LockedInfoWindow.cpp => module-apps/application-desktop/windows/LockedInfoWindow.cpp +7 -4
@@ 34,10 34,6 @@ void LockedInfoWindow::setVisibleState()
bottomBar->setActive(BottomBar::Side::LEFT, true);
bottomBar->setActive(BottomBar::Side::CENTER, false);
bottomBar->setActive(BottomBar::Side::RIGHT, true);
-
- topBar->setActive(TopBar::Elements::LOCK, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
- topBar->setActive(TopBar::Elements::SIGNAL, true);
}
bool LockedInfoWindow::onInput(const InputEvent &inputEvent)
@@ 61,6 57,13 @@ void LockedInfoWindow::rebuild()
buildInterface();
}
+top_bar::Configuration LockedInfoWindow::configureTopBar(top_bar::Configuration appConfiguration)
+{
+ appConfiguration.enable(top_bar::Indicator::Lock);
+ appConfiguration.disable(top_bar::Indicator::Time);
+ return appConfiguration;
+}
+
void LockedInfoWindow::buildInterface()
{
namespace lock_style = style::window::pin_lock;
M module-apps/application-desktop/windows/LockedInfoWindow.hpp => module-apps/application-desktop/windows/LockedInfoWindow.hpp +1 -0
@@ 25,5 25,6 @@ namespace gui
void rebuild() override;
void buildInterface() override;
void destroyInterface() override;
+ top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration) override;
};
} /* namespace gui */
M => +0 -3
@@ 149,9 149,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
topBar->setActive(TopBar::Elements::SIGNAL, true);
topBar->setActive(TopBar::Elements::BATTERY, true);
auto app = dynamic_cast<app::ApplicationDesktop *>(application);
assert(app);
M module-apps/application-desktop/windows/MmiPullWindow.cpp => module-apps/application-desktop/windows/MmiPullWindow.cpp +0 -2
@@ 37,8 37,6 @@ MmiPullWindow::MmiPullWindow(app::Application *app, const std::string &name) : g
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
- topBar->setActive(TopBar::Elements::SIM, false);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("app_desktop_replay"));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
text = new Text(
M module-apps/application-desktop/windows/MmiPushWindow.cpp => module-apps/application-desktop/windows/MmiPushWindow.cpp +0 -2
@@ 30,8 30,6 @@ namespace style::desktop
MmiPushWindow::MmiPushWindow(app::Application *app, const std::string &name) : gui::AppWindow(app, name)
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
- topBar->setActive(TopBar::Elements::SIM, false);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::ok));
icon = new Image(this, style::desktop::image::x, style::desktop::image::y, "");
icon->set("info_big_circle_W_G");
M module-apps/application-desktop/windows/PinLockBaseWindow.cpp => module-apps/application-desktop/windows/PinLockBaseWindow.cpp +6 -7
@@ 32,7 32,12 @@ namespace gui
}
return std::string{};
}
-
+ top_bar::Configuration PinLockBaseWindow::configureTopBar(top_bar::Configuration appConfiguration)
+ {
+ appConfiguration.enable(top_bar::Indicator::Lock);
+ appConfiguration.disable(top_bar::Indicator::Time);
+ return appConfiguration;
+ }
void PinLockBaseWindow::restore() noexcept
{
LockWindow::restore();
@@ 91,10 96,4 @@ namespace gui
title->setPenWidth(2);
}
- void PinLockBaseWindow::buildTopBar()
- {
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
- topBar->setActive(TopBar::Elements::LOCK, true);
- }
} // namespace gui
M module-apps/application-desktop/windows/PinLockBaseWindow.hpp => module-apps/application-desktop/windows/PinLockBaseWindow.hpp +3 -1
@@ 12,6 12,9 @@ namespace gui
public:
PinLockBaseWindow(app::Application *app, std::string name) : LockWindow(app, name)
{}
+
+ top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration) override;
+
void buildImages(const std::string &lockImg, const std::string &infoImg);
[[nodiscard]] auto getToken(Token token) const -> std::string;
void restore() noexcept override;
@@ 25,6 28,5 @@ namespace gui
private:
void buildBottomBar() override;
void buildTitleBar() override;
- void buildTopBar() override;
};
} // namespace gui
M module-apps/application-meditation/windows/MeditationListViewWindows.cpp => module-apps/application-meditation/windows/MeditationListViewWindows.cpp +0 -2
@@ 64,7 64,6 @@ void MeditationOptionsWindow::buildInterface()
MeditationListViewWindow::buildInterface();
setTitle(utils::localize.get("common_options"));
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::Switch));
- topBar->setActive(TopBar::Elements::TIME, true);
}
PreparationTimeWindow::PreparationTimeWindow(app::Application *app)
@@ 79,5 78,4 @@ void PreparationTimeWindow::buildInterface()
MeditationListViewWindow::buildInterface();
setTitle(utils::localize.get("app_meditation_preparation_time"));
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
- topBar->setActive(TopBar::Elements::TIME, true);
}
M module-apps/application-meditation/windows/MeditationTimerWindow.cpp => module-apps/application-meditation/windows/MeditationTimerWindow.cpp +5 -1
@@ 112,7 112,11 @@ auto MeditationTimerWindow::onInput(const InputEvent &inputEvent) -> bool
void MeditationTimerWindow::setWidgetVisible(bool tBar, bool bBar, bool counter)
{
- topBar->setActive(TopBar::Elements::TIME, tBar);
+ applyToTopBar([tBar](top_bar::Configuration configuration) {
+ configuration.set(top_bar::Indicator::Time, tBar);
+ return configuration;
+ });
+
title->setVisible(tBar);
bottomBar->setActive(BottomBar::Side::CENTER, bBar);
bottomBar->setActive(BottomBar::Side::LEFT, bBar);
M module-apps/application-messages/windows/MessagesMainWindow.cpp => module-apps/application-messages/windows/MessagesMainWindow.cpp +0 -2
@@ 64,8 64,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::open));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::TIME, true);
-
setTitle(utils::localize.get("app_messages_title_main"));
leftArrowImage = new gui::Image(this, 30, 62, 0, 0, "arrow_left");
M module-apps/application-messages/windows/NewMessage.cpp => module-apps/application-messages/windows/NewMessage.cpp +0 -3
@@ 188,9 188,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::options));
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
- topBar->setActive(TopBar::Elements::SIGNAL, false);
setTitle(utils::localize.get("sms_title_message"));
M module-apps/application-messages/windows/SMSTemplatesWindow.cpp => module-apps/application-messages/windows/SMSTemplatesWindow.cpp +0 -2
@@ 44,8 44,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::use));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::TIME, true);
-
namespace style = style::messages::templates::list;
list = new gui::ListView(this, style::x, style::y, style::w, style::h, smsTemplateModel);
M module-apps/application-messages/windows/SMSThreadViewWindow.cpp => module-apps/application-messages/windows/SMSThreadViewWindow.cpp +0 -1
@@ 29,7 29,6 @@ namespace gui
{
AppWindow::buildInterface();
setTitle(utils::localize.get("app_messages_title_main"));
- topBar->setActive(TopBar::Elements::TIME, true);
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::options));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-music-player/windows/MusicPlayerAllSongsWindow.cpp => module-apps/application-music-player/windows/MusicPlayerAllSongsWindow.cpp +0 -2
@@ 54,8 54,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("app_music_player_play"));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::TIME, true);
-
songsList = new gui::ListView(this,
musicPlayerStyle::allSongsWindow::x,
musicPlayerStyle::allSongsWindow::y,
M module-apps/application-music-player/windows/MusicPlayerEmptyWindow.cpp => module-apps/application-music-player/windows/MusicPlayerEmptyWindow.cpp +0 -2
@@ 33,8 33,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get("app_music_player_music_library"));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get("app_music_player_quit"));
- topBar->setActive(TopBar::Elements::TIME, true);
-
img = new gui::Image(this, noteImg::x, noteImg::y, "note");
text = new Text(this, infoText::x, infoText::y, infoText::w, infoText::h);
M module-apps/application-notes/windows/NoteEditWindow.cpp => module-apps/application-notes/windows/NoteEditWindow.cpp +0 -2
@@ 85,8 85,6 @@ namespace app::notes
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(::style::strings::common::back));
- topBar->setActive(gui::TopBar::Elements::TIME, true);
-
setFocusItem(edit);
}
M module-apps/application-notes/windows/NoteMainWindow.cpp => module-apps/application-notes/windows/NoteMainWindow.cpp +0 -1
@@ 54,7 54,6 @@ namespace app::notes
bottomBar->setText(gui::BottomBar::Side::CENTER, utils::localize.get(::style::strings::common::open));
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(::style::strings::common::back));
- topBar->setActive(gui::TopBar::Elements::TIME, true);
namespace windowStyle = app::notes::style::main_window;
leftArrowImage = new gui::Image(this,
M module-apps/application-notes/windows/NotePreviewWindow.cpp => module-apps/application-notes/windows/NotePreviewWindow.cpp +0 -2
@@ 79,8 79,6 @@ namespace app::notes
bottomBar->setActive(gui::BottomBar::Side::RIGHT, true);
bottomBar->setText(gui::BottomBar::Side::RIGHT, utils::localize.get(::style::strings::common::back));
- topBar->setActive(gui::TopBar::Elements::TIME, true);
-
setFocusItem(note);
}
M module-apps/application-phonebook/windows/PhonebookContactDetails.cpp => module-apps/application-phonebook/windows/PhonebookContactDetails.cpp +0 -1
@@ 25,7 25,6 @@ namespace gui
void PhonebookContactDetails::buildInterface()
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::options));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
M module-apps/application-phonebook/windows/PhonebookIceContacts.cpp => module-apps/application-phonebook/windows/PhonebookIceContacts.cpp +0 -1
@@ 25,7 25,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
setTitle(utils::localize.get("app_phonebook_ice_contacts_title"));
contactsListIce = new gui::ListView(this,
M module-apps/application-phonebook/windows/PhonebookMainWindow.cpp => module-apps/application-phonebook/windows/PhonebookMainWindow.cpp +0 -1
@@ 30,7 30,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
setTitle(utils::localize.get("app_phonebook_title_main"));
leftArrowImage = new gui::Image(this,
phonebookStyle::mainWindow::leftArrowImage::x,
M module-apps/application-phonebook/windows/PhonebookSearch.cpp => module-apps/application-phonebook/windows/PhonebookSearch.cpp +0 -1
@@ 16,7 16,6 @@ namespace gui
void PhonebookSearch::buildInterface()
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
setTitle(utils::localize.get("app_phonebook_title_main"));
M module-apps/application-phonebook/windows/PhonebookSearchResults.cpp => module-apps/application-phonebook/windows/PhonebookSearchResults.cpp +0 -2
@@ 40,8 40,6 @@ namespace gui
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::TIME, true);
-
setTitle(utils::localize.get("common_results_prefix"));
}
M module-apps/application-settings-new/windows/AllDevicesWindow.cpp => module-apps/application-settings-new/windows/AllDevicesWindow.cpp +0 -4
@@ 71,10 71,6 @@ namespace gui
gui::option::SettingRightItem::Bt));
}
- topBar->setActive(TopBar::Elements::SIGNAL, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
-
leftArrowImage = new gui::Image(this,
style::settings::window::leftArrowImage::x,
style::settings::window::leftArrowImage::y,
M module-apps/application-settings-new/windows/ApnSettingsWindow.cpp => module-apps/application-settings-new/windows/ApnSettingsWindow.cpp +0 -4
@@ 34,10 34,6 @@ namespace gui
{
setTitle(utils::localize.get("app_settings_network_apn_settings"));
- topBar->setActive(TopBar::Elements::SIGNAL, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
-
leftArrowImage = new gui::Image(this,
style::settings::window::leftArrowImage::x,
style::settings::window::leftArrowImage::y,
M module-apps/application-settings-new/windows/AppsAndToolsWindow.cpp => module-apps/application-settings-new/windows/AppsAndToolsWindow.cpp +0 -4
@@ 33,10 33,6 @@ namespace gui
gui::option::Arrow::Enabled});
};
- topBar->setActive(TopBar::Elements::SIGNAL, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
-
addMenu(i18("app_settings_apps_messages"), gui::window::name::messages);
addMenu(i18("app_settings_apps_torch"), gui::window::name::torch);
M module-apps/application-settings-new/windows/BaseSettingsWindow.cpp => module-apps/application-settings-new/windows/BaseSettingsWindow.cpp +0 -3
@@ 16,9 16,6 @@ namespace gui
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
- topBar->setActive(TopBar::Elements::TIME, true);
}
void BaseSettingsWindow::destroyInterface()
M module-apps/application-settings-new/windows/BluetoothWindow.cpp => module-apps/application-settings-new/windows/BluetoothWindow.cpp +0 -2
@@ 15,8 15,6 @@ namespace gui
BluetoothWindow::BluetoothWindow(app::Application *app) : OptionWindow(app, gui::window::name::bluetooth)
{
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
sys::Bus::SendUnicast(
std::make_shared<::message::bluetooth::RequestStatus>(), service::name::bluetooth, application);
}
M module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp +0 -8
@@ 76,14 76,6 @@ namespace gui
setTitle(utils::localize.get("app_settings_security_change_passcode"));
}
- void ChangePasscodeWindow::buildTopBar()
- {
- topBar->setActive(TopBar::Elements::SIM, false);
- topBar->setActive(TopBar::Elements::LOCK, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::TIME, true);
- }
-
void ChangePasscodeWindow::destroyInterface()
{
erase();
M module-apps/application-settings-new/windows/ChangePasscodeWindow.hpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.hpp +0 -1
@@ 21,7 21,6 @@ namespace gui
void buildBottomBar() override;
void buildInterface() override;
void buildTitleBar() override;
- void buildTopBar() override;
void destroyInterface() override;
void onBeforeShow(ShowMode mode, SwitchData *data) override;
void processPasscode();
M module-apps/application-settings-new/windows/MessagesWindow.cpp => module-apps/application-settings-new/windows/MessagesWindow.cpp +0 -3
@@ 64,9 64,6 @@ namespace gui
};
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
- topBar->setActive(TopBar::Elements::SIGNAL, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
addMenuSwitch(utils::translateI18("app_settings_show_unread_first"), "");
addMenu(utils::translateI18("app_settings_Templates"), gui::window::name::templates);
M module-apps/application-settings-new/windows/NetworkWindow.cpp => module-apps/application-settings-new/windows/NetworkWindow.cpp +0 -3
@@ 122,9 122,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
- topBar->setActive(TopBar::Elements::SIGNAL, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
return optList;
}
void NetworkWindow::rebuild()
M module-apps/application-settings-new/windows/NightshiftWindow.cpp => module-apps/application-settings-new/windows/NightshiftWindow.cpp +0 -3
@@ 16,9 16,6 @@ namespace gui
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::SIM, false);
- topBar->setActive(TopBar::Elements::TIME, true);
-
setTitle(utils::localize.get("app_settings_title_nightshift"));
body = new gui::VBox(this,
M module-apps/application-settings-new/windows/PhoneNameWindow.cpp => module-apps/application-settings-new/windows/PhoneNameWindow.cpp +0 -2
@@ 22,8 22,6 @@ namespace gui
void PhoneNameWindow::buildInterface()
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::SIM, false);
- topBar->setActive(TopBar::Elements::TIME, true);
setTitle(utils::localize.get("app_settings_bluetooth_phone_name"));
M module-apps/application-settings/windows/BtScanWindow.cpp => module-apps/application-settings/windows/BtScanWindow.cpp +0 -2
@@ 57,8 57,6 @@ namespace gui
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
setTitle(utils::localize.get("BT_scan_results"));
M module-apps/application-settings/windows/BtWindow.cpp => module-apps/application-settings/windows/BtWindow.cpp +0 -2
@@ 59,8 59,6 @@ namespace gui
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
setTitle(utils::localize.get("app_settings_bt"));
M module-apps/application-settings/windows/CellularPassthroughWindow.cpp => module-apps/application-settings/windows/CellularPassthroughWindow.cpp +0 -2
@@ 31,8 31,6 @@ namespace gui
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
setTitle(utils::localize.get("app_settings_cellular_passthrough"));
M module-apps/application-settings/windows/DateTimeWindow.cpp => module-apps/application-settings/windows/DateTimeWindow.cpp +0 -3
@@ 52,9 52,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
setTitle(utils::localize.get("app_settings_date_and_time"));
// create date widgets
M module-apps/application-settings/windows/EinkModeWindow.cpp => module-apps/application-settings/windows/EinkModeWindow.cpp +0 -2
@@ 27,8 27,6 @@ namespace gui
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
setTitle("Change eink mode");
auto label = new Label(this, 100, 200, 300, 50, "Change mode on click");
M module-apps/application-settings/windows/FotaWindow.cpp => module-apps/application-settings/windows/FotaWindow.cpp +0 -3
@@ 37,9 37,6 @@ namespace gui
AppWindow::buildInterface();
setTitle("Modem Firmware update (FOTA)");
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
bottomBar->setActive(BottomBar::Side::CENTER, true);
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get("Go"));
M module-apps/application-settings/windows/Info.cpp => module-apps/application-settings/windows/Info.cpp +0 -2
@@ 36,8 36,6 @@ namespace gui
AppWindow::buildInterface();
bottomBar->setActive(BottomBar::Side::RIGHT, true);
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
setTitle("Info");
M module-apps/application-settings/windows/LanguageWindow.cpp => module-apps/application-settings/windows/LanguageWindow.cpp +0 -3
@@ 49,9 49,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
setTitle(utils::localize.get("app_settings_title_languages"));
const auto &langList = loader.getAvailableDisplayLanguages();
for (const auto &lang : langList) {
M module-apps/application-settings/windows/TestMessageWindow.cpp => module-apps/application-settings/windows/TestMessageWindow.cpp +0 -3
@@ 61,9 61,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
-
receivedLabel = new gui::Label(this, 10, 50, 480 - 20, 50, "Received SMS");
receivedLabel->setAlignment(
gui::Alignment(gui::Alignment::Vertical::Center, gui::Alignment::Horizontal::Center));
M module-apps/application-special-input/windows/SpecialInputMainWindow.cpp => module-apps/application-special-input/windows/SpecialInputMainWindow.cpp +0 -2
@@ 36,8 36,6 @@ void SpecialInputMainWindow::buildInterface()
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::emoji));
- topBar->setActive(TopBar::Elements::TIME, true);
-
charList = new gui::ListView(this,
specialInputStyle::specialInputListView::x,
specialInputStyle::specialInputListView::y,
M module-apps/windows/AppWindow.cpp => module-apps/windows/AppWindow.cpp +16 -4
@@ 49,10 49,22 @@ namespace gui
title->setEllipsis(Ellipsis::Right);
title->visible = false;
- topBar = new gui::TopBar(this, 0, 0, 480, 50);
- topBar->setActive(TopBar::Elements::LOCK, false);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIGNAL, false);
+ auto config = configureTopBar(application->getTopBarConfiguration());
+ topBar = new gui::top_bar::TopBar(this, 0, 0, 480, 50);
+ topBar->configure(std::move(config));
+ }
+
+ top_bar::Configuration AppWindow::configureTopBar(top_bar::Configuration appConfiguration)
+ {
+ return appConfiguration;
+ }
+
+ void AppWindow::applyToTopBar(TopBarConfigurationChangeFunction configChange)
+ {
+ if (configChange) {
+ auto newConfiguration = configChange(topBar->getConfiguration());
+ topBar->configure(std::move(newConfiguration));
+ }
}
bool AppWindow::setSIM()
M module-apps/windows/AppWindow.hpp => module-apps/windows/AppWindow.hpp +21 -5
@@ 40,12 40,17 @@ namespace gui
/**
* Information bar for signal, battery and lock icon on the top of the screen.
*/
- gui::TopBar *topBar = nullptr;
+ gui::top_bar::TopBar *topBar = nullptr;
/**
* Pointer to the application object that owns the window.
*/
app::Application *application = nullptr;
+ /**
+ * A function that applies configuration changes to the current top bar configuration.
+ */
+ using TopBarConfigurationChangeFunction = std::function<top_bar::Configuration(top_bar::Configuration)>;
+
public:
AppWindow() = delete;
AppWindow(app::Application *app, std::string name);
@@ 54,10 59,7 @@ namespace gui
{
return application;
};
- void setApplication(app::Application *app)
- {
- application = app;
- };
+
virtual bool onDatabaseMessage(sys::Message *msg);
bool updateBatteryCharger(bool charging);
@@ 76,6 78,20 @@ namespace gui
void destroyInterface() override;
bool onInput(const InputEvent &inputEvent) override;
void accept(GuiVisitor &visitor) override;
+
+ /**
+ * Configure the top bar using window-specific configuration.
+ * @param appConfiguration Application-wide top bar configuration that it to be modified.
+ * @return window-specific configuration of the top bar.
+ */
+ virtual top_bar::Configuration configureTopBar(top_bar::Configuration appConfiguration);
+
+ /**
+ * Applies configuration change on the current top bar configuration.
+ * @param configChange The function that contains the top bar configuration changes.
+ */
+ void applyToTopBar(TopBarConfigurationChangeFunction configChange);
+
/// Setting bottom bar temporary text
/// @param text - bottomBar text
/// @param overwriteOthers - set or not other bottomBar texts to "" (default true)
M module-apps/windows/Dialog.cpp => module-apps/windows/Dialog.cpp +0 -6
@@ 50,7 50,6 @@ Dialog::Dialog(app::Application *app, const std::string &name) : gui::AppWindow(
{
AppWindow::buildInterface();
- topBar->setActive(TopBar::Elements::TIME, true);
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
setTitle("");
@@ 77,9 76,6 @@ void Dialog::onBeforeShow(ShowMode mode, SwitchData *data)
DialogConfirm::DialogConfirm(app::Application *app, const std::string &name) : Dialog(app, name)
{
- topBar->setActive(TopBar::Elements::BATTERY, true);
- topBar->setActive(TopBar::Elements::SIGNAL, true);
-
bottomBar->setActive(BottomBar::Side::RIGHT, false);
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::ok));
setFocusItem(icon);
@@ 169,8 165,6 @@ void DialogYesNoIconTxt::onBeforeShow(ShowMode mode, SwitchData *data)
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
DialogYesNo::onBeforeShow(mode, metadata);
iconText->setText(metadata->get().iconText);
- topBar->setActive(TopBar::Elements::BATTERY, false);
- topBar->setActive(TopBar::Elements::SIM, false);
setFocusItem(no);
}
}
M module-apps/windows/OptionWindow.cpp => module-apps/windows/OptionWindow.cpp +0 -2
@@ 63,8 63,6 @@ namespace gui
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
- topBar->setActive(TopBar::Elements::SIGNAL, true);
- topBar->setActive(TopBar::Elements::BATTERY, true);
setTitle(name);
optionsList = new gui::ListView(this,
M module-gui/gui/dom/Item2JsonSerializingVisitor.cpp => module-gui/gui/dom/Item2JsonSerializingVisitor.cpp +1 -1
@@ 85,7 85,7 @@ void Item2JsonSerializingVisitor::visit(gui::BottomBar &item)
visit(static_cast<gui::Item &>(item));
}
-void Item2JsonSerializingVisitor::visit(gui::TopBar &item)
+void Item2JsonSerializingVisitor::visit(gui::top_bar::TopBar &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::TopBar);
M module-gui/gui/dom/Item2JsonSerializingVisitor.hpp => module-gui/gui/dom/Item2JsonSerializingVisitor.hpp +1 -1
@@ 29,7 29,7 @@ namespace gui
void visit(gui::Window &item) override;
void visit(gui::Label &item) override;
void visit(gui::BottomBar &item) override;
- void visit(gui::TopBar &item) override;
+ void visit(gui::top_bar::TopBar &item) override;
public:
/// retrieves current state of the `sink`. The state of the `sink` after call is default-initialized
M module-gui/gui/widgets/TopBar.cpp => module-gui/gui/widgets/TopBar.cpp +90 -46
@@ 11,7 11,7 @@
#include "common_data/EventStore.hpp"
-namespace gui
+namespace gui::top_bar
{
namespace networkTechnology
{
@@ 20,14 20,47 @@ namespace gui
constexpr uint32_t w = 130;
constexpr uint32_t h = 20;
} // namespace networkTechnology
- const uint32_t TopBar::signalOffset = 35;
- const uint32_t TopBar::batteryOffset = 413;
- gui::TopBar::TimeMode TopBar::timeMode = TimeMode::TIME_24H;
+
+ static constexpr uint32_t signalOffset = 35;
+ static constexpr uint32_t batteryOffset = 413;
+
+ TopBar::TimeMode TopBar::timeMode = TimeMode::TIME_24H;
uint32_t TopBar::time = 0;
- TopBar::TopBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h) : Rect{parent, x, y, w, h}
+ void Configuration::enable(Indicator indicator)
+ {
+ set(indicator, true);
+ }
+
+ void Configuration::enable(const Indicators &indicators)
+ {
+ for (auto indicator : indicators) {
+ enable(indicator);
+ }
+ }
+
+ void Configuration::disable(Indicator indicator)
{
+ set(indicator, false);
+ }
+
+ void Configuration::set(Indicator indicator, bool enabled)
+ {
+ indicatorStatuses[indicator] = enabled;
+ }
+
+ auto Configuration::isEnabled(Indicator indicator) const -> bool
+ {
+ return indicatorStatuses.at(indicator);
+ }
+
+ auto Configuration::getIndicatorsConfiguration() const noexcept -> const IndicatorStatuses &
+ {
+ return indicatorStatuses;
+ }
+ TopBar::TopBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h) : Rect{parent, x, y, w, h}
+ {
prepareWidget();
setFillColor(ColorFullWhite);
@@ 48,7 81,7 @@ namespace gui
val = batteryBars.size();
}
for (unsigned int i = 0; i < batteryBars.size(); ++i) {
- if (elements.battery) {
+ if (configuration.isEnabled(Indicator::Battery)) {
batteryBars[i]->setVisible(i == val);
}
else {
@@ 59,7 92,6 @@ namespace gui
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");
@@ 111,48 143,56 @@ namespace gui
updateNetworkAccessTechnology();
}
- void TopBar::setActive(std::list<std::pair<TopBar::Elements, bool>> elements)
+ auto TopBar::getConfiguration() const noexcept -> const Configuration &
+ {
+ return configuration;
+ }
+
+ void TopBar::configure(Configuration &&config)
{
- for (auto el : elements) {
- setActive(el.first, el.second);
+ if (config.isEnabled(Indicator::Lock)) {
+ // In current implementation, lock and time indicators are mutually exclusive.
+ // I.e. enabling the lock indicator disables the time indicator.
+ config.disable(Indicator::Time);
+ }
+
+ for (auto [indicator, enabled] : config.getIndicatorsConfiguration()) {
+ setIndicatorStatus(indicator, enabled);
}
+ configuration = std::move(config);
}
- void TopBar::setActive(TopBar::Elements element, bool active)
+ void TopBar::setIndicatorStatus(Indicator indicator, bool enabled)
{
- switch (element) {
- case Elements::BATTERY: {
- elements.battery = active;
- showBattery(elements.battery);
- } break;
- case Elements::LOCK: {
- elements.lock = active;
- lock->setVisible(active);
- if (active)
- timeLabel->setVisible(false);
- } break;
- case Elements::SIGNAL: {
- elements.signal = active;
+ switch (indicator) {
+ case Indicator::Signal:
updateSignalStrength();
- } break;
- case Elements::TIME: {
- elements.time = active;
- timeLabel->setVisible(active);
- if (active)
+ break;
+ case Indicator::Time:
+ timeLabel->setVisible(enabled);
+ if (enabled) {
lock->setVisible(false);
- } break;
- case Elements::SIM:
- elements.sim = active;
+ }
+ break;
+ case Indicator::Lock:
+ lock->setVisible(enabled);
+ if (enabled) {
+ timeLabel->setVisible(false);
+ }
+ break;
+ case Indicator::Battery:
+ showBattery(enabled);
+ break;
+ case Indicator::SimCard:
simSet();
break;
- case Elements::NETWORK_ACCESS_TECHNOLOGY:
- elements.networkAccessTechnology = active;
+ case Indicator::NetworkAccessTechnology:
updateNetworkAccessTechnology();
break;
- };
+ }
}
- uint32_t calculateBatteryBars(uint32_t percentage)
+ uint32_t TopBar::calculateBatteryBars(uint32_t percentage)
{
uint32_t level = 0;
if (percentage <= 5) // level critical
@@ 177,13 217,13 @@ namespace gui
bool TopBar::updateBattery(uint32_t percent)
{
- showBattery(elements.battery);
+ showBattery(configuration.isEnabled(Indicator::Battery));
return true;
}
bool TopBar::updateBattery(bool plugged)
{
- showBattery(elements.battery);
+ showBattery(configuration.isEnabled(Indicator::Battery));
return true;
}
@@ 216,7 256,7 @@ namespace gui
for (uint32_t i = 0; i < signalImgCount; i++) {
signal[i]->setVisible(false);
}
- if (elements.signal) {
+ 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);
@@ 229,7 269,7 @@ namespace gui
bool TopBar::updateNetworkAccessTechnology()
{
- if (elements.networkAccessTechnology) {
+ if (configuration.isEnabled(Indicator::NetworkAccessTechnology)) {
auto accessTechnology = Store::GSM::get()->getNetwork().accessTechnology;
constexpr auto text2g = "2G";
@@ 258,16 298,16 @@ namespace gui
return true;
}
- void TopBar::setTime(const UTF8 &time)
+ void TopBar::setTime(const UTF8 &value)
{
- timeLabel->setText(time);
+ timeLabel->setText(value);
}
- void TopBar::setTime(const uint32_t &time, bool mode24H)
+ void TopBar::setTime(uint32_t value, bool mode24H)
{
setTime(utils::time::Time());
timeMode = (mode24H ? TimeMode::TIME_24H : TimeMode::TIME_12H);
- this->time = time;
+ time = value;
}
UTF8 TopBar::getTimeString()
@@ 276,13 316,17 @@ namespace gui
return timeLabel->getText();
}
+ uint32_t TopBar::getTime() const noexcept
+ {
+ return time;
+ }
void TopBar::simSet()
{
- if (!sim) {
+ if (sim == nullptr) {
return;
}
- else if (elements.sim) {
+ if (configuration.isEnabled(Indicator::SimCard)) {
return sim->show(Store::GSM::get()->sim);
}
sim->visible = false;
M module-gui/gui/widgets/TopBar.hpp => module-gui/gui/widgets/TopBar.hpp +61 -41
@@ 1,21 1,52 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
-#ifndef MODULE_GUI_GUI_WIDGETS_TOPBAR_HPP_
-#define MODULE_GUI_GUI_WIDGETS_TOPBAR_HPP_
+#pragma once
#include "Image.hpp"
#include "Label.hpp"
#include "Rect.hpp"
#include "TopBar/SIM.hpp"
#include <common_data/EventStore.hpp>
+
+#include <vector>
#include <map>
-namespace gui
+namespace gui::top_bar
{
+ enum class Indicator
+ {
+ Signal,
+ Time,
+ Lock,
+ Battery,
+ SimCard,
+ NetworkAccessTechnology
+ };
+ using Indicators = std::vector<Indicator>;
+ using IndicatorStatuses = std::map<Indicator, bool>;
- static const uint32_t batteryBarsCount = 6;
- static const uint32_t signalImgCount = 6;
+ /**
+ * Carries the top bar configuration.
+ */
+ class Configuration
+ {
+ public:
+ void enable(Indicator indicator);
+ void enable(const Indicators &indicators);
+ void disable(Indicator indicator);
+ void set(Indicator indicator, bool enabled);
+ [[nodiscard]] auto isEnabled(Indicator indicator) const -> bool;
+ [[nodiscard]] auto getIndicatorsConfiguration() const noexcept -> const IndicatorStatuses &;
+
+ private:
+ IndicatorStatuses indicatorStatuses = {{Indicator::Signal, false},
+ {Indicator::Time, false},
+ {Indicator::Lock, false},
+ {Indicator::Battery, false},
+ {Indicator::SimCard, false},
+ {Indicator::NetworkAccessTechnology, false}};
+ };
/// Header of most of design Windows
///
@@ 31,19 62,10 @@ namespace gui
/// [signal] [title ] [sim] [battery]
class TopBar : public Rect
{
- static const uint32_t signalOffset;
- static const uint32_t batteryOffset;
+ static constexpr uint32_t batteryBarsCount = 6;
+ static constexpr uint32_t signalImgCount = 6;
public:
- enum class Elements
- {
- SIGNAL = 0x01,
- LOCK,
- BATTERY,
- TIME,
- SIM,
- NETWORK_ACCESS_TECHNOLOGY
- };
enum class TimeMode
{
TIME_12H,
@@ 60,32 82,32 @@ namespace gui
std::map<const Store::Battery::State, Image *> batteryChargings = {
{Store::Battery::State::Charging, nullptr}, {Store::Battery::State::PluggedNotCharging, nullptr}};
gui::SIM *sim = nullptr;
- void prepareWidget();
+ Configuration configuration;
static TimeMode timeMode;
+ void prepareWidget();
+
/// show bars in number - 0 bars, 1 bar, 2 bars...
void batteryShowBars(uint32_t val);
- /// elements shown on TopBar
- struct
- {
- bool signal : 1;
- bool lock : 1;
- bool battery : 1;
- bool time : 1;
- bool sim : 1;
- bool networkAccessTechnology : 1;
- } elements = {false, false, false, false, true, true};
+ static uint32_t calculateBatteryBars(uint32_t percentage);
+
+ /**
+ * Sets the status of the top bar indicator.
+ * @param indicator Indicator
+ */
+ void setIndicatorStatus(Indicator indicator, bool enabled);
public:
TopBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);
/**
- * @brief Hides or shows images.
- * @note LOCK and TIME are located in the same place so only 1 can be active at the same time.
+ * Configures the top bar.
+ * @param configuration Top bar configuration
*/
- void setActive(TopBar::Elements element, bool active);
- void setActive(std::list<std::pair<TopBar::Elements, bool>> elements);
+ void configure(Configuration &&config);
+ [[nodiscard]] auto getConfiguration() const noexcept -> const Configuration &;
+
/**
* @brief Sets charge level of the battery based on percent value. This will cause appropriate image to be
* displayed.
@@ 103,16 125,14 @@ namespace gui
bool updateNetworkAccessTechnology();
void simSet();
- void setTime(const UTF8 &time);
- void setTime(const uint32_t &time, bool mode24H);
+
+ void setTime(const UTF8 &value);
+ void setTime(uint32_t value, bool mode24H);
+
UTF8 getTimeString();
- uint32_t getTime()
- {
- return time;
- };
+ uint32_t getTime() const noexcept;
+
void accept(GuiVisitor &visitor) override;
};
-} /* namespace gui */
-
-#endif /* MODULE_GUI_GUI_WIDGETS_TOPBAR_HPP_ */
+} // namespace gui::top_bar
M module-gui/gui/widgets/visitor/GuiVisitor.hpp => module-gui/gui/widgets/visitor/GuiVisitor.hpp +5 -2
@@ 11,7 11,10 @@ namespace gui
class Window;
class Label;
class BottomBar;
- class TopBar;
+ namespace top_bar
+ {
+ class TopBar;
+ }
/// The general purpose abstract interface for enabling Double-Dispatch behavior throughout `gui::Item`'s
/// inheritance hierarchy.
@@ 24,7 27,7 @@ namespace gui
virtual void visit(gui::Window &item) = 0;
virtual void visit(gui::Label &item) = 0;
virtual void visit(gui::BottomBar &item) = 0;
- virtual void visit(gui::TopBar &item) = 0;
+ virtual void visit(gui::top_bar::TopBar &item) = 0;
virtual ~GuiVisitor() = default;
};
} // namespace gui
M module-gui/test/test-google/test-gui-visitor-call.cpp => module-gui/test/test-google/test-gui-visitor-call.cpp +1 -1
@@ 25,7 25,7 @@ class VisitorMock : public gui::GuiVisitor
MOCK_METHOD1(visit, void(gui::Window &item));
MOCK_METHOD1(visit, void(gui::Label &item));
MOCK_METHOD1(visit, void(gui::BottomBar &item));
- MOCK_METHOD1(visit, void(gui::TopBar &item));
+ MOCK_METHOD1(visit, void(gui::top_bar::TopBar &item));
};
class CustomRect : public gui::Rect