RSSAmplifier

Blog

Eevis Blog

Posts about accessibility, being a (woman) developer and life in general.

eevis.codesRSS feed ↗91 posts

Latest posts

Autofilling in the Blanks

If you have forms in your app that collect user information, autofill is one of the easiest accessibility wins you can add. Autofill is both an accessibility and a usability feature. And you can support it with just a few lines of code. What is Autofill? So, what is autofill, anyway? It's a technique that uses previously saved data to fill in text fields without having to type the full text.…

More Accessible Focus Indicators with Compose

Last summer, I wrote a blog post about focus management with Compose. Ever since, I’ve had drafts of this post, but I didn’t get to finalize it until now. The blog post is available in: It's All About (Accessibility) Focus And Compose . So, in this blog post, we’re talking about focus indicators and how to make them more accessible with Compose. But let’s first talk about focus indicators in…

About Invisibility, Propaganda, and Assumptions of Incompetence

This is a submission for the 2026 WeCoded Challenge : Echoes of Experience It’s the time of the year when I feel most conflicted. Tomorrow’s International Women’s Day, and as I’ve witnessed in the past years, it’s usually the time when men start asking about when International Men’s Day is, and telling how equality has gone too far. Of course, not all men, but usually a man. In Finland, we also…

Adding Navigation support to Large Content Viewer with Compose

In my previous blog post, Beyond Font Scaling: Large Content Viewer with Compose , I explained how to build a large content viewer from iOS using Jetpack Compose. The implementation did not include support for keyboard or other assistive tech navigation, so this blog post tackles those topics. A disclaimer: The way I'm presenting the support for assistive tech navigation in this blog post is one…

Beyond Font Scaling: Large Content Viewer with Compose

If you’ve worked with accessibility issues and have a bottom bar with multiple items, you’ve probably come across a problem with larger font sizes, where it’s impossible to scale the bottom navigation bar texts properly with larger font sizes. You might have wondered whether there are any alternative ways to support larger font sizes beyond just, well, font scaling. That’s what happened to me.…

Year in Review - 2025 Edition

It’s that time of the year again! Looking back, I’m so glad I started writing these yearly reflections back in 2021. Now that this is the fifth yearly reflection, it’s great to read those previous ones, and see what has changed - and what has not. If you want to read about my previous yearly reflections, here they are: Year in Review - 2021 Edition Year in Review - 2022 Edition Year in Review -…

The Problem of Rows Breaking with Large Text

This was originally sent as Issue #1 of my newsletter. Subscribe here to get future issues in your inbox first. I was fixing an Android app and found buttons in a row getting cut off when I increased the font size. After diving into the code, the problem became clear: it was using Row when FlowRow was needed. The Problem of Rows Breaking with Large Text Let’s say we have this code: Row( modifier =…

Why I'm starting a Newsletter About Inclusive Android Apps

One thing I'm super excited about at the end of this year is a newsletter I'm launching: Inclusive Android Apps. It's a monthly newsletter about making Android apps more inclusive, and it covers accessibility, LGBTQ+ inclusion, support for different cultures and languages, privacy and safety for marginalized users, and more. In this post, I'm explaining why I'm starting it and what you can expect.…

Does AI Generate Accessible Android Apps?

Over the past six months or so, I've been writing a series of blog posts in which I've generated an app using the same prompt with different AI tools, and then tested the outcome with various assistive technologies and accessibility settings. The tools I've tested are: Gemini, Junie, Cursor, and Claude. You can find the list of the blog posts above. Now it's time to wrap up and write a summary of…

Compose UI Tests for Larger Font Sizes: Scrolling and Text Truncation

While testing Android apps for accessibility, one of the biggest problems I’ve encountered are with larger font sizes. They’re usually not properly supported: content overlaps when font sizes increase, scrolling isn't enabled to accommodate growing text, or text is truncated without a way for the user to expand it. I’m often asked tips on writing accessibility tests for Android, and I decided to…

How to Work With Me?

This is a living document, and I try to update it when I learn or realize something new. I didn't want to create a dedicated page for it, at least not just yet, so I published it as a blog post. About me Hey, I'm Eeva-Jonna, but everyone knows me as Eevis. I'm not Eeva, but I often let it slide with non-Finnish speakers, and two-part names aren't that common elsewhere. But I'd love for you to use…

Wear OS Accessibility Considerations

