Page MenuHomePhabricator

Proposal: Add leaderboard based on user's edits using Commons Android App
Open, Needs TriagePublic

Description

Profile Information

Name : Silky Priya
IRC nick : Silky44
Email : silkypriya64@gmail.com
Github : https://github.com/silkypriya
Location : India
Time Zone : UTC +5:30
Typical working hours : Between 2 pm and 3 am UTC +5:30
Outreachy Proposal link

Synopsis

About the app:

The Wikimedia Commons Android app allows users to upload pictures from their Android phone/tablet to Wikimedia Commons. Wikimedia Commons is online repository of freely-licensed multimedia files and an independent project that seeks to document the world with photos, videos and recordings.

About the project:

The project is about enhancing the already working Wikimedia Commons App by adding a leaderboard based on user's edits made with the mobile app using Commons Android App.

What to implement
  • Leaderboard displaying user's Avatar and rank.
  • Leaderboard showing 3 different results based on uploads, nearby and used.
  • Filters in leaderboard screen and show results based on selected filter (weekly, monthly, yearly, all time)
  • Open the gallery of that user's pictures by tapping the name of a user in the leaderboard
Benefits of the feature
  • A leaderboard would motivate many people and can be a fun way to drive competition among users.
  • Quantity and quality of uploads will increase by letting users see other people's contribution.
Mentors :

How it can be implemented?

  • 1. Leaderboard based on uploads
  • Make a screen with two tabs first tab as achievement activity and second tab is Leaderboard(Project) using APIs for tabs with Fragments and ViewPager.
  • Design UI of the Leaderboard fragment and display user's Avatar and rank on Leaderboard screen fetched from API.
  • 2. Fetch user list to display on leaderboard screen
  • Use the APIs to fetch leaderboard (user list) based on uploads via mobile app (all time) and display it in Leaderboard screen.
  • The list can be calculated on the server where currently achievement calculations are performed.
  • Cache user's score for 1 hour.Only users who keep looking at the leaderboard would have their score grow at smaller intervals than 1 hour.
  • 3. Add Pagination
  • Add pagination in the leaderboard screen to load more users on scrolling down.
  • This can be done by creating class PaginationAdapter extending RecyclerView.Adapter.
  • PaginationAdapter helper methods will be useful for added data fetched via Pagination.
  • 4. Add duration filter
  • Add duration filters in leaderboard screen and show results based on selected filter (weekly, monthly, yearly, all time).
  • This can be done using Spinners which provide a quick way to select one value from a set.
  • In the default state, a spinner shows its currently selected value(for example "all time"). Touching the spinner displays a dropdown menu with all other options (weekly, monthly, yearly, all time), from which the user can select a new one. Spinner can be implemented using three key classes Spinner, SpinnerAdapter, AdapterView.OnItemSelectedListener.
  • 5. Show results based on uploads, nearby, used
  • Change the UI to add 2 more tabs in order to show 3 different results based on (uploads, nearby, used) using APIs for tabs with Fragments and ViewPager.
  • 6. Open user’s gallery
  • Tapping the name of a user in the leaderboard should open the gallery of that user's pictures.
  • First fetch the URL of the gallery of the user's pictures using API call and open URL in android web browser.
  • 7. Screenshot of the prototype

Timeline

PeriodTaskDeliverables
May 20 to May 26 (7 Days)Community bonding period Communicate and bond with students and mentors. Create specific issues for the project. Getting familiar with server where we currently perform achievement calculations and related APIs.Blogs about the initial experience, app architecture,community bonding. Decide and design UI of the Leaderboard.
May 27 to June 6 (10 Days)Add Leaderboard tab (based on uploads).Display user's Avatar and rank on Leaderboard screen fetched from API.Leaderboard displaying user's Avatar and rank + Unit tests.
June 7 to June 13 (7 Days)Use the APIs to fetch leaderboard (user list) based on uploads via mobile app (all time) and display it in Leaderboard screen.Leaderboard displaying user list based on uploads + Unit tests.
June 14 to June 20 (7 Days)Add pagination in the leaderboard screen to load more users on scrolling down.Leaderboard with dynamic scrolling.
June 21 to June 30 (10 Days)Change the UI to show and select filter. Add duration filters in leaderboard screen and show results based on selected filter (weekly, monthly, yearly, all time).Leaderboard show results based on selected time frame + Unit test
MID-EVALUATION
July 1 to July 15 (15 Days)Change the UI to add 2 more tabs in order to show 3 different results based on (uploads, nearby, used)Leaderboard based on uploads, nearby and used + Unit test
July 16 to July 25 (10 Days)Tapping the name of a user in the leaderboard should open the gallery of that user's pictures.Open user gallery in android web browser + Unit test.
July 26 to August 9 (15 Days)Improvements based on the feedback received from mentors and other community members. Bug fixes, Writing documentation.Documentation of above modules. Unit test for implemented modules ( If remaining ).
August 10 to August 20 (11 Days)Avatar is the user's most successful picture (the one which is used the most in the wikipedias/etc, or a random one if the user's pictures are not used yet anywhere). Add option to select one of the user's uploads as an avatar picture.Add option (an privilege to unlock) for users to personalize their Avatar.
FINAL EVALUATION

Other Deliverables

  • Weekly report, and blog

Participation

Workflow

  • I will document detailed progress through weekly blog posts.
  • 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 pull requests when a complete feature is done.
  • During testing and debugging Period, I will request the beta testers to test the app and get feedback from community.
  • Can be contacted via hangouts, mails in my non working hours

Communication

  • Flexible with working hours
  • Can be contacted via hangouts, mails in my non working hours
  • Will remain online on IRC, Hangouts during my working hours
  • Between 2 pm and 3 am UTC +5:30

About Me

Education and interest
Currently in the final year of B.Tech in Computer Science and Engineering in Indian Institute of Technology, Roorkee. I will graduate in May 2019. I have interest in Android App development.

How did I hear about this program?
A friend of mine, Ankita Saxena, encouraged me to participate in this program.She is an Outreachy 2017 alumuna.

Time during Summers
I will have my final exams over in April and will graduate in May 2019. I have no other commitments this summer, so I will work for full time for the whole internship period.

Are you planning to apply to both Google Summer of Code and Outreachy programs, if so, with what organization(s)?
I am only applying for outreachy.

What does making this project happen mean to you?
This was one of the first community I started contributing to. The helpful and highly skilled mentors motivated me to contribute and explore open source development. It is a huge opportunity to android development enthusiasts like me. Learning and contributing to the project that seeks to document the world with photos is great.

Past Experience

  • I have gained experience with JAVA, PYTHON, HTML, CSS, JAVASCRIPT, GIT by working in college Technical teams.
  • I’ve been doing Android development for the last one year.
  • I have experience of clear and concise writing of communications and development documentation.
Python Project
  • Implemented a Text-Editor Software for Windows OS and Linux to create and edit plain text documents by use of basic editing features.

Github Link of the Project : https://github.com/silkypriya/Text-Editor

Contributions to Wikimedia Commons App

Merged Pull Requests:

Open Pull Requests:

Fixed Issue:

Contributions to Wikimedia

API:Block: Improved the documentation and wrote sample code to demonstrate its use in blocking and unblocking the user
Documentation: Approved
Sample code: Merged
API:Emailuser: Improved the documentation and wrote sample code to demonstrate its use in sending email to other user
Documentation: Approved
Sample code: Merged

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald TranscriptMar 23 2019, 6:59 AM
SilkyPriya updated the task description. (Show Details)Mar 23 2019, 7:05 AM
SilkyPriya updated the task description. (Show Details)Mar 23 2019, 7:09 AM
SilkyPriya updated the task description. (Show Details)Mar 23 2019, 7:11 AM
SilkyPriya updated the task description. (Show Details)Mar 23 2019, 7:43 AM
Aklapper renamed this task from Proposal : ADD LEADERBOARD BASED ON USER’S EDITS USING COMMONS ANDROID APP to Proposal: Add leaderboard based on user's edits using Commons Android App.Mar 23 2019, 8:06 AM

sorry for moving your task by mistake :)

@SilkyPriya Thanks for documenting your proposal here. Overall the proposal looks good to me.

You can probably allocate some more time for writing tests. Currently, I see that you have allotted time for tests only after the mid-term evaluation. Ideally, development and tests should go hand in hand. You can revisit our contributor guidelines to get an idea of the workflow. https://github.com/commons-app/apps-android-commons/wiki/Contributing-Guidelines

Moreover, if you have familiarity with python scripting, it would be nice to mention it in the proposal. As you might be required to help in the development of the APIs required for building leaderboard. Our self hosted APIs exist in this repo: https://github.com/urbanecm/commonsmisc

Hi @SilkyPriya

The proposal looks great to me :). I agree with @maskaravivek you should allocate more time for writing tests and if you can help in the development of the APIs then it would be very nice.

SilkyPriya updated the task description. (Show Details)Mar 31 2019, 11:18 PM
SilkyPriya updated the task description. (Show Details)Mar 31 2019, 11:30 PM
SilkyPriya updated the task description. (Show Details)Mar 31 2019, 11:33 PM
SilkyPriya updated the task description. (Show Details)
SilkyPriya updated the task description. (Show Details)Mar 31 2019, 11:36 PM

Hi @maskaravivek @Ujjwalagrawal17

Thank you for your feedback and suggested improvements.
Updated my proposal. I allotted the task of writing unit tests in different time periods along with other tasks. I have also updated and mentioned my Python project.

Thankyou!

SilkyPriya updated the task description. (Show Details)Apr 2 2019, 3:09 PM
SilkyPriya updated the task description. (Show Details)Apr 2 2019, 3:11 PM