From c9b1fb82446390be637374bb11ca53770c9d09f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= <jf@codingfield.com>
Date: Sun, 2 Oct 2022 18:04:09 +0200
Subject: [PATCH] Brightness management in DisplayApp : do not allow the
 brightness level OFF when loading app and going to running mode. Such issue
 could occur in case of inconsistent or corrupted settings.

---
 src/displayapp/DisplayApp.cpp | 17 +++++++++++++----
 src/displayapp/DisplayApp.h   |  1 +
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp
index aa2c037e..85c6da3e 100644
--- a/src/displayapp/DisplayApp.cpp
+++ b/src/displayapp/DisplayApp.cpp
@@ -127,7 +127,7 @@ void DisplayApp::Process(void* instance) {
 
 void DisplayApp::InitHw() {
   brightnessController.Init();
-  brightnessController.Set(settingsController.GetBrightness());
+  ApplyBrightness();
 }
 
 void DisplayApp::Refresh() {
@@ -158,7 +158,7 @@ void DisplayApp::Refresh() {
         brightnessController.Set(Controllers::BrightnessController::Levels::Low);
         break;
       case Messages::RestoreBrightness:
-        brightnessController.Set(settingsController.GetBrightness());
+        ApplyBrightness();
         break;
       case Messages::GoToSleep:
         while (brightnessController.Level() != Controllers::BrightnessController::Levels::Off) {
@@ -169,7 +169,7 @@ void DisplayApp::Refresh() {
         state = States::Idle;
         break;
       case Messages::GoToRunning:
-        brightnessController.Set(settingsController.GetBrightness());
+        ApplyBrightness();
         state = States::Running;
         break;
       case Messages::UpdateTimeOut:
@@ -303,7 +303,7 @@ void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction
 
 void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) {
   touchHandler.CancelTap();
-  brightnessController.Set(settingsController.GetBrightness());
+  ApplyBrightness();
 
   currentScreen.reset(nullptr);
   SetFullRefresh(direction);
@@ -530,3 +530,12 @@ void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) {
 void DisplayApp::Register(Pinetime::System::SystemTask* systemTask) {
   this->systemTask = systemTask;
 }
+void DisplayApp::ApplyBrightness() {
+  auto brightness = settingsController.GetBrightness();
+  if(brightness != Controllers::BrightnessController::Levels::Low &&
+      brightness != Controllers::BrightnessController::Levels::Medium &&
+      brightness != Controllers::BrightnessController::Levels::High) {
+    brightness = Controllers::BrightnessController::Levels::High;
+  }
+  brightnessController.Set(brightness);
+}
diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h
index ae605114..4c54e227 100644
--- a/src/displayapp/DisplayApp.h
+++ b/src/displayapp/DisplayApp.h
@@ -121,6 +121,7 @@ namespace Pinetime {
       Apps nextApp = Apps::None;
       DisplayApp::FullRefreshDirections nextDirection;
       System::BootErrors bootError;
+      void ApplyBrightness();
     };
   }
 }