jtube-tv/BACKLOG.md
Jeena fdc570ac9e home: Title bar with account and channel pages
The header-removal experiment went too far: the app now has a slim
persistent title bar — logo + "JTube TV" on the left (it anchors the
layout while the drawer is open), avatar + display name on the right as
a purely visual indicator so it never steals D-pad focus. LEFT from the
first card of every row opens the drawer (the subscriptions row silently
skipped it, and the grid only wired the very first item), and UP no
longer surprises by opening anything.

The channel page that the Channels screen and the player's channel icon
point at never actually rendered — ListSource.Channel, its repository
call and the header state all existed without a UI. Videos of one
channel now open as a grid with banner, avatar, name and handle; page
headers (search field, channel banner) live inside the grid so they
scroll along instead of stacking under the cards.

Closes #7
2026-10-13 00:05:30 +00:00

5.3 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
7 Channel videos view (channel page) done Banner + avatar + name + video count header, paged video grid; opened from the Channels screen and the player's channel icon

Discussed but deferred (2026-10-12, while reworking the player controls)

  • Like/dislike display: counts are in the video detail DTO; rating (own like via PUT /api/v1/videos/{uuid}/rating) is a write op — display first, rating later.
  • Subtitles: GET /api/v1/videos/{uuid}/captions → Media3 SubtitleConfiguration on the player; language selection in the controls overlay.

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 — on some instances thumbnail paths are publicly readable while on others they need auth; add a fallback poster only if needed.
  • Security note (verified live against tube.jeena.net): some instances serve non-public media / thumbnails from object storage with only URL-based access control. The app must not rely on that laxness; always send auth headers / file tokens for non-public media. (Detail intentionally omitted from the public repo — report instance-specific findings privately.)
  • 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) 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.