The working prototype

Aditya Srivastav
2 min readJun 30, 2021


Coding through the second and third weeks of GSoC resulted in a working prototype of the custom selector for Wikimedia Commons. 🎉

The custom selector can now be used to upload any media from the user's device. It accurately shows the upload status fetched from the API.

Image Selection

The second and third weeks of the GSoC were pretty exhaustive, I had to make the custom selector up and running so that we can test the completed UI from the first week.

In the second week, I worked on selecting the images from the custom selector. With the help of helper functions, it is now possible to select multiple images and return them as activity results.

Making the most out of the week, I worked on the API and fetching the uploaded result. After multiple attempts to load data asynchronously without affecting the UI, we settled with Kotlin Coroutines.

What is coroutine you said?

Kotlin Coroutine is a very well-documented library for asynchronous programming. You can perform CPU-intensive tasks or fetch API results off the main thread thus allowing a fluid UI. The added benefit of concurrency and scalability makes it the best suited for Wikimedia Commons.

Showing images differently

The following week, I worked to show the selected images differently so that the user can see the uploaded images with a Commons overlay. Making changes to the current upload function, I linked them to the custom selector results. Thus completing the overall cycle.

Contributions — Custom Selector — Upload Activity — Contributions

The end of the third week was the moment of truth, the custom selector should now show already uploaded images differently, allowing multiple selections at a time.

After identifying and fixing minor bugs, the selector functionalities were working seamlessly. I must say, all those mockups before the coding round really paid off.

What’s Left?

Currently, every time the selector is launched it queries all the images from the API, increasing the loading time. Local caching can improve its performance and reducing server load.

UI enhancements like saving selector state and orientation changes would make it more user-friendly, improving the overall experience.

Next up

Relieved that the crucial part of the selector is complete and working perfectly. Hoping to complete local caching and further UI enhancement before diving into testing ; )

Do not forget to check out the current custom selector and give us your valuable feedback.

To be continued …