Skip to content

Commit 301e68b

Browse files
KaffeinatedKatmark9064
authored andcommitted
aod: integrate with display timeout
1 parent 5bfae21 commit 301e68b

File tree

3 files changed

+28
-17
lines changed

3 files changed

+28
-17
lines changed

src/displayapp/screens/settings/SettingDisplay.cpp

+23-14
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,20 @@
99
using namespace Pinetime::Applications::Screens;
1010

1111
namespace {
12-
void event_handler(lv_obj_t* obj, lv_event_t event) {
12+
void TimeoutEventHandler(lv_obj_t* obj, lv_event_t event) {
1313
auto* screen = static_cast<SettingDisplay*>(obj->user_data);
1414
screen->UpdateSelected(obj, event);
1515
}
16+
17+
void AlwaysOnEventHandler(lv_obj_t* obj, lv_event_t event) {
18+
if (event == LV_EVENT_VALUE_CHANGED) {
19+
auto* screen = static_cast<SettingDisplay*>(obj->user_data);
20+
screen->ToggleAlwaysOn();
21+
}
22+
}
1623
}
1724

18-
constexpr std::array<uint16_t, 7> SettingDisplay::options;
25+
constexpr std::array<uint16_t, 6> SettingDisplay::options;
1926

2027
SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
2128
: app {app}, settingsController {settingsController} {
@@ -46,34 +53,36 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime
4653
char buffer[4];
4754
for (unsigned int i = 0; i < options.size(); i++) {
4855
cbOption[i] = lv_checkbox_create(container1, nullptr);
49-
if (options[i] == 0) {
50-
sprintf(buffer, "%s", "Always On");
51-
} else {
52-
sprintf(buffer, "%2ds", options[i] / 1000);
53-
}
56+
snprintf(buffer, sizeof(buffer), "%2" PRIu16 "s", options[i] / 1000);
5457
lv_checkbox_set_text(cbOption[i], buffer);
5558
cbOption[i]->user_data = this;
56-
lv_obj_set_event_cb(cbOption[i], event_handler);
59+
lv_obj_set_event_cb(cbOption[i], TimeoutEventHandler);
5760
SetRadioButtonStyle(cbOption[i]);
5861

5962
if (settingsController.GetScreenTimeOut() == options[i]) {
6063
lv_checkbox_set_checked(cbOption[i], true);
6164
}
6265
}
66+
67+
alwaysOnCheckbox = lv_checkbox_create(container1, nullptr);
68+
lv_checkbox_set_text(alwaysOnCheckbox, "Always On");
69+
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
70+
lv_obj_add_state(alwaysOnCheckbox, LV_STATE_DEFAULT);
71+
alwaysOnCheckbox->user_data = this;
72+
lv_obj_set_event_cb(alwaysOnCheckbox, AlwaysOnEventHandler);
6373
}
6474

6575
SettingDisplay::~SettingDisplay() {
6676
lv_obj_clean(lv_scr_act());
6777
settingsController.SaveSettings();
6878
}
6979

70-
void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
71-
if (settingsController.GetScreenTimeOut() == 0) {
72-
settingsController.SetAlwaysOnDisplay(true);
73-
} else {
74-
settingsController.SetAlwaysOnDisplay(false);
75-
}
80+
void SettingDisplay::ToggleAlwaysOn() {
81+
settingsController.SetAlwaysOnDisplay(!settingsController.GetAlwaysOnDisplay());
82+
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
83+
}
7684

85+
void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
7786
if (event == LV_EVENT_CLICKED) {
7887
for (unsigned int i = 0; i < options.size(); i++) {
7988
if (object == cbOption[i]) {

src/displayapp/screens/settings/SettingDisplay.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ namespace Pinetime {
1818
~SettingDisplay() override;
1919

2020
void UpdateSelected(lv_obj_t* object, lv_event_t event);
21+
void ToggleAlwaysOn();
2122

2223
private:
2324
DisplayApp* app;
24-
static constexpr std::array<uint16_t, 7> options = {5000, 7000, 10000, 15000, 20000, 30000, 0};
25+
static constexpr std::array<uint16_t, 6> options = {5000, 7000, 10000, 15000, 20000, 30000};
2526

2627
Controllers::Settings& settingsController;
2728
lv_obj_t* cbOption[options.size()];
29+
lv_obj_t* alwaysOnCheckbox;
2830
};
2931
}
3032
}

src/systemtask/SystemTask.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ void SystemTask::Work() {
236236
break;
237237
}
238238
case Messages::GoToSleep:
239-
if (doNotGoToSleep or settingsController.GetAlwaysOnDisplay()) {
239+
if (doNotGoToSleep) {
240240
break;
241241
}
242242
state = SystemTaskState::GoingToSleep; // Already set in PushMessage()
@@ -512,7 +512,7 @@ void SystemTask::OnTouchEvent() {
512512
}
513513

514514
void SystemTask::PushMessage(System::Messages msg) {
515-
if (msg == Messages::GoToSleep && !doNotGoToSleep && !settingsController.GetAlwaysOnDisplay()) {
515+
if (msg == Messages::GoToSleep && !doNotGoToSleep) {
516516
state = SystemTaskState::GoingToSleep;
517517
}
518518

0 commit comments

Comments
 (0)