Skip to content

Releases: fethica/Swift-Radio-Android

Swift Radio Android v1.2.1

Choose a tag to compare

@github-actions github-actions released this 09 Sep 05:23
051ba3b

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.popupBackground picks Opaque (the 1.2.0 card), Translucent (untinted glass), TranslucentAppTint (the theme's primary colour), TranslucentCoverTint (the artwork colour, the default) or Artwork (the artwork itself, blurred, behind the bar and the player).
  • Bar style and progress strip as switches: Config.popupBarStyle (Floating, FloatingCompact, Prominent, Compact) and Config.popupProgressStyle (None, Top, Bottom) replace the values that lived in MainActivity.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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 01:03
ecd8741

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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 01:20
9b7c2e5

Full Changelog: v1.1.0...v1.1.1

Swift Radio Android v1.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 18:06
3b704fb

What's new

  • HLS streams: .m3u8 stream URLs now play. The media3 HLS module is bundled, so DefaultMediaSourceFactory picks HlsMediaSource automatically and no call-site changes are needed. The demo list gains triple j (ABC Australia) as a real HLS station.
  • Smarter reconnects: a new PlaybackRetryPolicy replaces 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. Adds ACCESS_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

  • PlaybackRetryPolicy is 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

Choose a tag to compare

@github-actions github-actions released this 04 Jul 17:58
bdbb4dd

Full Changelog: v1.0.1...v1.0.2

Swift Radio Android v1.0.1

Choose a tag to compare

@github-actions github-actions released this 02 Jul 18:35
e629483

Full Changelog: v1.0.0...v1.0.1

Swift Radio Android v1.0.0

Choose a tag to compare

@fethica fethica released this 23 Mar 02:44
8b8e6bc

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.kt file 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)