- π΅ Music Search - Search tracks, artists, albums, and playlists
- π Personalized Home - Featured content, Daily Mix, Top Artists/Albums/Tracks
- π» Radio Stations - Discover and listen to radio stations
- π§ Music Player - Mini player and full-screen player with controls
- β Favorites - Save your favorite tracks
- π Playlists - Create and manage your playlists
- π¨ Dark/Light Theme - Switch between themes
- π Multi-language - Turkish and English support
- πΎ Offline Access - Local database for offline functionality
- π Recently Played - Quick access to your recent tracks
- Language: Kotlin 2.0.21
- UI: Jetpack Compose, Material Design 3
- Architecture: Clean Architecture (Data, Domain, Presentation)
- Pattern: MVVM (Model-View-ViewModel)
- Dependency Injection: Hilt 2.51.1
- Database: Room 2.6.1
- Networking: Retrofit 2.11.0, OkHttp 4.12.0
- Image Loading: Coil 2.7.0
- Media Player: ExoPlayer 2.18.7
- Async: Kotlin Coroutines 1.9.0, Flow
- Navigation: Navigation Compose 2.8.4
- Data Storage: DataStore Preferences 1.1.1
- API: Deezer API
app/
βββ data/
β βββ local/ # Room database, DAOs, entities
β βββ remote/ # API service, models
β βββ mapper/ # Data mappers
β βββ repository/ # Repository implementations
βββ domain/
β βββ model/ # Domain models
β βββ repository/ # Repository interfaces
βββ presentation/
β βββ ui/ # Compose screens and components
β βββ viewmodel/ # ViewModels
β βββ state/ # UI state classes
βββ core/
β βββ navigation/ # Navigation routes and animations
β βββ player/ # Music player logic
β βββ service/ # Background services
β βββ utils/ # Utility classes
βββ di/ # Dependency injection modules
This project follows Clean Architecture principles:
- Presentation Layer: UI components (Compose), ViewModels, UI states
- Domain Layer: Business logic, use cases, domain models
- Data Layer: Repositories, data sources (remote API & local database)
- Model: Domain models and data sources
- View: Jetpack Compose UI screens
- ViewModel: Manages UI state and business logic
This app uses the Deezer API. The API is free and doesn't require authentication for basic features.
- Mini player at the bottom for quick access
- Full-screen player with album art rotation
- Play/pause, next/previous track controls
- Seek bar for track navigation
- Background playback support
- Real-time search with debounce (400ms)
- Search across tracks, artists, albums, and playlists
- Search history saved locally
- Filter by content type
- Create custom playlists
- Add/remove tracks
- Browse public playlists from Deezer
- Manage playlist tracks
The project includes unit tests and UI tests using:
- JUnit
- Mockito
- Turbine (for Flow testing)
- Truth assertions
- Espresso (for UI tests)
