evaluative summary

17
22 nd May 2015 Android Development Project CI360 – Mobile Application Development Luke Willmer UNIVERSITY OF BRIGHTON JUST DINE APP

Upload: luke-willmer

Post on 18-Aug-2015

28 views

Category:

Documents


1 download

TRANSCRIPT

22nd May 2015

Android Development

Project CI360 – Mobile Application

Development

Luke Willmer UNIVERSITY OF BRIGHTON JUST DINE APP

pg. 1

Table of Contents List of Figures .................................................................................................................................................................... 2

List of abbreviations .......................................................................................................................................................... 2

Introduction ...................................................................................................................................................................... 3

Rationale and Purpose .................................................................................................................................................. 3

Background Research and Implementation .................................................................................................................. 3

Optimisation ..................................................................................................................................................................... 4

Compatibility ..................................................................................................................................................................... 6

Gestures ........................................................................................................................................................................ 6

Mobiles in Context ............................................................................................................................................................ 7

Screen Captures ................................................................................................................................................................ 8

Evaluative Summary ........................................................................................................................................................ 12

Critical Evaluation ....................................................................................................................................................... 12

Methodology ............................................................................................................................................................... 12

What I Have Learned ................................................................................................................................................... 13

Problems Encountered ............................................................................................................................................... 13

Future Extensions........................................................................................................................................................ 14

References ...................................................................................................................................................................... 15

Appendix ......................................................................................................................................................................... 16

Appendix A Original Time-Gantt Chart ................................................................................................................... 16

pg. 2

List of Figures Figure 1: Android Version Distribution (Mick, 2015) ........................................................................................................ 6

Figure 2: Gestures within Google Maps (Scilligence, 2015) .............................................................................................. 6

Figure 3: Just Dine Landing Page ....................................................................................................................................... 8

Figure 4: Nearby results for 'Chinese' ............................................................................................................................... 8

Figure 5: Extended radius and hybrid map type ............................................................................................................... 9

Figure 6: Settings Activity .................................................................................................................................................. 9

Figure 7: Advanced search result .................................................................................................................................... 10

Figure 8: Advanced search predictions ........................................................................................................................... 10

Figure 9: The About page for this app ............................................................................................................................ 11

Figure 10: Graphical Time-Gantt Chart ........................................................................................................................... 16

List of abbreviations

ADT Android Developer Tools

API Application Programming Interface

APP Application

CPU Central Processing Unit

GPS Global Position System

HTTP Hyper Text Transfer Protocol

JIT Just In Time complier

JSON JavaScript Object Notation

JVM Java Virtual Machine

MBR Master Boot Record

RAM Random Access Memory

SDK Software Development Kit

SHA Secure Hash Algorithm

XML Extensible Markup Language

pg. 3

Introduction

This project was undertaken to provide a user-friendly app that could direct its users to restaurants nearby, by using

Google APIs and the users GPS location. This section will be used to identify the reasons for selecting this Android app

idea, the app’s use within a real-world environment, the background research required to complete this project and

the decisions made throughout this app’s development.

Rationale and Purpose

This app idea was chosen to satisfy the need for an effective restaurant location app, with a brief search on the Google

Play Store only finding restaurant- styled games, and with a minimal number of apps actually providing these necessary

locations. In addition, these restaurant-styled apps seem to be growing in popularity with apps such as ‘BookATable’,

and voucher-styled apps including ‘Groupon’ and ‘VoucherCloud’. This app was developed to provide a more user-

friendly app to use than the main competition: ‘Restaurant Finder’, by identifying any issues with usability or

functionality with the competition which could then be used as part of the development for my app. In addition, my

rationale for developing this app idea was to enable me to gain valuable experience of using APIs, along with different

layouts and structures within the Android development stage.

Background Research and Implementation

This segment covers all of the required research which allowed me to interact with the Google Maps and Places APIs,

along with the Android developing environment. This will be discussed chronologically to help portray the steps taken

