48 lines
2.5 KiB
Markdown
48 lines
2.5 KiB
Markdown
|
|
# Clock UI: Symmetry, Auto-Update, and System-Wide Header Clock
|
||
|
|
|
||
|
|
**Date**: 2026-02-17
|
||
|
|
|
||
|
|
## Task Description
|
||
|
|
|
||
|
|
Three improvements to clock display:
|
||
|
|
1. Make clock positioning symmetric with battery icon in headers
|
||
|
|
2. Auto-update the clock without requiring a button press
|
||
|
|
3. Show the clock everywhere the battery appears in system UI headers
|
||
|
|
|
||
|
|
## Changes Made
|
||
|
|
|
||
|
|
### 1. Moved clock rendering into `drawHeader` (BaseTheme + LyraTheme)
|
||
|
|
|
||
|
|
Previously the clock was drawn only in `HomeActivity::render()` with ad-hoc positioning (`contentSidePadding`, `topPadding`). Now it's rendered inside `drawHeader()` in both theme implementations, using the same positioning pattern as the battery:
|
||
|
|
|
||
|
|
- **Battery** (right): icon at `rect.x + rect.width - 12 - batteryWidth`, text at `rect.y + 5`
|
||
|
|
- **Clock** (left): text at `rect.x + 12`, `rect.y + 5`
|
||
|
|
|
||
|
|
Both use `SMALL_FONT_ID`, so the font matches. The 12px margin from the edge is now symmetric on both sides.
|
||
|
|
|
||
|
|
**Files changed:**
|
||
|
|
- `src/components/themes/BaseTheme.cpp` -- added clock block in `drawHeader()`, added `#include <ctime>` and `#include "CrossPointSettings.h"`
|
||
|
|
- `src/components/themes/lyra/LyraTheme.cpp` -- same changes for Lyra theme's `drawHeader()`
|
||
|
|
|
||
|
|
### 2. Clock now appears on all header screens automatically
|
||
|
|
|
||
|
|
Since `drawHeader()` is called by: HomeActivity, MyLibraryActivity, RecentBooksActivity, SettingsActivity, LookedUpWordsActivity, DictionarySuggestionsActivity -- the clock now appears on all of these screens when enabled. No per-activity code needed.
|
||
|
|
|
||
|
|
### 3. Removed standalone clock code from HomeActivity
|
||
|
|
|
||
|
|
- `src/activities/home/HomeActivity.cpp` -- removed the 15-line clock rendering block that was separate from `drawHeader()`
|
||
|
|
|
||
|
|
### 4. Added auto-update (once per minute) on home screen
|
||
|
|
|
||
|
|
- `src/activities/home/HomeActivity.h` -- added `lastRenderedMinute` field to track the currently displayed minute
|
||
|
|
- `src/activities/home/HomeActivity.cpp` -- added minute-change detection in `loop()` that calls `requestUpdate()` when the minute rolls over, triggering a screen refresh
|
||
|
|
|
||
|
|
## Build Verification
|
||
|
|
|
||
|
|
- `pio run -e mod` -- SUCCESS (RAM: 31.0%, Flash: 78.8%)
|
||
|
|
|
||
|
|
## Follow-up Items
|
||
|
|
|
||
|
|
- The auto-update only applies to HomeActivity. Other screens (Settings, Library, etc.) will show the current time when they render but won't auto-refresh purely for clock updates, which is appropriate for e-ink.
|
||
|
|
- The DictionarySuggestionsActivity and LookedUpWordsActivity pass a non-zero `contentX` offset in their header rect, so the clock position adjusts correctly via `rect.x + 12`.
|