This application solves the common problem of deciding what movies or TV series to watch when multiple people gather together. It's often difficult to reach consensus since someone has usually already seen what the majority wants to watch, or everyone has different preferences.
The app allows you to track movies you've watched and add ones to your watchlist. Our sophisticated algorithm filters this information across all group members and recommends movies that everyone will enjoy during your next movie night or family gathering.
MVVM (Model-View-ViewModel): Follows Google's established standards and is widely adopted by the developer community. This ensures clear separation between UI logic, business logic, and the data model, facilitating maintenance and scalability.
Flow and Coroutines: Used for reactive state management, Flow enables efficient and safe UI updates in response to data changes.
Hilt: Dependency injection is managed through Hilt, simplifying object construction and promoting loose coupling with more testable code.
Firestore: Used to manage users, movies, and the groups they belong to.
Auth: Firebase Authentication is used to obtain the UID that is sent to the backend for user identification. The registration providers used are: email/password and Google
Crashlytics: Used for early detection of application errors, allowing us to address them quickly and prevent them from affecting more users.
Jetpack Compose: This project is built using Jetpack Compose, Android's modern UI toolkit for creating native interfaces declaratively and efficiently. It simplifies and accelerates Android UI development.
Retrofit: Used for API calls due to its efficiency and easy integration with JSON converters like Gson.
Navigation Component: Navigation management uses the Android Jetpack navigation component, along with a third-party library for managing navigation arguments.
Coroutines: Used for asynchronous programming and background task management with Kotlin Coroutines.
StateFlow: Used for communication between ViewModel and UI.
CI/CD: GitHub Actions is used for Continuous Integration.
Ktlint: Used for code checking and auto-formatting to maintain coding standards among all project contributors. We specifically use the plugin from jlleitschuh.
To participate in this project, we recommend:
- Fork the project and give it a star to support and increase repo visibility.
- Create a branch for developing improvements or new features. Why use a branch? It's better to develop changes in a separate branch to keep your fork clean, allowing you to pull updates we make to the main repository.
- Merge changes into your branch, resolving any conflicts that may arise.
- Create a Pull Request from your branch to our develop branch.
- We will then review your PR, suggest changes, or accept it to merge your changes into the main repository.
Due to the use of Firebase and GitHub Actions, the project will not compile automatically, so several setup steps are required:
First, create a Firebase project and configure it. Don't forget to:
- Add your SHA-1 key in the project configuration under the "General" tab.
- Download the
google-services.jsonfile and add it to your Android project's app folder.
To obtain the TMDB API token, register on TMDB, go to Settings > API, and create a new API key.
Then, add it to your project's gradle.properties file with the name TMDB_ACCESS_TOKEN
Koin Unit tests: https://insert-koin.io/docs/reference/koin-test/testing Koin Android tests: https://insert-koin.io/docs/reference/koin-android/instrumented-testing/