Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Corrected links that should have been relative instead of absolute.

...

R6 : User Testing

Design

Overall, we finished our design and implementation since GR4.

Below is a brief design document expressed by way of annotated screenshots.

TODO: Design in gory detail with screenshots Image Removed

Image Removed

Image Removed

Image Removed

Image Removed

Image Removed

Image Removed

Screenshot

Description

Image Added

Our journal view. Note the color correspondences between the
map markers and their entries. The markers appear and disappear
you scroll through the entries in the list so that only the entries
visible in the list are shown on the map. The color of entries changes
as well: color corresponds to the list position of an entry on the screen.

We chose our colors according to aesthetics, good contrast, and to a 
lesser extent (but still considering) color blindness. The three main colors
used are a perfect triad of purple, green, and blue.

The map is animated when scrolling to keep the zoom and positioning of
the map consistent with the visible entries. The map is also interactive,
with the expected drag controls (zoom controls also appear when the
map is touched).

Shorthand icons highlight entries with photographs.

Swiping the list down causes the scrolling to build momentum and
continue for a short while after the finger is lifted. This causes a super cool
animation of the arrow 

Image Added

An entry example in view mode. You can add multiple pictures
and textual descriptions. There is also a prediction for your
location.

All photographs taken in the simulator result in the android icon. When
testing on a real phone, real photographs are taken and inserted instead.

Image Added

An entry example in edit mode. You can add/delete photos (via long press,
consistent with everything else in android) and change the text.

You can also add/delete contacts imported from the address book.

The text field automatically expands to accommodate multiple lines or
word-wrapped text.

Image Added

To navigate between entries in view mode, swipe left or right.
This is consistent with other content viewers on Android.

Image Added

To delete a photo, user can hold down on the photo to trigger
the displayed context menu.

Image Added

The save button is accessible from the android context menu.

Image Added

You can also hold down on any entry in the journal view to
trigger the context menu for sharing, viewing, editing, or
deleting the entry.

Image Added

Pressing the menu button in view mode will open the menu
for editing, sharing, and deleting the entry.

Image Added

This is the menu that shows up when you select "Share".
This is consistent with sharing functionality elsewhere in Android (for
example in the photo album).
All applications that can send messages of one form or another (facebook,
gmail, Goggles, etc) work with our app.

Image Added

We are proud of our Journal view, and feel that our mapping between items in a list and items on a map is innovative.

The animated arrow makes it look good, so we show off the animation as a gif.Image Removed
Image Removed

Overall, we decided to focus on presentation of the timeline. The view and edit functions are functional, but we have not innovated in that area.

We decided to disable selection of the map markers - It is a little practical because the touch screen has so many markers, and the arrow partially obscures them.

We chose to use a perfect triad of colors (leaf green - purple -blue) in our application for aesthetic reasons, but these colors also offer great contrast with the map and with each other. The colors perform fairly well from the point of view of color blindness, though this was not our main focus, and any triad will have diminished color blindness safety between one of the three pairs of color.

The arrow is shown tapered because it emphasizes its fluidity and direction, but mostly helps keep the map markers (which are more important) unclutteredTODO: talk about the color choices and arrow design (taper).

...

We made the following design changes in response to user feedback:

...

(We incorporated almost all suggestions and points of criticism, except the few explicitly stated at the end of this section).

Journal view (map) Map/Journal view mode:

  • Map is now interactive
  • Map icons are now positioned at the center of locations, not right above them
  • There is now a direct mapping between entries in the list and entries on the map, using colors
  • When creating multiple entries, the list automatically scrolls to the end to keep the add button and the most recent entries on screen.

Entry View Mode:

  • View now displays a location hint ("near <city>")
  • User can make swipe gestures to navigate between consecutive entries

Entry Edit Mode:

  • When exiting the edit mode with unsaved changes, user is asked to save or discard the entry. Entries are no longer automatically saved.

We also incorporated all other (and more minor) feedback into our final design EXCEPT:

Implementation

