Alex Vanyo
banner
vanyo.dev
Alex Vanyo
@vanyo.dev
Android Software Engineer

Helping build adaptive Compose everywhere!
A small change that flew under the radar for me for #JetpackCompose: calling setContent in a test more than once doesn't crash now!

It's still a bit awkward to test Activity recreation, but the workaround is a lot easier now:
issuetracker.google.com/271226817#co...
November 14, 2025 at 9:52 PM
Reposted by Alex Vanyo
My talk on Navigation 3 from #dcldn25 is live (very impressive publishing from the droidcon team!). www.youtube.com/watch?v=j1Oi...
Navigating the future with Jetpack Navigation 3 - Don Turner | droidcon London 2025
YouTube video by droidcon & fluttercon
www.youtube.com
November 1, 2025 at 10:19 AM
Anyone have a lint rule that warns against doing with(dispatchers.IO) because you almost certainly wanted withContext(dispatchers.IO) instead?

Asking for someone who did something silly: github.com/alexvanyo/co...
August 14, 2025 at 2:47 AM
The recording from my talk on how to handle configuration changes in Compose at #dcnyc25 is out!

Hopefully this helps explain what android:configChanges is responsible for in #AndroidDev and why it's important to know what promises you make when setting it.

www.youtube.com/watch?v=K5-9...
July 30, 2025 at 4:16 AM
A response to the section on "How Can I Determine the Size and Position of Descendants of Peers?"

Using onGloballyPositioned (or onSizeChanged, or similar modifiers) like this is a quick way to get yourself into trouble with layouts that take multiple frames to resolve that can flash or look janky.
I just sent out jetc.dev Newsletter Issue #273! Android Makers! @eevis.codes on accessibility focus *and* keyboard focus! FABs and FAMs! PWAs! jetc.dev/issues/273 #JetpackCompose #AndroidDev
July 15, 2025 at 11:20 PM
Reposted by Alex Vanyo
Did you know... Android Studio has introduced resizable previews for Compose previews? Allowing you to test your layouts across the spectrum of device sizes easily inside Android Studio. 💻

developer.android.com/studio/previ...
July 7, 2025 at 9:59 AM
It was great to see both familiar faces and new ones at #dcnyc25 last week - especially to see how everyone's figuring out what #AndroidDev will look like with the new tools are moving at a blistering speed.

The slides for my talk are available here: alex.vanyo.dev/talks/configurationchanges
July 1, 2025 at 10:21 PM
I'm excited to be speaking at #DroidconNYC next Thursday, hope to see you there!

I'll be covering how to handle configuration changes in Compose, and specifically trying to answer the question of what you should put in android:configChanges and - probably more importantly - why.

#AndroidDev
June 20, 2025 at 10:45 PM
Thinking about configuration changes isn't optional.

Imagine a website trying to prevent the browser window from being resized or breaking when it does. Android apps can't disable configuration changes and need to react to them correctly without losing state using the tools available.
If you could whisper one Android dev secret to every junior starting today, what would it be?

Quote tweet this.

Let’s build the Android wisdom tree 🌱
May 29, 2025 at 2:42 AM
Hopefully you have a bunch of ideas to improve your apps from the first day of #GoogleIO

Day 2 starts soon, be sure to tune in to learn about what's new in developer tools and my favorite topic, why and how to build adaptive! #AndroidDev
May 21, 2025 at 1:49 PM
Scenes!

If there's only one concept to call out for Navigation 3, it's scenes. The abstraction layer allows showing multiple panes at a time, and in different ways.

It's the integration hook that integrates Navigation3 with ListDetailPaneScaffold in a flexible, satisfying way.
May 21, 2025 at 6:07 AM
runComposeUiTest has a nice change in #JetpackCompose 1.9.0-alpha01 - the test body block now suspends!

