Move the time remaining widget to StatusIcons

This commit is contained in:
JustScott 2024-02-01 12:16:59 -06:00
parent c936a80863
commit 66930a55f5
11 changed files with 53 additions and 40 deletions

View file

@ -433,6 +433,7 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
batteryController, batteryController,
bleController, bleController,
dateTimeController, dateTimeController,
timer,
filesystem, filesystem,
std::move(apps)); std::move(apps));
} break; } break;
@ -486,7 +487,8 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
brightnessController, brightnessController,
motorController, motorController,
settingsController, settingsController,
bleController); bleController,
timer);
break; break;
case Apps::Settings: case Apps::Settings:
currentScreen = std::make_unique<Screens::Settings>(this, settingsController); currentScreen = std::make_unique<Screens::Settings>(this, settingsController);

View file

@ -22,6 +22,7 @@ ApplicationList::ApplicationList(DisplayApp* app,
const Pinetime::Controllers::Battery& batteryController, const Pinetime::Controllers::Battery& batteryController,
const Pinetime::Controllers::Ble& bleController, const Pinetime::Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController, Controllers::DateTime& dateTimeController,
Controllers::Timer& timer,
Pinetime::Controllers::FS& filesystem, Pinetime::Controllers::FS& filesystem,
std::array<Tile::Applications, UserAppTypes::Count>&& apps) std::array<Tile::Applications, UserAppTypes::Count>&& apps)
: app {app}, : app {app},
@ -29,6 +30,7 @@ ApplicationList::ApplicationList(DisplayApp* app,
batteryController {batteryController}, batteryController {batteryController},
bleController {bleController}, bleController {bleController},
dateTimeController {dateTimeController}, dateTimeController {dateTimeController},
timer {timer},
filesystem {filesystem}, filesystem {filesystem},
apps {std::move(apps)}, apps {std::move(apps)},
screens {app, settingsController.GetAppMenu(), CreateScreenList(), Screens::ScreenListModes::UpDown} { screens {app, settingsController.GetAppMenu(), CreateScreenList(), Screens::ScreenListModes::UpDown} {
@ -60,5 +62,6 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) co
batteryController, batteryController,
bleController, bleController,
dateTimeController, dateTimeController,
pageApps); pageApps,
timer);
} }

View file

@ -19,6 +19,7 @@ namespace Pinetime {
const Pinetime::Controllers::Battery& batteryController, const Pinetime::Controllers::Battery& batteryController,
const Pinetime::Controllers::Ble& bleController, const Pinetime::Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController, Controllers::DateTime& dateTimeController,
Pinetime::Controllers::Timer& timer,
Pinetime::Controllers::FS& filesystem, Pinetime::Controllers::FS& filesystem,
std::array<Tile::Applications, UserAppTypes::Count>&& apps); std::array<Tile::Applications, UserAppTypes::Count>&& apps);
~ApplicationList() override; ~ApplicationList() override;
@ -33,6 +34,7 @@ namespace Pinetime {
const Pinetime::Controllers::Battery& batteryController; const Pinetime::Controllers::Battery& batteryController;
const Pinetime::Controllers::Ble& bleController; const Pinetime::Controllers::Ble& bleController;
Controllers::DateTime& dateTimeController; Controllers::DateTime& dateTimeController;
Pinetime::Controllers::Timer& timer;
Pinetime::Controllers::FS& filesystem; Pinetime::Controllers::FS& filesystem;
std::array<Tile::Applications, UserAppTypes::Count> apps; std::array<Tile::Applications, UserAppTypes::Count> apps;

View file

@ -30,8 +30,9 @@ Tile::Tile(uint8_t screenID,
const Controllers::Battery& batteryController, const Controllers::Battery& batteryController,
const Controllers::Ble& bleController, const Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController, Controllers::DateTime& dateTimeController,
std::array<Applications, 6>& applications) std::array<Applications, 6>& applications,
: app {app}, dateTimeController {dateTimeController}, pageIndicator(screenID, numScreens), statusIcons(batteryController, bleController) { Controllers::Timer& timer)
: app {app}, dateTimeController {dateTimeController}, pageIndicator(screenID, numScreens), statusIcons(batteryController, bleController, timer) {
settingsController.SetAppMenu(screenID); settingsController.SetAppMenu(screenID);
@ -83,7 +84,7 @@ Tile::Tile(uint8_t screenID,
btnm1->user_data = this; btnm1->user_data = this;
lv_obj_set_event_cb(btnm1, event_handler); lv_obj_set_event_cb(btnm1, event_handler);
taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); taskUpdate = lv_task_create(lv_update_task, 500, LV_TASK_PRIO_MID, this);
UpdateScreen(); UpdateScreen();
} }

View file

@ -29,7 +29,8 @@ namespace Pinetime {
const Controllers::Battery& batteryController, const Controllers::Battery& batteryController,
const Controllers::Ble& bleController, const Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController, Controllers::DateTime& dateTimeController,
std::array<Applications, 6>& applications); std::array<Applications, 6>& applications,
Controllers::Timer& timer);
~Tile() override; ~Tile() override;

View file

@ -32,7 +32,7 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController,
motionController {motionController}, motionController {motionController},
weatherService {weatherService}, weatherService {weatherService},
timer {timer}, timer {timer},
statusIcons(batteryController, bleController) { statusIcons(batteryController, bleController, timer) {
statusIcons.Create(); statusIcons.Create();
@ -53,16 +53,6 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController,
lv_label_set_text(temperature, ""); lv_label_set_text(temperature, "");
lv_obj_align(temperature, nullptr, LV_ALIGN_IN_TOP_MID, 20, 50); lv_obj_align(temperature, nullptr, LV_ALIGN_IN_TOP_MID, 20, 50);
timerIcon = lv_label_create(lv_scr_act(), nullptr);
lv_label_set_text_static(timerIcon, Symbols::hourGlass);
lv_obj_set_style_local_text_color(timerIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999));
lv_obj_align(timerIcon, lv_scr_act(), LV_ALIGN_IN_TOP_MID, -32, 60);
timeRemaining = lv_label_create(lv_scr_act(), nullptr);
lv_obj_set_style_local_text_color(timeRemaining, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999));
lv_label_set_text(timeRemaining, "00:00");
lv_obj_align(timeRemaining, nullptr, LV_ALIGN_IN_TOP_MID, 10, 60);
label_date = lv_label_create(lv_scr_act(), nullptr); label_date = lv_label_create(lv_scr_act(), nullptr);
lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_CENTER, 0, 60); lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_CENTER, 0, 60);
lv_obj_set_style_local_text_color(label_date, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_obj_set_style_local_text_color(label_date, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999));
@ -113,20 +103,6 @@ void WatchFaceDigital::Refresh() {
lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get()));
} }
if (timer.IsRunning()) {
auto secondsRemaining = std::chrono::duration_cast<std::chrono::seconds>(timer.GetTimeRemaining());
uint8_t minutes = secondsRemaining.count() / 60;
uint8_t seconds = secondsRemaining.count() % 60;
lv_label_set_text_fmt(timeRemaining, "%02d:%02d", minutes, seconds);
lv_obj_set_hidden(timeRemaining, false);
lv_obj_set_hidden(timerIcon, false);
} else {
lv_obj_set_hidden(timeRemaining, true);
lv_obj_set_hidden(timerIcon, true);
}
currentDateTime = std::chrono::time_point_cast<std::chrono::minutes>(dateTimeController.CurrentDateTime()); currentDateTime = std::chrono::time_point_cast<std::chrono::minutes>(dateTimeController.CurrentDateTime());
if (currentDateTime.IsUpdated()) { if (currentDateTime.IsUpdated()) {

View file

@ -58,8 +58,6 @@ namespace Pinetime {
Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::days>> currentDate; Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::days>> currentDate;
lv_obj_t* timerIcon;
lv_obj_t* timeRemaining;
lv_obj_t* label_time; lv_obj_t* label_time;
lv_obj_t* label_time_ampm; lv_obj_t* label_time_ampm;
lv_obj_t* label_date; lv_obj_t* label_date;

View file

@ -33,13 +33,14 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app,
Controllers::BrightnessController& brightness, Controllers::BrightnessController& brightness,
Controllers::MotorController& motorController, Controllers::MotorController& motorController,
Pinetime::Controllers::Settings& settingsController, Pinetime::Controllers::Settings& settingsController,
const Controllers::Ble& bleController) const Controllers::Ble& bleController,
Controllers::Timer& timer)
: app {app}, : app {app},
dateTimeController {dateTimeController}, dateTimeController {dateTimeController},
brightness {brightness}, brightness {brightness},
motorController {motorController}, motorController {motorController},
settingsController {settingsController}, settingsController {settingsController},
statusIcons(batteryController, bleController) { statusIcons(batteryController, bleController, timer) {
statusIcons.Create(); statusIcons.Create();
@ -118,7 +119,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app,
lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48);
lv_label_set_text_static(lbl_btn, Symbols::settings); lv_label_set_text_static(lbl_btn, Symbols::settings);
taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); taskUpdate = lv_task_create(lv_update_task, 500, LV_TASK_PRIO_MID, this);
UpdateScreen(); UpdateScreen();
} }

View file

