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