Design
In our project we created an Android application. Android applications consist of a number of activities, where each activity has its own GUI. The Robo-monitor consists of 3 activities:
Channels overview screen
This is the initial screen which opens when the user opens the application. It shows all channels for which there is data arriving, with some statistics about the data like bandwidth, frequency, and values.
Since there could be many channels, the user can "star" certain channels and hide all the rest.
TODO screenshots
Graph overview screen
This screen presents a graph widget which allows the user to observe how data has changed over time.
It allows the user to use touch gestures to scroll and zoom. We also provided "Track" functionality so that they can watch the data stream as it appears in real time.
TODO screenshots
Graph traces selection
The graph widget can display multiple graphs at the same time (see screenshots).
We provide a utility for the user to select which traces are shown and easily change that
TODO screenshots
Implementation
We used a combination of standard and custom widgets. We based our main visualization tool - the graph widget on a open source calculator app called Arity. We added our improvements on top of their widget and in the process fixed several bugs in it. We plan to submit a patch upstream and contribute back. We improved the scrolling and zooming of the graph and added multiple graphs to it. The graph widget is implemented as a canvas screen which is redrawn periodically depending on a software timer. TODO Andy can you confirm this?
Our channel overview screen contains star widgets. They are implemented by an ImageView and a corresponding boolean variable. Their functionality is almost identical to checkboxes, and it was easier to create this functionality that to modify the checkbox layout and integrate with expandable lists.
Expandable lists: in channel overview screens, and "Add Trace" TODO
Backend : asynchronously getting data TODO explain
Updating GUI periodically: asynchronous task again.
TODO star bolding
TODO graph labels size