summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichele Bini <michele.bini@gmail.com>2022-04-14 12:01:14 (GMT)
committerMichele Bini <michele.bini@gmail.com>2022-04-14 13:05:53 (GMT)
commit28f45caa11e0adbb208ba65b88b7ea399d584ba7 (patch)
treeeeb7b68e39665ad541bb3837c2ea973041b941af
parent2607c3d79947e900ce4c5ded296f649677511a34 (diff)
Reduce battery usage by turning the backlight back to the normal setting when the flashlight is turned off by tapping the screen.
Start the app with the flashlight on. Simplify code.
-rw-r--r--src/displayapp/screens/FlashLight.cpp92
-rw-r--r--src/displayapp/screens/FlashLight.h3
2 files changed, 43 insertions, 52 deletions
diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp
index c4d0264..3f90750 100644
--- a/src/displayapp/screens/FlashLight.cpp
+++ b/src/displayapp/screens/FlashLight.cpp
@@ -9,6 +9,8 @@ namespace {
auto* screen = static_cast<FlashLight*>(obj->user_data);
screen->OnClickEvent(obj, event);
}
+
+ typedef Pinetime::Controllers::BrightnessController::Levels Levels;
}
FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
@@ -19,8 +21,6 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
brightnessController {brightnessController}
{
- brightnessController.Backup();
-
brightnessLevel = brightnessController.Level();
flashLight = lv_label_create(lv_scr_act(), nullptr);
@@ -38,8 +38,7 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
lv_obj_align(indicators[0], indicators[1], LV_ALIGN_OUT_LEFT_MID, -8, 0);
lv_obj_align(indicators[2], indicators[1], LV_ALIGN_OUT_RIGHT_MID, 8, 0);
- SetIndicators();
- SetColors();
+ Update(true, brightnessLevel);
backgroundAction = lv_label_create(lv_scr_act(), nullptr);
lv_label_set_long_mode(backgroundAction, LV_LABEL_LONG_CROP);
@@ -49,56 +48,60 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
lv_obj_set_click(backgroundAction, true);
backgroundAction->user_data = this;
lv_obj_set_event_cb(backgroundAction, event_handler);
-
systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping);
}
FlashLight::~FlashLight() {
+ Update(false, brightnessLevel);
lv_obj_clean(lv_scr_act());
- lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- brightnessController.Restore();
systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping);
}
-void FlashLight::SetColors() {
- if (isOn) {
- lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
- for (auto & i : indicators) {
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE);
- lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
- }
- } else {
- lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- for (auto & i : indicators) {
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_BLACK);
- lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- }
- }
-}
-
-void FlashLight::SetIndicators() {
- using namespace Pinetime::Controllers;
-
- if (brightnessLevel == BrightnessController::Levels::High) {
+void FlashLight::Update(bool on, Controllers::BrightnessController::Levels level) {
+ brightnessLevel = level;
+
+ if (brightnessLevel == Controllers::BrightnessController::Levels::High) {
lv_obj_set_state(indicators[1], LV_STATE_DEFAULT);
lv_obj_set_state(indicators[2], LV_STATE_DEFAULT);
- } else if (brightnessLevel == BrightnessController::Levels::Medium) {
+ } else if (brightnessLevel == Controllers::BrightnessController::Levels::Medium) {
lv_obj_set_state(indicators[1], LV_STATE_DEFAULT);
lv_obj_set_state(indicators[2], LV_STATE_DISABLED);
} else {
lv_obj_set_state(indicators[1], LV_STATE_DISABLED);
lv_obj_set_state(indicators[2], LV_STATE_DISABLED);
}
+
+ if (on != isOn) {
+ isOn = on;
+ if (isOn) {
+ brightnessController.Backup();
+ lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ for (auto & i : indicators) {
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE);
+ lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ }
+ } else {
+ brightnessController.Restore();
+ lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ for (auto & i : indicators) {
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_BLACK);
+ lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ }
+ }
+ }
+
+ if (isOn) {
+ brightnessController.Set(brightnessLevel);
+ }
}
void FlashLight::OnClickEvent(lv_obj_t* obj, lv_event_t event) {
if (obj == backgroundAction && event == LV_EVENT_CLICKED) {
- isOn = !isOn;
- SetColors();
+ Update(!isOn, brightnessLevel);
}
}
@@ -106,26 +109,15 @@ bool FlashLight::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
using namespace Pinetime::Controllers;
if (event == TouchEvents::SwipeLeft) {
- if (brightnessLevel == BrightnessController::Levels::High) {
- brightnessLevel = BrightnessController::Levels::Medium;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
- } else if (brightnessLevel == BrightnessController::Levels::Medium) {
- brightnessLevel = BrightnessController::Levels::Low;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
+ if (brightnessLevel >= Levels::Medium) {
+ Update(isOn, static_cast<Levels>( static_cast< std::underlying_type_t<Levels> >(brightnessLevel) - 1) );
}
return true;
}
+
if (event == TouchEvents::SwipeRight) {
- if (brightnessLevel == BrightnessController::Levels::Low) {
- brightnessLevel = BrightnessController::Levels::Medium;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
- } else if (brightnessLevel == BrightnessController::Levels::Medium) {
- brightnessLevel = BrightnessController::Levels::High;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
+ if (brightnessLevel <= Levels::Medium) {
+ Update(isOn, static_cast<Levels>( static_cast< std::underlying_type_t<Levels> >(brightnessLevel) + 1) );
}
return true;
}
diff --git a/src/displayapp/screens/FlashLight.h b/src/displayapp/screens/FlashLight.h
index e91a103..76dda78 100644
--- a/src/displayapp/screens/FlashLight.h
+++ b/src/displayapp/screens/FlashLight.h
@@ -20,8 +20,7 @@ namespace Pinetime {
void OnClickEvent(lv_obj_t* obj, lv_event_t event);
private:
- void SetIndicators();
- void SetColors();
+ void Update(bool on, Pinetime::Controllers::BrightnessController::Levels level);
Pinetime::System::SystemTask& systemTask;
Controllers::BrightnessController& brightnessController;