Yuvaraj Vodiboina
All work
(14)Case studyOpen source

Wikimedia Commons

Android app

Three fixes of mine, merged into the Android app people use to upload photos to Wikimedia Commons, with new tests behind each one.

Platform
Open source
When
2026
Role
Contributor
Merged
3 pull requests
Latest
2 Nov 2026
Status
Three pull requests merged
UploadNotificationChannels.kt
internal fun NotificationCompat.Builder.useUploadProgressChannel(): NotificationCompat.Builder =
    setChannelId(CommonsApplication.NOTIFICATION_CHANNEL_ID_UPLOADS)
        .setOnlyAlertOnce(true)

internal fun NotificationCompat.Builder.useUploadResultChannel(): NotificationCompat.Builder =
    setChannelId(CommonsApplication.NOTIFICATION_CHANNEL_ID_ALL)
        .setOnlyAlertOnce(false)
(01)

The problem

Someone else’s project has its own rules and maintainers, and years of history. Each of these started from an open issue, and had to fit the code as it is, pass the project’s checks and be easy to review.

(02)

What I built

Each change is one pull request for one issue, with the project’s ktlint and Detekt checks passing, new unit tests, and what I tested written out for the maintainers. A maintainer merged all three.

Hard partFinding where a 2019 bug lives now, in code that had been replaced since the first fix.

(03)

What it does

  1. 01

    Quieter uploads (#7071)

    A bug first reported in 2019: the app made a sound for every file while uploading. Progress now has its own silent channel, and only the result alerts you. Fixes #2528.

  2. 02

    No wasted copies (#7069)

    Share a RAW file next to its JPEG and the RAW was copied, then thrown away: 12.6 MB per photo in my test. Unsupported files are now skipped before copying, and the warning still shows. Fixes #6908.

  3. 03

    A smaller achievements screen (#7184)

    One class with 27 functions, over the project’s limit, is now the screen and two tested helpers, and it works as it did. Fixes #7156.

(04)

Under the hood

  1. 01An open issueWhat’s wrong, reported by others
  2. 02Reproduce itOn current main, in an emulator or a test
  3. 03A small changeWith unit tests and the project’s checks
  4. 04Review and mergeBy the app’s maintainer
(05)

Decisions

  1. 01

    A new silent channel, not a quieter default

    The earlier fixes only silenced updates to a notification still showing, but each file posts a new one. A channel of low importance can’t make a sound at all.

    Trade-offFinished uploads still alert once. I noted in the pull request that making them silent too is one line.

  2. 02

    Check the file type before copying it

    The existing filter ran after the copy. Running the same check on each shared file first means an unsupported one is never copied.

    Trade-offThe shared-file path now has its own step, so the old filter stays for files picked inside the app.

(06)

Timeline

  1. #7069 merged

    Skip unsupported shared files before copying them.

  2. #7184 merged

    Split the achievements screen into smaller, tested pieces.

  3. #7071 merged

    Post upload progress notifications silently.

(07)

Built with

KotlinAndroidRobolectricJUnitktlintDetekt

These are merged into the project’s main code, and reach the store with the app’s own releases.

Next15 of 20Android ROM AxionAOSPfor Pad 6 An unofficial Android 15 build for the Xiaomi Pad 6, with its boot images and install guide. It’s where custom ROMs turned into a release other people flash.Read the case study