Page MenuHomePhabricator

[Proposal] Commons App: Make Uploads More Reliable
Closed, ResolvedPublic



Name: Ritika Pahwa
Location: Delhi, India
Education: Indira Gandhi Delhi Technical University for Women, India (Expected Graduation Year: 2024)
LinkedIn: ritikapahwa4444
GitHub: RitikaPahwa4444
Other Communication modes: Discord, Slack, Zulip
Typical Working hours during GSoC: 9 am to 9 pm (IST) UTC+5:30


Wikimedia Commons is an Android app that enables users to upload and view pictures from their Android phone/tablet on the Commons server.
Commons App Repo: GitHub


This project aims to fix uploads related issues and deal with metadata loss.
GitHub issue: Make upload more reliable



Have you contacted the mentors already?




General Implementation Strategy (1).png (3×6 px, 557 KB)

  1. #5196: Picture location is sometimes lost despite being present in EXIF

Possible Implementation Strategy: Based on the hints provided here, a number of scenarios can be analysed and the location loss may be fixed depending on the case.

  1. #5128: Upload often fails, especially when uploading 5 or more pictures over a slow Internet connection.

Possible Implementation Strategy: As described in the issue, the network parameters need to be experimented upon, and a retry loop may be incorporated.

  1. #5136(if time allows) Retried uploads stuck in queued state

Possible Implementation Strategy: As observed here, the uploading process gets resumed when a new upload is performed. This means that the STATE_QUEUED needs to be updated appropriately to the same state as that of a new upload once the internet connectivity resumes/the paused uploads are started again.

While these are the possible implementation strategies I could think of as of now, I am constantly researching and looking for alternate approaches too, in order to find the best implementation.


4 May - 28 MayCommunity Bonding PeriodConnect with the mentors and learn more about the community, familiarise with the app structure, understand more about the upload process
Partial UnavailabilityPartially unavailable from 4 May to 15 May due to end semester exams at my University
TASK 1: Issue #5196
29 May - 4 JuneDeliverableReport key findings
Subtask 1Imagine various scenarios where location loss is possible and investigate each of them
Subtask 2Analyse various possibilities and prepare a report on the observations
Subtask 3Finalise the implementation strategy for each scenario
5 June - 11 JuneDeliverableFix location-loss
Subtask 1Obtain location information appropriately from the EXIF data
Subtask 2Intensively test the application for any new bugs
12 June - 18 JuneDeliverable Unit tests
Subtask 1Write/Modify unit tests for all the scenarios
19 June - 22 JuneDeliverableFinalise the changes for the first task
Subtask 1Complete any pending task(s)
Subtask 2Incorporate any changes suggested by the mentors
Subtask 3Report/Blog
TASK 2: Issue #5128
23 June - 29 JuneDeliverableReport key findings
Subtask 1Debug intensively for any error messages
Subtask 2Experiment with the network parameters by varying timeout or buffer sizes and prepare a report
Subtask 3Finalise the implementation strategy
30 June - 9 JulyDeliverable Fix for failing uploads
Subtask 1Modify network parameters
Subtask 2Implement a retry loop if the uploads are still unreliable
Subtask 3Intensively test the application for any new bugs
10 July - 14 JulyEvaluationMid-term evaluation
Subtask 1Finalise the changes
Subtask 2Report/Blog about key findings and accomplishments
15 July - 28 JulyDeliverableUnit tests
Subtask 1Write/Modify unit tests for the custom selector
29 July - 1 AugDeliverableFinalise the changes for the second task
Subtask 1Complete any pending task(s)
Subtask 2Incorporate any changes suggested by the mentors
Subtask 3Report/Blog
TASK 3: Issue #5136
2 Aug - 8 AugDeliverableReport key findings
Subtask 1Figure out the point of failure
Subtask 2Analyse and prepare report on key findings
Subtask 3Finalise the implementation strategy
9 Aug - 15 AugDeliverableFix stuck uploads issue
Subtask 1Modify the state of the uploads appropriately
Subtask 2Intensively test the application for any new bugs
16 Aug - 22 AugDeliverableUnit tests
Subtask 1Write/Modify unit tests for the custom selector
23 Aug - 28 AugDeliverableFinalise the changes
Subtask 1Finalise the changes for the third task
Subtask 2Code cleanup and documentation
Subtask 3Incorporate any changes suggested by the mentors
Subtask 4Final Report/Blog about key findings and accomplishments


I plan to communicate my progress every few days and incorporate any feedback suggested by the mentors. I would communicate and ask for help on GitHub as well as Zulip, based on the nature of the task.

About me

I am Ritika Pahwa, a third-year student at Indira Gandhi Delhi Technical University for Women, currently pursuing my B. Tech in Computer Science and Engineering. I love developing Android apps and have been exploring Android development since my first year at college. My experience in developing and integrating AR features into Android applications has given me a unique perspective on creating user-friendly and engaging experiences.

