Skip to content
Example app with latest development standards in Android SDK and Kotlin
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Liber Da Silva - Android expertise example logo

Spanish version

Example app with latest development standards in Android SDK and Kotlin


  • List movies by Most Popular, Top rated and Upcoming categories using The Movie DB database.
  • Movie details and full description.
  • Online movie search engine.
  • The whole app and its search engine works in online and offline mode. It always works online but if it detects no connection it automatically consumes the local information.

Technologies and techniques

  • MVVM - MVVM architecture with Repository as "single source of truth".
  • Kotlin - Written entirely in this language.
  • Kodein - Dependencie injection for effective layers separation and total independence of components.
  • Kotlin Coroutines - Asynchronous tasks management.
  • LiveData - For communication between components through the Observer pattern.
  • Navigation - For navigation between views.
  • Room - For data persistence.
  • Glide - An image loading and caching library.
  • Groupie - Manage complex RecyclerView layouts.
  • Retrofit y GSON - For TheMovieDB API consume.

Application layers


Detailed explanation and responsibility of relevant classes

  • Views (ui package): MainActivity render the app and initialize Navigator. The main Fragments (in list package) will be called when the different categories are selected. MostPopularFragment, TopRatedFragment and UpcomingFragment inherit from MovieListFragment, abstract class that solves all movie lists logic. The detail view is MovieDetailFragment. Finally it's important to note ScopedFragment as Helper for handling the coroutines scopes to avoid problems with the life cycles of a Fragments.
  • ViewModels (ui package): MovieDetailViewModel and MovieListViewModel classes.
  • Repository (data.repository package): MovieRepository is the interface and MovieRepositoryImpl its implementation.
  • Model (data.db package): SQLite database managed with Room library. The DB configuration class is ExpertiseTestDatabase and MovieEntry is the movie entity. MovieDao interface has the methods and its database scripts representation.
  • Remote Data Source ( package): TheMovieDbApiService has the endpoints config. MovieDataSource is the data source interface and MovieDataSourceImpld its implementation.


  • Add unit tests.
  • Add tv shows.



You can’t perform that action at this time.