FRadio DZ 1.0.17: HLS streams and a search that forgives

I have been running FRadio DZ since 2015. It started as an iOS app for listening to Algerian radio, and today it lives as a web app at fradiodz.com and as a native Android app on Google Play. The Android app is Kotlin, Jetpack Compose, and Media3, on the same ground as Swift Radio Android.

Version 1.0.17 is on Google Play today. It is a small release built around two things listeners kept telling me through the in-app form: stations they wanted that the app could not play, and searches that came back empty for a station that was right there.

FRadio DZ station grid scrolled to the international stations: Al Jazeera, Al Jazeera English, Sky News Arabia, Medi 1, Radio Tunisie Nationale, MP3Quran, NRJ and Chérie FM, with Sky News Arabia playing in the bar at the bottom

International stations, all of them HLS.

FRadio DZ player showing Sky News Arabia live, with the station logo, description, LIVE badge, and transport controls

Sky News Arabia, playing over HLS.

HLS, so the requested stations can play

The most requested stations were not Algerian. Al Jazeera, Sky News Arabia, and Medi 1 came up again and again in the request form. They have one thing in common: they publish HLS streams only, .m3u8 playlists instead of a plain MP3 or AAC endpoint, and the app could not play those.

1.0.17 adds HLS playback through the Media3 HLS module. Background playback, the lock screen controls, and Android Auto work the same way they do for a plain stream, because the player does not care once the source is wired in.

The stations themselves arrive in the catalog once most phones run this version. Older builds would show them and fail to play them, and a station that does not play is worse than one that is missing.

Search that forgives

The search box used to be exact. Type "Bahja" for El Bahdja, or an Arabic name with the alef spelled a little differently, and you got nothing. The request form told me so, because people asked for stations the app already had.

The new search normalizes both sides before comparing:

  • Latin diacritics fold, so "algerienne" finds a station described as Radio Algérienne.
  • Arabic variants fold too: alef with and without hamza, taa marbuta and haa, and diacritics or tatweel are stripped.
  • One-letter typos still match, and a three-letter prefix finds the station it starts.
  • Generic words such as "radio" or "إذاعة" no longer empty the result. "Radio Mascara" finds Mascara.
  • Every translation of a station's description is searched, not only the language the app is showing.
FRadio DZ search with the query bahja typed and El Bahdja shown as the single result

"bahja" is enough to find El Bahdja.

When a search still comes back empty, the request form opens with the query already filled in. Asking for a station is one tap, and I get to see exactly what people typed.

Fewer silent failures

A stream that stops used to send the player into a retry loop that never surfaced an error. 1.0.17 stops the storm and reports the real player error instead of hiding it behind another attempt. It is the first build whose failure numbers I trust, which matters more than any single fix in it.

Attribution landed in the same release: the Play Install Referrer, so I can tell which link an install came from. It goes through the same analytics pipeline as everything else the app reports, and it stays silent whenever analytics is off.

What is next

The next release is a bigger one. Algerian stations publish podcast feeds that nobody browses, and FRadio DZ is about to collect them. Until then, if a station you listen to is missing, the request form in the app is the fastest way to tell me, and now it remembers what you searched for.