TODO: talk about what is missing from a complete app.

TODO: talk about the main challenges.

  • We chose not to reverse the order of items in the list. The suggestion was made because the "add" button and the most recent entries disappeared from view when adding multiple entries. We remedied the problem by automatically scrolling to the end of the list to keep the add button and most recent items on screen by default.
  • We chose not to add individual delete buttons to photos in the edit mode. Doing this would be more consistent with iOS, but not with our target platform (Android).
  • We chose not to allow the user to share multiple entries simultaneously. The only good example of this functionality is Google's Gmail app, and we felt that their use of check boxes are more annoying than useful. We kept the view simple.

Implementation

We have two main "Activities" in our code implementation. One is "JournalMapActivity", which corresponds to the journal/timeline screen. It is in charge of presenting the map, recalculating the arrow positions, and plotting the star markers. It also keeps track of the scrollable list of entries.

Once you tap to view or edit and entry, you enter "ViewEditActivity". This is the second activity that deals with both view and edit modes. We decided to keep both view and edit modes in the same activity, because these modes share a lot of the same information. It would also be slower if we had to navigate between different activities so often. The activity keeps track of which mode (view or edit) should be active, through the use of a Boolean value. It is in charge of displaying the appropriate "+ Photo" and "+ Contact" buttons, the photos and contacts themselves, and the textual descriptions.The menu items are also different for each mode.

We implemented an Entry class, which stores everything that can be part of an entry. This includes the timestamp/location of when/where the entry was made, its photos, text, and contacts. These entries are all stored in our database. Whenever a user views a previous entry, the system will look it up in the database, and retrieve and display the appropriate information.

We ditched a persistent database due to implementation issues (we likely did something wrong) if favor of non-persistent application state. All entries are deleted when the application is force-closed. We feel that persistent state is not an important factor in the UI design of this application.

The map utilizes the Google maps API which is actually very different from whatever is used by the Google maps app: instead of drawing vector graphics at arbitrary zoom levels, the API fetches pre-rendered images of the map at powers-of-two levels of zoom. This makes automatic zoom-to-fit operations very awkward (the one provided by the API does not guarantee that all points of interest are actually on screen, so we wrote our own).

Other than that, the map is easy to work with: we draw the map points and arrow in a separate canvas layer by manually translating geographic coordinates to appropriate locations within the map container. One important note regarding the Google API is that it requires an API key given to a specific key pair associated with an installation of Eclipse. This means that only one member of the team may work with the API unless the same key pair is shared by all developers - not something that would be acceptable in a diverse development environment.

...

What we omitted

...

We moved away from using undo functionality for our app because we did not come up with a clean, reliable way to incorporate it into the design. We felt that doing a good job of everything else is more important, and most Android app do not feature any undo anyway.TODO: ??

Evaluation

User Test Scenario

...

  • User 3 suggested a different way of editing the text of an entry. She believes that simply tapping the text in View Mode should make the text editable. She also wants photos and contacts to be editable in both View Mode and Edit Mode. Basically, she wants a single mode for both viewing and editing.

Reflection

We learned many things about UI design. One of the major lessons is that it is very important to consider who your target user population is. An interface can seem very easy to use to developers, but it can be difficult to use for the general public. We realize that we should first think in terms of what our users need and aim to do, and then design accordingly.

When we started our paper prototype, we had three potential designs. One design seemed fairly simple to implement, but also seemed pretty ordinary. Another design seemed very difficult to implement, but we all knew that it would be absolutely awesome if it worked. We finally decided on the latter design, because the idea was just too awesome. We were prepared to give it our all. And it turned out great!

There was one issue, though, with the paper prototyping. It was very difficult to make a paper prototype of the map markers, arrow, and their changes as the entries are being scrolled. Therefore, none of our users were able to provide good feedback for the feature. However, they thought it was a great feature once we explained it to them. If we were to do this a second time, we would probably rely a bit more on the computer prototype, on which it is easier to express complicated features like this one. TODO