1. Android Field Operations App Version 3
(GsoC 2016 Proposal for Mifos Initiative)
Who am I ? What am I studying? Interests?
I am Rajan Maurya and I am from Delhi, India. Currently I am a 3rd
year student of B.Tech Information Technology
and Mathematical Innovations and enrolled at Cluster Innovation Centre, University of Delhi. I have almost two years
of experience in Android development now. My main objective is to learn as much as possible about Android
development, most of my extra time is spent in learning and experimenting in Android and related technologies. I
started small and have now come to know of many latest and modern advanced libraries, frameworks and APIs. I am
a firm believer of open source and also try to contribute as much as possible to open source. I am a Linux enthusiast
and using Ubuntu as my primary operating system.
I am also selected to receive Udacity Android Developer Nanodegree Program scholarship by Tata Trust and
Google India.
Contact information
Email: rajanmaurya154@gmail.com
Mobile: +91-8010665248
Github: @therajanmaurya
LinkedIn:https://in.linkedin.com/in/rajanmaurya
Time Zone: UTC +5:30
Projects
Some of my previous works:
1. Android App for a Political opinion blog “The Frustrated Indian” using the WordPress REST API to show blog
posts inside the application. I worked with four Team members. there I was the main developer. I used
Retrofit and Okhttp for fetching the post and saving them for offline mode as well as Picasso for image
loading.
Link: https://play.google.com/store/apps/details?id=com.thefrustratedindian
2. Antardhvani 2015: An Android Application for University of Delhi annual cultural festival.
Link: https://play.google.com/store/apps/details?id=antardhvani.du.ac.in.antardhvan
Github: https://github.com/therajanmaurya/Antardhvani
3. Networking Tool: This is the basic android networking tool that implements Ping and traceroute on android
phone.
Github: https://github.com/therajanmaurya/Networking-Tool
4. Bulk-SMS-Service: This application enables the android user to send unlimited SMS by one click because in
android SMS functionality, user can send same message to only ten people.
Github: https://github.com/therajanmaurya/Bulk-SMS-Service-final.
5. Easy Recycler View with Easy Adapter Library: This library gives the functionality to user to make Recycler
View in single line and make Adapter in single line. Adapter has different UI functionality parameters.
Github: https://github.com/therajanmaurya/WpApiUi
There are many other projects you can find on my
Github Repository: https://github.com/therajanmaurya
2. Project idea and goals
The Mifos Android Client is currently in version 2. Recently, significant new enhancements
including refactoring, implementation of material design, offline, surveys, and new functionalities
have been implemented taking it from Version 1 to Version 2. Now the app is still under
development and this project aims at releasing the version 3. This will add exciting new features
and significant enhancements. Some of the major additions are:
Application-wide offline content availability – All the content which can be viewed in the
app i.e. clients' details, loan details, past loan transactions, surveys, creating etc will be
available offline. It will be stored in the phone, either in the cache or the database.
Refactoring and redesigning the app – There will be many changes in the app including
simple cosmetic ones such as layouts, colors, etc. There will also be functional changes
such as changing how the app is navigated, menus, actions, etc. It will also including the
refactoring of the codebase to make it more readable and manageable to help existing
and new contributors.
Implementing major new functionalities like collection sheets for savings and loans at the
group and individual, staff notifications, editing clients details, and more. An important
point here is that there are many features listed in the mockups document of the app
which are still not implemented, so I'd like implement as many of them as possible.
All of the above will be powered by the underlying APIs provided by the Mifos platform. The data
will be transferred in a RESTful manner.
Approach
After facing these issues, I have come up with a well thought out plan. that makes your Mifos Android Project very
structured and customizable.
Anyone who wants to contribute to the project that can contribute just after a glance at the Mifos Mobile
application manual ( I will prepare a manual with code structure ).
These small steps are the crux of any good project. Here are the guidelines and draft project approach structure
that I will follow.
Re-organizing the app to follow a MVP standard architecture
The app's codebase will be of the MVP Framework that all good applications follow, using MVP
Framework the code readability becomes more suitable and readable and can be maintained for longer duration.
The high-level architecture of the app will be as below:
3. Source: https://github.com/ribot/android-boilerplate
Once the app follows this structure, it will become much easier to maintain and make changes to it. This solves
one part of the project, i.e. restructuring and refactoring the app. This will streamline the process of making
changes to the flow/navigation of the app. Since, it will now be following a standard convention, the new
navigation and workflow changes will seem natural to implement and also to the end-user.
Additionally, the app will be updated to the latest libraries and APIs such as Retrofit 2, Dagger, etc.
Offline content availability
Once the above part is completed, implementing this will pretty straightforward. According to the structure in
the figure, we will now have to only add a new data helper in the Model part of MVC. And the corresponding linking
code needs to be only written in the Data Manager. All the other parts of app need not be changed.
Increasing code coverage
Right now, there is very little code coverage of the project. There are very few test cases and therefore, the
reliability and quality of code is not upto mark. I am thinking of writing tests for the data layer(DB, API, Retrofit, etc.)
and some of the controller layer. Although I aim to write tests for the view layer(activities and fragments) as well, they
will have lower priority as they are already tried and tested by the platform. But still, I will try to cover as much as
possible. As a sidenote, I am thinking of Junit as a testing framework and mockito as the mock framework.
Implementing new features
4. There are many features to be implemented, I will not list all of them here, it isn't necessary to do so anyway.
Link to wireframes -
https://mifosforge.jira.com/wiki/download/attachments/34111558/Mifos%20Android%20Mockups
.pdf?version=8&modificationDate=1380225023161&api=v2
What is the schedule of this?
This would be my first GsoC participation ever. Basically, I have three months to complete this project and it is
enough for me to finish it with quality. I would like to divide my tasks into two phases.
1. Phase One I would primarily focus on porting current project into MVP framework with Retrofit 2.0 beta 4
And writing Test cases of current class. We should concern on the primary goals and milestones which the
app demands in this phase.
Week 1,2 –
● Restructuring the current codebase to follow the Model-View-Presenter architecture.
● I have already open the PR and I am working on it.
● Importantly, the Model layer will be developed for this, so that all the data sources, i.e.
Retrofit(API), Database, etc. are all at one place and all the other layer can use the abstractions .
Week 3, 4 –
● Upgrading to latest stable libraries, e.g. Retrofit 2, Picasso,
Dagger 2 etc.
● Writing unit tests to increase code coverage. This is important
we need to make sure future developments doesn't break the stable model layer.
Week 5, 6 –
● Offline content availability. Once we have the abstractions of
MVP in place, we just need to add a data source to the Model layer. Although not simple, but it will
be straightforward as this will not require any changes in the View and Presenter library.
● More test cases will be required to test whether the caching
goes well with the API.
● At this point we need to make sure that cached data + new
requests doesn't hamper the user experience.
2. In phase 2 I would focus on building the additional features that I have mentioned in the proposal, feature
enhancement and bug fixing.
Week 7 –
● Feature addition - Implementing generate collection sheets for
savings and loans for group and individual.
● Staff Notification.
Week 8 -
● Add ability to edit clients' details and show detailed client
information.
● Adding Client notes field (Create and Retrieve).
Week 9 -
5. ● Implementing Group notes (Create and Retrieve).
● Adding feature officer to do list .
● Retrieve, Apply, Approve Loan, Undo loan approval.
● Assign, Unassign Loan officer.
● Withdraw, Reject, Delete Loan Application.
● Update Loan.
Week 10-11
● Providing the application for users and mentors for testing and getting feedback
● Testing the application with different devices with different screen resolutions and identifying
defects. Fine tuning for different screen resolutions if there are any defects.
● Enhancement and bug fixing according to the user feedback.
● Review by the mentors and contributors of the project. Changes according to reviews.
● Documenting code.
Week 12
● Releasing the Version -3 of the application for final evaluation.
.
If organization approves the features I have mentioned in the 'suggestions' section and according to the time limit I
hope to develop those features too. (Probably after the 8th week)
Have you submitted any patches or Source code to MIfos-X yet ?. Please provide link to the commit in
the Github.
Yes, I have submitted some patched and feature enhancements to the project.
Here are my PRs.
1. #PR222 Merged
2. #PR235 Merged
3. #PR223 on Review
4. #PR211 on Review
5. #PR232 Currently working on this PR. Refactoring code into MVP layer architecture. So easily we can shift
Retrofit 1.9 to Retrofit 2.0. when it will be completed, we only need to add data helper for offline saving data.
And bind to Data Manager. All the other parts of app need not be changed.
Motivation
The key motivation factor for applying GSoC in first place is I am an open source enthusiast. And since
Android is also based on open source, I started working on Android. As well as I also use Ubuntu(also open source),
and even most of the apps on my phone are open source alternatives of famous apps. I have been always inspired
by GSoC which encourages open source development. The key factor that drove me to this project is inspiration of
learning freely, and specially for using Retrofit + MVP + Dagger 2.
And the most important fact is that I am very much interested in developing this project as a committer and a
contributor outside the GSoC also and be a part of wonderful open source community. Because I love to have
something to admire which others can be benefited through my commitment! The talented people behind this project
who are still eager to learn so much, inspire me.
Career Goals:
6. My career goals is to become expert in android and want to help the whole android community. I wants join a
organization where I can work on some interesting and challenging projects. I always wants to feel challenged
professionally.
Why am I the right person for this task?
The most important fact is that I am completely inspired by this idea. I have been working on this project and refining
and adding features continuously since I found out about it while browsing through the organizations in GSoC. As I
learnt more about this project, I became more and more interested in it. And I started reading the code, going through
the docs so that I can contribute as much as I can. This can be verified by seeing my interaction on the repo of the
project. This type of work suits me well as I have previous experience and also I am eager to keep learning more and
more. And the other thing is I love anything related to Java and specially Android. Further I am a dedicated person
with strong commitment. This is evident from the fact that I've already started working on the project and hope to do
so even after GSoC.
Have you contributed to open source projects? If so, which ?.
Yes, I have contributed in the project Apache Taverna Android Application.
Have you any previous experience with JavaScript/Java/Spring/Hibernate/MySQL?
Yes, I have very good experience in Java. You can find my work on Github.
Have you deployed and run the Mifos X Platform (https://github.com/openMF/mifos) and
reference User Interface (https://gihtub.com/openMf/mifosx-communiy-apps)?
Yes, I have run Mifos X platform once. I was thinking that running android-client from local API will be fast. But my
system was not able to run both android studio and IntelliJ idea java simultaneously.
Whats other commitments do you have this summer ? (Working on this project is a full-time job
and must be your primary commitments!)
This summer, I have no other commitments. Working on this project full time is my primary commitment.
Have you participated in any previous GSoC programs?
No. This will be my first ever GSoC experience.
Are you applying to multiple organizations this year ?
Yes, I have also submitted a proposal to the Apache software foundation.
7. If you answered "yes" to the question, which is your first choice?
my first choice is Mifos Initiative.
Do I have to say any other facts?
Yes. I would like to emphasize what I already mentioned earlier. I am eagerly looking forward to contribute to this
project after the GSoC also as a contributor!
Thank you,
Have a nice day,
Rajan Maurya