Skip to content

UI/UX improvements: reader interaction, library covers, appearance settings#78

Merged
Aatricks merged 8 commits into
mainfrom
ui-ux-improvements
Jul 8, 2026
Merged

UI/UX improvements: reader interaction, library covers, appearance settings#78
Aatricks merged 8 commits into
mainfrom
ui-ux-improvements

Conversation

@Aatricks

@Aatricks Aatricks commented Jul 8, 2026

Copy link
Copy Markdown
Owner

UI/UX improvements across the app, from a full design review of v0.5.9.

Fixes

  • Status/nav bar icons stayed light after leaving the reader in light theme; appearance is now restored on dispose
  • Reader empty/loading/error panels rendered on a hardcoded black scaffold; they now use the app background
  • Adding a novel by URL was silent on success and failure; both now show snackbars
  • Offline Explore showed a generic "Nothing to show yet"; browse failures are now reported per source (getNovelsDetailed) and render a retryable error state
  • "Resume Chapter 0" for never-opened titles now reads "Start reading"
  • Settings library size now reports titles and entries instead of a bare item count

Reader

  • Paged mode: left/right 25% tap zones turn pages (RTL-aware), center toggles controls, boundary taps fall through to chapter navigation
  • Back no longer loops between drawer and controls; it exits the reader, and predictive back is enabled
  • Haptics for long-press selection, pull-to-navigate threshold, chapter navigation, and page turns
  • Gradient scrims behind the floating control bars, 2-line title, "Chapter progress" slider labeling

Library covers

  • LibraryItem.coverImageUrl with Room v9→v10 migration and backup round-trip
  • Covers captured when adding from Explore and backfilled once per app start for existing items (one fetch per novel)
  • Thumbnails in the library novel cards and the reader drawer

Settings & accessibility

  • New Appearance section: System/Light/Dark override, dynamic color (Android 12+), accent picker moved here from the reader sheet (single source of truth)
  • Empty-library state gained "Browse sources" / "Import file" buttons
  • Merged switch-row semantics, selected-state semantics, 48dp touch targets, icon descriptions, darker Paper theme text (≥7:1)
  • Chapter download removal now confirms with a snackbar

Chores

  • Spacing literals matching EasyReaderSpacing tokens migrated to the tokens (no visual change)

Verified with the unit test + detekt gate, both flavor assemblies, and manual passes on emulator (fresh install, light/dark, offline) and device.

Aatricks added 8 commits July 7, 2026 22:52
- Restore status/nav bar icon appearance when leaving the reader
- Use app background for reader empty/loading/error panels (was always black)
- Surface add-from-URL success and failure as snackbars in Library
- Show retryable offline error in Explore instead of generic empty state
- Add Browse sources / Import file buttons to the empty-library state
- Show 'Start reading' for never-opened titles instead of 'Resume Chapter 0'
- Report Settings library size as titles and entries
- Accessibility: merge AI switch row semantics, 48dp touch targets, chapter
  filter icon descriptions, darker Paper theme text (>=7:1 contrast)
- Paged mode: left/right 25% tap zones turn pages (RTL-aware), center
  toggles controls; falls through to chapter navigation at boundaries
- Remove per-element tap clickables in paged renderers so zone taps win
- Back no longer loops drawer/controls forever; exits the reader when
  nothing is open, and predictive back is enabled in the manifest
- Haptic feedback: pull-to-navigate threshold, long-press selection,
  chapter prev/next, tap page turns
- Controls polish: gradient scrims behind floating bars, 2-line title,
  'Chapter progress' slider labeling
- LibraryItem gains coverImageUrl; Room v9->v10 migration + schema export
- Covers captured when adding from Explore (both direct and detail-fetch
  paths) and propagated to per-chapter items created while reading
- Backup schema round-trips the cover URL (old backups import cleanly)
- Coil thumbnails (2:3, referer-aware requests matching the Explore
  pattern) in LibraryItemCard and drawer continue-reading/recent rows
- Settings gains an Appearance section: System/Light/Dark theme override,
  dynamic color toggle (Android 12+, disables accent with explanation),
  and the accent palette picker (same preference as the reader sheet)
- Theme mode and dynamic color persist via PreferencesManager snapshot
  flow and apply live in MainActivity
- Per-chapter download removal now confirms with a snackbar in the reader
- Selection/selected semantics on library cards and reader theme swatches;
  48dp targets on explore filter chips
Mechanical sweep: padding, Arrangement.spacedBy, and Spacer dimensions
that exactly matched token values now use EasyReaderSpacing. Component
sizes, elevation, and corner radii untouched.
getNovels swallowed every source exception (getOrDefault(emptyList())),
so a fully-offline browse rendered the generic empty state instead of
the retryable error tile. Add getNovelsDetailed mirroring
searchNovelsDetailed and set hasError when a browse load returns no
items but has failures. Update the ViewModel test to model the real
repository contract (failures reported, not thrown).
…tings

- LibraryViewModel backfills missing covers once per process: groups
  cover-less web items by novel, fetches details from the item's source
  (or by URL for unresolved items), and writes the cover to all rows of
  the novel so the library list and reader drawer update reactively;
  per-novel failures skip silently
- Remove the accent picker from the reader settings sheet (and the
  orphaned ReaderViewModel setter) — Settings > Appearance is now the
  single place to change accent
The cover thumbnail was added to LibraryItemCard, but the library screen
actually renders novels through NovelGroupHeader in
LibraryScreenListSections — LibraryItemCard is only referenced by its
own previews. Add the same Coil thumbnail (shared request builder) to
the group header.
@Aatricks Aatricks merged commit eeb099e into main Jul 8, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant