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.
70 lines
No EOL
4.6 KiB
Markdown
70 lines
No EOL
4.6 KiB
Markdown
# 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. |