from the initial app development stage through to its completion. The entirety of this section covers research that has

been gathered since the project conceptual documentation. To begin, the functionality of spinners had to be

researched, including how they are displayed, and how multiple entries can be added. During this research, it became

evident that using spinners for changing options was more efficient and more effective for conserving space on an

options screen. This is primarily because all of the available options are nested on top of each other, rather than being

displayed sequentially. The implementation of a spinner was crucial for this app as it is used to identify which cuisine

the user is looking for.

This implementation led onto needing to investigate how a button can load a new activity along with a critical piece

of information. The information needed to be sent to the new activity as the user’s chosen cuisine. This investigation

would contribute to the rest of the app’s development as there are multiple activities that need to be loaded within

the app and have important information fed from one activity to another. This research also yielded crucial information

on intents, which calls a new activity to be brought to the front, and ‘putExtra’ which is used to send a piece of

information by attaching a key to it. This key would then be used in the new activity to receive the original piece of

information.

The exploration into the Google Maps API enabled the new activity, which takes in the chosen cuisine type, to integrate

a Map Fragment which the Google Maps API would interact with. Further research detailed that this would require

updates to the Android Manifest, along with the activities’ layout XML file. During this exploration of the Google

documentation, it unveiled valuable information on troubleshooting the Google Maps API if any unexpected errors

should occur. In addition to this, it was revealed that personalised API keys were necessary to help Google identify

which app was attempting to send requests, and receive information. These API keys were generated by combining

the SHA-1 hash value, with the Android apps’ package name.

The integration of Google Maps within the Map Fragment encourages research into creating identifiable markers

which will be used cumulatively with the Google Places API. The desired result would therefore be to create a new

pg. 4

icon, or change the colour of the default markers fashioned by Google. This directed research into

‘BitmapDescriptorFactory’ which can be used to adjust the visuals of a Google Maps marker icon. However, this

research was not deemed a high priority as it only enhances the aesthetics of the app, along with only been usable on

one activity. In addition, this different marker was implemented to help the user identify themselves and their current

location, to all of the result markers sent from the Google Places API.

The following step was to analyse the Google Places API documentation to identify how this can be integrated to work

in synergy with the Map Fragment, and the Google Maps API. This analysis covered how to implement the Google

Places API code into the relevant class, how the HTTP request was constructed, and possible means of filtering the

results that were received back from Google. The code used which executed the Google Places API call was copied

across from an online tutorial which detailed each step necessary to complete this section of my app (Smith, 2013).

The next investigation was to check how the ‘AutoCompleteTextView’ could be implemented into the app, which

would allow the users to search for a specific restaurant by name, rather than by proximity to the user’s location. This

tool would be beneficial to a user as it allows them to show a friend a restaurant that they visited recently. This was

achieved by using a ‘GooglePlacesAutoCompleteAdapter’ which provides a list of predictions based on what the user

has entered in to the text field. This research has identified that for this service to work, the user must have typed at

least three characters before the predictions start populating results. This research also brought to light how these

predictions can be filtered based on the type of results that the app is looking for. The types of filters that can be

applied can be found on the Google Places API Types webpage (Google, 2011).

Optimisation

The Android Lint is a new tool introduced in ADT 16 which scans Android project sources for potential bugs. These

potential bugs may include missing translations, performance problems, unused resources, inconsistent array sizes,

and usability problems (Google - Android, 2012). This tool which is integrated into the Eclipse development

environment was used within this project which identified multiple bugs such as missing translations, and

inconsistencies with icons and images within the drawable files.

Other attempts of optimisation have included using certain data structures over others, removing any unnecessary

objects or instantiated variables that weren’t in use, using static and final parameters where available, attempting to

avoid internal ‘Getters/Setters’, and using known libraries. The importance of using the correct data structures is that

each instantiation may require unnecessary objects being created. An example of this would be between creating a

