MovieApp

Android Application consisting of only 1 Activity and 2 fragments when the user opens the app should check the network connectivity and if the device is connected to the internet then get the most popular and top-rated movies. when the user taps on any movie we will transition to the movie details screen.

Tech Stack

  • Clean Architecture with MVVM
  • Modularity
  • Coroutines
  • Unit test
  • UI and automation testing
  • Handle Configuration Changes
  • Jetpack Navigation component
  • MenuHost
  • Dependency injection design pattern
  • Repository design pattern
  • LiveData, ViewModel
  • Retrofit
  • DataBinding
  • Recycler view
  • Picasso for Image Loading
  • ConstraintLayout

Screen recording 📸

WhatsApp.Video.2022-10-11.at.3.16.56.AM.mp4

Project Diagram

MovieApp Diagram drawio (2)

Code Design

Untitled Diagram (1) drawio (2)

Usecases

  • GetMostPopularMoviesUseCase
  • GetTopRatedMoviesUseCase

Test Cases 🧪

  • getMostPopularMovies() must return NetworkError DataState when the device is not connected to the internet
  • getMostPopularMovies() must return Successfully DataState with list of ResultsDomainEntity when Successful API response
  • getMostPopularMovies() must return Empty DataState when response return empty list
  • getMostPopularMovies() must return Exception DataState when request exception
  • getTopRatedMovies() must return NetworkError DataState when the device is not connected to the internet
  • getTopRatedMovies() must return Successfully DataState with list of ResultsDomainEntity when Successful API response
  • getTopRatedMovies() must return Empty DataState when response return empty list
  • getTopRatedMovies() must return Exception DataState when request exception
  • GetMostPopularMoviesUseCase() must invoke getMostPopularMovies from MoviesRepository
  • GetTopRatedMoviesUseCase() must invoke getTopRatedMovies from MoviesRepository
  • Map DataEntity to DomainEntity must DomainEntity
  • resolvePosterPath must return full ImageUrl (BaseUrl + image size + PosterPath)

Tasks breakdown and estimates 📝

  • App creation: 1H
  • Creating UI: 3H
  • Getting the most popular and top-rated movies from remote: 3H
  • Handle error response: 1H
  • Handle the movie fragment with its ViewModel: 3H
  • Handle Configuration Changes: 1H
  • Handle the movie details fragment with its ViewModel: 1H