Skip to content

Instantly share code, notes, and snippets.

@devansh-299
Last active February 23, 2023 09:31
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save devansh-299/e2041c07d9ab55a747391951e9090df4 to your computer and use it in GitHub Desktop.
Save devansh-299/e2041c07d9ab55a747391951e9090df4 to your computer and use it in GitHub Desktop.
GSoC'20 Report - Mobile Wallet

Google Summer of Code 2020

Project - Mobile Wallet 4.0

Mobile Wallet is an Android-based framework for digital wallet use cases based on top of the Apache Fineract 1.x platform. The project follows the clean architecture and contains a core library module which can be used as a dependency in any other wallet based project. The Mobile Wallet framework currently has MifosPay as a reference application to demonstrate these use cases.

Project Mentors:

Work Done

  • Added Complete Support for Standing Instructions
  • Integrated Fineract CN for the Core Use Cases
  • Added Payment Hub based Transactions Support
  • Added Multi-Theme Support in the Application
  • Integrated Hover USSD SDK
  • Converted Java Files to Kotlin
  • Other Minor Improvements in the Codebase

1. Add Complete Support for Standing Instructions [Pull Request - link]

Description

Last summer the initial work of adding support for standing instructions in Mobile Wallet was done. During the coding phase one, I re-wrote the last year's initial implementation code completely in Kotlin and further worked upon adding new functionality to create, fetch, update, and delete standing instructions by modifying both the core and the mifospay modules.

Layouts

Create Standing Instruction Standing Instruction List Standing Instruction Details Edit Standing Instruction

Screen Recording

Create New Standing Instruction Existing Standing Instruction

Other Information

The Standing Instruction implementation work has been completed from the application side but due to certain server-ended issues the creation of new standing instructions and updating existing standing instructions functionalities are not working yet.

2. Integrate Fineract CN for the core use cases [Pull Request - link]

Description

Adding FineractCN support in Mobile Wallet involved preparing a mapping from Fineract back-office APIs to FineractCN APIs (mapping - link) and deciding what all APIs can be replaced. Any further work based upon the mapping can be mainly divided as - working on the Core Module and working on MifosPay Module

Core Module

  • Refactored Core Module to separate Fineract and FineractCN services.
  • Updated the core module to make requests to Fineract CN and accept responses.
  • Added use cases for:
    • Login FineractCN user
    • Fetch/create customers
    • Fetch/create deposit accounts
    • Fetch Journal entries

MifosPay Module

  • Updated SignUp Activity to allow the creation of FineractCN customer and deposit account while signing up.
  • Updated HomeFragment to fetch account details and transactions via FineractCN APIs.
  • Profile Fragment now uses FineractCN APIs.
  • Updated History, Merchants fragments, and SpecificTransaction Activity to fetch transactions and their details from FineractCN APIs.

Layouts

Registration Screen Home Screen Transaction History
Transaction Details Specific Transactions

Screen Recording

Other Information

  • Since FineractCN does not provide self-service scoped access to information yet, the same has been achieved by scoping the information using a user on Fineract 1.x and then linking the client on Fineract 1.x with the customer on FineractCN by using client's externalId and the customer's customerIdentifier fields respectively.
  • To fetch transaction history and transaction details, Journal Entries APIs inside Accounting Module (documentation - link) have been used

3. Payment Hub Integration [Pull Request - link]

Added functionality to send and request payments via Payment Hub APIs. The work involved changes in both Core and MifosPay module:

Core Module Changes

  • Updated API endpoints and services to work on the latest payment-hub build
  • Updated entities according to the new documentation.
  • Added use cases for:
    • Registering and fetching Secondary Identifiers for client's savings account
    • Making transactions using Payment Hub
    • Requesting transactions from payers
  • Deleted old payment-hub integration files.

Mifospay Module Changes

  • Added Secondary Identifier registration process while creating a new user, and fetching them during the login process.
  • Updated Send, MakeTransferFragment to work on payment-hub based use cases.
  • Deleted old payment-hub integration files.

Screen Recording

Making Transaction Request Transactions With QR Code

4. Multi Theme Support [Pull Request - link]

Added the multi-theme support in Mobile Wallet Application. The users can choose among the following themes:

  • Dark Theme
  • Light Theme
  • System Theme - This uses the theme applied on the device

Layouts

Home Screen Send Money Screen Transaction Details
Transaction Receipt Specific Transactions Link Bank Account

For more layout screenshots and screen recordings please visit this link

5. Hover SDK Integration [Pull Request - link]

Integrated Hover SDK to automate USSD sessions. When opting to use the mobile number to make payments, clients can further opt to use Mobile Money for payments. Hover Documentation: link

Screen Recording

Other Information

The API token used has been generated after registering the application's package under my Hover account.

6. Converting Java Files to Kotlin

Worked on converting Java files to Kotlin to achieve our aim cross platform support using Kotlin Multiplatform
Converted Files:

  • All entity files inside the core module - Pull Request
  • All Retrofit API service files inside the core module - Pull Request
  • All domain model files inside the core module - Pull Request

7. Miscellaneous Minor Improvements

During my GSoC journey, I also worked upon fixing any minor bugs that I encountered and did other minor improvements be it in the codebase or in the user interface

Path Ahead

It was an amazing experience working with the Mifos Initiative on Mobile Wallet and I believe we achieved a lot during this GSoC journey but still, I think there's a lot of scope of improvements and for adding new features. Also, the task of migrating to Open Banking APIs is still something that we need to work upon and I hope to continue working with the Mifos Initiative in the future and complete this task and help the other community members from my experience.

Conclusion

The Google Summer of Code journey with the Mifos Initiative has been pretty amazing and challenging both. I had a great time learning new things and working with other community members in a collaborative environment to develop and work on an amazing project. I would like to thank Ed Cable especially for always being ready to help me and my mentors for their guidance and support.

Thank You
Regards
Devansh Aggarwal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment