SendSpinDroid v2.0.0-Beta3 Release Notes
Changes since v2.0.0-Beta1 -- 212 files changed, ~18k lines added, ~10k removed.
Architecture: Kotlin Multiplatform Restructure
The entire Music Assistant integration layer was migrated to a new :shared KMP module, laying the groundwork for future iOS support:
- Created
:sharedmodule with platform abstractions, models, filters, and protocol code - Migrated transports from OkHttp to Ktor for cross-platform compatibility
- Moved MA models, WebSocket transport, multiplexer, and SignalingClient to
:shared - Extracted
MaCommandClientandMaAuthHelperas shared components - Consolidated
ServerRepositoryinto a singleUnifiedServerRepository - Added 96 unit tests for the shared MA layer
- Comprehensive code review pass: fixed all 18 critical, 30 high, 35 medium, and 12 low-priority issues
- Encrypted auth token storage
New Features
- Redesigned mini-player -- Replaced volume slider with skip controls and elapsed/remaining time display; smooth progress interpolation; configurable position (top/bottom); thicker 3dp progress bar
- Album-artist filter -- New filter chip on the Artists tab to show only album artists, reducing clutter from featured/compilation artists
- Audiobook support -- Chapter navigation and playback speed control for audiobook media
- Friendly server names -- mDNS discovery now extracts the human-readable name from TXT records instead of showing the raw service ID
- Artwork clearing -- Properly clears album art when the server sends an empty artwork payload (e.g., between tracks with no art)
- 24-bit and 32-bit PCM audio -- Advertises higher bit depth PCM formats on supported hardware (API 31+) for improved audio quality
- Static delay reporting -- Sends
static_delay_msin client state for better server-side latency compensation - Exit App option -- Added to the overflow menu for clean shutdown
- FOSS compliance -- Replaced Google ML Kit with zxing-cpp for QR scanning; added fastlane metadata (screenshots, icon, changelogs); disabled
dependenciesInfofor F-Droid/IzzyOnDroid compatibility
Bug Fixes
- Fixed buffering spinner showing over album art when playback is paused
- Fixed FLAC audio garbled on devices that advertised 32-bit -- compressed codecs now correctly stay at 16-bit
- Fixed home screen stuck on "Failed to load" after backgrounding
- Fixed WebRTC remote connections not auto-reconnecting when backgrounded
- Fixed track timer resetting when navigating between mini-player and Now Playing
- Fixed Now Playing state lost after returning from Settings
- Fixed edge-to-edge nav bar overlap in Add Server Wizard
- Fixed debug log export FileProvider path mismatch
- Fixed playlist pagination only loading first 15 items (now loads all)
- Fixed dashes in pasted Remote IDs causing connection failures
- Fixed top bar title wrapping to a second line
- Made clock sync convergence threshold adaptive to network jitter
- Fixed JSON
opt*extensions throwing on non-primitive values
CI/Build
- Refactored CI workflows into focused single-purpose steps