Recent Question/Assignment
Description
You are required to implement an Android application described by the specifications below.
You are not allowed to use third-party libraries. The only libraries you can use are the standard Android API libraries found in the following URL:
https://developer.android.com/reference/
It is important to follow exactly the specifications and your implementation must conform to these:
The application developed will help the user to keep track of the movies he/she has watched, organise them and look up information about them from the IMDB database.
1. When the application starts, it presents the user with 6 buttons labelled Register Movie, Display Movies, Favourites, Edit Movies, Search and Ratings.
(3 marks)
2. Clicking on the Register Movie button, it should display to the user a page where the user can register (create) a movie that he/she has watched. The page should contain 6 textboxes which can be used to enter the title of the movie, the year, the director, a list of actors/actresses separated by commas, rating and review. For example, the user can enter the following information corresponding to the 6 textboxes “Godzilla vs. Kong”, “2021”, “Adam Wingard”, “Alexander Skarsg°ard, Millie Bobby Brown, Rebecca Hall, Brian Tyree Henry, Shun Oguri, Eiza Gonz´alez, Julian Dennison”, “6”, “A fast-paced action movie keeping you in suspense for 90 minutes. Excellent performance by Shun Oguri.”.
The year textbox should accept only numeric values which are greater than 1895. The rating textbox should accept only numeric values corresponding to the range of 1-10 (the user gives between 1 and 10 stars as his rating)
The page should also contain a Save button, which when pressed saves all the details entered in an SQLite database local to the mobile device.
(11 marks)
3. Clicking on the Display Movies button it displays to the user a list of movies sorted in alphabetical order (one per line using the title of the movie entered in the previous question). A tickbox next to each movie is also displayed (the tickbox should initially be blank, i.e. not ticked). The displayed movies should come from the database and they should correspond to movies which the user created using the Register Movie functionality in this instance of running the application or a previous instance that the application was run (i.e. the application should NOT delete any saved movies when it exits and all data are persisted in the database).
If the list of movies is more than one page long, it should provide scrollbars that the user can use to see all the movies.
The page should also provide a button Add to Favourites. The user can select which movies he/she wishes to add as favourites by using the tickboxes and subsequently pressing the Add to Favourites button the application will add the selected movies to the database as favourites (for this part, simply add an extra column in the database table containing the list of all all movies).
(11 marks)
4. Pressing the Favourites button the application should display to the user a list of all his/her favourite movies (one per line), i.e. all the movies that the user added to his favourites list using the Add to Favourites button in the Display Movies page in the previous question. Next to each movie there is a checked tickbox (ticked it means it is a favourite and as only favourite movies are shown in this page, all tickboxes should be initially checked).
A button titled Save is also present in the page. The user can deselect any favourite movie by unchecking the tickbox for any movie(s) and subsequently pressing Save will update the list of favourite movies in the database, i.e. the status of any unselected movie will be updated in the database and become not favourite.
(12 marks)
5. Clicking on the Edit Movies button the list of all watched movies in the database will appear (i.e. all movies watched whether they are favourites or not favourites)
After the list of movies appear, the user can click on the name of any movie and a new page will display all the details of that movie from the database, i.e. title, year, director, actors, rating, review and its favourite status indicated as “Favourite” or “Not Favourite”. The rating should appear by displaying the appropriate number of stars in yellow colour (e.g. if 6 is given then 6 stars should appear in yellow, followed by 4 stars in white colour).
The user should be able to edit the information displayed, in order to change any of the details of the movie including whether it is a favourite or not, and then pressing an Update button which is also present on the page will update the details of the movie in the database. The user should be able to edit the rating by clicking in any of stars which will becoming yellow (active) or white (inactive). E.g. a rating of 6 should be indicated by 6 yellow starts followed by 4 white stars (6 out of 10).
(10 marks)
6. Pressing the Search button, the user is presented with a single textbox and a Lookup button. The user can type in the textbox any string and subsequently press the Lookup button to display all movies in the database which contain the typed string in either the Title or the Director or Actors fields of the movie in the database.
The search should be case insensitive and a match does not have to be a complete match but partial. I.e. if the user types the string “rUISE” the displayed movie(s) could be, a movie which contains “Tom Cruise” in the list of actors or containing in its Title “The Cruise to London”.
(10 marks)
7. (a) Pressing the Ratings button the user is presented with the list of movies available in his database and a Find movie in IMDB button.
The user can select which movie he/she would like to lookup its IMDB rating, by selecting a movie title (for simplicity you can use radio buttons next to each movie) .
After the selection of a movie the user can click on the Find movie in IMDB button to display the list of titles and their ratings (ONLY the titles of the movies) which matches with the title of the selected movie.
The list of movies should come from the following web service:
https://imdb-api.com/
You will need to create a free account on that web service which gives you a unique key which you can use to make queries.
You will need to parse the returned JSON formatted response after you send a similar request with the following (you need to replace the YOUR API KEY with your own key): https://imdb-api.com/en/API/SearchTitle/YOUR_API_KEY/Inception 2010
The above retrieves from the web service all titles which contain both the title “Inception” and 2010 as the year.
For example, it returns:
{
-searchType-:-Title-,
-expression-:-Inception 2010-, -results-:[
{
-id-:-tt1886283-,
-resultType-:-Title-,
-image-:-https://imdb-api.com/images/original/nopicture.jpg-,
-title-:-The Distressed Watcher-,
-description-:-(2010{2011)-
},
{
-id-:-tt2078432-,
-resultType-:-Title-,
-image-:-https://imdb-api.com/images/original/nopicture.jpg-,
-title-:-Travel Companions-,
-description-:-(2010{2012)-
},
{
-id-:-tt2135194-,
-resultType-:-Title-,
-image-:-https://imdb-api.com/images/original/nopicture.jpg-,
-title-:-Hollywood on Set-,
-description-:-(2003{ )-
},
{
-id-:-tt2135220-,
-resultType-:-Title-,
-image-:-https://imdb-api.com/images/original/nopicture.jpg-,
-title-:-Hollywood on Set-,
-description-:-(2003{ )-
},
{
-id-:-tt2160855-,
-resultType-:-Title-,
-image-:-https://imdb-api.com/images/original/MV5BODdiMzIzMjEtMj
E1MC00ZjY0LWE1NTctOGYwMWYwMTQzNGE0XkEyXkFqcGdeQX
VyMjg2MTMyNTM@._V1_Ratio1.7600_AL_.jpg-,
-title-:-How It Should Have Ended-,
-description-:-(2005{ )-
}
],
-errorMessage-:--
}
The returned id (starting with tt, the first title above returns an id of tt1375666) which then can be used to extract the rating of that title:
https://imdb-api.com/en/API/UserRatings/YOUR_API_KEY/tt1375666
This request returns a JSON format reply containing the rating (8.8) of the title with ID tt1375666. The rating can be found in the totalRating field. (15 marks)
(b) This subquestion should only be attempted if you completed the previous “Ratings” subquestion. Hardcoded solutions, i.e. ratings not coming from the web service will not receive any marks.
Expand the “Ratings” functionality so that when the user clicks on the title of a movie, the image of the movie is displayed in an ImageView. For this you will need to extract the URL corresponding to the movie image from the JSON response, i.e.
the “image” field which follows the “title” field.
(8 marks)
Marking Scheme: The marks achieved for each part of the program are indicated in the description of the task above. In addition to these the following will be taken into account:
• Code readability (structure, comments, variable naming, etc,): 5%
• Implementation (e.g. quality, efficiency, look and feel of the application, based on fonts, colours, etc.): 15%