jtube-tv/BACKLOG.md
Jeena f5b37dd21d player: wire the D-pad through the action row, panels and playlist deletion
The action-row buttons lost their modifier in the icon-only rework and
became unfocusable, so D-pad DOWN off the paused seek bar landed nowhere
(requestFocus failed with "not initialized"). The modifier is attached
to the button again and the seek bar ↔ buttons directions are wired
explicitly, because the default focus search skips the bar.

Pill visuals use the new state language: no border, gray pill = focused,
red glyph = subscribed/rated; the sidebar panels keep the D-pad inside
their lists (consumed at the edges). BACK/Esc acts on ACTION_DOWN only —
its trailing UP saw the panel already closed and exited the video — and
panels return focus to the pill that opened them.

Playlist deletion is a requested scope addition: holding OK on a row
asks via a dialog (DELETE /video-playlists/{id}); the toggle moves to
key release so the hold cannot double-act. Holding also exposed an
activation bug: the CENTER helper consumed only ACTION_DOWN and the
release leaked into the underlying clickable — now consumed, repeats
swallowed, so Create (and the cards) fire exactly once per press.

An info panel shows the video description with clickable links: inline
(pointer) plus a focusable link row list (D-pad); PeerTube video and
channel links play/drill in-app, other links open the browser.

Closes #12
2026-10-13 14:25:21 +00:00

5.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
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, creating channels/users. (Stale members of this list — subscribing, playlists viewing/creation and rating — shipped with the player action row in v0.1; playlist deletion was requested and added later, see below.)
  • Delete own playlist: long-press OK on a playlist row (key-repeat) → confirmation dialog → DELETE /api/v1/video-playlists/{id}; toggle stays on short press. Requested 2026-10-13.