Merges Last.fm/ListenBrainz scrobbling from #3, plus offline downloads, local library, and a round of playback fixes.
Patch notes
- Offline downloads — save tracks to device with embedded metadata + cover art
- Local music library scanning (device storage + downloaded tracks)
- Last.fm + ListenBrainz scrobbling
- Add-to-playlist picker
- Dynamic, artwork-driven theming across player/detail screens
- Draggable bottom nav bar with spring animation
- Optional back gesture to dismiss lyrics page
- Fixed several 403 playback errors (updated client versions, shared HTTP stack)
- Fixed stream-resolve stalls/timeouts
- Fixed ListenBrainz not logging finished tracks
- Fixed queue swipe-to-add triggering on accidental drags
- General UI/bug fixes
Changelog
- Add
LastFM,ListenBrainzManager,ScrobbleManager+ scrobbling settings - Add Account & Scrobbling settings sub-page
- Add
downloadpackage:DownloadService,Downloads,DownloadStore,Downloader - Add
MediaTagger,Mp4Tagger,WebmTaggerfor embedded metadata (+ unit tests) - Add
LocalMediaRepositoryfor local/downloaded track scanning - Add
PlaylistPickerSheet/PlaylistActionsSheet - Add
ArtworkPalette,ArtworkBackdrop,ArtworkWashfor artwork-driven theming - Add shared
Http.ktOkHttp client (fixes address-family mismatches causing 403s) - Add
ANDROID_MUSICplayer client, bump other client versions - Rework
StreamResolverextractor client with its own connection pool + timeout - Raise stream-resolve timeout 45s → 120s
- Pin NewPipeExtractor to v0.26.3
- Fix probe requests hitting 403 on YouTube Music API
- Fix ListenBrainz missing ended songs in recent listens
- Fix queue swipe-to-add threshold
- New storage permissions +
DownloadServicemanifest entry - README/license updates
Install
Download BitChord-v1.3.apk below and sideload it (enable "Install unknown apps" for your browser or file manager). Requires Android 8.0 (API 26) or newer.
Installs straight over v1.2 — same signing key, your session and settings are kept.
