Files
crosspoint-reader-mod/chat-summaries/2026-02-17_clock-ui-symmetry-auto-update-summary.md
cottongin dfbc931c14 mod: Phase 1 - bring forward mod-exclusive files with ActivityManager migration
Brings ~55 mod-exclusive files to the upstream-based mod/master-resync branch:

Activities (migrated to new ActivityManager pattern):
- Clock/Time: SetTimeActivity, SetTimezoneOffsetActivity, NtpSyncActivity
- Dictionary: DictionaryDefinitionActivity, DictionarySuggestionsActivity,
  DictionaryWordSelectActivity, LookedUpWordsActivity
- Bookmark: EpubReaderBookmarkSelectionActivity
- Book management: BookManageMenuActivity, EndOfBookMenuActivity
- OPDS: OpdsServerListActivity, OpdsSettingsActivity
- Utility: DirectoryPickerActivity, NumericStepperActivity

Utilities (unchanged):
- BookManager, BookSettings, BookmarkStore, BootNtpSync
- Dictionary, LookupHistory, TimeSync, OpdsServerStore

Libraries: PlaceholderCover, TableData, ChapterXPathIndexer
Scripts: inject_mod_version, generate_book_icon, preview_placeholder_cover
Docs: KOReader sync XPath mapping

Migration changes:
- ActivityWithSubactivity -> Activity base class
- Callback constructors -> finish()/setResult() pattern
- enterNewActivity() -> startActivityForResult()
- Activity::RenderLock&& -> RenderLock&&

These files won't compile yet - they reference mod settings and I18n
strings that will be added in subsequent phases.

Made-with: Cursor
2026-03-07 15:10:00 -05:00

2.5 KiB

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.