aod: disable while in notification sleep
This commit is contained in:
parent
85a2181b64
commit
e884b053d3
2 changed files with 38 additions and 7 deletions
|
@ -196,6 +196,14 @@ namespace Pinetime {
|
||||||
if (status != settings.notificationStatus) {
|
if (status != settings.notificationStatus) {
|
||||||
settingsChanged = true;
|
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;
|
settings.notificationStatus = status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -215,16 +223,32 @@ namespace Pinetime {
|
||||||
};
|
};
|
||||||
|
|
||||||
void SetAlwaysOnDisplay(bool state) {
|
void SetAlwaysOnDisplay(bool state) {
|
||||||
if (state != settings.alwaysOnDisplay) {
|
if (state != settings.alwaysOnDisplay.state) {
|
||||||
settingsChanged = true;
|
settingsChanged = true;
|
||||||
}
|
}
|
||||||
settings.alwaysOnDisplay = state;
|
settings.alwaysOnDisplay.state = state;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool GetAlwaysOnDisplay() const {
|
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) {
|
void SetShakeThreshold(uint16_t thresh) {
|
||||||
if (settings.shakeWakeThreshold != thresh) {
|
if (settings.shakeWakeThreshold != thresh) {
|
||||||
settings.shakeWakeThreshold = thresh;
|
settings.shakeWakeThreshold = thresh;
|
||||||
|
@ -299,12 +323,19 @@ namespace Pinetime {
|
||||||
|
|
||||||
static constexpr uint32_t settingsVersion = 0x0008;
|
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 {
|
struct SettingsData {
|
||||||
uint32_t version = settingsVersion;
|
uint32_t version = settingsVersion;
|
||||||
uint32_t stepsGoal = 10000;
|
uint32_t stepsGoal = 10000;
|
||||||
uint32_t screenTimeOut = 15000;
|
uint32_t screenTimeOut = 15000;
|
||||||
|
|
||||||
bool alwaysOnDisplay = false;
|
alwaysOnDisplayData alwaysOnDisplay;
|
||||||
|
|
||||||
ClockType clockType = ClockType::H24;
|
ClockType clockType = ClockType::H24;
|
||||||
WeatherFormat weatherFormat = WeatherFormat::Metric;
|
WeatherFormat weatherFormat = WeatherFormat::Metric;
|
||||||
|
|
|
@ -66,7 +66,7 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime
|
||||||
|
|
||||||
alwaysOnCheckbox = lv_checkbox_create(container1, nullptr);
|
alwaysOnCheckbox = lv_checkbox_create(container1, nullptr);
|
||||||
lv_checkbox_set_text(alwaysOnCheckbox, "Always On");
|
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);
|
lv_obj_add_state(alwaysOnCheckbox, LV_STATE_DEFAULT);
|
||||||
alwaysOnCheckbox->user_data = this;
|
alwaysOnCheckbox->user_data = this;
|
||||||
lv_obj_set_event_cb(alwaysOnCheckbox, AlwaysOnEventHandler);
|
lv_obj_set_event_cb(alwaysOnCheckbox, AlwaysOnEventHandler);
|
||||||
|
@ -78,8 +78,8 @@ SettingDisplay::~SettingDisplay() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingDisplay::ToggleAlwaysOn() {
|
void SettingDisplay::ToggleAlwaysOn() {
|
||||||
settingsController.SetAlwaysOnDisplay(!settingsController.GetAlwaysOnDisplay());
|
settingsController.SetAlwaysOnDisplaySetting(!settingsController.GetAlwaysOnDisplaySetting());
|
||||||
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplay());
|
lv_checkbox_set_checked(alwaysOnCheckbox, settingsController.GetAlwaysOnDisplaySetting());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
||||||
|
|
Loading…
Reference in a new issue