├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── themes.xml │ │ │ │ └── colors.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── xml │ │ │ │ ├── backup_rules.xml │ │ │ │ └── data_extraction_rules.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── drawable │ │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── ajailani │ │ │ │ └── musicplayer │ │ │ │ ├── util │ │ │ │ ├── PlayerState.kt │ │ │ │ ├── Resource.kt │ │ │ │ └── Extension.kt │ │ │ │ ├── ui │ │ │ │ ├── navigation │ │ │ │ │ ├── Screen.kt │ │ │ │ │ └── Navigation.kt │ │ │ │ ├── screen │ │ │ │ │ ├── home │ │ │ │ │ │ ├── HomeUiState.kt │ │ │ │ │ │ ├── HomeEvent.kt │ │ │ │ │ │ ├── component │ │ │ │ │ │ │ ├── MusicItem.kt │ │ │ │ │ │ │ └── MusicMiniPlayerCard.kt │ │ │ │ │ │ ├── HomeViewModel.kt │ │ │ │ │ │ └── HomeScreen.kt │ │ │ │ │ └── music_player │ │ │ │ │ │ ├── MusicPlayerEvent.kt │ │ │ │ │ │ ├── MusicPlayerViewModel.kt │ │ │ │ │ │ └── MusicPlayerScreen.kt │ │ │ │ ├── shared_component │ │ │ │ │ ├── MusicPlaybackUiState.kt │ │ │ │ │ └── SharedViewModel.kt │ │ │ │ └── theme │ │ │ │ │ ├── Type.kt │ │ │ │ │ ├── Color.kt │ │ │ │ │ └── Theme.kt │ │ │ │ ├── domain │ │ │ │ ├── model │ │ │ │ │ └── Music.kt │ │ │ │ ├── use_case │ │ │ │ │ ├── GetMusicsUseCase.kt │ │ │ │ │ ├── PauseMusicUseCase.kt │ │ │ │ │ ├── GetCurrentMusicPositionUseCase.kt │ │ │ │ │ ├── ResumeMusicUseCase.kt │ │ │ │ │ ├── SkipNextMusicUseCase.kt │ │ │ │ │ ├── SkipPreviousMusicUseCase.kt │ │ │ │ │ ├── DestroyMediaControllerUseCase.kt │ │ │ │ │ ├── PlayMusicUseCase.kt │ │ │ │ │ ├── SeekMusicPositionUseCase.kt │ │ │ │ │ ├── SetMusicShuffleEnabledUseCase.kt │ │ │ │ │ ├── SetPlayerRepeatOneEnabledUseCase.kt │ │ │ │ │ ├── AddMediaItemsUseCase.kt │ │ │ │ │ └── SetMediaControllerCallbackUseCase.kt │ │ │ │ ├── repository │ │ │ │ │ └── MusicRepository.kt │ │ │ │ └── service │ │ │ │ │ └── PlaybackController.kt │ │ │ │ ├── di │ │ │ │ ├── AppModule.kt │ │ │ │ ├── ViewModelModule.kt │ │ │ │ ├── DataModule.kt │ │ │ │ ├── NetworkModule.kt │ │ │ │ └── DomainModule.kt │ │ │ │ ├── data │ │ │ │ ├── remote │ │ │ │ │ ├── dto │ │ │ │ │ │ ├── MusicsResponse.kt │ │ │ │ │ │ └── MusicDto.kt │ │ │ │ │ ├── data_source │ │ │ │ │ │ └── MusicRemoteDataSource.kt │ │ │ │ │ └── api_service │ │ │ │ │ │ └── MusicService.kt │ │ │ │ ├── mapper │ │ │ │ │ └── MusicMapper.kt │ │ │ │ ├── repository │ │ │ │ │ └── MusicRepositoryImpl.kt │ │ │ │ └── service │ │ │ │ │ ├── MusicPlaybackService.kt │ │ │ │ │ └── MusicPlaybackController.kt │ │ │ │ ├── App.kt │ │ │ │ └── MainActivity.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── ajailani │ │ │ └── musicplayer │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── ajailani │ │ └── musicplayer │ │ └── ExampleInstrumentedTest.kt ├── release │ └── output-metadata.json ├── proguard-rules.pro └── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── settings.gradle ├── .gitignore ├── README.md ├── gradle.properties ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | MusicPlayer 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ajailani4/music-player/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/java/com/ajailani/musicplayer/util/PlayerState.kt: -------------------------------------------------------------------------------- 1 | package com.ajailani.musicplayer.util 2 | 3 | enum class PlayerState { 4 | PLAYING, 5 | PAUSED, 6 | STOPPED 7 | } -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |