OpenMRS Android Client - GSoC 2016

Primary Mentorraff
Backup MentorRobby O'Connor
GSoC Student

Avijit Ghosh

Abstract

The purpose of this project is to implement new features for OpenMRS 2.x Android Client such as patient registration, support for custom forms defined on a server and the ability to work offline.

Objectives

  1. Add a patient registration form.

    We'll start with a very basic thing. We'll add a new view to the application, which lets a user register a new patient. We'll gather some basic text data like name, birthdate, etc. We'll do some validation.
     

  2. Provide support for custom forms defined on a server.

    It gets more exciting. We'll need to download a form from the server and then let a user to fill it out and send back to the server.
     
  3. Implement an offline mode, which allows to view patient's historic data and enter new forms.

    Even more exciting. Save forms on a mobile and queue them to be sent once a user gets online. Update patient's views to reflect data entered offline.
     
  4. Release a new version of the client.

    It's time to show off. Package up your app and publish to Google Play. Get your first users. Gather feedback on a developers forum. Do a video about the app and have it published on the OpenMRS YouTube channel. 

Learn

During the course of the project you will learn a lot! We are excited about new technologies and new trends in the Android world. You will have a lot of freedom to use any tools you like and we are here to advise you. Here are some of the things you will get experience with:

  1. Building with gradle and developing in Android Studio
  2. Creating views using Data Binding Library
  3. Accessing REST API using Retrofit
  4. Testing with JUnit and Espresso 
  5. Tracking issues with JIRA and working with github
  6. Getting regular code-reviews to improve your coding skills
  7. Pair programming sessions
  8. Communicating with the vibrant open-source community

GSoC Project Timeline

TimeZone: GMT +5:30
Available Times: 1600-2200 IST  ~ 6x7 = 42 hours

Pre Coding:

Get to know about the REST Api in detail and chalk out the revamped design with inputs from the forum. Learn about JUnit and Espresso tests.

1. 23 May to 10 June: Add the patient registration page using the Patient API. Also add patient photo upload feature if allowed by the system (would require API change in backend). 

2. 11 June to 30 June: Create a system to convert the JSON Form schema to actual form UI in the app, and send data back to the server. I plan to use TextInputLayout for the form elements because of their neat design and complying with material design. Create a data contract and SQL Schema for the form data, automatically save form data to local SQL, make a Syncadapter to send the data back to the server when online.

3. 1 July to 10 July: Notifications are a powerful UI element of the Android platform. Notifications are system wide, interactive and if handled properly, elegant and unobtrusive. I will make a robust notification system as a bundle within the app and call it at appropriate places to notify the user. The Openmrs app organizes UI elements in the code as bundles, for example the Toast bundle or Alertdialog bundle: https://github.com/openmrs/openmrs-contrib-android-client/tree/master/openmrs-client/src/main/java/org/openmrs/mobile/bundle My proposed notification bundle will be on those lines and will replace toasts and alertdialogs during events where more information needs to be shown as an alert to the user, like when an encounter with a patient is going on, a sticky notification may be shown, and when an event is complete, say capturing vitals, a notification is shown informing this. Also the forms feature can make use of notifications, for indicating sync status. Since notifications are interactive in Android, I will provide action buttons within the notification to take the user directly to the concerned page within the app on clicking the button.

4. 11 July to 20 July: Add the Maps page in the app, or use Google Maps API to show a list of nearby alternative care centres. Add Google Analytics (using a Google account provided by/ shared by the OpenMRS staff). If possible make this data available on OpenMRS.org for users to see. Add a feature in the patient registration page to quickly fill in the location of an accident victim when the patient is unable to answer. 

5. 21July to 31 July :Design a homepage with a graph with WilliamChart that is neat and provides usable information. Add Quick Start Guide using ShowcaseView. Add a Widget to show a list of active visits on the homescreen. 

6. 1 August to 10 August: Implement the Provider module in the app, with the help of the JSON api. It may be a rudimentary implementation or an entire dashboard, depending on the time left (low priority). If allowed by the api, notification support to be added to this as well.

7. 11 August to 15 August: Extensive testing of the application to hunt for any bugs. Prepare for final submission and release of new version of the app for the users. Pilot test the app internally among testers. Submit final code to Google.

Resources

  1. OpenMRS 2.x Android Client