So you no longer have to do a nested runComposeUiTest { runTest { /* suspending test code */ } }, which could be funky since runComposeUiTest had an internal runTest before that wasn't exposed.
May 4, 2025 at 12:29 AM
A small but extremely useful foundational API added in #JetpackCompose 1.8: LocalWindowInfo.current.containerSize

It's the best way to get the size of the window, which should form the basis for any breakpoint logic for top-level layouts like window size classes.

#AndroidDev
April 28, 2025 at 4:02 AM
Days since forgetting a call to "key" in a loop and causing a hard to diagnose bug: 0

#JetpackCompose
April 10, 2025 at 12:33 AM
Reposted by Alex Vanyo
🚀 Big news for Android devs using Jetpack Compose! Media3 just dropped version 1.6.0, and it includes a brand new artifact: media3-ui-compose! Finally, seamless and customizable video playback directly in your Compose apps. 🎬 #AndroidDev #JetpackCompose #Media3
March 27, 2025 at 5:13 PM
Reposted by Alex Vanyo
We had so much fun filming #TheAndroidShow in Barcelona, at #MobileWorldCongress last week, we can't wait to share it with you! 🥳 Tune in TODAY 🚀 to watch the livestream:
goo.gle/tas-mar25
Set your reminder: #TheAndroidShow is live *here* on March 13!
YouTube video by Android Developers
www.youtube.com
March 13, 2025 at 9:30 AM
Reposted by Alex Vanyo
So the idea is with strong skipping, === is an extremely fast check. Imagine you have a lazy list and an array with a couple of hundred items, 3 on screen. Depending on the cost of equals, it's faster to let that higher level recomposition happen with ===.
March 1, 2025 at 10:53 PM
UI that isn't tested is UI that can break. There are Compose techniques for each part of testing - quick verification when iterating, and automating both visual tests and behavior tests.

And coming in Compose 1.8, don't miss the new DeviceConfigurationOverride.WindowInsets for testing insets!
✨ New Delightful Compose video is out! ✨ @vanyo.dev has some great tips on how to keep your UI delightful long term by testing it! Previews, screenshot testing, DeviceConfigurationOverride and other helpful tools are covered here:

www.youtube.com/watch?v=Y9GW...
Testing | Jetpack Compose Tips
YouTube video by Android Developers
www.youtube.com
January 31, 2025 at 9:52 PM
Reposted by Alex Vanyo
A 🧵 announcement: With the Jetpack Compose 1.8. beta01 release, you may notice that a significant number of APIs that were previously experimental, have been graduated to stable.
January 30, 2025 at 10:19 AM
Android 16 will have some big changes around restricting orientation and aspect ratio by respecting the user's preferred orientation in more cases. Apps can no longer rely on assuming they have a specific aspect ratio to render in.

For more details:
android-developers.googleblog.com/2025/01/orie...
January 23, 2025 at 7:33 PM
After figuring out how to make the coordinates work, it's so satisfying to use a live-updating drag and drop that previews where the dropped content will go.
December 29, 2024 at 4:34 AM
Days since confusing myself with different frames of references and coordinate systems in Compose: 0
December 29, 2024 at 3:31 AM
In-between traveling and holiday get-togethers, I finished up Advent of Code for the first time!

And since I haven't done it before, now I have 9 years of past puzzles to work through (and without the pressure to start them at the exact time they open)
December 26, 2024 at 7:12 PM
Reposted by Alex Vanyo
📽️🎞️ Aaand that's a wrap on our "Compose Tips for Delightful UI" YouTube series for this year 🥳 here's a quick summary of everything we've covered in '24!

See you in '25 and happy holidays 🎄

medium.com/androiddevel...
Compose Tips for Delightful UI — ’24 wrap up
An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI.
medium.com
December 24, 2024 at 6:27 PM
Editing some Java source, and this is the correct syntax for an annotation on a parameter with a fully qualified class name!? What?

"android.graphics.@NonNull Insets safeInsets"
December 20, 2024 at 9:19 PM