Skip to main content
User Guide

History & Tracking

The History tab provides a timeline of your reading progression, allowing you to quickly resume reading recently opened novels and track how far you've read.

Interface Features

  • Resume Reading Card: Renders your most recently read novel as a hero card at the top of the history list, showing your progress percentage and providing a quick Resume button.
  • View Density Toggle: Tap the density icon in the top toolbar to switch between:

- Comfortable View: Renders large, glassmorphic cards with full cover art, titles, authors, and detailed progress metrics. - Compact View: Renders narrow rows to maximize screen space, displaying more history entries at once.

  • History Management:

- Delete individual books by tapping the delete icon on their card. - Wipe your entire history log using the trash icon in the top app bar. - Long-press a card to preview its metadata.


History Logging (Backend Specifications)

NeoQN tracks reading history using serialized cache models and preference listeners:

1. Storage Architecture

History items are serialized as ResultCached JSON payloads. Instead of database queries for every history update, records are saved directly in SharedPreferences using a directory-structured key format: HISTORY_FOLDER/{novelId}

The HistoryViewModel registers an OnSharedPreferenceChangeListener on startup. When you open a chapter and reading progress updates, the system writes to the history key, triggering the listener to reload the history array asynchronously on a background thread (Dispatchers.IO).

2. Precise Timestamps

Each history record includes a millisecond timestamp (cachedTime) representing the exact moment you closed a chapter or left the reader.

3. Relative Time Calculations

To display clean time labels, NeoQN calculates the difference (diff = System.currentTimeMillis() - cachedTime) and formats the output dynamically:

| Time Difference | Formatted Output | |---|---| | $< 60$ seconds | Just now | | $< 1$ hour | Xm ago | | $< 24$ hours | Xh ago | | Same calendar day | Today at h:mm AM/PM | | Previous calendar day | Yesterday at h:mm AM/PM | | Older | MMM d, h:mm AM/PM (e.g., Oct 15, 3:30 PM) |