Skip to content

Review / Cram mode#14

Merged
bootuz merged 9 commits into
mainfrom
feature/review-cram-mode
Jun 5, 2026
Merged

Review / Cram mode#14
bootuz merged 9 commits into
mainfrom
feature/review-cram-mode

Conversation

@bootuz
Copy link
Copy Markdown
Owner

@bootuz bootuz commented Jun 5, 2026

Summary

Adds a read-only Review / Cram mode — browse a deck's or folder's cards in a horizontal flip-card carousel, with no rating and no FSRS scheduling. Mirrors the iOS ReviewManager/ReviewView. This is the "study anytime" mode earmarked when we built the deck-detail "You're all caught up!" state.

  • StudyQueueBuilder.buildReviewQueue now also excludes memorized cards (parity: a card memorized on iOS stays out of Android review too). buildStudyQueue is untouched — the FSRS study path is unaffected.
  • ReviewViewModel snapshots the pool once (read-only): deck → its own reviewFilter + shuffled; folder → all directions across the folder's decks, always shuffled; both exclude memorized/deleted. Logs cram_session_start (named distinctly from the FSRS study session's review_session_start to avoid an analytics collision).
  • ReviewScreen = a HorizontalPager of the existing FlipCard: swipe between cards, tap to flip (resets per page via remember(currentPage) + key(card.id)), "{i} of {n}" + Quit, tap-to-flip hint, empty/loading states.
  • Entry points: an always-present "Review" button on deck-detail (shown whenever the deck has cards, including the all-caught-up state) and a folder-detail top-bar action; Koin registration + two nav routes (review/{deckId}, reviewFolder/{folderId}).

Out of scope (v1): rating/FSRS effects, a "mark memorized" toggle (no Android UI — synced field only), audio autoplay, an end-of-deck summary, deck-list ⋮ entry, global "review everything", per-folder filter/shuffle.

Test plan

  • StudyQueueBuilderTestbuildReviewQueue excludes memorized + deleted; direction filters; shuffle determinism.
  • ReviewViewModelTest (3) — deck applies its filter + excludes memorized/deleted; folder aggregates across only that folder's decks (both directions); empty deck → empty pool.
  • Full unit-test suite green; :app:assembleDebug BUILD SUCCESSFUL; ReviewScreen compile-verified + previews.
  • Manual smoke (pending emulator): deck "Review" button (incl. all-caught-up) → carousel; swipe + tap-to-flip; "{i} of {n}"; Quit; folder top-bar Review across decks (shuffled); empty deck/folder → "No cards to review here."; study queue/due counts unchanged afterward.

🤖 Generated with Claude Code

@bootuz bootuz merged commit 6bfab90 into main Jun 5, 2026
1 check 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