jtube-tv/BACKLOG.md
Jeena 43056065e1 ui: SmartTube-style home rows, focus memory and UX-review fixes
The home screen is now stacked horizontal rows ('Continue watching'
with red progress bars from server-reported positions, 'New videos'
paged) instead of one tall list - matching the SmartTube look the app
is modeled on. The player renders as an overlay so the list beneath
keeps its scroll and focus across BACK (was resetting to the top),
grid scroll state is saved per destination, cards render focus
scale/border via tv-material, thumbnails carry relative dates and
privacy badges only where meaningful, overscan margins guard the 1080p
safe area, and the setup screen got a password reveal, clipboard paste
helpers and an always-focusable validating Sign in.

UX review by Claude Opus 5.5 (claude CLI) on emulator screenshots;
remaining suggestions are triaged in BACKLOG.md.
2026-10-10 11:29:08 +00:00

4.6 KiB

Backlog

Status vocabulary: todo · doing · done.

v0.1 — MVP (implemented, pending device sign-off)

# Item Status Notes
0 Ask for credentials + instance URL, store safely done Login screen → users/token; tokens + OAuth client creds in EncryptedSharedPreferences; refresh single-flight; show/paste password helpers; debug-only seed intent for automation
1 Local videos + user's videos incl. private/internal done Home rows (SmartTube-style) + "My videos" grid with privacy badge; internal (instance-member) videos appear in listings too
2 Local channels done MVP = user's own channels (accounts/{me}/video-channels); search-based local listing needs non-empty query — revisit in v0.2
3 Search local videos done Own screen in sidebar
4 Subscription videos done Verified incl. remote (federated) channels
5 Watch history (server) done read-only grid
6 Playback + report to server history done ExoPlayer HLS w/ videoFileToken for non-public media; watching reports every ~20 s verified server-side; resume position retrievable

Next up (v0.2+)

UX-review findings (Claude Opus 5.5, 2026-10-10) — implemented already: focus + scroll memory (player-as-overlay, per-destination grid state), 2-column grid, visible focus (tv-material Cards with scale/border), relative dates on cards, privacy badge only on My videos, password reveal + paste, overscan margins, sign-out entry, neutral form focus colors, always-focusable Sign in with inline validation. Deferred from review:

  • "Continue watching" refinement: auto-remove finished entries, exact resume (start playback at userHistory.currentTime, show "Resuming at 1:23" toast).
  • Trending/featured row on Home; rows per subscribed channel (SmartTube-like).
  • Video progress bars in ALL lists (needs per-video history merge; currently only Continue-watching has them).
  • Search-as-overlay vs sidebar entry; autoplay focus previews; playback speed; auto-next after video end; subtitles (captions) support; phone-QR-assisted login.
  • Drawer restructure proposal: Home / Channels (subs first) / Search / History / Account — decide together with merged-feed item below.
  • Unified "accessible videos" feed: merge public-local + own private into one paged, deduplicated list (v0.1 keeps Home rows + My videos).
  • Global local-channels browse (search endpoint rejects empty queries) — consider GET /api/v1/video-channels paged without search + host filter, or search/video-*.
  • Logout / switch account: sign-out entry exists; add switch-account (re-login screen without losing scroll state).
  • Release build: enable minifyEnabled + R8 rules, decide signing/versioning.
  • Thumbnails of private/internal videos may 404 — verified on tube.jeena.net: instance thumbnail paths are publicly readable (HTTP 200 without auth); add a fallback poster only if other instances behave differently.
  • Security note for tube.jeena.net: object-storage (R2) media for private test videos is publicly readable without token ("private" only via URL obscurity). Flag to the instance admin; the app must not rely on this laxness.
  • Verify searchTarget=local channel search behaves well for instances without federation; consider search/video-channels endpoint as an alternative.
  • Release build: enable minifyEnabled + R8 rules, decide on signing, versioning scheme.
  • Verify searchTarget=local channel search behaves well for instances without federation; consider search/video-channels endpoint as an alternative.
  • (Verified 2026-10-10 via the test account account) history subscriptions + watching endpoints behave as documented; upload seeding uses flat multipart form fields on /api/v1/videos/upload (legacy), not a metadata JSON part — only relevant for seeding test data, the app itself doesn't upload.
  • Error UX: friendlier messages (offline, instance down, wrong credentials vs. expired token → re-login screen), retry buttons.
  • i18n: move user-facing strings to strings.xml, consider German + English.
  • Video detail screen (description, tags, views, duration, channel page link).

Longer term

  • Multiple saved instances / switching between them.
  • Live streams playback (HLS live), premieres.
  • Subtitles/captions selection.
  • Downloads for offline watching (probably limited to public videos).
  • Comments viewing (read-only) — needs moderation-safe UI thinking.
  • BACKLOG triage rhythm: keep "Next up" ≤ 8 items.
  • Out of scope by user request (do not implement without asking): uploading, editing, subscribing/unsubscribing, deleting, creating channels/users/playlists.