Lately, I've been learning about Wear OS development. As I'm also an accessibility specialist, I've naturally also been looking into the accessibility aspects of Wear OS. The small form factor impacts many things typically associated with accessibility. Not everything can work, or is working, the same as with, for example, phones and tablets. It's been fascinating to dive into the topic and learn…

Does Claude Generate Accessible Apps?

During the spring and summer, I've been testing different AI tools for their ability to generate accessible Android user interfaces. This post is the final testing post in the series. I will then write a recap post to summarize all my findings. The drill is the same for this test as well - I generated an Android app with Claude and then tested it with various accessibility tools, settings, and…

10 Tips to Make Your Blog Posts More Accessible

Sometimes I encounter this weird idea that developers don't need accessibility at all. Some people seem to believe that our development tools and resources don't need to be accessible, because accessibility is just something to do with the end users of our services. If you're one of those people, you know, disabled software developers exist. You're reading text from one right now, and I know many…

It's All About (Accessibility) Focus And Compose

I've seen multiple questions in various Slack communities, Stack Overflow, and other places related to focus on Android and how it doesn't behave as expected. The question typically concerns the use of focusRequester and then inquires why Talkback or other assistive technologies fail to set focus correctly. The simple answer is that these APIs are different, and focus behaves differently with…

Does Cursor Generate Accessible Android Apps?

I've been testing the accessibility of Android code created by different AI tools, and this time, it's time to test Cursor. I know it's not the most ideal tool for Android development, but I still wanted to test it. If you've read the previous posts in the series, you know the drill - I'll generate the app code and then test it. There are links to the blog post at the top of this post if you want…

Does Junie Create Accessible Android Apps?

I'm continuing my tests with AI-generated Android code and how accessible these generated apps are. This time, the tool of choice is Junie , the coding agent by JetBrains. If you want to know why I'm doing this or want to read my take on how accessible code Gemini creates, the first post is available at Does Gemini Create Accessible Android Apps? . So, I got into the Early Access Program (EAP)…

The Problem of Trun...

Imagine that you're in an unfamiliar location. You can see a signpost, but it's old, and most of the letters of the words have been scratched off. The names in the signs all seem similar, given the couple of letters you can see. And you need to get somewhere, but the signpost is not helping at all. You're lost. As the title gives away, I'm writing about something starting with "trun". I could be…

Does Gemini Generate Accessible Android Apps?

The AI is here, and we all are going to lose our jobs. Or that's what I've been hearing for a while now, and I don't believe in it. I've had this skepticism towards AI-generated code for many reasons, and the biggest of them all is accessibility. I don't believe AI can create fully accessible applications just yet. Why? The training material is usually the code that is out there, and it is not…

Echoes of the Past - Tech is Still Not Equal for All

This is a submission for the WeCoded Challenge : Echoes of Experience Earth has traveled around the Sun, and it's time for the We Coded again! I've been waiting for this for a year because I have things to say. I planned parts of this blog post a year ago, so it's been a long wait. Little did I know then how the situation would change in a year. With all the things happening in the US, the fast…

Making basicMarquee-Modifier More Accessible

I have this "Remove animations"-setting turned on on my phone because different kinds of movement make me feel physically sick. When the setting is on, animations are usually removed from native Android apps. And when there are some animations, I notice them. I've started seeing more and more of some horizontally scrolling texts, and I have been wondering why. Then I came across this basicMarquee…

Be Mine and Add Interaction with Compose and Canvas

Valentine's Day is approaching, and while I prefer the Finnish version ("Friend's Day"), I was inspired to do some creative coding in the holiday theme. The Hollywood-centric film industry (in addition to globalization in general) has carried those heart-shaped candies to the North as well. While browsing some images for inspiration, I decided to use them for the next piece I'm writing. And that's…

January 2025, You Were Rough

The first month of 2025 and its 247 days are behind us. I started 2025 with a blog post participating in Dev's New Year Challenge , sharing some hopes and fears for 2025. In the post, I shared two bingo cards: One for things I wish would happen, and one for things I think will, unfortunately, happen. The original blog post is behind this link: 2025, Please, Be Gentle . I decided that after each…

Using SVGs on Canvas with Compose Multiplatform

One thing that has continued to amaze me with building my Compose Multiplatform app is how easily everything has worked with Canvas. When I started building Neule.art , I assumed that Canvas would cause some problems, but it has worked smoothly on both Android and iOS. I've been writing posts about creative coding on Canvas (see, for example, Not a Phase - Text with Compose and Canvas ), and also…

2025, Please, Be Gentle

