/MovieApp

This application is a movie application developed with Jetpack Compose. The application was built in accordance with mvvm architecture using firebase integrations and popular libraries such as room, hilt, kotlin-coroutines, datastore, paging3, retrofit.

Primary LanguageKotlin

Jetpack Compose - Movie App 🎬

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.

Tech Stack 📚

Outputs 🖼

Preview

_.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

Tablet Preview

               

Landscape Preview

Modularization 📦

movie_app_modular_graph

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:
  • feature:movie_details Movie details provide comprehensive information about a film, including its title, release date, cast, and plot summary.
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

Architecture 🏗

The app uses MVVM [Model-View-ViewModel] architecture to have a unidirectional flow of data, separation of concern, testability, and a lot more.

mvvm

API 📦

TMDB Movie API

Installation 🏗

  • 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.