TopCorn
A minimalistic movie listing app to browse IMDB's top 250 movies, built to demonstrate MVVM with latest hot-trending Android development tools.
Dark Mode Available
Download
- Download latest APK from here
Built With
- Kotlin - First class and official programming language for Android development.
- Coroutines - For asynchronous and more..
- Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.
- 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.
- Dagger 2 - Dependency Injection Framework
- Retrofit - A type-safe HTTP client for Android and Java.
- Moshi - A modern JSON library for Kotlin and Java.
- Moshi Converter - A Converter which uses Moshi for serialization to and from JSON.
- Glide - An image loading library for Android backed by Kotlin Coroutines.
- Material Components for Android - Modular and customizable Material Design UI components for Android.
- TwinKill - A simple library, a collection of utility classes wrapped around JetPack components
- MaterialColors - Android material color palettes
Architecture
This project follows the famous MVVM architecture and best practices from Google's GithubBrowserSample
Project Structure
.
+-- App.kt
+-- data
| +-- local
| | +-- AppDatabase.kt
| | +-- Converters.kt
| | +-- daos
| | | +-- MoviesDao.kt
| | +-- entities
| +-- remote
| | +-- ApiInterface.kt
| | +-- Movie.kt
| +-- repositories
| +-- movies
| +-- MoviesRepo.kt
+-- di
| +-- components
| | +-- AppComponent.kt
| +-- modules
| +-- ActivitiesBuilderModule.kt
| +-- AppModule.kt
| +-- DatabaseModule.kt
| +-- NetworkModule.kt
| +-- RepoModule.kt
| +-- ViewModelModule.kt
+-- models
| +-- FeedItem.kt
+-- ui
| +-- activities
| | +-- feed
| | | +-- FeedActivity.kt
| | | +-- FeedViewModel.kt
| | +-- movie
| | | +-- MovieActivity.kt
| | | +-- MovieViewModel.kt
| | +-- splash
| | | +-- SplashActivity.kt
| | | +-- SplashViewModel.kt
| +-- adapters
| +-- FeedAdapter.kt
| +-- MoviesAdapter.kt
+-- utils
+-- BindingAdapters.kt
+-- NetworkBoundResource.kt
+-- retrofit
| +-- FlowResourceCallAdapterFactory.kt
| +-- FlowResourceCallAdapter.kt
+-- test
+-- EspressoIdlingResource.kt
+-- OpenForTesting.kt
21 directories, 30 files
Credits
- Icons are from flaticon.com
- Design inspired from AnimeXStream
- Data from top250 API
- Thanks Foodium
TODO
- Improve algorithms and code review
- Add test cases
- Integrate OMDB API to add search feature
- Add favorites
Author
- theapache64