mirror of
https://github.com/InfiniTimeOrg/InfiniTime.git
synced 2024-12-26 11:13:16 +03:00
Implement battery indicator
This commit is contained in:
parent
9122547657
commit
b5bf6c51a4
@ -111,6 +111,7 @@ std::unique_ptr<Screen> Clock::WatchFaceTerminalScreen() {
|
|||||||
std::unique_ptr<Screen> Clock::WatchFaceInfineatScreen() {
|
std::unique_ptr<Screen> Clock::WatchFaceInfineatScreen() {
|
||||||
return std::make_unique<Screens::WatchFaceInfineat>(app,
|
return std::make_unique<Screens::WatchFaceInfineat>(app,
|
||||||
dateTimeController,
|
dateTimeController,
|
||||||
|
batteryController,
|
||||||
bleController,
|
bleController,
|
||||||
notificatioManager,
|
notificatioManager,
|
||||||
settingsController,
|
settingsController,
|
||||||
|
@ -6,8 +6,9 @@
|
|||||||
#include "displayapp/screens/Symbols.h"
|
#include "displayapp/screens/Symbols.h"
|
||||||
#include "displayapp/screens/BleIcon.h"
|
#include "displayapp/screens/BleIcon.h"
|
||||||
#include "components/settings/Settings.h"
|
#include "components/settings/Settings.h"
|
||||||
#include "components/ble/NotificationManager.h"
|
#include "components/battery/BatteryController.h"
|
||||||
#include "components/ble/BleController.h"
|
#include "components/ble/BleController.h"
|
||||||
|
#include "components/ble/NotificationManager.h"
|
||||||
#include "components/motion/MotionController.h"
|
#include "components/motion/MotionController.h"
|
||||||
|
|
||||||
using namespace Pinetime::Applications::Screens;
|
using namespace Pinetime::Applications::Screens;
|
||||||
@ -23,6 +24,7 @@ LV_IMG_DECLARE(logo_pine);
|
|||||||
|
|
||||||
WatchFaceInfineat::WatchFaceInfineat(DisplayApp* app,
|
WatchFaceInfineat::WatchFaceInfineat(DisplayApp* app,
|
||||||
Controllers::DateTime& dateTimeController,
|
Controllers::DateTime& dateTimeController,
|
||||||
|
Controllers::Battery& batteryController,
|
||||||
Controllers::Ble& bleController,
|
Controllers::Ble& bleController,
|
||||||
Controllers::NotificationManager& notificationManager,
|
Controllers::NotificationManager& notificationManager,
|
||||||
Controllers::Settings& settingsController,
|
Controllers::Settings& settingsController,
|
||||||
@ -30,6 +32,7 @@ WatchFaceInfineat::WatchFaceInfineat(DisplayApp* app,
|
|||||||
: Screen(app),
|
: Screen(app),
|
||||||
currentDateTime {{}},
|
currentDateTime {{}},
|
||||||
dateTimeController {dateTimeController},
|
dateTimeController {dateTimeController},
|
||||||
|
batteryController {batteryController},
|
||||||
bleController {bleController},
|
bleController {bleController},
|
||||||
notificationManager {notificationManager},
|
notificationManager {notificationManager},
|
||||||
settingsController {settingsController},
|
settingsController {settingsController},
|
||||||
@ -51,6 +54,7 @@ WatchFaceInfineat::WatchFaceInfineat(DisplayApp* app,
|
|||||||
line6 = lv_line_create(lv_scr_act(), nullptr);
|
line6 = lv_line_create(lv_scr_act(), nullptr);
|
||||||
line7 = lv_line_create(lv_scr_act(), nullptr);
|
line7 = lv_line_create(lv_scr_act(), nullptr);
|
||||||
line8 = lv_line_create(lv_scr_act(), nullptr);
|
line8 = lv_line_create(lv_scr_act(), nullptr);
|
||||||
|
lineBattery = lv_line_create(lv_scr_act(), nullptr);
|
||||||
|
|
||||||
lv_style_init(&line0Style);
|
lv_style_init(&line0Style);
|
||||||
lv_style_set_line_width(&line0Style, LV_STATE_DEFAULT, 18);
|
lv_style_set_line_width(&line0Style, LV_STATE_DEFAULT, 18);
|
||||||
@ -137,6 +141,17 @@ WatchFaceInfineat::WatchFaceInfineat(DisplayApp* app,
|
|||||||
lv_img_set_src(logoPine, &logo_pine);
|
lv_img_set_src(logoPine, &logo_pine);
|
||||||
lv_obj_set_pos(logoPine, 15, 106);
|
lv_obj_set_pos(logoPine, 15, 106);
|
||||||
|
|
||||||
|
lv_style_init(&lineBatteryStyle);
|
||||||
|
lv_style_set_line_width(&lineBatteryStyle, LV_STATE_DEFAULT, 24);
|
||||||
|
lv_style_set_line_color(&lineBatteryStyle, LV_STATE_DEFAULT,
|
||||||
|
lv_color_hex(infineatColors.orange[settingsController.GetInfineatColorIndex()*nLines + 4]));
|
||||||
|
lv_style_set_line_opa(&lineBatteryStyle, LV_STATE_DEFAULT, LV_OPA_80);
|
||||||
|
lv_obj_add_style(lineBattery, LV_LINE_PART_MAIN, &lineBatteryStyle);
|
||||||
|
lineBatteryPoints[0] = {27, 105};
|
||||||
|
lineBatteryPoints[1] = {27, 106};
|
||||||
|
lv_line_set_points(lineBattery, lineBatteryPoints, 2);
|
||||||
|
lv_obj_move_foreground(lineBattery);
|
||||||
|
|
||||||
if(!settingsController.GetInfineatShowSideCover()) {
|
if(!settingsController.GetInfineatShowSideCover()) {
|
||||||
lv_obj_set_hidden(logoPine, true);
|
lv_obj_set_hidden(logoPine, true);
|
||||||
lv_obj_set_hidden(line0, true);
|
lv_obj_set_hidden(line0, true);
|
||||||
@ -148,6 +163,7 @@ WatchFaceInfineat::WatchFaceInfineat(DisplayApp* app,
|
|||||||
lv_obj_set_hidden(line6, true);
|
lv_obj_set_hidden(line6, true);
|
||||||
lv_obj_set_hidden(line7, true);
|
lv_obj_set_hidden(line7, true);
|
||||||
lv_obj_set_hidden(line8, true);
|
lv_obj_set_hidden(line8, true);
|
||||||
|
lv_obj_set_hidden(lineBattery, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
notificationIcon = lv_obj_create(lv_scr_act(), nullptr);
|
notificationIcon = lv_obj_create(lv_scr_act(), nullptr);
|
||||||
@ -277,6 +293,7 @@ WatchFaceInfineat::~WatchFaceInfineat() {
|
|||||||
lv_style_reset(&line6Style);
|
lv_style_reset(&line6Style);
|
||||||
lv_style_reset(&line7Style);
|
lv_style_reset(&line7Style);
|
||||||
lv_style_reset(&line8Style);
|
lv_style_reset(&line8Style);
|
||||||
|
lv_style_reset(&lineBatteryStyle);
|
||||||
|
|
||||||
lv_obj_clean(lv_scr_act());
|
lv_obj_clean(lv_scr_act());
|
||||||
}
|
}
|
||||||
@ -337,6 +354,7 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
|||||||
lv_obj_set_hidden(line6, showSideCover);
|
lv_obj_set_hidden(line6, showSideCover);
|
||||||
lv_obj_set_hidden(line7, showSideCover);
|
lv_obj_set_hidden(line7, showSideCover);
|
||||||
lv_obj_set_hidden(line8, showSideCover);
|
lv_obj_set_hidden(line8, showSideCover);
|
||||||
|
lv_obj_set_hidden(lineBattery, showSideCover);
|
||||||
lv_obj_set_hidden(btnNextColor, showSideCover);
|
lv_obj_set_hidden(btnNextColor, showSideCover);
|
||||||
lv_obj_set_hidden(btnPrevColor, showSideCover);
|
lv_obj_set_hidden(btnPrevColor, showSideCover);
|
||||||
const char* labelToggle = showSideCover ? "OFF" : "ON";
|
const char* labelToggle = showSideCover ? "OFF" : "ON";
|
||||||
@ -371,6 +389,8 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
|||||||
lv_color_hex(infineatColors.orange[colorIndex*nLines + 7]));
|
lv_color_hex(infineatColors.orange[colorIndex*nLines + 7]));
|
||||||
lv_style_set_line_color(&line8Style, LV_STATE_DEFAULT,
|
lv_style_set_line_color(&line8Style, LV_STATE_DEFAULT,
|
||||||
lv_color_hex(infineatColors.orange[colorIndex*nLines + 8]));
|
lv_color_hex(infineatColors.orange[colorIndex*nLines + 8]));
|
||||||
|
lv_style_set_line_color(&lineBatteryStyle, LV_STATE_DEFAULT,
|
||||||
|
lv_color_hex(infineatColors.orange[colorIndex*nLines + 4]));
|
||||||
lv_obj_add_style(line0, LV_LINE_PART_MAIN, &line0Style);
|
lv_obj_add_style(line0, LV_LINE_PART_MAIN, &line0Style);
|
||||||
lv_obj_add_style(line1, LV_LINE_PART_MAIN, &line1Style);
|
lv_obj_add_style(line1, LV_LINE_PART_MAIN, &line1Style);
|
||||||
lv_obj_add_style(line2, LV_LINE_PART_MAIN, &line2Style);
|
lv_obj_add_style(line2, LV_LINE_PART_MAIN, &line2Style);
|
||||||
@ -380,6 +400,7 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
|||||||
lv_obj_add_style(line6, LV_LINE_PART_MAIN, &line6Style);
|
lv_obj_add_style(line6, LV_LINE_PART_MAIN, &line6Style);
|
||||||
lv_obj_add_style(line7, LV_LINE_PART_MAIN, &line7Style);
|
lv_obj_add_style(line7, LV_LINE_PART_MAIN, &line7Style);
|
||||||
lv_obj_add_style(line8, LV_LINE_PART_MAIN, &line8Style);
|
lv_obj_add_style(line8, LV_LINE_PART_MAIN, &line8Style);
|
||||||
|
lv_obj_add_style(lineBattery, LV_LINE_PART_MAIN, &lineBatteryStyle);
|
||||||
lv_obj_set_style_local_bg_color(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT,
|
lv_obj_set_style_local_bg_color(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT,
|
||||||
lv_color_hex(infineatColors.orange[colorIndex*nLines + 7]));
|
lv_color_hex(infineatColors.orange[colorIndex*nLines + 7]));
|
||||||
}
|
}
|
||||||
@ -462,6 +483,12 @@ void WatchFaceInfineat::Refresh() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
batteryPercentRemaining = batteryController.PercentRemaining();
|
||||||
|
if (batteryPercentRemaining.IsUpdated()) {
|
||||||
|
auto batteryPercent = batteryPercentRemaining.Get();
|
||||||
|
SetBatteryLevel(batteryPercent);
|
||||||
|
}
|
||||||
|
|
||||||
bleState = bleController.IsConnected();
|
bleState = bleController.IsConnected();
|
||||||
bleRadioEnabled = bleController.IsRadioEnabled();
|
bleRadioEnabled = bleController.IsRadioEnabled();
|
||||||
if (bleState.IsUpdated()) {
|
if (bleState.IsUpdated()) {
|
||||||
@ -484,3 +511,9 @@ void WatchFaceInfineat::Refresh() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WatchFaceInfineat::SetBatteryLevel(uint8_t batteryPercent) {
|
||||||
|
// starting point (y) + Pine64 logo height * (100 - batteryPercent) / 100
|
||||||
|
lineBatteryPoints[1] = {27, static_cast<lv_coord_t>(105 + 32*(100-batteryPercent)/100)};
|
||||||
|
lv_line_set_points(lineBattery, lineBatteryPoints, 2);
|
||||||
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
namespace Pinetime {
|
namespace Pinetime {
|
||||||
namespace Controllers {
|
namespace Controllers {
|
||||||
class Settings;
|
class Settings;
|
||||||
|
class Battery;
|
||||||
class Ble;
|
class Ble;
|
||||||
class NotificationManager;
|
class NotificationManager;
|
||||||
class MotionController;
|
class MotionController;
|
||||||
@ -22,6 +23,7 @@ namespace Pinetime {
|
|||||||
public:
|
public:
|
||||||
WatchFaceInfineat(DisplayApp* app,
|
WatchFaceInfineat(DisplayApp* app,
|
||||||
Controllers::DateTime& dateTimeController,
|
Controllers::DateTime& dateTimeController,
|
||||||
|
Controllers::Battery& batteryController,
|
||||||
Controllers::Ble& bleController,
|
Controllers::Ble& bleController,
|
||||||
Controllers::NotificationManager& notificationManager,
|
Controllers::NotificationManager& notificationManager,
|
||||||
Controllers::Settings& settingsController,
|
Controllers::Settings& settingsController,
|
||||||
@ -66,6 +68,7 @@ namespace Pinetime {
|
|||||||
lv_obj_t* line6;
|
lv_obj_t* line6;
|
||||||
lv_obj_t* line7;
|
lv_obj_t* line7;
|
||||||
lv_obj_t* line8;
|
lv_obj_t* line8;
|
||||||
|
lv_obj_t* lineBattery;
|
||||||
|
|
||||||
lv_style_t line0Style;
|
lv_style_t line0Style;
|
||||||
lv_style_t line1Style;
|
lv_style_t line1Style;
|
||||||
@ -76,6 +79,7 @@ namespace Pinetime {
|
|||||||
lv_style_t line6Style;
|
lv_style_t line6Style;
|
||||||
lv_style_t line7Style;
|
lv_style_t line7Style;
|
||||||
lv_style_t line8Style;
|
lv_style_t line8Style;
|
||||||
|
lv_style_t lineBatteryStyle;
|
||||||
|
|
||||||
lv_point_t line0Points[2];
|
lv_point_t line0Points[2];
|
||||||
lv_point_t line1Points[2];
|
lv_point_t line1Points[2];
|
||||||
@ -86,6 +90,7 @@ namespace Pinetime {
|
|||||||
lv_point_t line6Points[2];
|
lv_point_t line6Points[2];
|
||||||
lv_point_t line7Points[2];
|
lv_point_t line7Points[2];
|
||||||
lv_point_t line8Points[2];
|
lv_point_t line8Points[2];
|
||||||
|
lv_point_t lineBatteryPoints[2];
|
||||||
|
|
||||||
lv_obj_t* logoPine;
|
lv_obj_t* logoPine;
|
||||||
|
|
||||||
@ -120,11 +125,14 @@ namespace Pinetime {
|
|||||||
} infineatColors;
|
} infineatColors;
|
||||||
|
|
||||||
Controllers::DateTime& dateTimeController;
|
Controllers::DateTime& dateTimeController;
|
||||||
|
Controllers::Battery& batteryController;
|
||||||
Controllers::Ble& bleController;
|
Controllers::Ble& bleController;
|
||||||
Controllers::NotificationManager& notificationManager;
|
Controllers::NotificationManager& notificationManager;
|
||||||
Controllers::Settings& settingsController;
|
Controllers::Settings& settingsController;
|
||||||
Controllers::MotionController& motionController;
|
Controllers::MotionController& motionController;
|
||||||
|
|
||||||
|
void SetBatteryLevel(uint8_t batteryPercent);
|
||||||
|
|
||||||
lv_task_t* taskRefresh;
|
lv_task_t* taskRefresh;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user