This application was developed in three days during an own hackathon.
In order to compile and install the application in a emulated or physical device you need to do as follows:
1 - Clone the this repository
git clone https://acasadoquijada@bitbucket.org/acasadoquijada/movie-catalog.git
2 - Open the project using Android Studio
File > New > Import Project
3 - Obtain an API key from themoviedb.org. Please see this link
Check for the API Key (v3 auth)
4 - Once we have an API Key, set it in retrofit.MainController line 13 .
private val apiKey = "your api key"
5 - Select your device (virtual or physical)
6 - Click on Run 'app'.
7 - Now you should be able to use the application
If you find this error running the unit test
running 'moviecatalog in app':
Command line is to long. Shorten command line for moviecatalog in app or also for Android Junit default configurartion.
Do this to fix it:
Please click on "moviecatalog in app"
Set shorten commmand line to classpath file and apply
Rerun unit test, they should run and pass without issues
To check the code style the following tools have been used:
- ktlin by using Ktlint Gradle
- ktlintCheck and ktlintFormat taks have been runned
- Lint Android Studio
- All the relevant warning have been avoided with this tool
- Retrofit needed to perform the API calls to themoviedb.org in order to get the Movie/TV Show information
- Navigation Component to perform the navigation between the fragments
- Picasso to set the poster of the Movies/TV Shows into ImageViews
- Room to store the watchlist information in the device
The greatest problem I found was while integrating Room into the picture. I had almost everything working, but due to a "wrong" design decision, the toggle button of the elements in the watchList wasn't updated correctly. Because of that, I had to perform a different approach.
During the development of the app an API key as uploaded by mistake. This key has been revoked before making the repository public.
With more time, I would like to:
-
Improve the UI (how the tv/cinema logo is shown), add support for large devices (tablets)
-
Improve user experience (not possible to rotate the phone in the middle of a search)
-
Increase the code coverage
-
Improve the UI package class structure (a superclass could be defined with common methods)
-
Use styles for common elements in the layouts