diff options
author | Joaquim <joaquim.org@gmail.com> | 2021-04-04 03:08:51 +0100 |
---|---|---|
committer | Joaquim <joaquim.org@gmail.com> | 2021-04-04 03:08:51 +0100 |
commit | 1d3742e14f09316a1d795527713eb8f9742f0ffb (patch) | |
tree | 6bc6343538506b68256aa057121e063d22f8ed1a /src/displayapp/screens/BatteryInfo.cpp | |
parent | 58a2d000c4d49d96121894d6dd6bb861d7564bea (diff) |
Big UI and navigation Rewrite
new navigation
add some color to the apps
redesign menus
new settings menu
new quick settings
code clean up
size reduction by converting navigation images to font
and more...
Diffstat (limited to 'src/displayapp/screens/BatteryInfo.cpp')
-rw-r--r-- | src/displayapp/screens/BatteryInfo.cpp | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp new file mode 100644 index 00000000..ae39138f --- /dev/null +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -0,0 +1,144 @@ +#include "BatteryInfo.h" +#include "../DisplayApp.h" +#include "components/battery/BatteryController.h" + +using namespace Pinetime::Applications::Screens; + +static void lv_update_task(struct _lv_task_t *task) { + auto user_data = static_cast<BatteryInfo *>(task->user_data); + user_data->UpdateScreen(); +} + +static void lv_anim_task(struct _lv_task_t *task) { + auto user_data = static_cast<BatteryInfo *>(task->user_data); + user_data->UpdateAnim(); +} + +BatteryInfo::BatteryInfo( + Pinetime::Applications::DisplayApp *app, + Pinetime::Controllers::Battery& batteryController) : + Screen(app), + batteryController{batteryController} +{ + + batteryPercent = batteryController.PercentRemaining(); + batteryVoltage = batteryController.Voltage(); + + charging_bar = lv_bar_create(lv_scr_act(), nullptr); + lv_obj_set_size(charging_bar, 200, 15); + lv_bar_set_range(charging_bar, 0, 100); + lv_obj_align(charging_bar, nullptr, LV_ALIGN_CENTER, 0, 10); + lv_bar_set_anim_time(charging_bar, 2000); + lv_obj_set_style_local_radius(charging_bar, LV_BAR_PART_BG, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); + lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_BG, LV_STATE_DEFAULT, lv_color_hex(0x222222)); + lv_obj_set_style_local_bg_opa(charging_bar, LV_BAR_PART_BG, LV_STATE_DEFAULT, LV_OPA_100); + lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC , LV_STATE_DEFAULT, lv_color_hex(0xFF0000)); + lv_bar_set_value(charging_bar, batteryPercent, LV_ANIM_OFF); + + status = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(status,"Reading Battery status"); + lv_label_set_align(status, LV_LABEL_ALIGN_CENTER); + lv_obj_align(status, charging_bar, LV_ALIGN_OUT_BOTTOM_MID, 0, 20); + + percent = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(percent, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); + if ( batteryPercent >= 0) { + lv_label_set_text_fmt(percent,"%02i%%", batteryPercent); + } else { + lv_label_set_text(percent,"--%"); + } + lv_label_set_align(percent, LV_LABEL_ALIGN_LEFT); + lv_obj_align(percent, nullptr, LV_ALIGN_CENTER, 0, -60); + + // hack to not use the flot functions from printf + uint8_t batteryVoltageBytes[2]; + batteryVoltageBytes[1] = static_cast<uint8_t>(batteryVoltage); //truncate whole numbers + batteryVoltageBytes[0] = static_cast<uint8_t>((batteryVoltage - batteryVoltageBytes[1]) * 100); //remove whole part of flt and shift 2 places over + // + + voltage = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(voltage, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xC6A600)); + lv_label_set_text_fmt(voltage,"%1i.%02i volts", batteryVoltageBytes[1], batteryVoltageBytes[0]); + lv_label_set_align(voltage, LV_LABEL_ALIGN_CENTER); + lv_obj_align(voltage, nullptr, LV_ALIGN_CENTER, 0, 95); + + lv_obj_t * backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text_static(backgroundLabel, ""); + + taskUpdate = lv_task_create(lv_update_task, 500000, LV_TASK_PRIO_LOW, this); + taskAnim = lv_task_create(lv_anim_task, 1000, LV_TASK_PRIO_LOW, this); + UpdateScreen(); +} + + +BatteryInfo::~BatteryInfo() { + lv_task_del(taskUpdate); + lv_task_del(taskAnim); + lv_obj_clean(lv_scr_act()); +} + +void BatteryInfo::UpdateAnim() { + batteryPercent = batteryController.PercentRemaining(); + + if ( batteryPercent >= 0 ) { + if ( batteryController.IsCharging() ) { + animation +=1; + if (animation >= 100) { + animation = 0; + } + + } else { + if (animation > batteryPercent) { + animation--; + } + if (animation < batteryPercent) { + animation++; + } + } + + lv_bar_set_value(charging_bar, animation, LV_ANIM_OFF); + } +} + +void BatteryInfo::UpdateScreen() { + + batteryController.Update(); + + batteryPercent = batteryController.PercentRemaining(); + batteryVoltage = batteryController.Voltage(); + + if ( batteryPercent >= 0 ) { + if ( batteryController.IsCharging() ) { + lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC , LV_STATE_DEFAULT, lv_color_hex(0xFF0000)); + lv_label_set_text_static(status,"Battery charging"); + + } else { + lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC , LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); + lv_label_set_text_static(status,"Battery discharging"); + } + + lv_label_set_text_fmt(percent,"%02i%%", batteryPercent); + + } else { + lv_label_set_text_static(status,"Reading Battery status"); + lv_label_set_text(percent,"--%"); + } + + lv_obj_align(status, charging_bar, LV_ALIGN_OUT_BOTTOM_MID, 0, 20); + // hack to not use the flot functions from printf + uint8_t batteryVoltageBytes[2]; + batteryVoltageBytes[1] = static_cast<uint8_t>(batteryVoltage); //truncate whole numbers + batteryVoltageBytes[0] = static_cast<uint8_t>((batteryVoltage - batteryVoltageBytes[1]) * 100); //remove whole part of flt and shift 2 places over + // + lv_label_set_text_fmt(voltage,"%1i.%02i volts", batteryVoltageBytes[1], batteryVoltageBytes[0]); + +} + +bool BatteryInfo::Refresh() { + + return running; +} + |