Skip to content

Mobile playback: video and audio with resume, tracks, background audio, touch seek #27

Closed
1 of 1 issue completed

Description

@altaywtf

Part of #14 (W3 — mobile v1). Files and SDK playback prerequisites are complete. Folds in the native-Android half of #8 (touch seek gestures). Core mobile playback completed with #158.

Outcome

Watching and listening on the go — the mobile product bar's core media job, via the platform-native player path.

Scope

  • Video playback (Media3/ExoPlayer): HLS/MP4 per the SDK playback-source model (#88, #89), configured format (#109), subtitle tracks with autoselect and lifecycle retention (#94, #100), autoplay next (#110)
  • Resume prompt and throttled start_from write-back (#158): 15-second playing samples, deduplicated lifecycle snapshots, bounded writer, session and confirmed-setting checks. Start over starts locally at zero; completion keeps the final positive position.
  • Audio track selection and playback speed for audio and video — completed under #146 in #154; retained selections and the 0.75 / 1 / 1.25 / 1.5 / 2× ladder.
  • Touch controls per Add touch seek gestures and controls to Android playback #8: double-tap left/right accumulating 10s skips with pending-total feedback, clamped at bounds, no conflict with single-tap/captions/system nav, plus an accessible non-gesture alternative
  • Audio playback with background audio + MediaSession — completed under #146 in #150, #151, and #152; live-session reopening in #155.
  • Conversion interstitial for need_convert files (queued/percent), Check again, and an explicit unsupported-type state — source resolution in #88, player UI in #89. Current UI and regression coverage verify percentage, refresh/Back, and unsupported without retry.
  • Typed, recoverable playback errors (#88, #89): media-credential refresh, network/generic recovery, retained position, and authoritative session rejection. Sentry playback breadcrumbs remain conditional on telemetry and are owned by #31; no telemetry delivery is claimed here.

Non-goals (v1)

PiP and libVLC/original-file playback remain post-v1 under #52. Chromecast is a mobile-v1 child in #36 and follows this core player.

Acceptance criteria

  • DoD: canonical local gate and final-head CI green; API 37 recordings and screenshots attached across the playback PRs (evidence below).

Evidence

This closes the core player scope. Downloads, share/open-in, Chromecast, telemetry/release and post-v1 player features remain with their respective issues.

Activity

  1. altaywtf commented on Sep 1, 2026

    @altaywtf
    MemberAuthor

    I moved the first bounded mobile-player layer into the held stack #88 → #89.

    This layer covers HLS/MP4 video, resume offset, lifecycle/recreation retention, subtitle rendering/on-off/track selection, typed recovery, and API 37 emulator decoding. It does not complete this issue; audio/MediaSession, speed, audio tracks, double-tap seek, write-back, Chromecast, and the remaining scope stay open.

    Evidence:

    Full Gradle gates pass, and the final Codex High branch review is clean. Both PRs remain held; no merge or release.

  2. altaywtf commented on Sep 7, 2026

    @altaywtf
    MemberAuthor

    Touch seek landed in #112 (b7499b7): double-tap left/right accumulating 10 s skips with pending-total feedback, clamped at bounds, plus the accessible skip buttons. The follow-up in #143 is unrelated (About dialog). Ticked the checklist item; audio/MediaSession, speed, audio tracks, and write-back remain open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions