feat(eink): suppress clock seconds to prevent per-second panel refreshes

E-ink panels take ~2 s for a full refresh and visible flicker on every update.
Showing seconds caused the clock page to redraw every 1 s, triggering a real
panel refresh each time the CRC changed.

- Default clock_hide_seconds=1 for EINK_DISPLAY_MODEL builds so fresh
  installs don't flicker out of the box.
- Remove the Seconds setting from SettingsScreen on e-ink so users can't
  accidentally re-enable it.
- Clock page now returns 60 s refresh interval on e-ink (content changes at
  most once per minute); other home pages capped at 30 s (new messages still
  force immediate redraw via notify()).
- Lock screen refresh interval raised from 1 s to 60 s on e-ink; button
  presses already reset _next_refresh=0, so unlock feedback is instant.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-05-22 10:47:19 +02:00
co-authored by Claude Sonnet 4.6
parent 6a3b8e3135
commit 33ad70221e
3 changed files with 18 additions and 0 deletions
@@ -692,11 +692,16 @@ public:
}
}
bool auto_adv = _node_prefs && _node_prefs->advert_auto_interval_sec > 0;
#ifdef EINK_DISPLAY_MODEL
if (_page == HomePage::CLOCK) return 60000; // no seconds on e-ink; content changes at most every minute
return 30000; // e-ink: limit base polling; new messages still force immediate refresh via notify()
#else
if (_page == HomePage::CLOCK) {
bool show_sec = !_node_prefs || !_node_prefs->clock_hide_seconds;
return auto_adv ? 1000 : (show_sec ? 1000 : 60000);
}
return auto_adv ? 1000 : 5000;
#endif
}
bool handleInput(char c) override {
@@ -1399,7 +1404,11 @@ void UITask::loop() {
_display->setCursor(hx, hy);
_display->print(hint);
_display->endFrame();
#ifdef EINK_DISPLAY_MODEL
_next_refresh = millis() + 60000;
#else
_next_refresh = millis() + 1000;
#endif
} else if (!_locked && millis() >= _next_refresh && curr) {
_display->startFrame();
int delay_millis = curr->render(*_display);