How did you hear about this program?

I got to know about this program from a former GSoC alumnus.

We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?

I am applying at Wikimedia Foundation, that too as a part of Google Summer of Code only.

Past Experience

I have worked as a research intern (2 months), wherein I worked in a team of 4 members to develop an efficient algorithm for the NP-complete problem Battleship Solitaire.

Apart from this, my personal projects include:

Fit Friends: Formulated an Android application with an associate which motivates kids to perform some basic exercises; added text-to-speech functionality and introduced catchy and engaging sounds for kids. Tracked exercise activity using a database entity. Currently in the process of incorporating YouTube API to fetch video tutorials for the exercises.
Tech Stack Implemented: Kotlin, XML and Room Database
My Learning: I learnt how to work with databases, APIs and Kotlin Flows.

Onepad: Prepared a modern note-taking app by designing the splash screen, onboarding screen and launcher icon and implemented the system default theme, tested and debugged the application
Tech Stack Used: Flutter and Dart
My Learning: I had developed this project as a part of "PClub Summer of Code", a program run by the PClub to familiarise with the actual GSoC process. I learnt how to implement my existing knowledge even in those projects where I am new to the tech stack being used and utilise my problem-solving skills to fix any issues in a limited span.

You can find some more personal projects here.


  • Winner, App Development Track, Innerve Summer of Code 2021 for Find Your Nanny app
  • Selected as one of the 67 Gold Microsoft Learn Student Ambassadors out of 500+ nominations for conducting events on open-source contributions and other community involvement
  • Awarded with Special Mention for being among the top 11 teams out of 400+ registrations in Ideate ‘N’ Solve, an ideathon organised by Google Developer Student Club, IGDTUW
  • Secured a rank in the top 60 students in the Python Coding Competitive exam conducted by Centre of Excellence-AI, IGDTUW
  • Ranked 140 among 1000+ participants on Codeforces in Kotlin Heroes: Practice 9

Volunteer Experience

  • Gold Microsoft Learn Student Ambassador: Delivered a speaker session that witnessed over 80 attendees; conducted a 1.5-hour event on open-source contributions with 25+ attendees
  • Mentor, DESH KE MENTOR (A Delhi Government Initiative): Supervised 13 mentors who mentored over 50 girls; guided, mentored and motivated four girls at Delhi government schools

Motivation for the proposal

Being an admirer of great photographers and an open-source enthusiast, I always wanted to contribute to Commons. The fact that the uploaded pictures are used across Wikipedia inspires me even more since I am a regular user who loves authentic content on Wikipedia :) I have often experienced upload-related issues myself and would like to fix them so that all the Commons lovers get a seamless experience with the app.

Relevant Skills

  • Experience in Android development with Kotlin, XML, Java
  • Proficiency in using SQL and Room Database
  • Git and GitHub
  • Testing in Android: Instrumented as well as local tests
  • Understanding of Retrofit, RxJava, Jetpack Compose
  • Knowledge about Wikimedia APIs

Previous Contributions to Commons

I have been contributing to the Commons Android app since February 2023. You can find all my pull requests here.

Total: 6
Merged: 5
Open: 1

Pull Requests on Existing Issues

S. No.Issue No.Issue DescriptionPR No.Tasks PerformedStatus
1.#5161Peer review: Always getting the same dozen pictures, no variety#5170- Analysed and experimented with various API call parameters and URLs - Incorporated an entity to prevent older images from showing up againMerged
2.#5074Numbers cropped in Leaderboard#5143Enabled auto-scaling of textMerged
3.#5191Dark mode: Some UI elements not conform#5193Changed the map in the upload wizard at the location selection step and black font in the feedback dialog to conform to the dark mode; modified the unit testMerged
4.#4671Robolectric 'application: Application!' is deprecated. Deprecated in Java#5140Changed the deprecated RuntimeEnvironment.application to ApplicationProvider.getApplicationContext() in all the robolectric unit tests and optimised the imports accordinglyMerged
5.NANA#5200Slight modification as discussed hereOpen

New Issues Raised

S. No.Issue No.Issue DescriptionPR No.Tasks PerformedStatus
1.#5157Longer questions not appearing completely in Peer Review#5162Changed the layout height to wrap_content as longer questions were not visible completely even on scrollingMerged
2.#5195App crashes on pressing the "My Location" icon in the upload wizardNANAOpen
3.#5194Some icons are barely visible in dark modeNANAOpen

Pull Request review

S. No.Issue No.Issue DescriptionPR No.Tasks Performed
1.#5187[Bug]: App crashes when you click on Author Name#5199Figured out the cases where the changes fail and suggested improvements
2.#5174Wrong uploader in "X will be encouraged by your appreciation" label#5183Reviewed the pull request and suggested improvements


