===Profile Information
**Name**: Shashank Kumar
**Email**: shashank.kumar.phe22@itbhu.ac.in
**Education: ** Indian Institute of Technology (BHU) , Varanasi
**Github : **[[ https://github.com/shashankiitbhu | shashankiitbhu ]]
**LinkedIn : **[[ https://www.linkedin.com/in/shashank-k-606/ | Shashank Kumar ]]
**Location**: Varanasi, India
**Other Communication modes:** Discord, Zulip, Telegram
**Typical working hours**: 9 am - 10 pm (IST) UTC+5:30
===Synopsis
- Wikimedia Commons Android App is an App that Enables user to Upload and Review Images (Contributions) through their Android Devices. The goal of this GSOC Project is to Improve the Upload Management Queue and Modernize the app.
- **Mentors** - @Nicolas_Raoul @RitikaPahwa4444
> Have you contacted your mentors already?
Yes
===Deliverables
**There are Main Three Divisions of this Project: **
**1. Improve Upload Queue Management: **
**2. Modernize the App**
**3. Optional Tasks**
===Implementation Strategy
====Improve Upload Queue Management
**1. Making Upload Queue Behave as a Real Queue **
- Main Objective here is **Only One Upload Proceeds at a time** , What needs to be done here is to make sure that due to No Reason, whether it is //Retry of Failed Uploads// or //Pausing and Resuming Uploads// or //Making Multiple Uploads at the same time one after another// , No Two Uploads are in Progress at the same time , one possible solution is to - **Restrict STATE_IN_PROGRESS to the Current Upload Only.**
- Currently there is No-Distinction between **//Queued//** Uploads and //**Not-Started Progress Bar**// Uploads which makes it really Confusing and also disrupts the normal flow of the upload queue, Hence It needs to be simplified to one tag - //**Queued**// which should be assigned only after Upload Worker starts the Job of Uploading them.
- Maintaining a Queue where only one Upload is in progress at a time , making sure all others are with a single label - Queued and possibly maintaining their queue position number to make sure that no two uploads overlapp or get "stuck" as mentioned here - [[ https://github.com/commons-app/apps-android-commons/issues/5603 | #5603 ]]
**2. Building New UI for Pending Uploads**
{F43151303}
- Make a Separate **Pending Uploads** Screen which Follows the above principles for a **Real Upload Queue** , In which only //one upload is seen in Progress at a time//
- Making It Easier for users to see their **Queued Uploads** ,**Paused Uploads** and **Failed Uploads** , this clarifies to the user that Failed Uploads will be added at the last of the Queue if retried and Paused Uploads are different from Queued Uploads
- This Provides users a clean way to see status of their uploads and clearly decide what action they should take.
**3. Pevenr Retries For Genuinely Failed Uploads ** [[ https://github.com/commons-app/apps-android-commons/issues/5284 | #5284 ]]:
- As Mentioned [[ https://github.com/commons-app/apps-android-commons/pull/5613 | here ]] , Identify which reasons qualifies as "Genuine"
- Whitelist the "Genuine" reasons and check if Upload is Failed due to any of these reasons.
- Only Retry if the Failed reason is not in the list of whitelisted reasons for failure.
**4. Handling Failed Uploads **
- This Involves Fixing [[ https://github.com/commons-app/apps-android-commons/issues/5280 | #5280 ]] & [[ https://github.com/commons-app/apps-android-commons/issues/5283 | #5283 ]]
- For Issue #5283 , till this point I have observed and also mentioned [[ https://github.com/commons-app/apps-android-commons/issues/5283 | here ]] that //it only appears// that the failed upload is going on Simultaneously but isn't actually going on, this is seems to be an Issue with Incorrectly updating the UI, However it would require more extensive debugging and find a more reliable way to reproduce this to actually get to a conclusion.
- For Issue #5280 , we first need to find a reliable way to reproduce it , currently the only way seems to be "cutting of Internet" while a large chunk of uploads is in queue , a possible solution right now seems to be handling the case for Pausing/Failing Uploads when Internet is cut-off suddenly, I believe upon Implementation of a **Real Queue** for Uploads we can get a better understanding and solution of this Issue.
=====Modernize the app by replacing Kotlin Android Extensions and Butterknife with ViewBinding:
As most of this Migration is already complete, I believe this task is to be replaced with some other task for this GSOC, so I am waiting for mentor's confirmation on this.
=====Optional Tasks
===Timeline
| Period | Deliverables | Task Description |
|------------------------|--------------------------------------------------|------------------------------------------------------------------------------------------|
| May 4 to May 26 | Community bonding period | - Join community and connect with Mentors |
| | | - Introduction and connecting with other contributors |
| | | - Start working on taking feedback for the new UI for the Pending Uploads and Start working on Suggestions |
| | | - Create and Implement the new UI |
| | Pending Uploads UI Design | - Final Review, Testing, and Feedback for the UI |
| May 27 to May 31 | | - Final Iteration on New UI Based on the Received Feedback |
| May 31 to June 8 | | - |
| | | - |
| June 8 to June 22 | | - |
| | | - |
| June 22 to June 30 | | - |
| July 1 to July 7 | | - |
| July 8 to July 12 | Mid Term Evaluations | - Mid Term Evaluations |
| July 13 to July 19 | | - |
| July 20 to July 31 | | - |
| August 1 to August 3 | | - |
| August 4 to August 15 | | - |
| August 16 to August 28 | | - |
| | | - |
| August 26 to September 2| | - Mentors submit final GSoC contributor evaluations |
| September 3 | | - Google Summer of Code 2024 announced |
===Participation
- I plan to communicate through GitHub, Zulip, and any other suggested mediums
- I plan to report the successful completion of tasks through detailed blogs on either Hashnode or Medium
- I am available online during my working hours and I am always available on my Email.
- I am also available during my working hours for Online meetings through Google Meet or Other Mediums if required.
===Previous Contributions to Commons
I have started Contributing to Commons from December 2023 and have made several pull requests since then. You can look at those [[ https://github.com/commons-app/apps-android-commons/pulls?q=is%3Apr+author%3Ashashankiitbhu+is%3Aclosed | here ]]
**Pull Requests Created By Me**
**Total : 29** :: **`BUGs` : 14** **`Enhancements`: 5** **`Migrations`: 8**
**Merged: 22**
**Open: 7**
| S.No. | PR No. | Issue No. | Description | Status |
|-------|--------|------------------------------------------------------|-------------|--------|
| 1 | [PR #5544](https://github.com/commons-app/apps-android-commons/pull/5544) | [#5522](https://github.com/commons-app/apps-android-commons/issues/5522) | **BUG** Precise error message if the password has become invalid after password change | Merged |
| 2 | [PR #5466](https://github.com/commons-app/apps-android-commons/pull/5466) | [#5437](https://github.com/commons-app/apps-android-commons/issues/5437) | **BUG** Crash in Upload Wizard when changing Android font size | Merged |
| 3 | [PR #5618](https://github.com/commons-app/apps-android-commons/pull/5618) | [#5277](https://github.com/commons-app/apps-android-commons/issues/5277) | Custom picker: Show different pictures that are currently being uploaded | Merged |
| 4 | [PR #5468](https://github.com/commons-app/apps-android-commons/pull/5468) | [#5448](https://github.com/commons-app/apps-android-commons/issues/5448) | **BUG** Nearby banner shows Item without image| Merged |
| 5 | [PR #5576](https://github.com/commons-app/apps-android-commons/pull/5576) | [#5558](https://github.com/commons-app/apps-android-commons/issues/5558) | Do not reload everything after marking a picture as not for upload | Merged |
| 6 | [PR #5500](https://github.com/commons-app/apps-android-commons/pull/5500) | [#5474](https://github.com/commons-app/apps-android-commons/issues/5474) | **BUG** App Crashes when Switched Between Dark/Light Mode in Location Picker Activity | Merged |
| 7 | [PR #5510](https://github.com/commons-app/apps-android-commons/pull/5510) | [#5505](https://github.com/commons-app/apps-android-commons/issues/5505) | **BUG** Edit Category Crashes when Previous Button is Clicked | Merged |
| 8 | [PR #5525](https://github.com/commons-app/apps-android-commons/pull/5525) | [#5521](https://github.com/commons-app/apps-android-commons/issues/5521) | **BUG** Methods Usage Incompatible with Android API Level 21 | Merged |
| 9 | [PR #5590](https://github.com/commons-app/apps-android-commons/pull/5590) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrate Upload Package To View Binding from Butterknife | Merged |
| 10 | [PR #5503](https://github.com/commons-app/apps-android-commons/pull/5503) | [#5473](https://github.com/commons-app/apps-android-commons/issues/5473) | **BUG** Changes Lost and App Crashes when Switched between Dark-Light Modes in Edit Description and Captions | Merged |
| 11 | [PR #5636](https://github.com/commons-app/apps-android-commons/pull/5636) | [#5630](https://github.com/commons-app/apps-android-commons/issues/5630) | Option to Remove Specific Images from Upload Wizard | Merged |
| 12 | [PR #5594](https://github.com/commons-app/apps-android-commons/pull/5594) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated Bookmarks Package From Butterknife to ViewBinding | Merged |
| 13 | [PR #5601](https://github.com/commons-app/apps-android-commons/pull/5601) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated Media Package to View Binding | Merged |
| 14 | [PR #5595](https://github.com/commons-app/apps-android-commons/pull/5595) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated CategoryDetailsActivity , MainActivity to View Binding | Merged |
| 15 | [PR #5593](https://github.com/commons-app/apps-android-commons/pull/5593) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated Contributions Package From Butterknife to ViewBinding | Merged |
| 16 | [PR #5592](https://github.com/commons-app/apps-android-commons/pull/5592) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated Explore Package From Butterknife to ViewBinding | Merged |
| 17 | [PR #5591](https://github.com/commons-app/apps-android-commons/pull/5591) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated Profile Package from Butterknife to View Binding | Merged |
| 18 | [PR #5478](https://github.com/commons-app/apps-android-commons/pull/5478) | [#5477](https://github.com/commons-app/apps-android-commons/issues/5477) | **BUG** Selected 18 pictures for multi-upload, but Upload Wizard only asks metadata for 1 picture| Merged |
| 19 | [PR #5550](https://github.com/commons-app/apps-android-commons/pull/5550) | [#5547](https://github.com/commons-app/apps-android-commons/issues/5547) | **BUG** App Crashes after clicking on Explore in bottom Navigation | Merged |
| 20 | [PR #5543](https://github.com/commons-app/apps-android-commons/pull/5543) | [#5537](https://github.com/commons-app/apps-android-commons/issues/5537) | **BUG** Unable to upload DNG / RAW images | Merged |
| 21 | [PR #5492](https://github.com/commons-app/apps-android-commons/pull/5492) | [#5470](https://github.com/commons-app/apps-android-commons/issues/5470) |Show Details About Icon Labels when long pressed | Merged |
| 22 | [PR #5493](https://github.com/commons-app/apps-android-commons/pull/5493) | [#5470](https://github.com/commons-app/apps-android-commons/issues/5470) | Show Details About Icon Labels when long pressed | Merged |
| 23 | [PR #5534](https://github.com/commons-app/apps-android-commons/pull/5534) | [#5532](https://github.com/commons-app/apps-android-commons/issues/5532) | **BUG** Can't Open Privacy Policy | Merged |
| 24 | [PR #5604](https://github.com/commons-app/apps-android-commons/pull/5604) | [#4664](https://github.com/commons-app/apps-android-commons/issues/4664) | Migrated Review Package to View Binding | Open |
| 25 | [PR #5519](https://github.com/commons-app/apps-android-commons/pull/5519) | [#5516](https://github.com/commons-app/apps-android-commons/issues/5516) | **BUG** Peer Review Buttons not get disabled after voting an Image for deletion | Open |
| 26 | [PR #5512](https://github.com/commons-app/apps-android-commons/pull/5512) | [#5482](https://github.com/commons-app/apps-android-commons/issues/5482) | **BUG** Fix Some pins disappear after switching apps | Open |
| 27 | [PR #5640](https://github.com/commons-app/apps-android-commons/pull/5640) | [#5627](https://github.com/commons-app/apps-android-commons/issues/5627) | **BUG** Custom picker: thumbnails sometimes blank | Open |
**Issues Created By Me**
| S.No. | Issue No. | Description | Status | Type |
|-------|------------------------------------------------------|-------------|--------|------|
| 1 | [#5547](https://github.com/commons-app/apps-android-commons/issues/5547) | App Crashes after clicking on Explore in bottom Navigation | Closed | BUG |
| 2 | [#5521](https://github.com/commons-app/apps-android-commons/issues/5521) | Methods Usage Incompatible with Android API Level 21 (Target SDK Version) | Closed | BUG |
| 3 | [#5505](https://github.com/commons-app/apps-android-commons/issues/5505) |Edit Category Crashes when Previous Button is Clicked | Closed | BUG |
| 4 | [#5474](https://github.com/commons-app/apps-android-commons/issues/5474) | App Crashes when Switched Between Dark/Light Mode in Location Picker Activity | Closed | BUG |
| 5 | [#5532](https://github.com/commons-app/apps-android-commons/issues/5532) | Can't Open Privacy Policy | Closed | BUG |
| 6 | [#5516](https://github.com/commons-app/apps-android-commons/issues/5516) | Peer Review Buttons are not disabled while the next image is Loading After Nominating it for deletion | Open | BUG |
| 7 | [#5473](https://github.com/commons-app/apps-android-commons/issues/5473) | Changes Lost and App Crashes when Switched between Dark-Light Modes in Edit Description and Captions | Open | BUG |
| 8 | [#5630](https://github.com/commons-app/apps-android-commons/issues/5630) |Option to Remove Specific Images from Upload Wizard | Open | Enhancement |
| 9 | [#5470](https://github.com/commons-app/apps-android-commons/issues/5470) | Show Details About Icon Labels when long pressed| Open | Enhancement |
**PR Reviews By Me: **
1. Reviewed Pull Request [[https://github.com/commons-app/apps-android-commons/pull/5575 | #5575 ]] and made this[[ https://github.com/commons-app/apps-android-commons/pull/5575#pullrequestreview-1911563193 | Comment ]]
2. Review Pull Request [[ https://github.com/commons-app/apps-android-commons/pull/5578 | #5578 ]] and added some suggestions.
===About Me
I am Shashank Kumar, a Sophomore at the Indian Institute of Technology (BHU), Varanasi, pursuing a B.Tech in Pharmaceutical Engineering & Technology. I have been programming since I was 12 and I have an immense love for building products and solving problems through programming.
> How did you hear about this program?
I got to know about this program from a fellow developer at the farewell event of Google's Appscale Academy.
> 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 only applying to Google Summer of Code.
===Past Experience
I have been coding since I was 12 and I have been working in Java since then and even got certified as [[ https://www.credly.com/badges/1ca32178-8bb9-4837-8632-f65d948b9bbc/linked_in_profile | Oracle Certified Associate, Java SE 8 Programmer ]] at 13. My Journey to Android App development started soon after and even became [[ https://www.credential.net/16d44ba2-72d0-4167-a786-6e16c252b190?key=591e05a203c3a3155dce6e9e54cfa3237c7f1a0c303e021e22ec8de75abd4ca7 | Google Certified Associate Android Developer ]] at 14. I have been developing Android Apps since then and I have worked on a few Android app projects since then, a notable one which I made when I was in High School [[ https://play.google.com/store/apps/details?id=programming.android.tutorial&hl=en_US&gl=US | Android-Java Tutorial App ]] which got more than 35000 Installs on Play Store.
One of the main Android App I built for - **Opined**, which is a Social Media Platform that I founded and where I handled all the tech ( Web and Backend in PHP - Laravel ) and
The Android App - [[ https://play.google.com/store/apps/details?id=com.app.weopined&hl=en_US&gl=US | Opined App ]] :
- Opined is an Anonymous Social Media Platform that eliminates the problem of biases created by personalization algorithms
- The app is Built on **//Java and Kotlin/Jetpack Compose//**
- Uses Sentiment Analysis to Rank User's Opinions
- Fetches Latest News & Headlines and allows users to put their opinions on them
- Got More than //**10000 Installs on the Play Store**//
- Got Selected in the 2022 Batch of [[ https://blog.google/intl/en-in/products/platforms/announcing-100-promising-startups-of-appscale-academys-class-of-2022-with-meity-startup-hub/ | Google Appscale Academy ]]
===Relevant Skills
- Android App Development with Java and Kotlin
- Jetpack Compose
- Git and GitHub
- Retrofit and REST APIs
- Room Database and SQL
- Unit Testing and Understanding of Robolectric
- RxJava and Multi-Threading
- Understanding of Wikimedia's APIs
===Volunteer Experience
- Core Team Member of Club of Programmers (Software Development Group), IIT (BHU) Varanasi
- Backend Lead at Tech Team of Training and Placement Cell, IIT (BHU) Varanasi
===Availability
>Are you eligible for Google Summer of Code?
Yes.
>Do you plan to submit any other proposal apart from this one?
No, I plan to submit only this 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?
I can devote at least 40 hours per week and can extend it further if needed, I will have no major commitments during this period, and because of my end-of-semester breaks I won't have any academic commitments during this period either.
>Have you been accepted to GSoC before?
No. I am applying to the GSoC program for the first time.
===Post GSOC :
I like this project personally and I love how active and enthusiastic the whole contributors community in Commons Android. This community is something that I want to be part of for a long time and keep contributing to and improving this project even after GSOC and I'll be more than happy to be a part of major changes in this project. For example, transitioning to Kotlin or Migrating from RxJava (maybe), I have tons of ideas for this project and would love to discuss and implement those over a long period.