Map object when compared to creating a SparseArray. The difference between these two objects is that the Map

object creates an Integer value which may not even be used within an Android app.

Map<Integer, String> map = new HashMap<Integer, String>();

SparseArray<String> map = new SparseArray<String>();

map.put(1, "Hello");

(Vogella, 2014)

pg. 5

The use of removing any objects that are created is an obvious way which can be used to increase the performance of

an Android app. This is because it prevents the need for an object to be created which saves memory from being

unnecessarily allocated. Any variable or object that is instantiated will take up valuable memory space even if the

object or variable has not been assigned a value yet. This can be identified by looking at the stack print out from the

JVM or Android device (Kiparsky, 2014).

The next optimisation to attempt is to use the static and final parameters on an objects creation. The use of static

should be used when an object is not accessed from outside of this scope. This can be seen as increasing performance

of an Android app up to 20% faster whilst also indicating from a methods signature that the method cannot be used

to alter an objects’ state (Android, 2012). The use of the final parameter is to indicate that a variable is constant,

meaning that the value of that variable or object is unchanging. This is because all constants are stored within a dex

file1 which will save constant values directly instead of using a field lookup (Android, 2012).

//before

int a = 3141; //Value a can be changed

//after

static final int a = 3141; //Value a is constant and cannot be changed

These constant variables are necessary to be regarded as static otherwise the Java compiler will allocate memory for

a constant in every object of that class: if there are multiple instances of a variable or object, then it can’t be constant.

This can be followed by avoiding the use of ‘Getters/Setters’ which can be a very expensive process within an Android

device. This is because these are classed as virtual methods2 which are even more expensive then instance field

lookups. As these are so expensive, it is much better to directly access the variable or object then attempting to access

through virtual methods. The developers’ page on the Android website indicates that these calls could be up to seven

times quicker accessing a value directly rather than through these virtual methods.

The last potential optimisation is to favour the use of libraries since the JIT may not be able to produce as efficient

code than a library call can. The examples of this provided to Android developers are the use of String.indexOf() with

the related APIs which Dalvik replaces with inline intrinsic and the use of System.arraycopy() (Android, 2012).

1 A dex file is the compiled Android application code (Dalvik Executable). 2 A virtual method is when a Java application executes a method which is determined by the object type in runtime

pg. 6

Compatibility

This section highlights how aspects of this app has been designed for various devices, which may be running different

versions of the Android operating system, and screen sizes. The most notable feature and implementation of this app,

in terms of dealing with different screen sizes, are that any icons used within this app have been created within all of

the drawable folders which are designed to contain these icons. The difference about each folder is that the images

contained in each folder are scaled differently depending on the

size and resolution of the Android device on which this app is

being executed on.

The chosen platform version for this app was Android 5.01, API

21, with the release name of “Lollipop”. This version was chosen

because it is the second latest API version which will mean that

it will contain the most up-to-date features, whilst being

released long enough to have most of the bugs and issues with it

to be patched already. Since the Android market has a varied

audience with a recorded consensus of only 0.4% of Android

users running Froyo and 7.4% running Gingerbread (as seen on

the left), the opted minimum target SDK version was set to API

14, Android 4.0 Ice Cream Sandwich. API 14 was chosen since it

will enable the vast majority of users to be compatible with this

app, whilst not restricting the app in terms of usable code and

style too much.

Gestures

This app does take advantage of the use of gestures within the ‘GoogleMap’ activity which the vast majority of users

will be familiar with, and be happy to use. These gestures include rotating the map, zooming in and out, and changing

the pitch of the map (these can be seen below). These gestures are available from the Google Maps API which provide

the same usability and function that someone would have when using Google Maps on a desktop or laptop machine,

or via a browser.

Figure 1: Android Version Distribution (Mick, 2015)

Figure 2: Gestures within Google Maps (Scilligence, 2015)

pg. 7

Mobiles in Context

