fix: explicitly add launcher buttons and power button to default group, declare stopScreensaverLocked, and disable idle screensaver timer on monochrome/RLCD screens

This commit is contained in:
Adolfo Reyna
2026-07-10 18:54:37 -04:00
parent 4ea29c0fe9
commit d3919344b3
3 changed files with 33 additions and 10 deletions
@@ -32,17 +32,10 @@ static std::shared_ptr<hal::display::DisplayDevice> getDisplay() {
void DisplayIdleService::stopScreensaverCb(lv_event_t* e) {
auto* self = static_cast<DisplayIdleService*>(lv_event_get_user_data(e));
lv_event_stop_bubbling(e);
self->stopScreensaverRequested.store(true, std::memory_order_release);
lv_display_trigger_activity(nullptr);
self->stopScreensaverLocked();
}
void DisplayIdleService::stopScreensaver() {
if (!lvgl::lock(100)) {
// Lock failed - keep flag set to retry on next tick
return;
}
void DisplayIdleService::stopScreensaverLocked() {
const auto restoreDuty = cachedDisplaySettings.backlightDuty;
const bool wasDimmed = displayDimmed;
@@ -54,7 +47,6 @@ void DisplayIdleService::stopScreensaver() {
lv_obj_delete(screensaverOverlay);
screensaverOverlay = nullptr;
}
lvgl::unlock();
stopScreensaverRequested.store(false, std::memory_order_relaxed);
// Reset auto-off state
@@ -69,6 +61,15 @@ void DisplayIdleService::stopScreensaver() {
displayDimmed = wasDimmed ? false : displayDimmed;
}
void DisplayIdleService::stopScreensaver() {
if (!lvgl::lock(100)) {
// Lock failed - keep flag set to retry on next tick
return;
}
stopScreensaverLocked();
lvgl::unlock();
}
void DisplayIdleService::activateScreensaver() {
lv_obj_t* top = lv_layer_top();
@@ -203,6 +204,12 @@ void DisplayIdleService::tick() {
}
bool DisplayIdleService::onStart(ServiceContext& service) {
auto display = getDisplay();
if (display != nullptr && !display->supportsBacklightDuty()) {
LOGGER.info("Monochrome/RLCD display detected (no backlight control): disabling screensaver tick timer");
return true;
}
// Seed random number generator for varied screensaver patterns
srand(static_cast<unsigned int>(time(nullptr)));