The application is developed using the Kotlin language and incorporates Jetpack Compose. On the initial screen of the app, music genres are listed. On the same page, there is a heart icon that leads to the 'Favorites' page. When a music genre is selected, it takes you to the 'Artists' page, which lists artists related to the chosen music genre. When you select a specific artist, it displays details about the artist and lists their albums on the 'Artist Details' page. If you select an album from the list, it takes you to the 'Album Details' page, where you can add songs to your favorites. You can also remove songs from your favorites if they are already added. A 30-second preview of the selected songs is available, and you can stop the preview whenever you like. In the 'Favorites' page, you can play 30-second previews of the added songs and stop them as needed. You can also remove songs from your favorites. The application is compatible with both light and dark themes.
record.mp4
Dark | Light | |
---|---|---|
Music Genres | ||
Artists | ||
Artist Detail | ||
Album Detail | ||
Favorites | ||
Play Music |
:app
The module responsible for navigation.:feature:albumdetail
,:feature:artistdetail
,:feature:artists
,:feature:favorites
,:feature:musicgenres
,:feature:playmusic
Each module represents a screen.:feature:designsystem
It houses the components and icons present in the application. It sets the theme of the application.:feature:ui
It houses the common components used by screens.:core:models
It contains the models to be used on the UI side.:core:domain
It houses use cases. It serves as a bridge between the data layer's repositories and the UI.:core:data
It retrieves data from sources and sends it to the UI through the:core:domain
module.:core:network
It sends requests to APIs and processes the returned responses.:core:database
It stores data in a local database using Room.:core:common
Stores common classes shared between modules.
The app uses MVVM [Model-View-ViewModel] architecture to have a unidirectional flow of data, separation of concern, testability, and a lot more.