Skip to content

MusicWiki is an unofficial Last.fm app that contains information about different music genres, the albums, artists and tracks listed under the genre.

Notifications You must be signed in to change notification settings

aikansh2001yadav/MusicWiki

Repository files navigation

MusicWiki

Description

MusicWiki is an unofficial Last.fm app that contains information about different music genres, the albums, artists and tracks listed under the genre with offline capabilities.

Application Screenshots

  • Genres Screen:

             

  • Genres Screen (Expanded):

             

  • Genre Detail Screen: It shows genre as a title, description of the genre. It also shows list of top albums, top tracks and top artists as different sections.

    • Albums Screen: It shows top albums of a particular genre.

             

    • Artists Screen: It shows top artists of a particular genre.

             

    • Tracks Screen: It shows top tracks of a particular genre.

             

Code Structure

The sample application is created mainly by keeping MVVM Architecture into our point of vision.

Different layers of the project:

  • Data layer: The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite. Defining the Room entity, setting up the DAO Interface and building the Database Builder is done in this layer.

  • Network layer: Network layer provides network implementation of the application. It fetches genres, albums, artists, tracks and genreinfo from remote database using retrofit api. Data will be stored in local database via room persistence library. Retrofit api also implements network interceptor to check connection status.

  • UI layer: The UI layer provides the UI implementation of the application. This layer internally implements MVVM (Model-View-ViewModel) architecture. It contains various fragments/activities, viewmodel and controller for the data.

Package Structure

 com.example.androidMVVMApp        # Root Package
  .
  ├── data                         # For data handling.
  │   ├── db                       # Local Persistence Database. Room (SQLite) database.
  │   ├── model                    # Model Classes.
  │   └── repository               # Defining the GenreRepository and GenreItemsRepository classes which provide connection to LocalDataSource and RemoteDataSource classes.
  |
  ├── network                      # For handling remote database.
  │    
  ├── ui                           # Implements UI functionalities.
  │   ├── genre                    # Contains GenreActivity, GenreAdapter, GenreViewModel and GenreViewModelFactory classes to show list of genres.
  |   └── genreInfo                # Contains fragments and activity which shows genre as title, genre's information and list of albums, top tracks and top artists.
  │       ├── album                # Contains AlbumFragment, AlbumsAdapter, AlbumViewModel and AlbumViewModelFactory classes to show list of albums.
  │       ├── artist               # Contains ArtistFragment, ArtistsAdapter, ArtistViewModel and ArtistViewModelFactory classes to show list of artists.
  │       └── track                # Contains TracksFragment, TracksAdapter, TrackViewModel and TrackViewModelFactory classes to show list of tracks.
  |
  └── utils                        # Utility Classes / Kotlin extensions

Technologies and Libraries

  • Kotlin - Official programming language for Android development.
  • Coroutines - For working with asynchronous threading related task.
  • Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps. Thus they help us to separate business logic apart from the UI logic and helps us in designing proper architecture.
    • LiveData - Data objects that notify views when the underlying database changes.
    • ViewModel - Stores UI-related data that isn't destroyed on configuration changes.
    • DataBinding - The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.
    • Room - The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite.
  • Retrofit - Retrofit is a type-safe HTTP client for Android and Java – developed by Square (Dagger, Okhttp).
  • Glide - Glide is a fast and efficient image loading library for Android focused on smooth scrolling. Glide offers an easy to use API, a performant and extensible resource decoding pipeline and automatic resource pooling.
  • Circle Image View - A fast circular ImageView perfect for profile images. This is based on RoundedImageView from Vince Mi which itself is based on techniques recommended by Romain Guy.
  • Last Fm Api - The Last.fm API allows anyone to build their own programs using Last.fm data.

Built With

  • Android Studio

Author

About

MusicWiki is an unofficial Last.fm app that contains information about different music genres, the albums, artists and tracks listed under the genre.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages