Two causes, both fixed:
- Plex keeps one file stream per device and cuts the one in progress when another starts, so the read-ahead
and the player cut each other off. Whole-file fetches (read-ahead, downloads, download-first) now ask for
the file as a download (?download=1), which Plex leaves out of that rule; the plain address follows for
servers that refuse downloads.
- Http.abort closed the socket of a response already read to the end, whose connection was back in the pool
and could be carrying the read-ahead. abort now leaves finished responses alone (test/PoolAbortTest.java).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- One build per Android level, as in Tenda: build/PlexampLite.apk (Android 2.2+, versionCode 1508) and
build/PlexampLite-api16.apk (Android 4.1+, 1516), from shared src/ plus platform/api8 or platform/api16.
- Android 4.1 build: ExoPlayer 2.18.7 behind a small Engine interface (gapless hand-over to read-ahead and
downloaded files, a longer buffer, MediaPlayer fallback for tracks it can't decode), a notification and
lock screen with art and buttons, a resizable widget, Holo, a menu button without a Menu key, metered networks.
R8 shrinks ExoPlayer and Guava (tools/fetch_exoplayer.sh, tools/r8-rules.pro).
- Both builds: lyrics in Now Playing as in the Mac app (timed lyrics follow and seek), a home-screen widget,
media play/pause keys, the moon icon drawn without clipPath.
- PlexampLite-noreport on the SD card stops play reports, for tests against a real server.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>