release: v0.3.4 — user library import, SD card support, Library action polish
Ships today's major feature work and closes out the v0.3.4 beta cycle.
User-facing changes:
- Import your own audio files via the new Filled-tonal "Import" button
on the Library tab, or by sharing any audio file into Stash from your
file manager (new SEND / SEND_MULTIPLE intent filters). Tracks get
MusicSource.LOCAL, ID3/MP4 metadata is extracted via
MediaMetadataRetriever, and embedded album art is saved alongside. - SD card / SAF storage with library migration (landed in beta.1-4).
- Improved release notes workflow: release.yml now reads the tag
annotation as the GitHub Release body instead of the old
"Auto-generated from commits below." boilerplate.
Under the hood:
- New LocalImportCoordinator (@singleton, app-scoped) mirrors the
MoveLibraryCoordinator pattern: StateFlow with
Idle/Running/Done/Error, per-file isolation, cancellable. - MusicSource.LOCAL added; exhaustive when expressions updated in
SourceIndicator + HomeScreen source-accent helpers. - MainActivity handles ACTION_SEND / SEND_MULTIPLE in onCreate +
onNewIntent, routing audio URIs to the coordinator.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Install
Download the .apk below and open it on your Android device. If you've got a previous Stash release installed, this upgrades in place — your library, sync history, and settings are preserved.
Requires: Android 8.0 (API 26) or newer.
See the README for first-time setup.
Full Changelog: v0.3.2...v0.3.4