A modern Android application built to preview movies, view details, and search for content using The Movie Database (TMDb) API. The project is developed using Kotlin, Jetpack Compose, and follows Clean Architecture with the MVI (Model-View-Intent) pattern, demonstrating best practices in modularity, caching, and state management.
| Home (Shimmer Effect) | Home (Movies List) | Movie Details |
|---|---|---|
![]() |
![]() |
![]() |
| Search (Animation Effect) | Real-time Search | Wrong Title BG |
|---|---|---|
![]() |
![]() |
![]() |
Based on the project requirements:
- 🎥 Browse Movies: Displays a paginated list of movies
- 🔍 Real-time Search: Search for movies by title with instant results as you type.
- 📄 Movie Details: View comprehensive info (synopsis, rating, release year, etc).
- ⚡ Offline First (Caching):
- Automatically caches data locally using Room.
- Displays cached content immediately while fetching fresh data in the background.
- 🛡️ Content Filtering: Implements strict content filtering (PG-13, No Adult content).
- 🎨 Material Design 3: Modern, responsive UI with Dark/Light theme support.
This project uses the latest modern Android development tools:
| Category | Library/Tool |
|---|---|
| Language | Kotlin |
| UI Framework | Jetpack Compose (Material 3) |
| Architecture | Clean Architecture + MVI |
| DI | Koin |
| Network | Ktor |
| Local Database | Room Database |
| Async | Coroutines & Flow |
| Pagination | Paging 3 (Remote Mediator) |
| Image Loading | Coil |
| Testing | JUnit4, Mockk, Turbine, Compose UI Test |
| Build System | Gradle (Version Catalogs - TOML) |
| Version Control | Git Flow Workflow |
To run this project locally, follow these steps:
- Android Studio Ladybug (or newer).
- JDK 17 or higher.
git clone [https://github.com/YOUR_USERNAME/Movies.git](https://github.com/YOUR_USERNAME/Movies.git)
cd MoviesThis project requires a TMDb API Key.
Register at themoviedb.org.
Request an API Key.
Create a local.properties file in the root directory (if not exists).
Add your key and token as follows:
Properties
sdk.dir=/path/to/your/android/sdk
API_KEY="your_api_key_here"
API_ACCESS_TOKEN="your_access_token_here"
Sync Project with Gradle Files.
Select the app configuration.
The project includes comprehensive testing strategies:
Unit Tests: Covers ViewModels (MVI logic), Repositories using Mockk and Turbine.
UI Tests: Smoke tests to verify app launch and list rendering using Compose UI Test.
To run tests via terminal:
./gradlew testDebugUnitTest # Run Unit Tests
./gradlew connectedDebugAndroidTest # Run UI Tests
As per the task requirements, all API requests strictly enforce the following filters to ensure appropriate content:
include_adult=false
certification_country=US
certification.lte=PG-13This project utilizes the Git Flow branching model:
main: Production-ready code.
develop: Integration branch for features.
feature/*: Individual features (e.g., feature/caching, feature/search).
release/*: Preparation for a new production release.
Made with ❤️ by Mohammad Ashrf
Happy exploring! 🚀





