Releases: Boc86/fynix-player
Releases · Boc86/fynix-player
Release list
v1.2.2
Fixed
- Android Auto: tapping a single song from an album now queues the whole album and walks through it in order on Skip Next/Prev (was only ever playing the tapped song).
- Android Auto 'Shuffle All' (the 'cannot get your selection' error): the request is now queued via dispatchAction when the activity isn't yet bound, so it resumes once MainActivity binds instead of being silently dropped.
- Last song and position now persist across app restarts in the Android native player (was hardcoded to 0 / not restored).
v1.2.1
Fixed
- Cache UI: checkmark now appears immediately after download completes (was stuck on spinner)
- Cache init on startup: tracks previously cached correctly show checkmark on app launch
- navidrome.streamUrl now checks cache first on Android (fixes offline playback from cache)
- Duration display: clamped ExoPlayer TIME_UNSET to 0 to avoid garbage timestamp
Added
- Equalizer via Android audiofx.Equalizer (device-specific bands, persisted)
- Logging throughout caching pipeline for debugging
v1.2.0
Changes
- Replace HTML5 Audio with ExoPlayer — native audio in foreground service for Android Auto & background playback
- WebView-JS bridge: playStream, nativeTogglePlay, nativeSeekTo, nativeSetVolume
- player.js:
_nativemode guards, delegates playback to AndroidBridge, persists state to SharedPreferences - AudioService: ExoPlayer handles onPlayFromMediaId directly; manual audio focus removed (ExoPlayer internal)
- NavidromeClient: added
getSong()for metadata resolution - ExoPlayerHolder: singleton, position push every 250ms, onTrackEnded/onTrackError callbacks
- Update metadata through companion fn; stale-bitmap guard preserved
- Fix duration display: guard ExoPlayer TIME_UNSET before pushing to JS (was showing -153722867280913:-56)
v1.1.4
Changes
- Fix audio streaming: proxy now streams audio instead of buffering entire file in memory
- Forward Range headers for seeking support
- Accept-Ranges header for proper HTML5 Audio streaming
- CoverArtServer for Android Auto browse tree artwork
- Single-metadata emit to fix AA now-playing artwork
v1.1.3
Changes
- Fix artwork in Android Auto now-playing and browse tree
- Local cover art server for reliable icon loading
- Single-metadata emit to avoid AA caching issues
- Stale-bitmap guard for fast track changes
- Persistent MediaSession across service restarts
Known Issues
- Android Auto playback still requires app to be open (Android 14 BAL)
- Audio plays through phone speaker when using Desktop Head Unit
v1.1.2
v1.1.2
Bug fixes
- Fixed cached playback: SoulSync proxy was intercepting /api/cached/ requests, returning proxy errors instead of serving cached audio files
- Cached files now force MP3 format (WebView cannot play OGG/FLAC natively)
- Cached files saved with correct extension and served with proper MIME type based on actual content
Changes
- Cache download URL forces
format=mp3regardless of stream format setting - Local server route ordering fixed: /api/cached/ checked before SoulSync proxy
- Extension-based MIME type detection for cached files (defense in depth)
v1.1.1
v1.1.0
v1.0.0
v1.0.0
Initial stable release of Fynix Player.
Features
- Navidrome music streaming with MP3 transcoding
- SoulSync wishlist management and download tracking
- Album, artist, genre, and playlist browsing
- Now-playing screen with dynamic album art colors and blurred backdrop
- 10-band equalizer with presets
- Crossfade and gapless playback
- Sleep timer
- Queue management with shuffle and repeat
- Android Auto support (browse, play, voice search)
- Picture-in-Picture mode
- Lock-screen and notification media controls
- Monet dynamic theming (Android 12+)
- Setup wizard with guided tour
- Embedded CORS proxy (no external dependencies)
v0.2.6
v0.2.6
- Fix play icon misalignment: Rebuilt icon morph CSS — spans are now absolutely positioned with flexbox centering instead of relying on SVG
position: absolute - Fix Bluetooth controls: Added
setSessionActivity(),onStop()callback,ACTION_STOPandACTION_PLAY_PAUSEto PlaybackState - Fix settings wipe on save:
saveSettings()now merges onto existing settings instead of building fresh from DOM (which only had active tab's fields) - Settings persistence backup: Periodic 10s sync from localStorage to SharedPreferences prevents data loss on update