Project Report

23 Jan

Firstly some admin:

I forgot to generate the javaDoc, so please view that here. Thank you for your understanding.

I only managed to test on two devices – Nexus (small tablet), and HTC desire (medium-size phone). Efforts were made in layout design to be cross-device compatible but I don’t know how successful these were without testing. I therefore recommend that you test my app on a 480 x 800 screen (my main testing device).

Executive Summary


The project was designed to be as re-usable and manageable as possible by using the Model-View-Controller (MVC) approach.
A Singleton was used for the user settings and session variables – this is very handy as it means they can be accessed anywhere (global access) without having to pass objects around, which is fiddly in Android.


This was implemented at the java package level, one package for each.

The Model layer contains the singleton class mentioned above, a static Library of common methods, and the UpdaterService which handles the data update procedure.
The Controller level handles the gesture listening and processing, database access, and the navigation between different Activities
The View layer is just the Activities, so is largely GUI-based code.

See the UML at the bottom for the full class structure.

The Data

A lot of research and thinking went into this, as data handling and management is crucial to this app.

Thankfully I was able to make use of a web server to handle a lot of the processing so that it was abstracted from the app. This is good for efficiency and portability of code.

More extensive discussion is in the data model post.



Android Activities

Most of the app is written in native Android code. Efforts were made to optimise data manipulation to prevent laggy behaviour, which can be a problem on mobile devices. This was especially true on the map view, where over 100 map markers are overlayed. By good object management, I managed to make this screen smooth to navigate. Regarding native Android UI, I followed best practices where appropriate (e.g. using the recommended PreferencesActivity).

The Webview (sortable table of all city data)

This page was a late addition to the app inspired by feedback from user testing, and possible thanks to the deadline extension. Initially my reasoning for using an Android WebView for this was that there would be a large amount of data to transfer over network, so extending a class dedicated to data transfer would make this task easier. I therefore went about designing the webpage and its implementation in HTML/CSS/PHP/JS. This approach has the advantage of  portability (the webpage sits on a server that can accessed from any web browser so it is independent of platform ( iOS, Windows, Android etc.). Despite this advantage, native design is better for user experience, and as it subsequently emerged that the whole webpage is only around 40KB, this approach would have been perfectly feasible. Nevertheless, I am pleased with the end-product, and pleased to have been able to demonstrate coding ability in a range of different languages. P.S. view said page online.



  • As mentioned above, the webview could be made native.
  • Implementation of more of the “wanted” requirements – e.g. multiple city collections, extension to global coverage, porting.
  • Testing on more devices and screen resolutions.
  • More layouts to deal with landscape rotation and to make the app look better on tablets.
  • Move to higher level minimum API so deprecated practices and method calls can be removed.


Here’s the UML of my classes (arranged by layer – View on top, Model on bottom, Controller in middle):


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: