diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-14 12:01:14 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-04-14 13:05:53 (GMT) |
| commit | 28f45caa11e0adbb208ba65b88b7ea399d584ba7 (patch) | |
| tree | eeb7b68e39665ad541bb3837c2ea973041b941af | |
| parent | 2607c3d79947e900ce4c5ded296f649677511a34 (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.cpp | 92 | ||||
| -rw-r--r-- | src/displayapp/screens/FlashLight.h | 3 |
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; |
