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
2.5 KiB
2.5 KiB
Clock UI: Symmetry, Auto-Update, and System-Wide Header Clock
Date: 2026-02-17
Task Description
Three improvements to clock display:
- Make clock positioning symmetric with battery icon in headers
- Auto-update the clock without requiring a button press
- 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 atrect.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 indrawHeader(), added#include <ctime>and#include "CrossPointSettings.h"src/components/themes/lyra/LyraTheme.cpp-- same changes for Lyra theme'sdrawHeader()
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 fromdrawHeader()
4. Added auto-update (once per minute) on home screen
src/activities/home/HomeActivity.h-- addedlastRenderedMinutefield to track the currently displayed minutesrc/activities/home/HomeActivity.cpp-- added minute-change detection inloop()that callsrequestUpdate()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
contentXoffset in their header rect, so the clock position adjusts correctly viarect.x + 12.