This was originally written for Dev.to's New Year writing challenge. 2025 has started, and while I'm actually skeptical of anything good happening (just look at the world burning), I decided to give some thought to what I hope to accomplish this year. You know, the good things, as an ask for the universe. I could describe this all as a roadmap for 2025. But I've learned over the years that my…

Year in Review - 2024 Edition

It's time for some yearly reflections again. What a year 2024 has been! Both in good and in bad. This yearly review is my fourth, and you can find the previous ones from these links: Year in Review - 2021 Edition Year in Review - 2022 Edition Year in Review - 2023 Edition Okay, let's dive in. Accomplishments A lot has happened, and looking back, I've accomplished a bunch. Here are some of the…

Support Time to Take Action with Compose

While working on my master's thesis and the Android Accessibility Checklist , one of the answers to my survey mentioned an accessibility setting called time to take action. Since then, I've been curious about it and wanted to write a blog post as I feel it's one of the undersupported accessibility settings and really useful for those who utilize it. So, what is time to take action, and why would…

Testing Different Navigation Options with Compose

One part of creating accessible Android apps is to provide alternative navigation options. Some examples include touch (or pointer) input, keyboard navigation, switch navigation, and screen reader navigation. But how can you write tests for these different ways of navigation? In this blog post, I'll share some examples of how to do that. I'm using an old demo project about making graphs more…

Not a Phase - Text with Compose and Canvas

I've continued my journey with Compose and Canvas! After exploring drawing and animating shapes, I wanted to learn more about text. Bi-visibility Day was coming, so I drew a small animation to publish on Instagram. The final animation looks like this: In this blog post, we will look at how to add text to Canvas and position and animate it. We're also utilizing custom Google Fonts in the drawing.…

First Impressions of Compose Multiplatform

I finally had the time to dive into Compose Multiplatform - and this was also my first experience with Kotlin Multiplatform . I'll share my first impressions from using this technology in this blog post. Some words from my background: I'm an Android developer who's confident with Kotlin and Compose. I've been working with different languages and frameworks before switching to Android development,…

Floating in Space - Animations with Compose and Canvas

In my previous blog post, Paint the Stars — Drawing with Compose and Canvas , I shared how I wanted to be better with Canvas and Compose and created an illustration with planets and stars. This blog post shares how to animate those elements. In the end, the result will look like this: Full code is available in this snippet . Animations Stars Let's start with the stars. In the previous blog post,…

Paint the Stars - Drawing with Compose and Canvas

I've always struggled with drawing in Canvas, not just with Compose's Canvas but with any technology. I've understood enough to be able to do the tasks I needed to do, but at the same time, I've tried to avoid working with it. On one Sunday, I wanted to do something creative. I also wanted to code, so I started with the idea of creating a loading spinner with Canvas. One thing led to another, and…

Testing Android App Accessibility: Clue

In Droidcon Berlin, I gave a talk titled "Is This App Accessible? A Live Testing Demo," in which I tested one app from an accessibility perspective. The audience voted for the app from three options and selected Clue, a period tracking app. The other two were the Droidcon app and Provinssi's (a Finnish music festival I attended in June) app. In this blog post, I'll summarize the talk and probably…

Beyond the Binary - More Inclusive Gender Options with Compose

If your gender matches the one that was assigned to you at birth, you probably don't notice flaws in application design that enforce the gender binary. But if it doesn't, and especially if your gender is beyond the woman-man binary, you constantly notice user interfaces that exclude you. For example, what should you select if you aren't a man or a woman, and those are the only options in a form?…

Android Accessibility Checklist

I'm studying for my second master's degree (for fun) and finished with my thesis in the spring. As part of my thesis, I developed an accessibility checklist for Android developers. While completing all the checks doesn't guarantee that your app is 100% accessible, the checklist aims to help catch many possible accessibility problems. In this blog post, I'll first share a bit about the development…

Accessibility Considerations with Stacked Cards Custom Layout

A couple of weeks ago, I published a blog post Stacked Cards Layout With Compose - And Cats . The layout has some accessibility issues, and I aim to fix some of them in this blog post. There are a couple of issues I'm not fixing here because of the scope of this blog post; instead, I'm discussing the problems they're causing and possible solutions. This time, I will also be pointing out some…

Don't Lock the Screen Orientation! Handling Orientation in Compose

Yes, your app should work in both portrait and landscape modes - unless locked orientation is essential for functionality, like in a piano app. However, for most apps, locked orientation is not an option. Oh, and yes, the functionality should be similar in both modes, not hiding anything when the orientation changes. In this blog post, I'll cover the topic of locked orientation. It's mainly…