This section focuses on how this app was developed with the mobile constraints considered to ensure that the user

would be able to use to app and use all of its functionality. These constraints include screen size, along with reachable

areas, performance, and time and place. This section will also include how certain functionality is implemented and

what requirements need to be met for them to work.

The importance of screen sizes has already been identified within the Compatibility section of this report but this can

be furthered to identify what constraints this will have on the app. Screen sizes can vary a lot for Android devices

which makes the effective use of text to be crucial, the amount of text needs to be kept to a minimum otherwise the

user will have to keep on scrolling, or for the text font size to be smaller. This would not be good in terms of accessibility

for any user with any kind of visual impairment. In addition, the interfaces would have to be kept simple so the user

can quickly identify how each activity works, and that these activities focus on a single function. The simplistic design

required for an Android app is required so that it follows the Android ‘Standards and Convention’ which will allow any

user to be able to this app with minimal experience with it due to the interoperability of these ‘standards’.

The amount of resources available for any given Android device can be regarded as limited when compared to the

quantity of resources available on a desktop or laptop machine. The development of any Android will need to have

this as a crucial consideration as this performance criteria can affect the overall use of the app. This will require the

programmer to take into account the amount of memory allocation that their app will require, overall performance3,

layout performance, battery life, use of multiple threads and app responsiveness. Memory allocation works differently

within the Android operating system than that of a Windows operating system. This is because within Android, ‘any

memory you modify—whether by allocating new objects or touching mmapped4 pages—remains resident in RAM and

cannot be paged out. So the only way to completely release memory from your app is to release object references you

may be holding, making the memory available to the garbage collector’ (Android, 2012). In terms of battery life, the

app needs to be able to run multiple times for short activities, or a long-time for a single activity without having any

major input on the deprecation of the Android devices’ battery life. In terms of ‘Just Dine’, the app will be ran multiple

times in short bursts, as its main function is to identify what restaurants are nearby which won’t take a lot of time to

achieve, unlike a gaming-styled app used to waste a bit of time. The benefit of multi-threading an Android app is that

the CPU provided on Android devices have a slower clock frequency than that of desktop and laptop machines, but

still contain multiple cores. For an app to achieve its performance potential it is imperative to take advantage of multi-

threading which will increase the performance and responsiveness by allocating processes onto multiple cores.

3 This has been covered within the Optimisation 4 Abbreviation meaning memory-mapping

pg. 8

Screen Captures

Figure 3: Just Dine Landing Page Figure 4: Nearby results for 'Chinese'

pg. 9

Figure 6: Settings Activity Figure 5: Extended radius and hybrid map type

pg. 10

Figure 8: Advanced search predictions Figure 7: Advanced search result

pg. 11

Figure 9: The About page for this app

pg. 12

Evaluative Summary

This section covers my personal reflection on the progress and overall outcome of this project, along with any

improvements or changes that I would make if this project had to be repeated. This evaluative summary will begin

with critically analysing the main aspects of this project, which is followed by the Methodology of the project. This will

progress into what has been learned throughout the duration of this project, and any issues that have been

encountered and how they have been overcome.

Critical Evaluation

This section will cover the critique of all the significant portions of my project, including the reason for choosing this

project over other ideas. This idea was chosen as it involved implementing multiple APIs into this project which is

incredibly beneficial for learning how different APIs work and function. The first main important fragment undertaken

was the necessary research required to get the basis of this project functioning. The necessary research required

researching the basics of using Google APIs and integrating this functionality into this app. The next critical section

involves the implementation of the Google Maps API into this project along with the Map Fragment: this will be

followed by the evaluation of the Google Places API implementation. The last critique will be made of the GPS tracking

service used within this project.

The next main important undertaking was to research the implementation of the Google Maps API. This included

reading through the Google Maps documentation and following a video tutorial which provided a step-by-step guide

for adding Map Fragments and linking it to the Maps API. The video tutorial that was used was uploaded by a user

