A modern Android music player application built with Kotlin and Jetpack Compose, featuring a beautiful Material 3 design system.
Mixtape Haven is a native Android music streaming application that provides a seamless music listening experience with an intuitive interface and powerful playback capabilities.
- Music Playback - High-quality audio playback powered by Media3 ExoPlayer
- Library Management - Browse your music by songs, albums, and artists
- Now Playing - Full-featured now playing screen with playback controls
- Material 3 Design - Modern UI following Material Design 3 guidelines
- Background Playback - Continue listening while using other apps
- Network Integration - Stream music from remote sources
Coming soon
- Language: Kotlin
- UI Framework: Jetpack Compose
- Design System: Material 3
- Architecture Pattern: MVVM (Model-View-ViewModel)
- Navigation: Jetpack Navigation Compose
- Media Playback: AndroidX Media3 (ExoPlayer)
- Networking: Retrofit 3.0 + OkHttp 5.3
- Serialization: Kotlinx Serialization
- Image Loading: Coil 2.7
- Data Storage: DataStore Preferences
- Dependency Injection: Manual DI
- Min SDK: 33 (Android 13)
- Target SDK: 36
- Compile SDK: 36
- Java Version: 11
- Build System: Gradle (Kotlin DSL)
- Android Studio Ladybug | 2024.2.1 or newer
- Android SDK 36
- JDK 11 or higher
- Android device or emulator running Android 13 (API 33) or higher
git clone https://github.com/yourusername/mixtapehaven-android.git
cd mixtapehaven-android- Open Android Studio
- Select File > Open
- Navigate to the cloned repository
- Click OK
./gradlew buildConnect an Android device or start an emulator, then:
./gradlew installDebugOr use the Run button in Android Studio.
# Run unit tests
./gradlew test
# Run instrumented tests (requires device/emulator)
./gradlew connectedAndroidTest
# Run specific test
./gradlew test --tests pe.net.libre.mixtapehaven.ExampleUnitTest# Run lint checks
./gradlew lint
# Clean build
./gradlew cleanapp/
├── src/
│ ├── main/
│ │ ├── java/pe/net/libre/mixtapehaven/
│ │ │ ├── data/ # Data layer (repositories, services)
│ │ │ │ └── playback/ # Media playback service
│ │ │ ├── ui/ # UI layer
│ │ │ │ ├── theme/ # Theme configuration
│ │ │ │ ├── navigation/ # Navigation setup
│ │ │ │ ├── home/ # Home screen & components
│ │ │ │ ├── nowplaying/ # Now playing screen
│ │ │ │ ├── onboarding/ # Onboarding flow
│ │ │ │ └── troubleshoot/ # Troubleshooting screen
│ │ │ └── MainActivity.kt # App entry point
│ │ └── res/ # Resources (layouts, strings, etc.)
│ ├── test/ # Unit tests
│ └── androidTest/ # Instrumented tests
└── build.gradle.kts # App-level build configuration
gradle/
└── libs.versions.toml # Version catalog for dependencies
CLAUDE.md # Project guidance for Claude Code
README.md # This file
Mixtape Haven follows modern Android development practices:
- Jetpack Compose for declarative UI
- Material 3 components and theming
- ViewModels for UI state management
- Navigation Compose for app navigation
- Retrofit for network requests
- DataStore for local preferences
- Media3 ExoPlayer for audio playback
- MediaPlaybackService for background playback
- Single Activity architecture
- Unidirectional data flow
- Repository pattern (where applicable)
- Separation of concerns
The app requires the following permissions:
INTERNET- Stream music from remote sourcesACCESS_NETWORK_STATE- Check network connectivityFOREGROUND_SERVICE- Background music playbackFOREGROUND_SERVICE_MEDIA_PLAYBACK- Media playback notificationsPOST_NOTIFICATIONS- Display playback notificationsWAKE_LOCK- Keep device awake during playback
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Kotlin coding conventions
- Use meaningful variable and function names
- Write unit tests for new features
- Keep Compose components small and focused
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Jetpack Compose
- Media playback powered by Media3 ExoPlayer
- Networking with Retrofit
- Image loading with Coil
For issues, questions, or suggestions, please open an issue on GitHub.
Made with ❤️ using Kotlin and Jetpack Compose