MovieCatalogApp is an Android application that allows users to browse popular movies and view detailed information about each movie. The app is built using modern Android development practices and libraries.
- View a list of popular movies
- See detailed information about each movie
- Offline support with local caching
- Automatically refreshes content when an internet connection becomes available
- Constantly listens for network changes to ensure up-to-date content
- Pull-to-refresh functionality
- Clean and intuitive user interface
- Language: Kotlin
- UI: Jetpack Compose
- Architecture: Clean Architecture with MVI pattern
- Dependency Injection: Hilt
- Networking: Retrofit
- Local Database: Room
- Image Loading: Glide
- Asynchronous Programming: Kotlin Coroutines and Flow
- Navigation: Jetpack Navigation Compose
The project is organized into several modules:
app
: Main application moduledata
: Handles data operations and contains repository implementationsdomain
: Contains business logic and use casespresentation
: Manages UI-related code including ViewModels and Compose UIdi
: Handles dependency injection setuputils
: Contains utility classes and functions
TmdbApi
: Interface for The Movie Database API calls
MovieDatabase
: Room database setupMovieDao
: Data Access Object for local movie data
MovieRepository
: Manages data operations between local database and remote API
GetPopularMoviesUseCase
: Retrieves the list of popular moviesGetMovieDetailsUseCase
: Fetches detailed information about a specific movie
MovieListViewModel
: Manages state for the list of moviesMovieDetailsViewModel
: Manages state for individual movie details
MovieListScreen
: Displays the list of popular moviesMovieDetailsScreen
: Shows detailed information about a selected movieNavigation
: Handles navigation between screens
To get started with this project:
- Clone the repository
- Open the project in Android Studio
- Sync the project with Gradle files
- Run the app on an emulator or physical device
This project uses The Movie Database (TMDb) API. You need to provide your own API key:
- Get an API key from TMDb
- Add your API key to the
local.properties
file:api_key="YOUR_API_KEY_HERE"
Contributions are welcome! Please feel free to submit a Pull Request.