Offline Music 0.4.0: build queues from your saved library

Saved smart queues, editable tags, resumable collection downloads, compact progress and themed Mini controls.

Offline Music 0.4.0: build queues from your saved library

Home now opens your local music library, with recent listening, saved artists,
albums, playlists, search and shuffle. Online discovery has a separate action.
Missing covers use the image cache or a placeholder.

You can add your own tags to songs and albums, then save a queue with field
filters. For example, tag:rock lyrics:freedom selects saved songs matching
both fields. Choose match-all or match-any, preview the number of matches,
pick an order, and play or shuffle the complete result. Saved lyrics and source
metadata stay searchable offline. YouTube keywords and video categories are
source descriptions; they are not a dependable genre taxonomy.

Collection downloads save their catalog pages and continuations separately
from the audio transfer queue. Album enumeration handles responses without
playlist headers. If a catalog format cannot be read safely, the download
stops with an explicit error instead of silently losing songs or retrying an
empty result indefinitely. Artist pages offer Top songs, capped at 100,
and a full album catalog with optional videos. Playlist additions can be checked
periodically when enabled. Automatic refresh respects individually removed
downloads. The Downloads screen explains pauses, network waits, cooldowns,
storage problems and unavailable sources, and offers retry with the saved
request. Android can defer background jobs; force-stop suppresses them until
the app opens again. Failure notifications require notification permission.

The compact download notification shows saved/total songs, how many remain,
progress, and Pause/Continue together. Completed songs stay in the batch count
until the batch finishes. Unknown transfer lengths use an activity bar and
byte count. Waiting, paused and failed work retains its place; repeated failure
alerts are separate from silent progress updates. Android may still display
its own expand control.

Albums and playlists show how much music is saved and default to playing only
that music. Saved queues use the download cache directly. If a saved audio file is missing, playback reports an error. Metadata details show available
extras and where fields came from. Your title, artist, album, year and track
edits remain protected through source refresh and local scans. Artwork, lyrics
and descriptive metadata saving remain separate settings.

There is also a separate Offline Music Local APK with no Android INTERNET
permission. Its setup shows only its available permissions and requires no online login.
It uses its own imported-audio library and cannot read the connected
app’s private downloads. The connected app remains the version for online
discovery and downloading. Backups containing music files are deferred.

Download safety, library layout and widgets

Download adds missing songs and retains existing audio. Removing saved music
uses a separate action with confirmation. Removing a
saved song can affect every playlist that uses it; the dialog explains that.

Library rows put text first, with small artwork and titles that wrap without
scrolling. Artist, album and playlist headers use less space. Artist release
sections use compact full-width rows with small artwork.

Widgets follow the app’s light, dark or system setting, including pure-black
backgrounds. The picker uses Offline Music names. Mini controls fits a 1×1
launcher cell and contains only Play/Pause and Next. Its button sizes depend on
the launcher’s grid; the tiny footprint does not guarantee 48 dp touch targets.

Verification and limits

The release passed 99 app tests and 19 core tests, both fatal release lint
checks, final app/test DEX linkage checks, and physical Android migration,
search and persistent download-index tests for both variants. Production and
test APKs have identical code/resources after excluding signing entries.

On the phone, the previously stalled album catalog resumed without resetting
its checkpoint and all nine audio tracks finished downloading. The compact
notification retained six completed tracks in an eight-track batch through
pause, restart and a network-permission interruption. Downloads resumed after
permission returned. Offline artist, lyric and source-keyword search, saved
smart filters, shuffle, Local audio playback and the Mini widget controls and
themes were checked. Unchanged artist/playlist paths and a deliberately broken
proxy were exercised on the preceding candidate; TESTING.md distinguishes
that coverage from the final payload checks.

Synthetic 50,000-song Room queries had p95 times of 321 ms for the main app and
317 ms for Local. Initial indexing took 55.4 and 43.3 seconds. These measure
bounded database queries, not large-library rendering or shuffle performance.
A fresh advisory check found no known findings among 248 packaged Maven
coordinates per variant. The source/security review does not establish that
all inherited code, native libraries or remote scripts are harmless.

Actual VPN exit changes, Doze, realistic storage exhaustion and Android 8
hardware remain unverified. Android may defer background work; force-stop
prevents recovery until reopening. Notifications need permission. Android may
keep its own expand control, and a short status label can be ellipsized even
though counts, percentage and Pause/Continue remain visible. Audio-inclusive
backups remain deferred.

Downloads

Main arm64 APK ·
Local arm64 APK ·
Zapstore

Main SHA-256: 5e837ef4c3033285f673fd50482e66a5ab2c43f71196118cb7d0dab23334b507.
Local SHA-256: 0b3aebbb209ac1b192b0110c20f1a6556ce344cb001c30a4227b42135dfdcb00.
Both use the established production signing certificate. Local has a separate
package and imported library; installing it does not migrate private downloads.

Public GPL source, release notes and verification record. Source commit: 33d0f77bf681d2cd5afddc287ad4653c1bfcec67.


Write a comment