Forgotten Films App is an Android application for enjoying films from the past. It provides everything that you will need to immerse the user in the world of classic films.
Get it here: Forgotten Films
- Language: Kotlin
- UI: Jetpack Compose
- The app is connected to a REST API (https://github.com/Bogomil-Stoyanov/ForgottenFilmsApi)
- Register a user with email, password, nickname and favourite film genres
- Login with email and password
- Forgotten password and change password
- Get recommended films to watch depending on your favourite genres
- Search, watch, like, dislike and share films
- Watch time statistics - get statistcs on your watchtime and top genres. This data is collected to imporve the recommendations algorithm.
Forgotten Films uses the most modern libraries for Android Development
- [AndroidX] - Extension libraries for Android (https://github.com/androidx)
- [Retrofit] - A type-safe HTTP client for Android (https://github.com/square/retrofit)
- [ExoPlayer] - An extensible media player for Android (https://github.com/google/ExoPlayer)
- [Jetpack Compose] - Android’s modern toolkit for building native UI (https://developer.android.com/jetpack/compose)
- [Coil] - An image loading library (https://coil-kt.github.io/coil/)
The application is built following Clean Architecture MVVM.
Also it is using Single Activity Architecture.
The application follows Test Driven Development.
. The tests are creted before the actual implementation
All ViewModels have tests that cover the business logic.
There are automated UI tests that verify the most user intansive screens
*Note: All tests HAVE to be ran on a REAL device as there are problems with the current version with Jetpack Compose and the testing library. These bugs should be fixed in the next release of the libraries.
Security is a top priority. The application communicates to the REST API via HTTPS. When a user selects to be remembered in the device, their login credentials are saved in encrypted shared preferences.
- Clone the repository
- Generate debug or a signed apk / bundle (depends on where the app will be distributed, it has to be a bundle, if uploaded to Google Play)