Stacked Cards Layout With Compose - And Cats

I was writing a completely different blog post about playing around with Glance and app widgets, and I needed an example app. None of the existing ones served me, so I needed to build a new one. And I completely overdid it—I would have needed just something really simple, but I ended up creating a more polished app with some new concepts. The app I built has cats — a lot of cats— and you can get…

The Worst Case of Imposter Syndrome

I wrote most of this blog post in the spring, a bit after my burnout sickness leave. I'm still recovering, but I'm in a way better place. I found this draft a couple of days ago, and after reading it, I decided I'd finish it and publish it. Why? I think it speaks for itself. It contains the words I'd wanted to say back then but didn't have the strength to say, even to finish the blog post and…

Pride in Your App - Trying Out GraphQL on Android

It's Pride month, y'all! As someone who is part of the LGBTIQA+ community, this month is both great and stressful at the same time. You never know what some people come up with - somehow, this month draws some really nasty people out. And with the rise of far-right in Europe... I'm not even going to get started. I have wanted to try out GraphQL with Android for quite a while, and when I came…

Accessibility Tests in Compose - Name, Role, Value

When writing tests for your app, you should also consider testing for accessibility-related things. And I get it; it can be challenging to know where to start. So, I decided to write this blog post about how to test some accessibility aspects. In this post, we will add some accessibility-related tests for three custom components constructed with the help of clickable , selectable , and toggleable…

Change App Theme - Personalizing Accessibility

I'm continuing the theme of personalizing accessibility, which I've started with my two posts. You can find them from the following links: Personalizing Accessibility with Settings Toggle Labels With Icons — Personalizing Accessibility As a quick recap, in the previous posts, I've discussed how personalization can generally be the key to improving accessibility, and given a concrete example of…

Toggle Labels With Icons - Personalizing Accessibility

As mentioned in my previous blog post, Personalizing Accessibility with Settings , accessibility for the broadest group of users often requires some personalization. What is accessible for one might not be accessible for another. In this blog post, I will discuss one example of accessibility issues that could be solved with the help of settings: Icons and the need for text labels accompanying…

Personalizing Accessibility with Settings

When users have different, even conflicting, needs for access, what should you do? For example, if one user needs less contrast while the other needs more, how do app developers provide the best experience for all? The truth is that it's often not possible without some personalization options. In this blog post, I'll share some thoughts about personalization and accessibility, provide ideas on…

Accessibility Checks with Jetpack Compose Previews

Now that Android Studio Iguana is out and stable , I wanted to write about one feature it provides and I'm excited about: Accessibility checks with Compose previews. This feature is part of the new UI checks for Jetpack Compose, and in this blog post, I'll introduce you to how to use it and provide examples of the issues it finds. Compose UI Checks UI Checks is a new feature shipped with Iguana.…

I'm Still Not One of the Guys

As #WeCoded is a month-long this year, I'll post a couple of blog posts during this month. This post is the second of these posts. In 2021, I wrote a blog post called "Why I'm Not One of the Guys" that got a response I didn't expect. When I published it in Dev, it received many comments about how I was wrong to say that the word "guys" is not gender-neutral. I still disagree, but to debate that is…

Why Your App Should Have Both Dark And Light Themes

You might have heard that your app should have a dark theme available. Some say it's because of preference, but it's actually also an accessibility thing. This blog post itself doesn't have the code to enable dark and light themes for the user. Instead, it explains why having both of them is essential and provides further reading on the topic — yes, with links to some code and instructions as…

Another Year Of Being in Gender Minority in Tech

It's time for Dev's annual We Coded campaign again, and it's the fifth time I'm participating. You can find my previous contributions from the links above. This year, I want to share experiences from another year as someone in gender minority in tech. I'll share some not-so-pleasant experiences and, after that, some moments of allyship. Note that the stories I'm telling are from encounters with…

Testing with Accessibility Scanner

When I talk about accessibility with Android developers, I often hear that some easy-to-use tests should automatically catch every possible accessibility issue. And I get it. That would make the whole topic of accessibility so much easier and straightforward. But the truth is that automated testing only catches some things. Studies suggest that the maximum percentage of caught accessibility issues…

Font Size Considerations for Accessibility

Discussions about accessibility, especially in software development, often center around screen reader accessibility. With that, I mean that if accessibility is considered, it's mostly about, for example, content descriptions, setting correct semantics, and then leaving it there. Don't get me wrong, it is important. But the problems arise when only taking these actions for accessibility and…