Reposted by Alex VanyoRebecca Franks @riggaroo.dev · 13/08/2026Jetpack Compose 1.12 has been released! So many new goodies to look at: 🌅 Mesh Gradient support - along with support inside Android Studio for editing ✌🏻 Interactive Two-Stage Transitions 💬 Many text features such as editable text formatting android-developers.googleblog.com/2026/08/jetp...android-developers.googleblog.comWhat's new in the Jetpack Compose August '26 releaseNews and insights on the Android platform, developer tools, and events. 0206
Alex Vanyo @vanyo.dev · 12/06/2026I meant I still write everything in Java first, and then re-implement it in common Kotlin code after 😄 020
Alex Vanyo @vanyo.dev · 12/06/2026Expect/actual is great for delegating to Java when it is supported, and using a common Kotlin implementation everywhere else! 100
Alex Vanyo @vanyo.dev · 19/02/2026On Android especially, it's easy to get trapped by the details of where tests are running. There are tradeoffs for running on a device/emulator, Robolectric, or without Android APIs available - but I think it's dangerous to have the "where" drive the "why". I like "why" driving "where" as the goal. 030
Alex Vanyo @vanyo.dev · 05/02/2026This reminded me that I still haven't gotten to other planets yet, oh no 110
Reposted by Alex VanyoRebecca Franks @riggaroo.dev · 16/01/2026👀 Want to see a preview of what's coming up in #JetpackCompose? We heard you that debugging shared elements is tricky. In 1.11.0-alpha03, a new composable LookaheadAnimationVisualDebugging was added. Wrap your SharedTransitionLayout to add visual cues to track down those hard to debug issues. 🐛⤵️ 14112
Alex Vanyo @vanyo.dev · 13/12/2025That way, resizing the window smaller will remain on the list until you've directly navigated to the detail, and then resizing smaller will remain on the detail. No need for an empty detail placeholder: 010
Alex Vanyo @vanyo.dev · 13/12/2025One technique to solve this is to not have the detail in the underlying backstack state at first, and derive an entry list with a "transient" detail entry at larger window sizes. Only when you actually navigate to that entry does the entry get "realized" and get added to the underlying backstack. 100
Alex Vanyo @vanyo.dev · 13/12/2025Idea 2: Because Navigation 3 allows hoisting the backstack state arbitrarily, you can give a backstack to the NavDisplay that is derived from some other state. Another tricky list-detail case is when you want the first detail visible initially, but only if there's enough space for it. 100
Alex Vanyo @vanyo.dev · 13/12/2025Idea 1: I have a list-detail setup for my settings, but if there's even more space available, I want the entire list-detail setup to be in a dialog. I can do that by creating a custom DialogSceneStrategy that wraps my other scene strategies, and having the DialogScene wrap an arbitrary Scene: 110
Alex Vanyo @vanyo.dev · 13/12/2025I've converted my side project to Navigation 3 (or at least, a similar close fork of Navigation 3), which you can try out on the web here! alex.vanyo.dev/composelife Two more complex scene ideas I've been playing around with: A SceneStrategy wrapping another SceneStrategy, and derived entry lists. 160
Reposted by Alex VanyoCode with the Italians @codewiththeitalians.it · 12/12/2025Navigation 3 is here, and yes — it changes things 😅 Alex Vanyo & Don Turner break down what’s new, what’s better, and what not to do. Watch the VOD → youtu.be/I9Ws2Lxv0dwyoutu.be- YouTubeEnjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. 031
Alex Vanyo @vanyo.dev · 10/12/2025Navigation 3 sets the stage for navigating with scenes! Be sure to tune in to @codewiththeitalians.it at cwti.link/twitch now to see @donaldturner.bsky.social and myself experiment with Navigation 3! 062
Reposted by Alex VanyoDon Turner @donaldturner.bsky.social · 03/12/2025Every day this week we're publishing content to help you get started with Nav3. android-developers.googleblog.com/2025/12/lear.... Got questions? Post them using #AskAndroid and we'll answer them live at 9am PST on Friday here: www.youtube.com/live/JsugLEM....android-developers.googleblog.comLearn about our newest Jetpack Navigation library with the Nav3 Spotlight WeekNews and insights on the Android platform, developer tools, and events. 082
Alex Vanyo @vanyo.dev · 04/12/2025But now that you can conditionally display more than one entry at a time by wrapping panes with other UI, the sky is the limit. I think there's a lot of possibilities around navigational systems that will go from "nigh impossible" to "very doable" with Navigation 3. 050
Alex Vanyo @vanyo.dev · 04/12/2025The previous approaches were a lot harder to work with: the best approach before Navigation 3 was combining the list and detail together into a single destination, and before that, there was nesting NavDisplays with independent backstacks. Both of those approaches had annoying drawbacks. 120
Alex Vanyo @vanyo.dev · 04/12/2025This metadata is then used by the scene strategy passed to the NavDisplay, specifically the ListDetailSceneStrategy: github.com/android/nowi... Using scenes, the ListDetailSceneStrategy can choose to render panes side-by-side only if they have the right metadata, and if the window is big enough. 110
Alex Vanyo @vanyo.dev · 04/12/2025The interests entry provides extra metadata that denotes that it is semantically a "list": github.com/android/nowi... Similarly, the topic entry provides extra metadata that denotes that it is semantically a "detail": github.com/android/nowi... 110
Alex Vanyo @vanyo.dev · 04/12/2025It's satisfying to see the integration point between Navigation 3 and ListDetailPaneScaffold come together after the previous approaches - the list and detail panes can finally be proper backstack entries _and_ be displayed simultaneously without nesting! Pointing out key parts of the new setup: 161
Alex Vanyo @vanyo.dev · 01/12/2025The orientation and tilt isn't directly exposed through Compose's PointerEvent, but you can fetch the underlying Android MotionEvent since 1.9 to get at them: developer.android.com/reference/ko... I'd bet styluses would be most likely to have that information available. 020
Alex Vanyo @vanyo.dev · 14/11/2025A 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... 060
Reposted by Alex VanyoDon Turner @donaldturner.bsky.social · 01/11/2025My talk on Navigation 3 from #dcldn25 is live (very impressive publishing from the droidcon team!). www.youtube.com/watch?v=j1Oi...youtube.comNavigating the future with Jetpack Navigation 3 - Don Turner | droidcon London 2025YouTube video by droidcon & fluttercon 02713
Alex Vanyo @vanyo.dev · 14/08/2025The reason I did catch this later was a failing StrictMode ThreadPolicy. But a lint rule warning against with(CoroutineContext) seems like it'd be nice to have. 240
Alex Vanyo @vanyo.dev · 14/08/2025Anyone 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... 190
Alex Vanyo @vanyo.dev · 30/07/2025The 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...youtube.comHandling configuration changes in Compose - Alex Vanyo | droidcon New York 2025YouTube video by droidcon & fluttercon 0193
Alex Vanyo @vanyo.dev · 16/07/2025I'm curious how prevalent the onGloballyPositioned pattern is and why - does it feel like the best way to accomplish more custom layout behavior? Is it the easiest thing to get something working close enough? Are there missing tools that would make it less likely you'd use onGloballyPositioned? 200
Alex Vanyo @vanyo.dev · 16/07/2025This video from last year goes into a lot more detail about the problem space here, along with some examples of how to approach different problems: www.youtube.com/watch?v=PUxt... 100
Alex Vanyo @vanyo.dev · 16/07/2025Unfortunately there's not really a one-size-fits-all solution for every case, but don't be afraid of a custom layout - if you're already doing some math to change the layout of something based on something else, you're about 80% of the way there to writing a custom layout. 100
Alex Vanyo @vanyo.dev · 16/07/2025This can also wreck havoc on animations - maybe they can cover up some of the jankiness, but animations need to have a consistent view of the layout as it animates at each point in time. Shared element transitions don't really work if the shared element disappears completely for a frame. 100
Alex Vanyo @vanyo.dev · 16/07/2025Nesting this approach makes the situation even worse - each time you put a calculation like this inside another one, it adds an additional frame required to resolve the whole layout. 100
Alex Vanyo @vanyo.dev · 16/07/2025When you have composition being driven by information that you can only get in a later phase, like measurement, layout or drawing, the first composition can't be correct! This means that the first frame might be blank, or components might jump around as you get more info. 100
Alex Vanyo @vanyo.dev · 16/07/2025A 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. 120
Alex Vanyo @vanyo.dev · 15/07/2025I smile every time I hear a voice assistant says "Panic! at the Disco" out loud when playing music, it dutifully pronounces the punctuation. 020
Reposted by Alex VanyoRebecca Franks @riggaroo.dev · 07/07/2025Did 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... 1488
Alex Vanyo @vanyo.dev · 03/07/2025I really like "artisanal" as a descriptor, I think it's going to matter even more to be specific about expectations for types of code based on what it's for. Would anyone really need an artisanal repro sample, or an artisanal one-time use script? What about an artisanal library or sample? 100
Alex Vanyo @vanyo.dev · 01/07/2025And to reiterate again: configuration changes will happen, and you have to react to them. For each type of configuration change, your options are: - using Activity recreation, and properly preserving state through it - opting-out of recreation, and updating everything in place 010
Alex Vanyo @vanyo.dev · 01/07/2025Some are a lot trickier to handle directly - and it's pretty easy to write code that works assuming that recreation happens. Opting out of recreation is also a promise that new code works properly with updating in-place when the configuration changes. 100
Alex Vanyo @vanyo.dev · 01/07/2025It's also not all or nothing! Most Android apps can probably opt-out of recreation for some configuration changes that don't need apps to do much (if anything), like keyboard, touchscreen, and colorMode. That'd immediately solve a whole class of bugs for physical keyboards and connected displays. 100
Alex Vanyo @vanyo.dev · 01/07/2025TL;DR: if you know the promise you are making, you can opt-out of Activity recreation via android:configChanges. The golden rule to do so properly in Compose is to have everything using configuration depend on a snapshot-state-backed source for it, like LocalConfiguration and LocalResources. 100
Alex Vanyo @vanyo.dev · 01/07/2025...and the source for my slides is here! github.com/alexvanyo/al... I built my talk with Compose itself, using @bnorm.dev's github.com/bnorm/storyb... project. Shared elements and transitions galore, directly using the Compose APIs for it. 120
Alex Vanyo @vanyo.dev · 01/07/2025It 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 1120
Alex Vanyo @vanyo.dev · 20/06/2025I'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 0255
Alex Vanyo @vanyo.dev · 20/06/2025Are you using the platform level drag and drop here, or something app-local? 110
Alex Vanyo @vanyo.dev · 08/06/2025Also - depending on jurisdiction, supporting multiple orientations can be an accessibility requirement, regardless of device type. 040
Alex Vanyo @vanyo.dev · 08/06/2025Prioritize accordingly based on what makes sense for your app and use cases - but users are absolutely using it across different form factors, window sizes and input types. 130
Alex Vanyo @vanyo.dev · 08/06/2025Is that as many as just phones? No. Is that a lot of people who want a better experience than an app breaking or having an unusable layout on their primary or secondary devices? Yes. 110
Alex Vanyo @vanyo.dev · 08/06/2025What number would stop being "nobody"? Combined across foldables, tablets, ChromeOS, and cars there are over 500 million active devices now where users expect apps that aren't just portrait phone apps - and that leaves out the additional devices capable of connecting external displays. 140
Alex Vanyo @vanyo.dev · 29/05/2025I assume iOS is going to have all the same accessibility requirements for orientation though, right? Is it even less common on iOS to support both orientations than Android right now? 100