GSoC 2017 Experience

It's the time to wrap up the Google Summer of Code internship. Below is the summary of the work accomplished during the program. 
The tasks that I had mentioned in my proposal were changed significantly. Hence, if one goes by that proposal, I've done less work but if we go by the actual work it took the same amount of efforts as mentioned in the proposal if not more.

New Features: Mifos Field Officer Android app has been fully functional for over 2 years prior to the GSoC '17. My tasks mainly dealt with adding new features to it.
  1. Signature Module: This requirement of adding a Signature module arose because field officers have found it inconvenient to take photographs of the signature and then upload it. I added a Signature screen so that the client can draw the signature right there on the officer's phone and the officer can upload the document right from there. He may also upload the signature later, from the gallery if the internet is not available. 
  2. Date Option to activate Savings:
  3. CollectionSheets: CollectionSheet has been one of the major enhancements in the field officer app. I implemented all the three of them.
  4. RunReports: I've implemented the client runreport feature in the android app. Now all the reports associated with the client can be accessed right there with the app.
  5. JLG Loan Application: Currently, I'm working on implementing Bulk JLG Loan application for groups. The work is in my branch.
    • with the following changes

Bug Fixes: "With more code comes more bugs. - Uncle Bin(ary)" 
Apart from the feature enhancements, I also worked on bug fixes ranging from the old, hidden under the pile of the issues list at Github to the new - engendered by the fledgelings in the professional world. (Yeah, I too being one of them. :P) Below is the list of my bug-fix PRs.

Refactoring: A developer's life devoid of perennial changes in the codebase is like his girlfriend - 'non-existent'.
While working on an issue, my mentor observed something which was insignificant for me (until he made me notice it) - once a new entity was being created (or deleted), the server was sent GET request to fetch the updated list. However, we have almost all the data locally and we only need some kind of confirmation from the server if the request is successful. 
I worked on refactoring the code so that the server is not queried every time just to show the updated data. Just for some theoretical proofs (and fun ;) ) I profiled the data requests, the time taken and the bandwidth used before and after the changes and the results were astonishing! We saved over 50% of the data usages in all of the related screens. Below are the PRs for the same.

Multidex Support: This is something which seemed easy to implement but posed several hurdles to enable it in our app. I had tried it earlier also but gave up because of the errors I was encountering one after the other. But since the need came up again and we were left with no other option, I made the change with the assistance of the mentor.

Document/Tutorial: To make it easier for the people who are not versed with programming and development in contributing towards the translation of the app, I wrote a wiki page along with the GIF files to elucidate the process.

Miscellaneous Learning Experience: The most frustrating thing for an android app developer is the time 'Gradle' takes to 'build' the source. At times, I was wasting almost 8-10 minutes just to add a Log statement and observe the results. My mentor - Ishan - came to the rescue and taught a splendid way to avoid building the whole source again in a case when all we need is to launch the app with the added breakpoints. This awesome way of debugging by all means saved me a few hours at least.