aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp/screens/settings
diff options
context:
space:
mode:
authorJohn Crawford <coffeeboi47@protonmail.com>2023-10-01 10:38:45 -0600
committerJF <JF002@users.noreply.github.com>2024-08-05 20:32:43 +0200
commit85a2181b648d4219fef269e562bbfc1a4f4c9436 (patch)
treee3d9ea6b940e0eff95664fb19c56729b0677035b /src/displayapp/screens/settings
parent3dca742b6566859aee89e1b943ae2ea5fc0eaa95 (diff)
aod: integrate with display timeout
Diffstat (limited to 'src/displayapp/screens/settings')
-rw-r--r--src/displayapp/screens/settings/SettingDisplay.cpp37
-rw-r--r--src/displayapp/screens/settings/SettingDisplay.h4
2 files changed, 26 insertions, 15 deletions
diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp
index 760f1e9e..12d0f561 100644
--- a/src/displayapp/screens/settings/SettingDisplay.cpp
+++ b/src/displayapp/screens/settings/SettingDisplay.cpp
@@ -9,13 +9,20 @@
using namespace Pinetime::Applications::Screens;
namespace {
- void event_handler(lv_obj_t* obj, lv_event_t event) {
+ void TimeoutEventHandler(lv_obj_t* obj, lv_event_t event) {
auto* screen = static_cast<SettingDisplay*>(obj->user_data);
screen->UpdateSelected(obj, event);
}
+
+ void AlwaysOnEventHandler(lv_obj_t* obj, lv_event_t event) {
+ if (event == LV_EVENT_VALUE_CHANGED) {
+ auto* screen = static_cast<SettingDisplay*>(obj->user_data);
+ screen->ToggleAlwaysOn();
+ }
+ }
}
-constexpr std::array<uint16_t, 7> SettingDisplay::options;
+constexpr std::array<uint16_t, 6> SettingDisplay::options;
SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
: app {app}, settingsController {settingsController} {
@@ -46,20 +53,23 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime
char buffer[4];
for (unsigned int i = 0; i < options.size(); i++) {
cbOption[i] = lv_checkbox_create(container1, nullptr);
- if (options[i] == 0) {
- sprintf(buffer, "%s", "Always On");
- } else {
- sprintf(buffer, "%2ds", options[i] / 1000);
- }
+ snprintf(buffer, sizeof(buffer), "%2" PRIu16 "s", options[i] / 1000);
lv_checkbox_set_text(cbOption[i], buffer);
cbOption[i]->user_data = this;
- lv_obj_set_event_cb(cbOption[i], event_handler);
+ lv_obj_set_event_cb(cbOption[i], TimeoutEventHandler);
SetRadioButtonStyle(cbOption[i]);
if (settingsController.GetScreenTimeOut() == options[i]) {
lv_checkbox_set_checked(cbOption[i], true);
}
}
+
+ alwaysOnCheckbox = lv_checkbox_create(container1, nullptr);
+ lv_checkbox_set_text(alwaysOnCheckbox, "Always On");
+ lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
+ lv_obj_add_state(alwaysOnCheckbox, LV_STATE_DEFAULT);
+ alwaysOnCheckbox->user_data = this;
+ lv_obj_set_event_cb(alwaysOnCheckbox, AlwaysOnEventHandler);
}
SettingDisplay::~SettingDisplay() {
@@ -67,13 +77,12 @@ SettingDisplay::~SettingDisplay() {
settingsController.SaveSettings();
}
-void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
- if (settingsController.GetScreenTimeOut() == 0) {
- settingsController.SetAlwaysOnDisplay(true);
- } else {
- settingsController.SetAlwaysOnDisplay(false);
- }
+void SettingDisplay::ToggleAlwaysOn() {
+ settingsController.SetAlwaysOnDisplay(!settingsController.GetAlwaysOnDisplay());
+ lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
+}
+void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
if (event == LV_EVENT_CLICKED) {
for (unsigned int i = 0; i < options.size(); i++) {
if (object == cbOption[i]) {
diff --git a/src/displayapp/screens/settings/SettingDisplay.h b/src/displayapp/screens/settings/SettingDisplay.h
index a4370463..b6d147c8 100644
--- a/src/displayapp/screens/settings/SettingDisplay.h
+++ b/src/displayapp/screens/settings/SettingDisplay.h
@@ -18,13 +18,15 @@ namespace Pinetime {
~SettingDisplay() override;
void UpdateSelected(lv_obj_t* object, lv_event_t event);
+ void ToggleAlwaysOn();
private:
DisplayApp* app;
- static constexpr std::array<uint16_t, 7> options = {5000, 7000, 10000, 15000, 20000, 30000, 0};
+ static constexpr std::array<uint16_t, 6> options = {5000, 7000, 10000, 15000, 20000, 30000};
Controllers::Settings& settingsController;
lv_obj_t* cbOption[options.size()];
+ lv_obj_t* alwaysOnCheckbox;
};
}
}