named ‘DrBFraser’ and can be found at this link: https://www.youtube.com/watch?v=awX5T-EwLPc.

The next two aspects of this critical evaluation involves the Google Maps and Places API. These APIs were the first

choice as they have greater supporting documentation, plus a larger community base. The other possibility was to use

the OpenStreetMap API which is a free geographic data service similar to the Google Maps API. The decision to choose

the Google API over OpenStreetMap was based on multiple factors including the prominence of Google over

OpenStreetMap, and the similarity of the Google Maps API and the Google Maps service online which will increase

usability. In addition, the Google Maps API allows integration into the Maps application on any Android device which

will plot out the necessary route from the user’s location to the restaurant’s location.

The GPS tracking service used in this project was implemented from a tutorial which will be placed within the

references section. This tutorial was selected as it provided step-by-step instructions for fully implementing this class

into your current project. The lint process identified that this activity was incorrectly marked as this class is deemed a

service rather than an activity. This would have been better if the implementation of GPS tracking was not sourced by

someone else, but it is common for code to be re-used, if proper reference and accreditation goes to the right people.

Methodology

The methodology used within this project has produced a working app that successfully shows the user’s position

along with the responses from the Google Places API service. As well as this, the user can successfully search for results

by a restaurant’s name instead of performing a standard nearby search. The main downfall of this project is that a

route could not be generated on the Map Fragment since this service is not provided by the Google Maps nor Google

Places API. On the other hand, the Map Fragment has an integrated function to feed the coordinates of both the user

and the chosen destination into the Google Maps app installed on an Android phone which successfully plots out the

route on to the Map Fragment. In addition, this functionality allows the user’s position to be updated which will also

update the route required to reach their destination. This functionality has been implemented using the

pg. 13

‘LocationManager’ which will attempt to update the user’s position based on two different factors, these being

distance or time. This means that the user’s position would be updated if they travelled enough distance or enough

time has passed since the last previous update.

The planning stage for this project produced a Time-Gantt chart which was primarily created for tracking the progress

of this project, to determine if the project is running on-time, ahead, or behind schedule. As expected for the initial

plan, the schedule was not kept to, and changes were necessary to produce a more realistic time frame that could be

kept to. The main issue with the initial Time-Gantt chart is that the main development along with the sections for

implementing improvements were too short which did not provide enough time for these stages of the project to

completed successfully. Furthermore, the initial plan had many detailed steps but the actual schedule was much less

detailed. This simply resulted from the development schedule taking up the vast majority of this project’s duration.

What I Have Learned

This section covers the main learning aspects of this project, including the implementation of code but also information

that have been gathered through research, but not necessarily added into this project. Below is a list of all of the main

learning points that have been identified during this project:

How to create multiple intents and feed through information by using putExtras

How to implement a Map Fragment that interacts with the Google Maps API

How markers can be placed onto the Map Fragment, both dynamically and statically

How Google Places can be used to provide a nearby or detailed search

The benefits of using SharedPreferences over variables

Problems Encountered

There were a number of challenges that were necessary to overcome, both in terms of the research required and the

limitations based on the Google APIs, and unforeseeable events such as system crashes and corruption. The first

challenge that was necessary to overcome was to enable any Android device to connect to the Eclipse IDE. This issue

was caused by every Android device having a different device driver, and identifying the correct driver which is

compatible with the Google USB driver downloaded from the Android SDK. This resulted in all testing being performed

on an LG Nexus Android device as this device’s drivers were compatible with this Eclipse environment and more

reliable than any other devices.

The next problem faced was establishing how the Google Places API integrated into the development of the app. This

was an issue because the two API services Maps and Places require different types of API key for the Map Fragment

and the Places integration; the Maps API requires an Android specific key whereas the Places API requires a browser

specific key. These different keys also require a different form of implementation, as the Maps API key must be

implemented within the Android Manifest, whilst the Places API key needs to be implemented within the java code.

