|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
|
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
|
|
|
// Copyright (c) 2017-2025, Mudita Sp. z.o.o. All rights reserved.
|
|
|
|
|
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md
|
|
|
|
|
|
|
|
|
|
#include "windows/BellBatteryStatusWindow.hpp"
|
|
|
|
@@ -15,11 +15,14 @@ namespace
|
|
|
|
|
{
|
|
|
|
|
using namespace std::chrono_literals;
|
|
|
|
|
|
|
|
|
|
constexpr auto top_description_font = style::window::font::largelight;
|
|
|
|
|
constexpr auto bottom_description_font = style::window::font::verybiglight;
|
|
|
|
|
constexpr auto bottom_description_max_size_w = style::bell_base_layout::outer_layouts_w;
|
|
|
|
|
constexpr auto bottom_description_max_size_h = 85U;
|
|
|
|
|
constexpr auto imageType = gui::ImageTypeSpecifier::W_G;
|
|
|
|
|
constexpr auto topDescriptionFont = style::window::font::largelight;
|
|
|
|
|
constexpr auto bottomDescriptionFont = style::window::font::verybiglight;
|
|
|
|
|
|
|
|
|
|
constexpr auto bottomDescriptionMaxSizeW = style::bell_base_layout::outer_layouts_w;
|
|
|
|
|
constexpr auto bottomDescriptionMaxSizeH = 85U;
|
|
|
|
|
constexpr auto bottomDescriptionRightMargin = 8U;
|
|
|
|
|
constexpr auto chargingIconRightMargin = 12U;
|
|
|
|
|
|
|
|
|
|
constexpr auto batteryEntries =
|
|
|
|
|
std::array<battery_utils::BatteryLevelEntry, 6>{{{{0, 9}, "bell_status_battery_lvl0"},
|
|
|
|
|
{{10, 19}, "bell_status_battery_lvl1"},
|
|
|
|
@@ -27,12 +30,10 @@ namespace
|
|
|
|
|
{{40, 69}, "bell_status_battery_lvl3"},
|
|
|
|
|
{{70, 95}, "bell_status_battery_lvl4"},
|
|
|
|
|
{{96, 100}, "bell_status_battery_lvl5"}}};
|
|
|
|
|
// this time must be longer than the long press time (10s) to turn off the system
|
|
|
|
|
constexpr auto windowLongTimeout{12s};
|
|
|
|
|
// default screen timeout
|
|
|
|
|
constexpr auto windowDefaultTimeout{3s};
|
|
|
|
|
// default screen timeout for low battery warning
|
|
|
|
|
constexpr auto windowDefaultTimeoutForLowBatteryWarning{6s};
|
|
|
|
|
|
|
|
|
|
constexpr auto windowLongTimeout = 12s; // Must be longer than the long press time (10s) to turn off the system
|
|
|
|
|
constexpr auto windowDefaultTimeout = 3s;
|
|
|
|
|
constexpr auto windowLowBatteryTimeout = 6s;
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
namespace gui
|
|
|
|
@@ -42,6 +43,7 @@ namespace gui
|
|
|
|
|
{
|
|
|
|
|
buildInterface();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BellBatteryStatusWindow::buildInterface()
|
|
|
|
|
{
|
|
|
|
|
WindowWithTimer::buildInterface();
|
|
|
|
@@ -55,44 +57,46 @@ namespace gui
|
|
|
|
|
topDescription = new TextFixedSize(body->firstBox);
|
|
|
|
|
topDescription->setMinimumSize(style::bell_base_layout::outer_layouts_w,
|
|
|
|
|
style::bell_base_layout::outer_layouts_h);
|
|
|
|
|
topDescription->setFont(top_description_font);
|
|
|
|
|
topDescription->setFont(topDescriptionFont);
|
|
|
|
|
topDescription->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
|
|
|
|
|
topDescription->setEdges(RectangleEdge::None);
|
|
|
|
|
topDescription->activeItem = false;
|
|
|
|
|
topDescription->drawUnderline(false);
|
|
|
|
|
topDescription->activeItem = false;
|
|
|
|
|
|
|
|
|
|
hbox = new HBox(body->lastBox);
|
|
|
|
|
hbox->setMinimumSize(style::bell_base_layout::outer_layouts_w, style::bell_base_layout::outer_layouts_h);
|
|
|
|
|
hbox->setEdges(RectangleEdge::None);
|
|
|
|
|
hbox->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
|
|
|
|
|
|
|
|
|
|
chargingIcon = new ImageBox(hbox, 0, 0, 0, 0, new Image("bell_lightning", imageType));
|
|
|
|
|
chargingIcon->setMargins(gui::Margins(0, 0, 8, 0));
|
|
|
|
|
chargingIcon = new ImageBox(hbox, 0, 0, 0, 0, new Image("bell_lightning", gui::ImageTypeSpecifier::W_G));
|
|
|
|
|
chargingIcon->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
|
|
|
|
|
chargingIcon->setMinimumSizeToFitImage();
|
|
|
|
|
chargingIcon->setMargins(gui::Margins(0, 0, chargingIconRightMargin, 0));
|
|
|
|
|
chargingIcon->activeItem = false;
|
|
|
|
|
|
|
|
|
|
bottomDescription = new TextFixedSize(hbox);
|
|
|
|
|
bottomDescription->setMaximumSize(bottom_description_max_size_w, bottom_description_max_size_h);
|
|
|
|
|
bottomDescription->setFont(bottom_description_font);
|
|
|
|
|
batteryImage = new ImageBox(body->centerBox,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
style::bell_base_layout::w,
|
|
|
|
|
style::bell_base_layout::h,
|
|
|
|
|
new Image("bell_status_battery_lvl0", gui::ImageTypeSpecifier::W_G));
|
|
|
|
|
batteryImage->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
|
|
|
|
|
batteryImage->setEdges(RectangleEdge::None);
|
|
|
|
|
batteryImage->setMinimumSizeToFitImage();
|
|
|
|
|
batteryImage->activeItem = false;
|
|
|
|
|
|
|
|
|
|
bottomDescription = new Text(hbox);
|
|
|
|
|
bottomDescription->setMaximumSize(bottomDescriptionMaxSizeW, bottomDescriptionMaxSizeH);
|
|
|
|
|
bottomDescription->setFont(bottomDescriptionFont);
|
|
|
|
|
bottomDescription->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
|
|
|
|
|
bottomDescription->setEdges(RectangleEdge::None);
|
|
|
|
|
bottomDescription->activeItem = false;
|
|
|
|
|
bottomDescription->setMargins(gui::Margins(0, 0, bottomDescriptionRightMargin, 0));
|
|
|
|
|
bottomDescription->drawUnderline(false);
|
|
|
|
|
|
|
|
|
|
center = new ImageBox(body->centerBox,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
style::bell_base_layout::w,
|
|
|
|
|
style::bell_base_layout::h,
|
|
|
|
|
new Image("bell_status_battery_lvl0", imageType));
|
|
|
|
|
center->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
|
|
|
|
|
center->setEdges(RectangleEdge::None);
|
|
|
|
|
center->setMinimumSizeToFitImage();
|
|
|
|
|
center->activeItem = false;
|
|
|
|
|
bottomDescription->activeItem = false;
|
|
|
|
|
|
|
|
|
|
body->resize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool BellBatteryStatusWindow::onInput(const InputEvent &inputEvent)
|
|
|
|
|
{
|
|
|
|
|
if (inputEvent.isShortRelease(KeyCode::KEY_ENTER) || inputEvent.isShortRelease(KeyCode::KEY_RF)) {
|
|
|
|
@@ -100,7 +104,8 @@ namespace gui
|
|
|
|
|
application->returnToPreviousWindow();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (inputEvent.getKeyCode() == KeyCode::KEY_RF) {
|
|
|
|
|
|
|
|
|
|
if (inputEvent.getKeyCode() == KeyCode::KEY_RF) {
|
|
|
|
|
if (inputEvent.isLongRelease()) {
|
|
|
|
|
// here the "back" button is held all the time, so we set the screen timeout to a long time
|
|
|
|
|
// to stay on this screen until the system shutdown popup is displayed
|
|
|
|
@@ -115,6 +120,7 @@ namespace gui
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BellBatteryStatusWindow::onBeforeShow(ShowMode mode, SwitchData *data)
|
|
|
|
|
{
|
|
|
|
|
if (data != nullptr) {
|
|
|
|
@@ -125,28 +131,29 @@ namespace gui
|
|
|
|
|
}
|
|
|
|
|
const auto soc = batteryData->getBatteryLevel();
|
|
|
|
|
const bool isCharging = batteryData->isCharging();
|
|
|
|
|
const bool isLowBatteryWarning = batteryData->isLowBatteryWarning();
|
|
|
|
|
const auto image = battery_utils::getBatteryLevelImage(batteryEntries, soc);
|
|
|
|
|
if (isLowBatteryWarning) {
|
|
|
|
|
if (batteryData->isLowBatteryWarning()) {
|
|
|
|
|
topDescription->setText(utils::translate("battery_low"));
|
|
|
|
|
auto tokenMap = text::RichTextParser::TokenMap({{"$BATTERY", std::to_string(soc)}});
|
|
|
|
|
bottomDescription->setRichText(utils::translate("battery_remaining"), std::move(tokenMap));
|
|
|
|
|
chargingIcon->setVisible(false);
|
|
|
|
|
resetTimer(windowDefaultTimeoutForLowBatteryWarning);
|
|
|
|
|
resetTimer(windowLowBatteryTimeout);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
topDescription->setText(utils::translate("app_settings_tech_info_battery"));
|
|
|
|
|
bottomDescription->setText(std::to_string(soc) + "%");
|
|
|
|
|
chargingIcon->setVisible(isCharging);
|
|
|
|
|
}
|
|
|
|
|
if (image) {
|
|
|
|
|
center->setImage(image->data(), imageType);
|
|
|
|
|
|
|
|
|
|
const auto &image = battery_utils::getBatteryLevelImage(batteryEntries, soc);
|
|
|
|
|
if (image.has_value()) {
|
|
|
|
|
batteryImage->setImage(std::string{image.value()}, gui::ImageTypeSpecifier::W_G);
|
|
|
|
|
hbox->resizeItems();
|
|
|
|
|
body->resize();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
WindowWithTimer::onBeforeShow(mode, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BellBatteryStatusWindow::onClose(CloseReason reason)
|
|
|
|
|
{
|
|
|
|
|
application->popCurrentWindow();
|
|
|
|
|