Authors: Raphael Dray
This program is an Android Mobile Application.
It can be launched with an Android Simulator (included with Android Studio).
It fetches data from TMDB (The Movie Database) API.
It's written in Java programming language including some libraries like so:
- Picasso
- RecyclerView
- Retrofit 2
- RxJava 2/RxAndroid
- Room
- Lifecycle
- OkHttp 3 Logging Interceptor
- CircleImageView
- Swipe Refresh Layout
- Android Youtube Player
Here is described some implemented features:
- First view with a list of items (RecyclerView)
- Second view describing the selected item including texts, videos and horizontal recyclerview.
- Webservice call to a RESTful API.
- Cached data into a Room SQLite Database.
- MVVM Architecture
- Singleton design pattern for Room implementation
- Gitflow (permanent: master|develop) (temporary: features|releases)
- Design quite responsive
- SOLID Principles
When launching the application, the list of the popular films are fetched from the API and displayed into the view. You can then slide down to discover the new popular films.
On clicking over a film, we can find its name, authors, trailer, actors and its synopsis
In order to improve this application we could implement:
- The other calls to the API in the Retrofit contract
- Improve the first view so it will be like this one:
- Push notifications (Firebase implementation)
- Other HTTP call method (POST, PUT, DELETE, OPTIONS) to create authentication in the application
Improved README.md.
Added Triplet implementation to encapsulate three classes inside one.
Added new converter for handling String[] integration in the Room Database.
Added CrewModel, CastModel and Credits POJO class to handle Arraylist of crews and casts.
Added the deserializer CreditsJsonDeserializer to deserialize the credits response.
Added new register type adapter to the APIClient to handle credits response of the API.
Improved MovieModel and refactored the MovieDetailsActivity.
Refactored MovieViewModel.getPopularMoviesOnline() method to handle more concisely RxJava2 calls from Retrofit2 and make it more suitable using FlatMaps.
Added new register type adapter for handling VideoModel responses to the API Client.
Refactored getVideoOf(...) method in MovieAPI interface, path needed to be before query.
Added new column for storing the youtube video key in the table movie.
Added RxJava Call in MovieViewModel to get the video trailer of each movies.
Refactored file architectures', added GenreConverter as TypeAdapter for Room integration of the genre_ids.
Improved MovieAdapter to put to the MovieDetailsActivity the information from where it has been started.
Improved APIClient to handle multiple register type adapter, migrated the type to TypeToken instance.
Improved the model, added the Genre enumeration to handle genre_ids list from API response.
Adding connection between the main view and the movie details view.
Added Red Bookmark vector asset to set up a film in the favorite list.
Added Android Youtube Player to handle playing youtube video for movie trailers.
Improved movie details activity and refactored its design and created cast item for the future recycler view adapter for it.
Added Video Model to handle the response of the API when fetching the video trailer of the movie.
Adding the first implementation of the main view and refactoring some code.
Added ViewModels implementation for handling popular movies get request.
Add RxJava call adapter into ViewModels to dispose and store subscriptions.
Added Room DAO classes and refactored MovieModel and APIClient classes for handling Paging and Favorite.
Upgraded Java support version to Java 8 for including lambdas expression.
Adding of API Management classes with the adaptation of RxJava2 in Retrofit2.
Adding of JsonDeserializer used by the GsonFactory to only retrieve the results array object of MovieModel in the response of the API.
Adding 5 requests to handle respectively:
- Latest movies
- Now Playing movies
- Popular movies
- Top Rated movies
- Upcoming movies
Adding of utils for network availability test and dates formatting.
Adding of activity movie details xml file and synced with Gradle libraries written in the README.
Adding some classes to perform a multi-threaded blur on an image for the front of the application.
Filled the mainActivity class to build the activity movie details xml file in order to test this view.