Josh Miller
For this week, one of my objectives was to update the app's stats page. The original vision for this fragment was to provide the user with a visual representation of their progress as a whole.
I at first took over development of this feature from another team member to allow them to work on another portion of the app, so I had to take a bit of time to familiarize myself with their work so far. To begin, I was simply going to update the visual appearance of the page, to make the elements look more similar to the rest of the app. I made the fragment scrollable in able to fit more content and began adding visual elements to the layout, so the stats page now had three visual graphs and a table that needed to be filled with usable information for the user.
To accomplish this, I had already designed a method of storing the user's historical data, but it still needed to be unpacked and parsed through. I made a new method to iterate through the list to pull out, tally, and calculate the information it needed to put together the table and plot information on each chart. The issue I ran into with this, though, was that the information gets serialized when saving it to the application's shared preferences. When I tried to cast the information to an object it would come out as useless gibberish unless it was properly de-serialized first. I ended up using a LinkedTreeMap and the open source gson library in order to convert the data into objects for use in the rest of my code.
The last step was to beautify everything and make it easy to look at. I coded each visual to animate its own drawing and encased every chart and graph within a card, gave them nice rounded corners, and a simple drop shadow to stick closely with Google's material design guidelines.
![]() |
Animating a radar chart in an earlier version of the stats page |
![]() |
Most recent version of our volume breakdown pie chart |