v1.3.7
Release v1.3.7
This release adds a repeat-mode button to the media notification, gates lossless streaming on live server availability, and fixes layout instability in the mini player's loading spinner and bottom navigation bar.
Features
- Repeat Mode in Media Notification: The system notification now includes a repeat button alongside playback transport controls. Tapping it cycles through the tri-state repeat modes (Off → One → All → Off), with the button icon updating in real time to reflect the current mode.
- Live Lossless Server Status: Lossless streaming now checks SpotiFLAC provider health via the spotbye status API before probing. If no lossless servers are up, playback falls through to YouTube immediately rather than waiting on dead endpoints. Server status is cached for 60 seconds and displayed underneath the streaming quality selector in Settings.
Fixes
- Stabilized Loading Spinner: The mini player's play/pause button no longer jumps vertically when the resolve/buffering state toggles. The
CircularProgressIndicatorand playIconare now wrapped in a fixed-sizeBox, preventing the indicator's internal M3 minimum size from causing the parentRowto re-measure on each state change. - Navigation Bar Clipping: The bottom navigation bar was partially pushed off-screen when the mini player was visible. The container height was increased from 130dp to 160dp, and the visual-only
offsetspacing was replaced with a proper layoutSpacerso both the mini player and navigation bar render fully. - Redundant Clip Removal: The MiniPlayer's root
Columnno longer appliesclipToBounds()on top of the existing.clip(RoundedCornerShape(8.dp)), eliminating unnecessary clipping that could crop text.
Drawables
- Added
ic_repeat_off(arrows with diagonal slash) andic_repeat_one(arrows with "1" digit) for the notification repeat button states. - Fixed
ic_repeatdimensions from 512dp to 24dp for correct notification icon sizing.
Release v1.3.6
Bug Fixes
- Seekbar regression: The dependency upgrade changed the Material3 Slider appearance, breaking the Spotify-consistent seekbar design on both the full player and mini player. Replaced CustomSlider in PlayerScreen and AppComponents with a custom Canvas-drawn implementation: thin 3dp track, thumb dot visible only while scrubbing, and a subtle grow animation on touch. Also fixed a bug where dragging the seekbar before a track finished loading would display a giant negative timestamp instead of 0:00.
Release v1.3.5
This release introduces playback queue persistence across app restarts and updates core project dependencies.
Features
- Persistent Playback Queue: The app now serializes and saves the full playback queue and current track index. Upon relaunching, the entire queue is restored rather than just the last active song, allowing playback to resume exactly where it left off.
Chores & Refactoring
- SDK Bump: Updated
compileSdkandtargetSdkto 37. - Tooling Upgrades: Updated to Gradle 9.6.1, Kotlin 2.4.0, and AGP 9.2.1.
- Build System: Migrated hardcoded dependency versions to Gradle version catalogs and refactored APK output naming to use the modern
androidComponentsAPI. - Warning Resolutions: Addressed Kotlin annotation target warnings (KT-73255) by specifying
@param:targets in API and routing classes. - UI & Player Cleanup: Replaced deprecated icons with their auto-mirrored Compose equivalents and removed the deprecated
setUseArtwork(false)call from the Media3 PlayerView.