A modern, robust, and lightweight Android Radio Player built with Jetpack Compose and Clean Architecture.
wRadio allows users to explore thousands of stations via the Radio Browser API, manage their favorite list locally, and listen to high-quality streams with real-time metadata support.
- Language: Kotlin
- UI: Jetpack Compose (Material3)
- Architecture: Clean Architecture (Data, Domain, UI) + MVVM
- Dependency Injection: Hilt
- Asynchronous: Coroutines & Flow
- Network:
- Database: Room (SQLite abstraction)
- Media Engine: Media3 / ExoPlayer
- Image Loading: Coil
- Smart Exploration: Search stations by name, tag, or country using the Radio Browser API.
- Robust Playback: powered by Media3/ExoPlayer with custom
OkHttpDataSourceto handle ICY/Shoutcast streams reliably. - Real-time Metadata: Decodes Stream Titles (Artist - Song) on the fly for supported stations.
- Local Management: Save, edit, and delete custom stations locally (Room Database).
- Anti-Zapping Logic: Smart statistics tracking that filters out short listening sessions ("zapping") to ensure accurate play time data.
- Deterministic UI: Custom
StationLogocomponent that generates consistent, vibrant branding for stations without logos based on their UUID. - User-Friendly Error Handling: Translated technical errors into human-readable messages (Network, Stream Offline, etc.).
The project follows strict Clean Architecture principles:
- Domain Layer: Contains Business Logic, Use Cases, and Repository Interfaces. Pure Kotlin, no Android dependencies.
- Data Layer: Implements Repositories, manages Data Sources (API/DB), and handles Mappers.
- UI Layer: Jetpack Compose screens and ViewModels.
- Stream Validation: Auto-check connectivity (Ping/Head) before saving.
- Smart Sorting: Sort "My Radios" by Recently Added, Most Played, A-Z.
- Fullscreen Player: Immersive UI with larger artwork.
- Queue Management:
gotoNext()/gotoPrevious()logic. - Import/Export: JSON backup for local stations.
- Local Search: Filter within "My Radios".
- Clone the repository:
git clone https://github.com/MasterOfPuppets/wradio.git
- Open in Android Studio (Ladybug or newer).
- Sync Gradle.
- Build & Run.
This project is licensed under the MIT License - see the LICENSE file for details.