Jetpack Compose audio player app featuring Exo player, getting local audio from the device showing all audio files, artists, albums, favorite playlists, customizing new playlists, searching for audio files with artists, albums, and audio file names, supporting dark and light modes and supporting both English and Arabic languages.
- Get All local Audio file changes (deletions, additions, and updates).
- Show all Audio files, artists, albums, and favorite playlists.
- Search for Audio by artist, album, or audio name.
- Add, rename and delete custom playlists.
- Enable skipping android directory Audio files and recordings.
- Sort Audio files by recent changes, artist name, or audio name.
- Sort Albums ascending or descending.
- Handle Audio playing when become noisy (when other audio plays) or when detaching a headphone.
- Show notification with rewind, pause, and fast forward and show audio cover.
- Add an Audio file to favorite, repeat all or repeat once and shuffle the order of playing audio files.
- Support English and Arabic languages.
- Support Dark and Light modes.
-
Minimum SDK level 21
-
Kotlin based, Coroutines together with Flow for asynchronous streams and one side viewModel to fragment communication.
-
Dagger Hilt for dependency injection.
-
Exo Player: Provides an alternative to Android's MediaPlayer API for playing audio locally and over the Internet.
-
Room: Persistence library that provides an abstraction layer over SQLite database.
-
Datastore: to store key-value pairs or typed objects with protocol buffers.
-
SaveStateHandler to handle process death and pass data between fragments.
-
Jetpack Compose for the UI.
-
Coil Compose: An image loading library for Android backed by Kotlin Coroutines for loading async images for compose.
-
Holi Colors A wide collection of colors from different palettes for easy access in Compose application.
-
Accompanist: A group of libraries that aim to supplement Jetpack Compose with features that are commonly required by developers
- Compose Pager Provides paging layouts for Jetpack Compose.
- System UI controller Provides easy-to-use utilities for updating the System UI bar colors within Jetpack Compose.
- Extended Icons Provides a full set of Material icons to be used with Compose.
-
JetPack:
- Lifecycle - Dispose of observing data when the lifecycle state changes.
- Fragments - Present a reusable portion of the app's UI.
- ViewModel - UI-related data holder, lifecycle aware.
- Navigation Component (Not compose navigation) - Makes it easier to navigate between different screens and pass data in a type-safe way.
-
Architecture:
- MVI Architecture (Model-View-Intent).
- Repository pattern.