Are you eligible for Google Summer of Code?


Do you plan to submit any other proposal apart from this one?

No, I plan to submit only one proposal.

Do you have any other plans during the period of GSoC?

No, I do not have any other plans during the contribution period.

How many hours per week can you dedicate to this?

Since a major portion of the contribution period would be covered under my summer break (upto July 31), I can dedicate approx 30-35 hours per week. I have planned a few days for incomplete tasks. This would also include any new findings that may be relevant for the last issue to accommodate any academic classwork starting Aug 1.

Have you been accepted to GSoC before?

No. I am applying in GSoC for the first time.

Post-GSoC Involvement

In my 2-month contribution journey with the Commons app starting February 2023, I would say that my learning curve has witnessed a steep rise. I researched for some of the issues existing on the repo, analysed some pull requests from fellow contributors to understand how things work and learnt from them, helped some new contributors and posted my observations in the comments section. I was closely following up the updates on the GSoC tasks, and based on the suggestion here, while I was looking for the location-loss tagged issues for my GSoC proposal and before the new task was created, I came across issue #5094. As discussed here, I intend to fix this, too, during the GSoC period if time permits and the issue is still unresolved or take it up with other issues post GSoC period and stay involved with the community.

Event Timeline

Aklapper renamed this task from Make Uploads More Reliable to [Proposal] Commons App: Make Uploads More Reliable.Mar 15 2023, 10:59 AM

From the mail that I received today, it seems like this task has been CC'd to a number of handles. We can edit the tasks and mail them for review when ready is what I interpreted from the Commons GitHub repo. I was expecting a "Save Draft" option so that I could save my progress and continue later. But I could find only the "Create Task" option and did that, without tagging anyone. Did I miss anything? I am sorry for any confusion or trouble this task may have caused.

There is an Edit Task option. See for general questions about Phabricator itself, and see for general questions about outreach program processes. Thanks.

Thank you @Aklapper. I just got a little worried seeing a lot of handles being CC'd together and wanted to clarify that this is not ready for review as of now.
List of CC'd handles:

Hi, I don't know "handles being CC'ed" means and where that is, but I'd expect reviews to take place when some review period starts? :) Your uploaded image currently cannot be seen by anyone else.

I am sorry, I just realised uploaded files are not visible to everyone. These are the handles mentioned in the mail:

Cc: Aklapper, RitikaPahwa4444, hussamsi, Karma2902, Soda, Madhurgupta10, srishakatux

Also, I was referring to the feedback on the proposal that we can ask for from the mentors/other members. Since I am still working on it, I was not seeking review/feedback.

RitikaPahwa4444 removed an attached file: Restricted File. (Show Details)

Great proposal!

Please note that even the regular picture selector loses the location, so you might want to make the strategy for task 1 more general.

Otherwise, both the content and the format are good.

The thumbnail in the "Implementation" section is mysterious, but clicking on it leads to the correct "General Strategy" image so no need to worry too much about the thumbnail.

Thank you @Nicolas_Raoul for your valuable feedback, and for confirming that the General Strategy image is accessible to you as well. I am sorry; I think I missed @Kaartic's comment about the regular selector on GitHub, probably because most of the users reported it to be working fine on Android 12. I will research more about the restricted access to the EXIF location and have a general implementation strategy for both the selectors then.

@Nicolas_Raoul, I have modified the strategy for the first issue and chosen a general implementation for now. I apologise again for missing out on key observations; will ensure this does not happen again.

No problem at all!
It is perfect now. :-)

Thank you @Nicolas_Raoul for checking my proposal again after I modified the strategy for the first issue. Since this issue has now got resolved, I will look for another issue and change the strategy accordingly.

Thank you @Nicolas_Raoul for suggesting a new issue. I will make the necessary changes.

I have modified the first task and added a few more details asked in the pre-populated template. I have also added another section for post-GSoC involvement, discussing my future plans about my involvement with the community. Would like to hear any feedback/suggestions one last time before the deadline. Thank you! :)

Hi @RitikaPahwa4444, as the deadline for GSoC is quickly approaching in less than 48 hours (April 4th, 2023, 18:00 UTC), it's crucial that you submit your proposal on Phabricator and Google's program website in the recommended format as soon as possible. To avoid any potential last-minute rushes or server failures, we highly recommend that you submit your proposal early and keep updating it as needed before the deadline. Once you have submitted your proposal, please move it from the "Proposals in Progress" column to the "Proposals Submitted" column on the Phabricator workboard by simply dragging it. If you have any inquiries, please do not hesitate to ask. Good luck with your application!

Thank you @Nicolas_Raoul for the last-minute review. Also, I have submitted my proposal on the GSoC website already, and will move it to the "Proposals Submitted" column too. Thank you @Gopavasanth for the reminder.

Thanks a lot Ritika for all of your hard work!