eMovie is an Android application that provides information of movies. The goal of this app is to show some movies from TheMovie DB servers showing the "Upcoming" and "Top Rated" movies. When pressing any movie you can watch the details of it.
-
UI
- Compose declarative UI framework
- Material design
-
Tech/Tools
- Kotlin 100% coverage
- Coroutines and Flow for async operations
- Hilt for dependency injection
- Jetpack
- Compose
- Navigation for navigation between fragments
- ViewModel that stores, exposes and manages UI state
- Preferences Datastore for user preferences related to movie list filters
- Retrofit for networking
- Landscapist Glide for image loading
-
Modern Architecture
- Single activity architecture (with Navigation component) that defines navigation graphs
- MVVM for presentation layer
- Android Architecture components (ViewModel, Navigation)
- Android KTX - Jetpack Kotlin extensions
- This project was developed using CLEAN Architecture and MVVM (Model View ViewModel)
- It uses Single Source of Truth principle so that all data from API is stored in Room DB. This way we see our database as the SSOT and we listen for changes related with this data source of the app
- The architecture contains the following features:
-
data:
- remote: Using Retrofit (REST API) and OkHttp (Security and interceptors)
- Contains all the logic for getting movie data from API including mappers, models and others
- Repository implementation that links with domain layer
- local: Using Room DB
- Contains all the logic for creating the RoomDB Instance, Entities and Daos.
- Repository implementation that links with domain layer
- remote: Using Retrofit (REST API) and OkHttp (Security and interceptors)
-
domain: Intermediate layer between data and presentation. We manage the business logic in this layer using the proper abstraction to establish link between ui and data layer
-
ui: This contains the models and the different fragments related to home, detail and favorite screens
-
di: Contains logic of Dependency Injection using Dagger Hilt, separating the scopes for any layer and the ViewModel.
-
utils: Some tools related with general utilities used through the entire app
-
- Swipe Refresh Layout in the list
- ic_launcher for eMovie logo
- Favorite movies
- Filter recommended movies with language and release year options
- Expandable/Collapsable Toolbar in detail screen
- Splash Screen API from Jetpack