Files
crosspoint-reader-mod/chat-summaries/2026-02-17_02-33-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.9 KiB

Clock Persistence, Size Setting, and Timezone Support

Task Description

Implemented the plan from clock_settings_and_timezone_fd0bf03f.plan.md covering three features:

  1. Fix homeScreenClock setting not persisting across reboots
  2. Add clock size setting (Small/Medium/Large)
  3. Add timezone selection with North American presets and custom UTC offset

Changes Made

1. Fix Persistence Bug

  • src/CrossPointSettings.cpp: Removed stale legacy sleepScreenGradientDir read (lines 270-271) from loadFromFile() that was causing a one-byte deserialization offset, corrupting preferredPortrait, preferredLandscape, and homeScreenClock.

2. Clock Size Setting

  • src/CrossPointSettings.h: Added CLOCK_SIZE enum (SMALL/MEDIUM/LARGE) and uint8_t clockSize field.
  • src/CrossPointSettings.cpp: Added clockSize to writeSettings() and loadFromFile() serialization.
  • src/SettingsList.h: Added clock size enum setting in Display category.
  • lib/I18n/I18nKeys.h: Added STR_CLOCK_SIZE, STR_CLOCK_SIZE_SMALL, STR_CLOCK_SIZE_MEDIUM, STR_CLOCK_SIZE_LARGE.
  • All 8 YAML translation files: Added clock size strings.
  • src/components/themes/BaseTheme.cpp and src/components/themes/lyra/LyraTheme.cpp: Updated drawHeader() to select font (SMALL_FONT_ID / UI_10_FONT_ID / UI_12_FONT_ID) based on clockSize setting.

3. Timezone Support

  • src/CrossPointSettings.h: Added TIMEZONE enum (UTC, Eastern, Central, Mountain, Pacific, Alaska, Hawaii, Custom), uint8_t timezone and int8_t timezoneOffsetHours fields, and getTimezonePosixStr() declaration.
  • src/CrossPointSettings.cpp: Added timezone/offset serialization, validation (-12 to +14), and getTimezonePosixStr() implementation returning POSIX TZ strings (including DST rules for NA timezones).
  • lib/I18n/I18nKeys.h + all YAML files: Added timezone strings and "Set UTC Offset" label.
  • src/SettingsList.h: Added timezone enum setting in Display category.
  • src/activities/settings/SetTimezoneOffsetActivity.h/.cpp (new files): UTC offset picker activity (-12 to +14), using same UI pattern as SetTimeActivity.
  • src/activities/settings/SettingsActivity.h: Added SetTimezoneOffset to SettingAction enum.
  • src/activities/settings/SettingsActivity.cpp: Added include, action entry, handler for SetTimezoneOffset, and setenv/tzset call after every settings save.
  • src/main.cpp: Apply saved timezone via setenv/tzset on boot after SETTINGS.loadFromFile().
  • src/util/TimeSync.cpp: Apply timezone before starting NTP sync so time displays correctly.

Build Status

Firmware builds successfully (99.5% flash usage).

Follow-up Items

  • Test on device: verify clock persistence, size changes, timezone selection, and custom UTC offset picker.
  • Timezone strings use English fallbacks for non-English languages.