The next issue was very fatal which was caused by corruption of the MBR which required a format, and fresh install of

the Windows Operating System. This setback caused delays within the development of the app along with the research

required to succeed in each part of this project. This issue caused the same driver compatibility issue to be faced, and

the attempt to recover any lost information. The Eclipse workspace was being automatically uploaded onto cloud

storage to mitigate any loss of information caused by hard drive failure, or corruption.

Another complication that had to be dealt with was caused by issues with the Google APIs connected with the Google

Mail account linked up with this project. The reason for this is still unknown as the valid API key was working initially

pg. 14

but its status changed from ‘Active’ to ‘Activation end-date’ which seemed to occur unprovoked. This was corrected

by removing all of the API keys that were linked to this project, and re-instantiating a new key for Android devices and

Browser access, which created new generated keys.

Future Extensions

This section covers any future extensions that would be beneficial to the users of this app including improved

accessibility for visually impaired users, detailing more information on the places search, and to increase the

responsive feedback to the user.

The need for more accessibility options are necessary to ensure that everyone can use this app comfortably and

without any strain on their eyes. The potential improvements that will be focused upon are allow the user to increase

and decrease the size of all fonts within this app, add in a colour-blind option that will attempt to provide an easier to

view colour scheme. These extra options could be added into the settings activity, or could be separated into its own

accessibility tab to help the users identify that this app takes accessibility as a consideration. This can be regarded as

a high priority extension as it will allow a larger audience to use this app, along with being seen as considerate within

the mobile app development community.

The next extension that is being considered is to provide more details for each place marked out on the ‘GoogleMap’

activity. This extra information would include a rating, photos as well as Google’s summary of the restaurant which

will be obtained via the Google Places JSON response. The rating will be useful for users of ‘JustDine’ as it will detail

what other customers have said or felt that restaurant which may affect the users’ decision of going to that selected

restaurant. The use of the photos will help allow the user to identify the restaurant that they’ve selected, whilst the

Google description can give a brief overview of what the restaurant is actually like. This extra information could be

provided to the user through the use of ‘OnInfoWindowClickListener’ which is a listener provided by the Google Maps

API. This can be used by calling a new activity which will be used to dynamically change its text, rating and images

depending on the location that the user has selected. When the user first selects a restaurant marker, a little

information window is shown detailing its name and address. The user can then press it again which will call the

‘OnInfoWindowClickListener’ which can either pass all of the information as a ‘putExtra’ or by recalling the Places API

response for the individual location based on its id. This should be manageable as the ‘AdvancedSearch’ activity

performs a search on ids to locate the specific restaurant being searched for. This extension would be given a medium

priority as the implementation of this would provide more useful information to the user, but the extensions that

increase usability should be prioritised higher than other extensions. In addition to this, the app works perfectly

without this extension, as all of the necessary information for a user to find this restaurant is provided, and the user

can feed the restaurants’ location into the Maps app provided on every Android device to plan out the quickest route

to the restaurant.

The ‘JustDine’ app does provide feedback to a number of issues that may occur during the use of this app such as

having no internet connectivity or the Android device needs to update its Google Play Store. However, this app doesn’t

provide any responsive feedback to the user when its’ processing the Google Places API response, meaning that on a

slow Wi-Fi connection or having a poor mobile data signal, the app may appear to be unresponsive. This issue has

been provided a low priority as, in the vast majority of cases, the location markers have been placed instantly or within

a negligible amount of time. A feedback mechanism could be put in place, such as a spinner or a loading bar, which

will aid the app in portraying that its processing information, whilst indicating that the app isn’t unresponsive. The way

that this could be achieved is by placing an overlay on the ‘GoogleMap’ activity which will cause this loading spinner

or bar to be shown until the activity is ready for both nearby searches or an advanced search.

pg. 15

References Android, 2012. Managing Your App's Memory | Android Developers. [Online]

