- Downloads for offline listening: long-press a track, album, artist or
playlist -> Download; Menu -> Downloads lists them (progress, space used/free,
play/shuffle, retry, remove). Saved on the SD card (Android/data/com.minamp/
files/downloads). MP3 originals kept as they are unless above a lower
download quality; the rest transcoded to MP3 (320 kbps by default). One at a
time, Range resume for originals, retried when the server is back, Wi-Fi lock.
- Downloaded tracks play from the SD card, offline too; plays made offline
are reported to Plex when a connection works again.
- Server.pick: when last time's connection was remote, give the plain home
addresses 2 s first (a hairpinned remote address kept us encrypted and
capped at home). test/PreferHomeTest.java.
- Playback "playing" but not moving for 12 s: say so instead of staying silent.
- Menu -> Close Minamp: stop the music and close every screen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Launcher icon is now a supplied asset (masters in art/), with an xhdpi size
added; make_icons.py only draws the notification icon, redrawn to match:
an amber play triangle between orange arcs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- New setting "Text and button size" (Normal / Large / Extra large): scales
text, icons and buttons on top of the phone's density (App.UI_SCALES)
- Larger default text, rows, tiles, touch targets and player icons; all sizes
now live in res/values/dimens.xml
- Seek bar knob drawn in code, since Android 2.x caches XML shapes at the
size they were first loaded
- Full-width buttons wrap to two lines instead of cutting words off
- Shorter labels so they fit 240x320 screens in both languages
- tools/check_fit.py checks that UI texts fit their slots at every size and
language using Droid Sans metrics; build.sh runs it and setup_toolchain.sh
fetches the font
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Interface in Galician by default regardless of the phone's language, with
English selectable under Axustes -> Idioma; switching rebuilds the screens
- All text in tools/strings.py (key -> English, Galician), generating
res/values/strings.xml (gl) and res/values-en/strings.xml; layouts now use
string resources
- util/Tr.java: translations for the network and Plex layers, which can't
read Android resources (falls back to English in desktop tests)
- net/RefusedException: distinguish "server answered but refused" from
connection failures
- The connection log stays in English for troubleshooting
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Fix NoSuchMethodError on Android 2.x: Dalvik before 4.0 can't link Object
methods (toString/equals/...) called through an interface. Patch the bundled
Bouncy Castle (tools/patch_bc_dalvik.py) and our own CertVerifier, and make
build.sh fail if tools/scan_dalvik.py finds any such call
- Treat a manually entered private address (10.x, 172.16-31.x, 192.168.x,
.local) as home, so LAN servers that allow access without sign-in work
- Send Plex client headers on media requests (files and transcodes)
- Explain a 503 on a file as the server being unable to open it (drive or
folder not available)
- Connection log: home/away, token presence, Plex's file check and a direct
file request in the streaming test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace jarsigner + zipalign.py with tools/signapk.py, which writes the v1
signature the way old JarUtils expects and aligns the APK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>