Kotlin, Compose, Flow, Retrofit, Coroutines, Material3, JUnit, TMDB (The movie database).
The project downloads a list of movies from The Movie Database API and displays it in three categories. The user can check movie details by clicking on its poster. The user can also add a movie to the list of favorites. The latest technologies were used, such as Coroutine, Compose, Flow to speed up development and improve the code's readability.
- Latest movies as a list with a poster image with a filter [Upcoming, Top Rated, No Playing]
- When an item on the list is clicked it should open a new screen that shows the movie image, description, year and rating.
- This screen should be opened with an animation
- There should be another tab in the app which shows the movies the user liked (saved movies)
- Focus on architectures, efficiency, and latest approaches.
- The list should allow for infinite scrolling (lazy loading), loading more items when the user reaches the end (or near it, for optimization)
- Write Unit Tests
- Provide a clear user experience when there is no internet connection.
- Follow HIG for iOS and Matirial Design for Android
- Supports dark mode
- Cache images, set expiration of 1 day.- Coil, a recommended library for remote image management, has a caching mechanism but does not allow developers to change it. One possible solution is to implement another library or manually delete the directory from the app's internals.
- Present a Play button to play the trailer in a controller. The Movie Detail API returns data without a video url, requires additional research to find out how to get the trailer.
- To receive genre data, we need to make an additional request.
- Implement mechanism to make a request for data in the specified language.
- Downloading movie details from the API is not considered best practice.
- We can create an additional call to retrieve a list of movie posters and display them in the movie details.
- On image click, open the full-size image with zoom options.
- Favorite movies have to be stored on a remote source that requires user authentication.
- Use Dagger Hilt for dependency injection.
- After screen rotate scroll state should be store for better user experience.
Screenshots: