Page MenuHomePhabricator

GSoC 2019 Proposal : Create an Android app for Wiki Education Dashboard, and Programs & Events Dashboard
Closed, ResolvedPublic

Description

Profile Information

Name: Ujjwal Agrawal
University: IIT (ISM), Dhanbad
Email: ujjwal.iitism@gmail.com
Github: ujjwalagrawal17
Other Contact Methods: Google Hangouts, Slack
Blog: https://medium.com/@ujjwalagrawal17
Twitter: ujjwal171097
Location: India (UTC +5:30)
Typical working hours: Between 4 pm to 2 am UTC +5:30

Synopsis

About the Wiki Education Dashboard:

The Wiki Education Dashboard is a web application that supports Wikipedia education assignments, edit-a-thons, and other editing projects. It provides data and course management features for groups of editors — instructors, students, and others — who are working on Wikipedia, Wikidata, and other Wikimedia wikis. Users log in with their Wikipedia accounts (through OAuth) and allow the Dashboard to make edits on their behalf. The Dashboard automates many of the standard elements of organizing and participating in a Wikipedia classroom assignment, edit-a-thon, or other wiki contribution campaign.

The Dashboard code runs two main sites: the Wiki Education Dashboard — dashboard.wikiedu.org — and the Wikimedia Programs & Events Dashboard — outreachdashboard.wmflabs.org. dashboard.wikiedu.org is used for Wiki Education programs, primarily focused on higher education in the United States and Canada. outreachdashboard.wmflabs.org is for the global Wikimedia community to organize all kinds of programs, including edit-a-thons, education programs, and other events.

About the app:

Wiki Edu Dashboard App is an Android client for the Wiki Education Dashboard API to support managing programs, including edit-a-thons, education programs, and other events. The app allows users to access Wiki Education Dashboard and Programs & Events Dashboard from their Android phone. The Android app would be handy, especially for use in bandwidth-constrained situations and during edit-a-thons.

What can be implemented?

  • List of current, active courses
  • Log in to either dashboard.wikiedu.org and outreachdashboard.wmflabs.org
  • Signup to either dashboard.wikiedu.org and outreachdashboard.wmflabs.org
  • List of your own courses
  • List of users for a course
  • List of articles edited for course
  • Recent activity for a course
  • List of uploads for a course
  • Search for courses by name
  • List of my articles (articles assigned to me) in a course
  • Assign yourself articles for a course you are in
  • Join a course that does not require a passcode
  • Join a course by opening an enrollment URL
  • As a program organizer, create accounts for edit-a-thon participants
  • If time permits, Release the app in Play Store (at least in alpha).

I also plan to follow best practices for Android and Wikimedia and maintain high standards in terms of code quality and structure so that there is no compromise in app performance and stability:

  • Use of Kotlin in whole app
  • Model View Presenter (MVP) architecture
  • Use of RxKotlin for asynchronous programming
  • Dependency injection using Dagger 2
  • Distributed code following separation of concerns
  • Unit tests using Espresso, JUnit in Kotlin
  • Use of new Material Components for UI designing in the app.- Model View Presenter (MVP) architecture

Prototype:
I’ve been working on the app for some time now. I made a working prototype for the same.

Description: I have used Native Android App Development using Java to develop the prototype. The prototype has the following features

  • Log in to outreachdashboard.wmflabs.org
  • See a list of current, active courses
  • See a list of your own courses
  • Course Details Page containing statistics related to the course
  • Course UserList Fragment - showing list of users for a course
  • Course ArticleList Fragment - showing list of users for a course
  • Course UploadList Fragment - showing list of uploads for a course
  • Documentation of the project

Mentors: @Ragesoss

Timeline

1) Community Bonding Period [ May 6 - May 26 ]

Tasks

  • Communicate and bond with mentors. Discuss new APIs to be developed that are needed by the Android client during the project.
  • Create specific issues for the project
  • Getting familiar with Dagger 2
  • Learning more about Kotlin, RxKotlin, WikiEdu Dashboard project and APIs

Deliverables

  • Community bonding report
  • Blogs about the experience, app architecture

2) Week 1 [ May 27 - June 2 ]

Tasks

  • Bug fixes, documentation, and Improvements in UI of the modules in the prototype according to feedback recieved from mentors.

Deliverables

  • Log in to either dashboard.wikiedu.org and outreachdashboard.wmflabs.org
  • List of current, active courses
  • List of your own courses

3) Week 2 [ June 3 - June 9 ]

Tasks

  • Open Webview (signup page) on-click of SIgnUp button and storing cookies in SharedPreference after signing up.
  • Make a new fragment for showing User list in course detail page
  • Implement Async API calls to get the list of users for a course and displaying it in RecyclerView.
  • Design and implement UI for RecyclerView card to display name and other details like characters added, edited.

Deliverables

  • Signup to either dashboard.wikiedu.org and outreachdashboard.wmflabs.org
  • List of users (including details like characters added, edited,..) for a course

4) Week 3 [June 10 - June 16]

Tasks

  • Make a new fragment for showing list of articles edited in course detail page
  • Implement Async API calls to get the list of articles edited for a course and displaying it in RecyclerView.
  • Make a new fragment for showing list of uploads in course detail page
  • Implement Async API calls to get the list of uploads for a course and displaying it in RecyclerView using Glide library.

Deliverables

  • List of articles edited (including details like characters added, views, ..) for course
  • List of uploads for a course

5) Week 4 [ June 17 - June 23 ]

Tasks

  • Polish the UI of User list, Article list, Upload list in course detail page and get community feedback
  • Documentation and testing of the above modules.

Deliverables

  • Documentation of above modules.

--------------------------------------------------PHASE I EVALUATION [ June 24 - June 28 ] ----------------------------------------------------

6) Week 5 [ June 24 - June 30 ]

Tasks

  • Design and implement media details activity to show all details related to media (uploads)

Deliverables

  • Upload Details Activity containing all details related to media (title, description, author, categories, license)

7) Week 6 [ July 1 - July 7 ]

Tasks

  • Make a new fragment for showing Recent Activity in course detail page
  • Implement Async API calls to get the recent activity for a course and displaying it in RecyclerView (heterogeneous RecyclerView if required).

Deliverables

  • Feature to see recent activity for a course

8) Week 7 [ July 8 - July 14 ]

Tasks

  • Implement SearchView in explore fragment toolbar for searching courses by name
  • Add a button in course details page to show a dialog box which asks article name to be assigned
  • Implementing API call for assigning articles to the user.

Deliverables

  • Search for courses by name
  • Assign articles to yourself for a course you are in

9) Week 8 [ July 15 - July 21 ]

Tasks

  • Showing list of my articles (articles assigned) in course details home fragment in a recyclerview fetched from API.
  • Documentation and testing of the above modules.

Deliverables

  • List of my articles (articles assigned to me) in a course
  • Documentation of the above modules

--------------------------------------------------PHASE II EVALUATION [ July 22 – July 26 ]----------------------------------------------------

10) Week 9 [ July 22 - July 28 ]

Tasks

  • Add option in toolbar menu in course detail page to join the course (only visible if it doesn't require passcode)
  • Implementing API calls on click of the menu item to join the course.

Deliverables

  • Join a course that does not require passcode
  • Join a course by opening an enrollment URL

11) Week 10 [ July 29 - August 4 ]

Tasks

  • Show a floating action button in user list fragment in course detail page if the user is the program organizer.
  • On click of the button, open a dialog that asks username, make an API call to create an account for the User in the Course.
  • Display the link for inviting multiple people in the dialog box and implement share feature on click of the link (in email, facebook,...).

Deliverables

  • Feature for program organizers to create accounts for edit-a-thon participants
  • Feature to share link to invite multiple participants.

12) Week 11 [ August 5 - August 11 ]

Tasks

  • Create UI for Settings Activity that has a feature to switch between WikiEduDashboard and P&E Dashboard servers
  • Store the current Server URL preference and cookies of both the servers in SharedPreferences so that we don't require to log in again after switching to a different server.

Deliverables

  • Settings Activity with a feature to switch between WikiEduDashboard and P&E Dashboard servers

13) Week 12 [ August 11 - August 18 ]

Tasks
If time allows,

  • Make a Google Play account for WikiEdu Dashboard
  • Discuss and add details (description, screenshots, banners, terms&conditions, ...) for Play Store listing
  • Release the app (at least in alpha)

Deliverables

  • If time allows, release the app on Google Play Store (at least in alpha)

14) Final Week [ August 19 - August 25 ]

Tasks

  • Getting feedback from users, mentors and other community members by announcing the app on mailing lists and other channels.
  • Working on Project Presentation.
  • Manual exhaustive testing on different devices, emulators
  • Writing documentation for final submission.

Deliverables

  • Improvements based on the feedback received from mentors, other community members
  • Project Presentation

--------------------------------------------------FINAL EVALUATION [ August 26 – September 2 ]----------------------------------------------------

Participation

Progress Report

  • I will remain online on Slack during my working hours ( 4 pm to 2 am UTC +5:30 )
  • I will write Bi-Weekly Blog Posts at (https://medium.com/@ujjwalagrawal17).
  • I will share my blogs on Twitter.
  • I will submit a Project Presentation

Where I plan to publish my source code

  • I will be working on a separate branch on git and uploading code to the forked repo almost on a daily basis, will be creating and merging pull requests when a complete feature is done.

Communication on task

  • I'll be using GitHub for managing bugs and subtasks. Will also use it to discuss the status and ideas related to the project.

About Me

Personal background

I am a final year B.Tech. undergraduate at Indian Institute of Technology (ISM), Dhanbad. I am pursuing Electronics and Communication Engineering as my Major. I have a keen interest in Android App development ( I have been doing Android App Development from last 3 years). I use git and Github every day and I am well acquainted with how to use them for version control.

How did I hear about this program?

I was a GSoC student Intern last year with Wikimedia Foundation (Commons App Team).

Time during Summers

I have my final exams over in April and will graduate in May 2019. I am an Outreachy mentor in Wikimedia Commons app where I will be spending around 5-10 hours a week. Apart from that, I have no other commitments this summer, so I'll be able to give 40 hours or more per week for the whole internship period. I'll be going to Wikimedia Hackathon 2019 in Prague for 1 week during the Community Bonding Period.

Eligible for Google Summer of Code and Outreachy ?

I am applying only for GSoC. I am applying under Wiki Education Dashboard Android App only.

Past Experience

Contributions to Wikimedia Commons App

Last year during my GSoC, I worked on implementing Browse feature in Wikimedia Commons app. Google Summer of Code with Commons app team was a great opportunity to work with really smart and amazing people and I also learned a lot in the process. It took my understanding of Android and Version Control to another level.

  • After the project, Image, Category Search on Wikimedia Commons is successfully included in the Wikimedia Commons App. Users can open the search page from Explore Activity of the app.
  • A page for category details page which contains the list of images, subcategories, parent categories were added in the app and linked with various parts of the app.
  • Users can now skip login if they don’t want to create an account and browse commons from the app.

Here is the link to Project Presentation that I made in the final week of GSoC.

Successfully merged Pull Requests for the Project

Commons is the first open source project to which I contributed. I have sent 50+ merged PRs to the open source project. Here is the link that contains information about the merged PRs.

I am also a mentor in the commons app team for Outreachy Round 18.

Past Experience in Android Development

I’ve been doing Android development since my first year. My first project was a Home Automation app to control LED lights using our mobile phone(Raspberry Pi behaving as a server)that I built in a hackathon. After that, I had started making apps for my learning purpose. Apart from the prototypes, I had also developed few apps that are on Google Play.

Easy Invoice Manager App :
Easy Invoice Manager provides an Easy way to create and manage Invoices after GST Launch. Users can add products, buyers, consignee which will be saved for making the next invoice. Users can generate pdf for the invoice.Also they can download ,share or mail the pdf of invoice. The features now in the app is not only limited to invoice but also includes quotation, Purchases, Expenses. I was the only developer working on this app. I improve the app on a regular basis.
(We are using razorpay payment gateway for getting payment)

Server End (Team Project): We were 3 members in the team working for server end. My work
here included creating database design, writing APIs for different modules.
Tech Stack:
Frontend: Native Android App Development using Java, Backend: Django 2.2 (Python 3), MySQL
Google Play Link : https://goo.gl/CjnBh8 [200k+ downloads in Google Play]

FoodO User and Delivery Person App :
Food Delivery App for a startup based out of Dhanbad, India.

  • Feature to explore Restaurants, Cuisines, Place Order, Order history, notification.
  • Used Native App development to make a User Food Delivery App and Delivery Boy
  • Used Grappelli admin panel to customize default Admin Panel for easy addition of restaurants, categories, products
  • Used TextLocal APIs to send SMS to Users on Confirmation of Order
  • Used Firebase Notification APIs to send Notification to users of a specific Colony for Offers
  • Used Notification Receiver in User, App
  • Google Play Link: https://play.google.com/store/apps/details?id=com.prajwal.foodo&hl=en_IN [10k+ downloads in Google Play]

Spectrum'18:
I had developed this app for our departmental fest of electronics engineering (Spectrum). It has features like login, OTP verification using the phone number, Show list of events day wise, register for events, send notification for events.

Brand Store:
It is an app where users can get offers from nearby shops of different categories across their city. Shops can also register them and show their offers to the users of the app. Although the startup is closed now. but the app is still on google play.

Apart from this, I also have received the Google India Challenge scholarship for Android Developer nanodegree last year.

Event Timeline

If you would like us to consider your proposal for review, please move it to the submitted column on Google-Summer-of-Code (2019) board.

Congratulations on completing the project! If there isn't anything remaining in your proposal to address, feel free to close this task. Before you do so, make sure your project is listed here https://www.mediawiki.org/wiki/Google_Summer_of_Code/Past_projects#2019 and has the following information: Student name, Mentors, Relevant links and Outcomes (in not more than two lines).

Thanks @srishakatux :)
I have added all the necessary changes on the mediawiki page.