Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always on display #1869

Merged
merged 15 commits into from
Aug 5, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
aod: disable while in notification sleep
  • Loading branch information
KaffeinatedKat authored and mark9064 committed Jul 21, 2024
commit 765f0374695c94c1a5f547cac050480e18297137
39 changes: 35 additions & 4 deletions src/components/settings/Settings.h
Original file line number Diff line number Diff line change
@@ -196,6 +196,14 @@ namespace Pinetime {
if (status != settings.notificationStatus) {
settingsChanged = true;
}
// Disable always on screen while sleep mode is enabled
if (settings.alwaysOnDisplay.enabled) {
if (status == Notification::Sleep) {
settings.alwaysOnDisplay.state = false;
} else {
settings.alwaysOnDisplay.state = true;
}
}
settings.notificationStatus = status;
};

@@ -215,16 +223,32 @@ namespace Pinetime {
};

void SetAlwaysOnDisplay(bool state) {
if (state != settings.alwaysOnDisplay) {
if (state != settings.alwaysOnDisplay.state) {
settingsChanged = true;
}
settings.alwaysOnDisplay = state;
settings.alwaysOnDisplay.state = state;
};

bool GetAlwaysOnDisplay() const {
return settings.alwaysOnDisplay;
return settings.alwaysOnDisplay.state;
};

void SetAlwaysOnDisplaySetting(bool state) {
if (state != settings.alwaysOnDisplay.enabled) {
settingsChanged = true;
}
settings.alwaysOnDisplay.enabled = state;

// Don't enable always on if we are currently in notification sleep
if (GetNotificationStatus() != Notification::Sleep) {
SetAlwaysOnDisplay(state);
}
}

bool GetAlwaysOnDisplaySetting() const {
return settings.alwaysOnDisplay.enabled;
}

void SetShakeThreshold(uint16_t thresh) {
if (settings.shakeWakeThreshold != thresh) {
settings.shakeWakeThreshold = thresh;
@@ -299,12 +323,19 @@ namespace Pinetime {

static constexpr uint32_t settingsVersion = 0x0008;

// To enable disabling it during notification sleep, differentiate between
// the setting being on, and the setting being set by the user
struct alwaysOnDisplayData {
bool enabled = false;
bool state = false;
};

struct SettingsData {
uint32_t version = settingsVersion;
uint32_t stepsGoal = 10000;
uint32_t screenTimeOut = 15000;

bool alwaysOnDisplay = false;
alwaysOnDisplayData alwaysOnDisplay;

ClockType clockType = ClockType::H24;
WeatherFormat weatherFormat = WeatherFormat::Metric;
6 changes: 3 additions & 3 deletions src/displayapp/screens/settings/SettingDisplay.cpp
Original file line number Diff line number Diff line change
@@ -66,7 +66,7 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime

alwaysOnCheckbox = lv_checkbox_create(container1, nullptr);
lv_checkbox_set_text(alwaysOnCheckbox, "Always On");
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplaySetting());
lv_obj_add_state(alwaysOnCheckbox, LV_STATE_DEFAULT);
alwaysOnCheckbox->user_data = this;
lv_obj_set_event_cb(alwaysOnCheckbox, AlwaysOnEventHandler);
@@ -78,8 +78,8 @@ SettingDisplay::~SettingDisplay() {
}

void SettingDisplay::ToggleAlwaysOn() {
settingsController.SetAlwaysOnDisplay(!settingsController.GetAlwaysOnDisplay());
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
settingsController.SetAlwaysOnDisplaySetting(!settingsController.GetAlwaysOnDisplaySetting());
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplaySetting());
}

void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {