Aug 25 2019

This blog post is not published yet.

Hello there! My name is Divyansh Jain. I am a student at Mahatma Jyoti Rao Phoole University. I have been selected as the Android developer for the XWiki organization and I've finished working on their XWiki Android Authenticator application in GSOC19.

Preparations before applying for the GSOC19

I've contributed to the open-source project throughout the year, and once the GSOC announced the organization's name I searched and searched for the organization and then I found the XWiki. I started looking into the app, understanding how the app works, it's known issues at Jira, what the organization expects from a developer during the GSOC. I started by cloning the project, ran the app into the device, understood the project and then fixed some bugs, and opened two PR's and started talking to the listed mentors. They accepted my PR. And then I started working on the proposal.

I wrote all the things that I understood about this organization, how the app works, it's data flow diagram, and describe how I will cover all the open issues.

The day when I got selected

I wasn't expecting to get selected. But the day my name was announced, I immediately thanked my mentors for selecting me. To this day I'm truly thankful to them for selecting me.

In the first evaluation period, I first started by fixing some known bugs and migrating the whole app code from Java to Kotlin. All my previous open-source experience helped me to quickly find the bug, what's causing it and fixed it. What left was Kotlin migration which is a pretty big deal. I did create some test project on my own written fully in Kotlin but to migrate a whole app code to Kotlin is different, but I started and finished the migration. And successfully released v0.6

Second Evaluation, Adding multiple account support and fixed some more bugs, I thought I'll finish soon but then I realized there's a whole lot of work to do. In this task after discussing with my mentor, I've implemented the room DB to save user sync info and added support for multiple account sync and some minor improvements in the app. And successfully releasing v.0.7

Third Evaluation, Adding support for OpenID Connect & pagination in users list. XWiki already has support for OIDC login what's left was to add support for it. This particular task was a head-scratcher. But thanks to my mentors to, they helped me when I got stuck and now finally XWiki Authenticator supports OIDC login. Now the apps requesting XWiki user info too can access info when the user logs in and give the consent to share the info. Also while adding new XWiki account, the users will have the choice to login using old login pass or the new OIDC login. Here while implementing the OIDC login, I changed the authorization and now for old/login pass uses preemptive login and OIDC uses bearer_token for authentication when making API call. And successfully released v1.0

Here's what I've done so far.

  1. Rewritten the whole app code from Java to Kotlin.
  2. Fixed: Contacts synchronizing improperly 
  3. Fixed: Forcing a synchronization does not work 
  4. Fixed: Wrong synchronization status
  5. Added support for adding multiple XWiki accounts.
  6. Once the preferences screen is opened you can choose to edit the preferences of other XWiki accounts too.
  7. After users and groups, the list is loaded it's stored in DB so it will load instantaneously next time you open the app. 
  8. Fixed: Clicking on the save button does not close the activity. 
  9. Fixed: SocketTimeoutException crash.
  10. OIDC support: Firstly, other apps can request to access the XWiki user info. And secondly OIDC login where the first app will check if OIDC is supported in your instance or not and if it's supported app will launch a webview displaying the login and after login in the browser and user consent, the user is logged in.
  11. As the all users list is so large I've added pagination support. So when the user scrolls the list halfway down, it'll automatically load the rest of the users.
  12. Fixed: SSLHandshakeException crash
  13. Reduced the app size, through code cleanup and following Google's recommendation to reduce the app size.

How to use the result of my work

You have several ways to get application "XWiki Android authenticator":

Google play .

XWiki CI (Jenkins) .

Github Release .

Also, you can get sources of application and compile it by yourself. For this:

Open the link, https://github.com/xwiki-contrib/android-authenticator . And click on "Clone" and copy the link (usually, it is command git clone ...). After this action, you will have a project on the master branch.
Open the folder and create  local.properties  file with content
SDK.dir=%ANDROID_HOME% (here %ANDROID_HOME%
 is the path to SDK location)
You can import project in Android Studio or build the app by command ./gradlew clean cleanBuildCache build

What was not done

  1. Edit Contact Activity Improvement.
  2. Publish the app on F-Droid.
  3. Provide a library for easy implementation of dedicated XWiki authenticator

Apart from these three tasks, all is done with some major improvement in the app.

Links to issues which I've completed and resolved

ANDAUTH-63 .
ANDAUTH-62 .
ANDAUTH-54 .
ANDAUTH-57 .
ANDAUTH-38 .
ANDAUTH-58 .
ANDAUTH-61 .
ANDAUTH-59 .
ANDAUTH-55 .
ANDAUTH-53 .
ANDAUTH-43 .
ANDAUTH-47 .
ANDAUTH-48 .
ANDAUTH-49 .
ANDAUTH-27 .

Afterword

I'm truly thankful to my mentor Thomas  and Aleksei Ovsiannikov . Both of my mentors are always available and helped when I needed and gave me valuable advice and suggestions.

Tags:
    

Get Connected