Skip to content

Repository files navigation

🎬 Movies - Multi-Module Android App

Android Kotlin Compose Clean Architecture

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.


📱 Screenshots

Home (Shimmer Effect) Home (Movies List) Movie Details
image image image

Search (Animation Effect) Real-time Search Wrong Title BG
image image image

✨ Features

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.

🛠️ Tech Stack & Libraries

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

⚙️ Setup & Installation:

To run this project locally, follow these steps:

1. Prerequisites:

  • Android Studio Ladybug (or newer).
  • JDK 17 or higher.

2. Clone the Repository:

git clone [https://github.com/YOUR_USERNAME/Movies.git](https://github.com/YOUR_USERNAME/Movies.git)
cd Movies

3. API Key Configuration 🔑:

This 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"

4. Build and Run:

Sync Project with Gradle Files.

Select the app configuration.

Run on an Emulator or Physical Device.

🧪 Testing:

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

✅ API Compliance

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-13

🤝 Git Flow

This 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! 🚀

Releases

Packages

Contributors

Languages