Available at: http://developer.android.com/training/articles/memory.html

[Accessed Friday, 22nd May 2015].

Android, 2012. Performance Tips | Android Developers. [Online]

Available at: http://developer.android.com/training/articles/perf-tips.html

[Accessed Wedensday, 20th May 2015].

Google - Android, 2012. Android Lint. [Online]

Available at: http://tools.android.com/tips/lint

[Accessed Monday, 11th May 2015].

Google, 2011. Places Types - Google Places API. [Online]

Available at: https://developers.google.com/places/supported_types#table3

[Accessed Monday, 30th March 2015].

IQ Agency, 2012. Mobile Web vs. Native Apps. [Online]

Available at: http://www.slideshare.net/IQ_Agency/mobile-web-vs-native-apps

[Accessed Thursday, 21st May 2015].

Janssen, C., 2011. What is the Mobile Web? - Definition from Techopedia. [Online]

Available at: http://www.techopedia.com/definition/23588/mobile-web

[Accessed Thursday, 21st May 2015].

Kiparsky, J., 2014. Do unused local variables in a method acquire memory in JVM?. [Online]

Available at: http://stackoverflow.com/questions/26632799/do-unused-local-variables-in-a-method-acquire-

memory-in-jvm

[Accessed Wednesday, 20th May 2015].

Mick, J., 2015. DailyTech - Android Lollipop Has Less App Creashes Than iOS8, Says Study. [Online]

Available at:

http://www.dailytech.com/Android+Lollipop+Has+Less+App+Crashes+Than+iOS+8+Says+Study/article37158.htm

[Accessed Wednesday, 20th May 2015].

Smith, S., 2013. Android SDK: Working with Google Maps - Displaying Places of Interest - Tuts+ Code Tutorial.

[Online]

Available at: http://code.tutsplus.com/tutorials/android-sdk-working-with-google-maps-displaying-places-of-

interest--mobile-16145

[Accessed Monday, 23rd March 2015].

Vogella, 2014. Android memory and performance optimization. [Online]

Available at:

http://www.vogella.com/tutorials/AndroidApplicationOptimization/article.html#androidperformanceandmemoryop

timization3

[Accessed Wednesday, 20th May 2015].

pg. 16

Appendix

Appendix A Original Time-Gantt Chart

Task Name Duration Start Finish Predecessors Milestone

Phase One 0 days Mon 01/12/14 Mon 01/12/14 Yes

Feasibility Check 3 days Mon 01/12/14 Wed 03/12/14 1 No

Identify Requirements 5 days Thu 04/12/14 Wed 10/12/14 2 No

Phase Two 0 days Thu 11/12/14 Thu 11/12/14 1,3 Yes

Create Wireframes 5 days Thu 11/12/14 Wed 17/12/14 4 No

Research Implementation Techniques 10 days Thu 18/12/14 Wed 31/12/14 5 No

Identify APIs required 5 days Thu 18/12/14 Wed 24/12/14 5 No

Submit Conceptual Report 17 days Thu 01/01/15 Fri 23/01/15 6,7 No

Implement First Draft Design 30 days Mon 26/01/15 Fri 06/03/15 8 No

Testing functionality and usability 3 days Mon 09/03/15 Wed 11/03/15 9 No

Add Improvements 10 days Thu 12/03/15 Wed 25/03/15 10 No

Phase Three 0 days Thu 26/03/15 Thu 26/03/15 11 Yes

Ensure working functionality 3 days Thu 26/03/15 Mon 30/03/15 12 No

Phase Four 0 days Tue 31/03/15 Tue 31/03/15 12,13 Yes

Create First Draft Report 10 days Tue 31/03/15 Mon 13/04/15 14 No

Create Second Draft Report 10 days Tue 14/04/15 Mon 27/04/15 15 No

Submit Finalised Version 20 days Tue 28/04/15 Mon 25/05/15 16 No

Figure 10: Graphical Time-Gantt Chart