In this post, we’ll add support for Google TalkBack (and other Android accessibility services) to a MovieRatings custom view

I’ve been working very slowly on an Android app in my spare time. It’s a client for Letterboxd (like Goodreads but for movies) and I’m currently replicating a feature that’s available on the website: you can see the user rating distribution for every movie.

The rating distribution for Marriage Story (2019) tends towards more favorable reviews // https://letterboxd.com/film/marriage-story-2019/

The API gives us everything that we need to build it ourselves, so I created a quick prototype, drawing the chart directly on a canvas, then tested it with Google TalkBack, an Android accessibility service for blind and visually impaired users.

The screen capture below shows navigation with TalkBack enabled (the white circle shows the “move…


Preventing regressions with custom Lint checks (Part 5)

This is part five of a five-part series on refactoring themes and styles — it’ll make sense without reading the other parts, but if you want the full picture, start reading here:

After all the hard work we’ve put in, detangling our themes, defining new attributes, and determining default styles, it’d be a shame if now someone were to… hardcode a color 👀

It’s going to happen. It’s ok. What we’re after is something like this, where the rate at which hardcoded colors are used should plateau, and then start to go down:


Building a Gallery App (Part 4)

This is part four of a series on refactoring themes and styles — it’ll make sense without reading the other parts, but if you want the full picture, start reading here:

At Monzo, we often create short-lived apps which only depend on the specific modules we need to test our feature during development. This helps mitigate the cost of having to wait for long builds because we don’t have to compile the entire app.

One of these short-lived apps evolved into the Gallery, a showcase of styles and components that can be reused in different features.


Using Theme Overlays (Part 3)

This is part three of a series on refactoring themes and styles — it’ll make sense without reading the other parts, but if you want the full picture, start reading here:

Theme overlays are used to override values from your theme. At Monzo, we leverage theme overlays in different ways and this post highlights three cases where we’ve found using them to be helpful.

Theme overlays in layouts

Most of the toolbars in the Monzo app have the same color as the screen’s background, which is defined by the activity theme, but there are other cases where we want a distinct color:


Default Styles (Part 2)

This is part two of a series on refactoring themes and styles — it’ll make sense without reading part one, but if you want the full picture, check it out here:

In the last post, we recounted what the theme structure looked like for the Monzo Android app. There were multiple hierarchies, with distinct framework bases, and the sheer number of nodes was pretty overwhelming.


Restructuring Themes (Part 1)

Last year, Nick Butcher and Chris Banes presented “Developing Themes with Style” at Droidcon Berlin. It was a welcome recap for themes and styles, as well as best practices for Android theming.

We’ve been working to apply these best practices to the Android app at Monzo. For us, the challenge lay more in how we could make these changes safely, over time. In other words, how we can refactor our themes.

An ideal theme structure

From the outside, the look and feel of the Monzo app is pretty simple. …


We’ve been working recently on Monzo Plus, a way for users to add extra features (like travel insurance) to their account for a monthly fee.

As part of this package, users are able to choose one of three card colours — the iconic Hot Coral, the also-neon Lagoon Blue or, what seems to be an early fan favourite, Midnight Sky.

This post shows how we implemented the animations on Android.


This post demonstrates some ways we can improve our pull request process to add important information to help the reviewer understand our changes faster.

I’m a visual person. When I’m reviewing code, I really appreciate when pull requests add some context around how a code change affects the end-user:


Android App Links is a feature designed to reduce friction for users who want to access your content — instead of a user clicking an HTTP link and navigating to your website, Android will redirect them to the same content in your app, for a seamless transition to a native Android experience.

Last month, I implemented Android App links for art collector, a small app which displays a selection of paintings from the Harvard Art Museum API.

It has three main screens:

  • the gallery showing a selection of paintings
  • an artist gallery, showing the paintings created by a single artist

I really like the way that Gmail for Android shows the checked state for selected emails.

The avatar spins 180 degrees, revealing a checkmark on the other side

Why is this good? There are three visual affordances which make it very clear which emails are selected:

  • the avatar is replaced by a checkmark
  • the email’s background changes color
  • the number of selected emails is displayed in the app bar

Why is it COOL? Look what happens when an email is selected and deselected quickly. The avatar animation is shown in reverse from the position it was at:

Ataul Munim

Google Developer Expert for Android, prolific film watcher and new thing try-er

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store