...
R6 : User Testing
Design
Overall, we finished our design and implementation since GR4.
...
Screenshot | Description |
---|---|
| Our journal view. Note the color correspondences between the |
| An entry example in view mode. You can add multiple pictures |
| An entry example in edit mode. You can add/delete photos (via long press, |
| To delete a photo, user can hold down on the photo to trigger |
| To delete a photo, user can hold down on the photo to trigger |
| The save button is accessible from the android context menu. |
| You can also hold down on any entry in the journal view to |
| Pressing the menu button in view mode will open the menu |
| This is the menu that shows up when you select "Share". |
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.
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 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 the an Entry class Entry, 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.
TODO: Talk about database
TODO: Talk about map
TODO: talk about what is missing from a complete app.
TODO: talk about the main challenges.
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
...