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.
4.6 KiB
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-channelspaged without search + host filter, orsearch/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=localchannel search behaves well for instances without federation; considersearch/video-channelsendpoint as an alternative. - Release build: enable
minifyEnabled+ R8 rules, decide on signing, versioning scheme. - Verify
searchTarget=localchannel search behaves well for instances without federation; considersearch/video-channelsendpoint 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.
BACKLOGtriage 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.