@ -23,7 +23,8 @@ namespace Pinetime {
Controllers::BrightnessController& brightness, Controllers::BrightnessController& brightness,
Controllers::MotorController& motorController, Controllers::MotorController& motorController,
Pinetime::Controllers::Settings& settingsController, Pinetime::Controllers::Settings& settingsController,
const Controllers::Ble& bleController); const Controllers::Ble& bleController,
Controllers::Timer& timer);
~QuickSettings() override; ~QuickSettings() override;

View file

@ -3,11 +3,22 @@
using namespace Pinetime::Applications::Widgets; using namespace Pinetime::Applications::Widgets;
StatusIcons::StatusIcons(const Controllers::Battery& batteryController, const Controllers::Ble& bleController) StatusIcons::StatusIcons(const Controllers::Battery& batteryController, const Controllers::Ble& bleController, Controllers::Timer& timer)
: batteryIcon(true), batteryController {batteryController}, bleController {bleController} { : batteryIcon(true), batteryController {batteryController}, bleController {bleController}, timer {timer} {
} }
void StatusIcons::Create() { void StatusIcons::Create() {
timerIcon = lv_label_create(lv_scr_act(), nullptr);
lv_label_set_text_static(timerIcon, Screens::Symbols::hourGlass);
lv_obj_set_style_local_text_color(timerIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999));
lv_obj_align(timerIcon, lv_scr_act(), LV_ALIGN_IN_TOP_MID, -32, 0);
timeRemaining = lv_label_create(lv_scr_act(), nullptr);
lv_obj_set_style_local_text_color(timeRemaining, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999));
lv_label_set_text(timeRemaining, "00:00");
lv_obj_align(timeRemaining, nullptr, LV_ALIGN_IN_TOP_MID, 10, 0);
container = lv_cont_create(lv_scr_act(), nullptr); container = lv_cont_create(lv_scr_act(), nullptr);
lv_cont_set_layout(container, LV_LAYOUT_ROW_TOP); lv_cont_set_layout(container, LV_LAYOUT_ROW_TOP);
lv_cont_set_fit(container, LV_FIT_TIGHT); lv_cont_set_fit(container, LV_FIT_TIGHT);
@ -26,6 +37,20 @@ void StatusIcons::Create() {
} }
void StatusIcons::Update() { void StatusIcons::Update() {
if (timer.IsRunning()) {
auto secondsRemaining = std::chrono::duration_cast<std::chrono::seconds>(timer.GetTimeRemaining());
uint8_t minutes = secondsRemaining.count() / 60;
uint8_t seconds = secondsRemaining.count() % 60;
lv_label_set_text_fmt(timeRemaining, "%02d:%02d", minutes, seconds);
lv_obj_set_hidden(timeRemaining, false);
lv_obj_set_hidden(timerIcon, false);
} else {
lv_obj_set_hidden(timeRemaining, true);
lv_obj_set_hidden(timerIcon, true);
}
powerPresent = batteryController.IsPowerPresent(); powerPresent = batteryController.IsPowerPresent();
if (powerPresent.IsUpdated()) { if (powerPresent.IsUpdated()) {
lv_obj_set_hidden(batteryPlug, !powerPresent.Get()); lv_obj_set_hidden(batteryPlug, !powerPresent.Get());

View file

@ -13,7 +13,7 @@ namespace Pinetime {
namespace Widgets { namespace Widgets {
class StatusIcons { class StatusIcons {
public: public:
StatusIcons(const Controllers::Battery& batteryController, const Controllers::Ble& bleController); StatusIcons(const Controllers::Battery& batteryController, const Controllers::Ble& bleController, Controllers::Timer& timer);
void Align(); void Align();
void Create(); void Create();
@ -27,12 +27,15 @@ namespace Pinetime {
Screens::BatteryIcon batteryIcon; Screens::BatteryIcon batteryIcon;
const Pinetime::Controllers::Battery& batteryController; const Pinetime::Controllers::Battery& batteryController;
const Controllers::Ble& bleController; const Controllers::Ble& bleController;
Controllers::Timer& timer;
Utility::DirtyValue<uint8_t> batteryPercentRemaining {}; Utility::DirtyValue<uint8_t> batteryPercentRemaining {};
Utility::DirtyValue<bool> powerPresent {}; Utility::DirtyValue<bool> powerPresent {};
Utility::DirtyValue<bool> bleState {}; Utility::DirtyValue<bool> bleState {};
Utility::DirtyValue<bool> bleRadioEnabled {}; Utility::DirtyValue<bool> bleRadioEnabled {};
lv_obj_t* timerIcon;
lv_obj_t* timeRemaining;
lv_obj_t* bleIcon; lv_obj_t* bleIcon;
lv_obj_t* batteryPlug; lv_obj_t* batteryPlug;
lv_obj_t* container; lv_obj_t* container;