RSS Feed
Aug 17

Gnucash for Android – There and back again!

Posted on Friday, August 17, 2012 in Coding

The GSoC 2012 program is drawing to a close. Monday, 20.08 is the firm pencils down date, after which final evaluations will be done and the code will be subsequently submitted to Google. So now is a good time for some reflection on what I set out to achieve, what has been achieved and the way forward.

We go back to where it all began, the original proposal for the Gnucash for Android application. Proposals, like software requirements, are living documents which change over time. In the proposal, under the section “What is the ultimate goal of your proposal?”,  I wrote the following:

  • Ability to export the expense data into the QIF format (without duplication) so that it can be imported into the desktop GNUcash application.
  • The application should be easy to use and allow for quick expense entry. Speed is key if users are to use the app several times a day in many different circumstance. Expenses should be recordable immediately so that they are not forgotten.
  • Support an OpenIntent system which enables third-party applications to integrate with the application and allow automatic recording of expenses
  • Follow Google’s latest Android design guidelines to create an appealing application

Now let’s examine each of the points of the ultimate goal in turn:

  • After some discussion in the Gnucash community, it was decided that the Open Financial eXchange (OFX) would be a better choice than the QIF format. So the application as it is now uses OFX for exporting transactions and can avoid duplicate exporting of transactions. Check.
  • A widget was envisioned for fulfilling the requirement for quick expense entry, which would allow you to save transactions from the homescreen. However, Android does not support input views on the homescreen, so the implemented widget opens an Activity which allows you to quickly save a transaction in the desired Account. Check.
  • OpenIntents does not define any standard financial transaction intents. However, Gnucash for Android allows 3rd-party applications to create accounts and transactions through custom Intents. Check.
  • ActionBar, ContextActionBar and ActionModes, list selection are all implemented using the guidelines from the Android design guide. Even the internals use Android recommended best practices like asynchronous cursor loaders for lists and fragments all over the place. Check.

I would say the goals which were set out have largely been met. So how about the looks? Well, the design document laid out some prototypes for the application which looked like this:


I said then that I was very pleased with the mockups and it still holds true now. Just enough detail to convey the ideas, no accents to distract. So how does it look today? Well,


Therein lies the value of good mockups, they make the process of coding the layouts smoother. The (almost) final application has stayed true to the original layout and transitions. Of course a few things have been moved here and there, but the overall gist remains the same.

That is a wrap-up of the Gnucash for Android project goals and accomplishments. There have been twists on the road – choosing  the UI right prototyping tools, styling time and date inputs, issues with asynchronous loaders, representing money and number precision, documentation frustration, license changes and much more – and there are have been milestones – alpha1, alpha2 and beta1. All-in-all, it has been a very pleasant experience.

To all those who provided suggestions and criticism, tested out release versions and provided feedback, I say thank you. The app is better today because of you. Development will continue in the normal GitHub repository and any issues can be reported there as well. For those eager to contribute, thanks for your interest. We’ll be able to organize that better when GSoC is over (which is soon).

I look forward to continue to improve Gnucash for Android and together we can build great software for human beings.