Repository navigation
Releases: fethica/Swift-Radio-Android
Release list
Swift Radio Android v1.2.1
The now playing bar is now a pane of glass tinted by the artwork. This release moves to compose-popupbar 0.2.0 and turns its new backgrounds into Config.kt switches.
What changed
- Artwork-tinted glass: the bar and the expanded player are one translucent pane over the station list, tinted with the dominant colour of the current station's artwork, and the list shows through as blurred colour. The colour comes from AndroidX Palette, read once per artwork out of Coil's cache at thumbnail size. The previous colour stays while the next one loads, so a station change never flashes the glass back to plain.
- Background as a switch:
Config.popupBackgroundpicksOpaque(the 1.2.0 card),Translucent(untinted glass),TranslucentAppTint(the theme's primary colour),TranslucentCoverTint(the artwork colour, the default) orArtwork(the artwork itself, blurred, behind the bar and the player). - Bar style and progress strip as switches:
Config.popupBarStyle(Floating,FloatingCompact,Prominent,Compact) andConfig.popupProgressStyle(None,Top,Bottom) replace the values that lived inMainActivity.kt. - Black band at the bottom fixed: the About screen kept a strip of plain background above the navigation bar while the station list ran edge to edge. The page now scrolls under the gesture area like the list, and only its end clears the inset.
- README: the screenshots show the glass, in a device frame.
For forks
Pull the tag and rebuild. Config.kt gains three switches, so a customised Config.kt needs a three-line merge. NowPlayingScreen takes a paintsBackground flag: it stays transparent when the host paints the glass and paints its own background only under Opaque. ArtworkTint.kt is new, and palette-ktx joins the version catalog. Your stations.json and theme are untouched.
Swift Radio Android v1.2.0
The now playing bar is new. It is built on compose-popupbar, and it replaces the mini player and the bottom sheet that used to sit under it.
What changed
- Swipe-up player: the bar at the bottom of the station list morphs into the full player and follows your finger. Tap it, drag it, or swipe it back down. Predictive back peels it closed.
- Travelling artwork: the station logo grows from the bar into the player instead of loading twice.
- On-demand progress: file and podcast style streams show a progress strip along the top of the bar, with drag to seek.
- Playing indicator on the artwork: the equalizer bars now sit on the current station's logo, so the text column no longer shifts.
- Edge-to-edge list: the station list scrolls under the gesture area and under the bar.
- Metadata fix: ICY track titles are applied on the player thread. Switching stations quickly could show the previous stream's track on the new station.
For forks
Pull the tag and rebuild. The bar style is one parameter on PopupHost in MainActivity.kt if you prefer the edge-to-edge look (PopupBarStyle.Prominent or Compact). Your stations.json, Config.kt, and theme are untouched. MiniPlayer.kt is gone; the bar's labels live in MainActivity.kt next to the host.
Swift Radio Android v1.1.1
Full Changelog: v1.1.0...v1.1.1
Swift Radio Android v1.1.0
What's new
- HLS streams:
.m3u8stream URLs now play. The media3 HLS module is bundled, soDefaultMediaSourceFactorypicksHlsMediaSourceautomatically and no call-site changes are needed. The demo list gains triple j (ABC Australia) as a real HLS station. - Smarter reconnects: a new
PlaybackRetryPolicyreplaces the old retry storm. Retries back off, reset after stable playback, resume immediately when the network comes back, and stop on permanent failures (4xx, malformed streams) so the player reports the real error instead of spinning. AddsACCESS_NETWORK_STATE.
Fixes
- Main-thread deadlock on activity recreate: rotating, switching theme, or changing language while the media controller was still connecting could freeze the app permanently ("isn't responding"). A superseded controller future is now ignored instead of blocked on.
Under the hood
PlaybackRetryPolicyis pure Kotlin with unit tests (19 tests in the suite).- README lists HLS support.
Full Changelog: v1.0.2...v1.1.0
Swift Radio Android v1.0.2
Full Changelog: v1.0.1...v1.0.2
Swift Radio Android v1.0.1
Full Changelog: v1.0.0...v1.0.1
Swift Radio Android v1.0.0
First public release of Swift Radio Android, the Android counterpart to Swift Radio Pro for iOS.
Highlights
- Audio playback: Live and on-demand streaming via Media3 ExoPlayer with background playback, audio focus, and automatic stream recovery
- Android Auto: Full MediaLibraryService integration with browse tree, playback controls, and artwork
- Now Playing: Album art and track metadata from ICY streams and the iTunes API, with lock screen and notification controls
- Station management: Load stations from local or remote JSON, with search/filter, pull-to-refresh, and offline caching
- UI: Jetpack Compose with Material 3, dark theme, Material You dynamic color on Android 12+, gradient overlays, and artwork animations
- Localization: All user-facing strings extracted to
strings.xml, ready for translation - Configuration: Single
Config.ktfile for stations URL, feature flags, contact info, and UI options
Tech Stack
- Kotlin, Jetpack Compose, Material 3
- AndroidX Media3 (ExoPlayer, MediaSession, MediaLibraryService)
- Coil for image loading
- Ktor + Kotlinx Serialization for networking
Minimum SDK: 24 (Android 7.0)