Movie App is developed with Jetpack Compose. To log in to the application, you must first create an account or sign in with Google. Authentication is done with Firebase. The app can display movies that are trending, top rated and upcoming. On the See all movies page, all selected movies are shown with pagination. You can search for any movie, add it to the watchlist or look at the details of the movie. The movie details show the movie poster, a short description about the movie, director, rating, cast, trailers, user reviews and recomended movies. You can also get details about the movie you have selected on this page from the Gemini api. On the profile screen you can change the app's language, theme and, if the device is Android 12 and above, you can also choose dynamic color. The profile picture is kept with Firebase storage. When the account is deleted, the watchlist and profile picture are also deleted from Firebase. The application can work in both landscape and portrait mode. The Application also works compatible with tablets.
- Android Architecture Components
- Hilt
- Room
- Retrofit
- Coil
- Firebase Auth
- Firebase Storage
- Firebase Firestore
- Paging 3
- Datastore
- Rating Bar
- Youtube Player View
- Splash API
- Google Sign In
- Gemini API
- Palette API
_.mp4
Light | Dark | |
---|---|---|
Login Screen | ||
SignUp Screen | ||
Movies Screen | ||
Search Screen | ||
WatchList Screen | ||
Profile Screen | ||
See All Screen | ||
Movie Details Screen | _.mp4 |
_.mp4 |
Actor Details Screen | _.mp4 |
_.mp4 |
Name | Responsibilities | Key classes |
app
|
Brings everything together required for the app to function correctly. This module responsible for navigation. | MovieApp, MainActivity |
feature:1, feature:2 ... |
Functionality associated with a specific feature or user journey. Typically contains UI components and ViewModels which read data from other modules. Examples include:
|
MovieDetailsScreen MovieDetailsViewModel
|
core:data
|
Fetching app data from multiple sources and sends it to the UI through the core:domain module.
|
MovieRepository |
core:designsystem
|
Design system which includes Core UI components (many of which are customized Material 3 components), app theme and icons. |
MovieButton MovieTextButton MovieAppTheme
|
core:ui
|
Composite UI components and resources used by feature modules. Unlike the designsystem module, it is dependent on the data layer since it renders models.
|
MovieItem
|
core:common
|
Common classes shared between modules. | UiText Response
|
core:network
|
Making network requests and handling responses from a remote data source. | MovieApi MovieRemoteDataSource
|
core:datastore
|
Storing persistent data using DataStore. | MovieAppPreferenceDataSource |
core:database
|
Local database storage using Room. | WatchListDatabase Dao classes
|
core:model
|
Model classes used throughout the app. | Movie MovieDetail WatchList
|
core:domain
|
It houses use cases. It serves as a bridge between the data layer's repositories and the UI. | GetMovieTrailersUseCase
GetMovieDetailsUseCase
|
core:navigation
|
Contains navigation routes. | MainDestinations
HomeSections
|
core:authentication
|
Manages user identity verification and access control. | GoogleAuthClient
FirebaseAuthClient
|
The app uses MVVM [Model-View-ViewModel] architecture to have a unidirectional flow of data, separation of concern, testability, and a lot more.
- Generate a new TMDB Api key from here and generate a new Gemini Api key from here.
- Open the local.properties. Define API key.
- TMDB API KEY ->
API_KEY="YOUR_API_KEY"
, Gemini API KEY ->GEMINI_API_KEY="YOUR_API_KEY"
- Create a firebase project.
- Enable firebase auth, storage and firestore.
- Add google.services.json file to project.