feat: v0.1.0 — collection UX improvements & bug fixes #7

Merged
elvis merged 10 commits from feature/v0.1.0 into master 2026-06-25 11:07:47 +00:00
Owner

Summary

  • Navigation state preserved when switching bottom nav tabs (fixes ViewModel reset on tab switch)
  • Offline mode: removed "Offline - showing cached results" banner; set logos pre-cached from bundled assets on first install
  • Binder card count now shows "1 card" / "N cards" / nothing at 0 (was always "N cards")
  • Price TTL: card price data expires after 6 hours and auto-refreshes
  • Dark mode defaults to system setting on first install instead of always OFF
  • Filter & Sort sheet: Sort section moved to top; search results scroll to top when sort changes
  • Sort dropdown with ascending/descending toggle in both search and binder detail
  • Energy type icons on filter chips in Filter & Sort sheet
  • CardMarket button fully visible without clipping (fixed scroll constraint bug)
  • Card image expand on tap in card detail view
  • Binder grid: set ID + card number displayed below each card image (not overlaid); cards have spacing between them
  • Delete from binder: trash icon appears in card detail app bar when navigating from a binder — tap to remove

Test plan

  • Switch between Search, Collection, Scan, Settings tabs — search query and results persist
  • Search a card while offline — cached results shown, no banner
  • Binder with 0, 1, and 2+ cards — check count label
  • Fresh install — Settings dark mode toggle matches system dark mode
  • Open Filter & Sort — Sort is the first section; change sort → list scrolls to top
  • Card detail opened from binder — trash icon visible in top bar; tap → confirm → removed and back
  • Card detail opened from search — no trash icon
  • Card detail with CardMarket link — scroll down, button fully visible
  • Binder grid — set ID + number appears below each card image with spacing between cards

🤖 Generated with Claude Code

## Summary - **Navigation state preserved** when switching bottom nav tabs (fixes ViewModel reset on tab switch) - **Offline mode**: removed "Offline - showing cached results" banner; set logos pre-cached from bundled assets on first install - **Binder card count** now shows "1 card" / "N cards" / nothing at 0 (was always "N cards") - **Price TTL**: card price data expires after 6 hours and auto-refreshes - **Dark mode** defaults to system setting on first install instead of always OFF - **Filter & Sort sheet**: Sort section moved to top; search results scroll to top when sort changes - **Sort dropdown** with ascending/descending toggle in both search and binder detail - **Energy type icons** on filter chips in Filter & Sort sheet - **CardMarket button** fully visible without clipping (fixed scroll constraint bug) - **Card image expand** on tap in card detail view - **Binder grid**: set ID + card number displayed below each card image (not overlaid); cards have spacing between them - **Delete from binder**: trash icon appears in card detail app bar when navigating from a binder — tap to remove ## Test plan - [ ] Switch between Search, Collection, Scan, Settings tabs — search query and results persist - [ ] Search a card while offline — cached results shown, no banner - [ ] Binder with 0, 1, and 2+ cards — check count label - [ ] Fresh install — Settings dark mode toggle matches system dark mode - [ ] Open Filter & Sort — Sort is the first section; change sort → list scrolls to top - [ ] Card detail opened from binder — trash icon visible in top bar; tap → confirm → removed and back - [ ] Card detail opened from search — no trash icon - [ ] Card detail with CardMarket link — scroll down, button fully visible - [ ] Binder grid — set ID + number appears below each card image with spacing between cards 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Switch from EXTRA_TEXT (text/plain) to EXTRA_STREAM (text/csv) via
FileProvider so the share sheet can save a proper .csv file instead
of raw text to Google Drive, Files, etc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wrap CardDetailScreen content in HorizontalPager so users can swipe
through the full card list from search, sets, or binder without
returning to the list. Nav route now carries comma-separated cardIds
and initial index; ViewModel uses flatMapLatest to re-subscribe on
page change.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace single vm.card flow with nearbyCards (current ± 1 pages),
each page now reads its own card entity. Combined with
beyondBoundsPageCount=1, Coil starts fetching the next card's image
before the user swipes there, so the image is already cached on arrival.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- fix: preserve navigation state when switching bottom tabs (saveState/restoreState)
- feat: set logos in Sets tab with Coil disk caching and preload on first fetch
- feat: card count per binder shown on collection screen
- feat: price cache TTL of 6 hours; stale binder cards refreshed on open
- feat: dark/light mode toggle in new Settings screen (SharedPreferences)
- feat: sort by price added to card and binder sort options
- feat: sort dropdown (ExposedDropdownMenuBox) with asc/desc toggle arrow
- feat: energy type filter chips show Pokemon TCG energy icons (canvas-drawn)
- fix: card detail image constrained to 260dp so details always visible
- feat: tap card image in detail view to expand fullscreen in a dialog
- feat: binder detail redesigned as 3-column image grid (quantity + set overlay)
- chore: bump version to 0.1.0 (versionCode 4), Room schema v5

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- fix(nav): use Screen.Search.route as popUpTo target so tab switches
  preserve ViewModel state (fixes navigation state reset)
- fix(search): remove offline banner from search screen
- fix(binders): show "1 card" / "N cards" / nothing for 0 in binder list
- fix(theme): default dark mode to system setting on first boot via
  isDarkModeExplicit; fall back to isSystemInDarkTheme() in MainActivity
- fix(search): move Sort section to top of Filter & Sort sheet; scroll
  results to top when sort key changes
- fix(detail): add bottom padding to scrollable column so CardMarket
  button is not hidden behind FAB/nav bar
- fix(binder-grid): uppercase set ID overlay; add 6dp spacing between
  grid cells in binder detail
- feat(binder-grid): add always-visible trash icon button on each card
  grid item for one-tap delete without long-press

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- feat(binder): delete card from binder via trash icon in card detail
  app bar — only shown when navigating from a binder; tapping confirms
  then removes and navigates back
- fix(binder-grid): remove always-on trash icon from grid items; tap
  card navigates to detail with binderId context via optional nav arg
- fix(detail): add weight(1f) to inner scrollable Column so scroll
  actually works and CardMarket button is never clipped
- fix(binder-grid): move set ID + card number to below the card image
  instead of an overlay badge on the image

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- README: reflect new features (binder delete via card detail, set ID
  below card, sort UX, dark mode default, card count grammar)
- CLAUDE.md: update screen map, ThemePreferences note, BinderCardGridItem
  description
- architecture.md: 4-tab bottom nav, optional binderId nav arg, tab
  state preservation pattern, dark mode system default
- data-layer.md: DB v5, all migrations, BinderCount POJO, new DAO
  methods, BinderRepository.removeCard convenience method
- ui-layer.md: full screen map with all 4 tabs, BinderCardGridItem layout,
  FilterSortSheet sort-at-top, weight(1f) scroll note, SettingsViewModel
  initIfNeeded, card count grammar
- patterns.md: weight(1f) scrollable Column pattern, tab nav state
  preservation fix, optional nav args pattern, onStart for combine,
  DB version updated to 5

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
elvis merged commit 1755c5c67f into master 2026-06-25 11:07:47 +00:00
elvis deleted branch feature/v0.1.0 2026-06-25 11:07:47 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
elvis/pokebox!7
No description provided.