Development diary week 07 - GideonPARANOID/olandroid GitHub Wiki

This week has been shorter than most, considering that I had a late post last week due to being busy. However, the changes haven't been small.

A lot of the work this week has been to do with the user experience. I've revamped the entire menu structure, got rid of the main screen & introduced a new flight manager, which constitutes the main feature that I've added this week. This new flow is much faster & more intuitive, though it allows for some more skipping around various activities (which I imagine users would want to do anyway as things like building & editing flights are not necessarily linear uses).

The flight manager is a big addition. With this, I've allowed for the saving & loading of flights between runs of the application. Users can write an OLAN string flight, view it & then choose it edit it again or save it. Saving it prompts the user to input a name & then it's written to the save file & will appear in the list in the flight manager activity. Users can press any entry in this list to load the flight instantly or long press to bring up a context menu, giving options for loading, editing, renaming & deleting the flight.

The saving of a file means that the application now has its first permission request - access to storage. This isn't completely necessary though, as there's other ways of storing simple name/value pairs (such as in the preferences/settings system). I think it's a valuable feature, giving users the chance to prepare flights they want to use ahead of time & load them when they want to.

I had a bit of a problem getting the listview in the flight manager to list to new data entries properly. A listivew is populated with a list/array via an ArrayAdapter. This ArrayAdapter has a reference its source data list/array & on calling an notified method, it repopulates the list with the new stuff. My issue was that I was covering the source data into an array on getting it, which meant a new memory address & references & thus it wouldn't update properly. Took a while to figure out, but an interesting issue to fix (lots of printing toString for memory addresses).

Another user experience thing I've been working on mainly today has been a new control scheme for the visualisation. I ideally want to implement both view translation & rotation on a touchscreen, simply with gestures, which is tricky. A flatmate inspired me to try rotation using a two finger twisting gesture, which I'm currently working on now as an alternative to one finger swipes to rotate. That should free up that control mechanism to be used for translation. Still a work in progress, that one.

In refactoring news, I've vastly improved the quality of code with regard to animation managing. Now all in its own class - an observable animation manager - it can be watched for changes by the user interface, which can update things accordingly (progress bar, play/pause button). Lots of other little changes here & there have gone on too, mainly streamlining, with the removal of the main activity - which has been replaced with a dialog which comes up on first load of the application with some quick help text.

Oh, I should also mention that I've eventually thought up a good name for the project! Tying together the words of its two main themes - OLAN & Android, I've come up with 'OLANdroid'! I think it works pretty well. I've even worked on a better icon, though I'm certainly no graphic designer.

Finally, this week's demo.