-
released this
2026-05-14 14:19:53 -04:00 | 728 commits to main since this releasePatch batch on top of v2026.05.13.2. See PR #46 for the full breakdown.
Fixes
- Full player showed "Nothing playing." while the mini bar showed a live track. Regression from the previous release's load-then-swap rewrite: ref.listen doesn't fire on initial subscription, so opening the full player while a track was already playing left the displayed state null. initState now seeds it synchronously.
Features
-
External media controllers (Android Wear, Auto, Bluetooth dashes, lock-screen widgets) now see a complete MediaSession surface. Several handler methods were already implemented but never advertised in PlaybackState.systemActions; Android 13+ silently drops any callback for an action not in that set.
- controls list adds MediaControl.stop
- systemActions adds stop, skipToQueueItem, setShuffleMode, setRepeatMode, setRating
- stop() override actually halts the player + dismisses the notification (default was a no-op)
-
Native heart-rating wired through to LikesController. The setRating action is the standard MediaSession protocol for favorite-style buttons on Wear, lock-screen widgets, and Auto. New LikeBridge passes through configure(); _toMediaItem populates MediaItem.rating from likedIdsProvider so the right filled/outlined heart shows on every track change; PlayerActions listens to likedIdsProvider and calls refreshCurrentRating so toggles from TrackRow / kebab / another device (SSE) also reflect on the watch without waiting for the next track.
-
MediaItem.artUri populated on the first broadcast for warm-cache tracks. New AlbumCoverCache.peekCached returns the file path synchronously when the cover is already on disk; external controllers see the cover immediately instead of waiting for the async _loadArtForCurrentItem path.
Operator notes
- No schema changes.
- In-app updater should upgrade cleanly (versionCode 3 → 4).
- Sideload minstrel-v2026.05.13.3.apk from this release page when CI finishes attaching it.
Downloads