CineWatch

πŸŽ₯ A minimalistic movie listing app to browse movies using TMDB API, πŸ“² built to demonstrate MVVM Architecture, Kotlin, Coroutines, Dagger 2/Hilt, Architecture Components, Room, Retrofit, Material Components, CI/CD.

MIT License

Stars
31

CineWatch πŸŽ₯

A minimalistic movie listing app to browse movies using TMDB Api, built to demonstrate MVVM Architecture with latest hot-trending Android development tools including Dependency Injection, Room and many more.

Features πŸš€

  • Explore the Upcoming, Popular and Top Rated Movies.
  • Get detailed decription of all the movies.
  • Get details about the Cast and Crew members.
  • Bookmark your favourite movies.
  • Get movies trailer within the application.
  • Search for movies.

Built With πŸ› 

  • Kotlin - First class and official programming language for Android development.
  • Coroutines - For asynchronous and more..
  • Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.
    • LiveData - Data objects that notify views when the underlying database changes.
    • ViewModel - Stores UI-related data that isn't destroyed on UI changes.
    • ViewBinding - Generates a binding class for each XML layout file present in that module and allows you to more easily write code that interacts with views.
    • Room - SQLite object mapping library.
    • Paging 3 - The Paging library helps you load and display pages of data from a larger dataset from local storage or over network.
  • Navigation Graph - The Navigation component uses a navigation graph to manage your app's navigation.
  • Dagger 2 - Dependency Injection Framework
  • Retrofit - A type-safe HTTP client for Android and Java.
  • Coil - An image loading library for Android backed by Kotlin Coroutines.
  • Material Components for Android - Modular and customizable Material Design UI components for Android.

Download πŸ“₯

  • Download the latest APK build from here

Screenshots πŸ“·

Dark Mode Available πŸŒ™

Architecture πŸ—Ό

This project follows the famous MVVM architecture and best practices from Google's GithubBrowserSample architecture

Project Structure πŸ“‚

.
β”œβ”€β”€ CineWatch.kt
β”œβ”€β”€ data
|   |
|   β”œβ”€β”€ api
|   |   β”œβ”€β”€ NetworkService.kt
|   |   └── SafeApiRequest.kt
β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”œβ”€β”€ BookmarkDatabase.kt
β”‚   β”‚   └── dao
β”‚   β”‚     └── BookmarkDao.kt
β”‚   β”œβ”€β”€ model
β”‚   β”‚   β”œβ”€β”€ Actor.kt
β”‚   β”‚   β”œβ”€β”€ Cast.kt
β”‚   β”‚   β”œβ”€β”€ CastCreditResponse.kt
β”‚   β”‚   β”œβ”€β”€ Genre.kt
β”‚   β”‚   β”œβ”€β”€ Movie.kt
β”‚   β”‚   β”œβ”€β”€ MovieCreditsResponse.kt
β”‚   β”‚   β”œβ”€β”€ MovieDB.kt
β”‚   β”‚   β”œβ”€β”€ MovieResponse.kt
β”‚   β”‚   β”œβ”€β”€ Resourse.kt
β”‚   β”‚   β”œβ”€β”€ State.kt
β”‚   β”‚   β”œβ”€β”€ Video.kt
β”‚   β”‚   └── VideoResponse.kt
β”‚   └── repository
β”‚       └── NetworkRepository.kt
β”œβ”€β”€ di
β”‚   └── module
β”‚       β”œβ”€β”€ ApiModule.kt
β”‚       └── DatabaseModule.kt
β”œβ”€β”€ ui
β”‚   β”œβ”€β”€ SplashScreenActivity.kt
β”‚   β”œβ”€β”€ adapter
β”‚   |   β”œβ”€β”€ BestMoviesRecyclerViewAdapter.kt
β”‚   |   β”œβ”€β”€ BookmarkRecyclerViewAdapter.kt
β”‚   |   β”œβ”€β”€ CastRecyclerViewAdapter.kt
β”‚   |   β”œβ”€β”€ HomeRecyclerViewAdapter.kt
β”‚   |   β”œβ”€β”€ HomeViewPagerAdapter.kt
β”‚   |   β”œβ”€β”€ SearchRecyclerViewAdapter.kt
β”‚   |   β”œβ”€β”€ SimilarMoviesRecyclerViewAdapter.kt 
β”‚   |   └── ViewAllRecyclerViewAdapter.kt
β”‚   β”œβ”€β”€ details
β”‚   |   β”œβ”€β”€ ActorDetailsFragment.kt
β”‚   |   β”œβ”€β”€ ActorDetailsViewModel.kt
β”‚   |   β”œβ”€β”€ MovieDetailsFragment.kt
β”‚   |   └── MovieDetailsViewModel.kt
β”‚   β”œβ”€β”€ dialog
β”‚   |   └── VideoPlayer.kt
β”‚   β”œβ”€β”€ home
β”‚   |   β”œβ”€β”€ HomeFragment.kt
β”‚   |   └── HomeViewModel.kt
β”‚   β”œβ”€β”€ list
β”‚   |   β”œβ”€β”€ ViewAllFragment.kt
β”‚   |   └── ViewAllViewModel.kt
β”‚   β”œβ”€β”€ main
β”‚   |   β”œβ”€β”€ MainActivity.ky
β”‚   |   └── viewpager
β”‚   |       └── HomeViewPagerFragment.kt
β”‚   β”œβ”€β”€ paging
β”‚   |   β”œβ”€β”€ PopularPagingSource.kt
β”‚   |   β”œβ”€β”€ SearchPagingSource.kt
β”‚   |   β”œβ”€β”€ TopRatedPagingSource.kt
β”‚   |   └── UpcomingPagingSource.kt 
β”‚   └── search
β”‚       β”œβ”€β”€ SearchFragment.kt
β”‚       └── SearchViewModel.kt
└── utils
    β”œβ”€β”€ ActivityUtils.kt 
    β”œβ”€β”€ CONSTANTS.kt
    β”œβ”€β”€ FragmentUtils.kt
    β”œβ”€β”€ NetworkUtils.kt
    β”œβ”€β”€ PlaceHolderUtils.kt
    β”œβ”€β”€ TimeUtils.kt
    └── ViewUtils.kt

Requirements 🎯

  • Android 5.0 and Above
  • Min sdk version 21

Permissions πŸ’»

  • Internet

Donate πŸ’²

If you like the project and wanna support me develop new stuff, You can buy me a coffee.

If you liked the project don't forget to star 🌟 and fork 🍽 the project.

Badges
Extracted from project README
License
Related Projects