# Lofi Radio — Android Android companion app for the Lofi Radio project: streams live lo-fi radio from the same 20 curated YouTube channels, playable anywhere — not just on your home network. Part of the Lofi Radio project: | Repo | What it is | |------|------------| | [lofi-app](https://git.jarianc.com/jarianc/lofi-app) | Python streaming server + web frontend (channel discovery, HLS extraction) | ## Features - Browse the 20 curated lo-fi channels with live status - HLS audio playback with full transport controls - Favorites - Channel search - Settings (server address, playback options) - MVVM architecture: Fragments + ViewModels, ExoPlayer-style audio service ## Architecture ``` com.lofiradio/ ├── ui/ # MainActivity, ChannelList, Player, Settings fragments + ViewModels ├── player/ # AudioPlayer — HLS streaming service ├── network/ # ServerApi, YouTubeExtractor └── data/ # Models (StreamInfo, Channel), Preferences ``` The app can talk directly to a running [lofi-app](https://git.jarianc.com/jarianc/lofi-app) server for channel/stream metadata, or extract streams on-device. ## Building ```bash # Configure SDK path echo "sdk.dir=/path/to/android-sdk" > local.properties # Debug build ./gradlew :app:assembleDebug # Release build ./gradlew :app:assembleRelease ``` A multi-stage [Dockerfile](Dockerfile) (android-sdk base + Gradle) is included for reproducible container builds. ## Project Structure ``` . ├── app/ │ └── src/main/ │ ├── java/com/lofiradio/ # Kotlin sources │ └── res/ # Resources, layouts, themes ├── build.gradle.kts ├── settings.gradle.kts ├── gradle.properties └── Dockerfile # Containerized build ```