jetc.dev Newsletter Issue #268
Published: 2025-06-10
This week, we look at the latest Compose and Compose Multiplatform alphas, plus a new Jetpack library for photo picking. We continue peeking at Material3 Expressive, see how to test Lottie animations, and see how to get ripples on all the Compose platforms.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
A new Jetpack PhotoPicker library was released, for “the Embedded PhotoPicker that enable[s]… Compose based applications to easily integrate with the Embedded Photopicker service”.
The Compose BOMs are up to 2025.06.00
, though they production and beta BOMs
should be the same as the previous versions.
The alpha BOM should point to the new 1.9.0-alpha04
release. This includes some
interesting changes:
-
SnapshotStateList
andSnapshotStateSet
are nowParcelable
and can be used inrememberSaveable()
-
Made some context menu APIs public
-
Added
DropShadowPainter
,InnerShadowPainter
, and some modifiers for custom shadows
Wear Compose is up to 1.5.0-beta03
. Mostly this contains bug fixes, but they did
change the accessibility support for OpenOnPhoneDialog()
.
The following Compose-related libraries got new versions:
androidx.activity:activity-compose:1.12.0-alpha02
androidx.camera.viewfinder:viewfinder-compose:1.5.0-beta02
androidx.fragment:fragment-compose:1.8.8
androidx.lifecycle:lifecycle-runtime-compose:2.9.1
androidx.lifecycle:lifecycle-runtime-compose-android:2.9.1
androidx.lifecycle:lifecycle-runtime-compose-jvmstubs:2.9.1
androidx.lifecycle:lifecycle-runtime-compose-linuxx64stubs:2.9.1
androidx.lifecycle:lifecycle-viewmodel-compose:2.9.1
androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.1
androidx.lifecycle:lifecycle-viewmodel-compose-jvmstubs:2.9.1
androidx.lifecycle:lifecycle-viewmodel-compose-linuxx64stubs:2.9.1
Finally, JetBrains released Compose Multiplatform 1.9.0-alpha02
.
It now includes MaterialExpressiveTheme
, fixes a bunch of bugs, and makes
the block passed to runComposeUiTest
be suspend
(for additional test flexibility).
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Why Does Sorting My Map
Not Trigger Recomposition?
Content equality, coupled with the issue that a Map
has no intrinsic sort order, means
that a sorted Map
will be considered equal to an unsorted version of the same Map
contents. In this case, a different data structure, such as a List
of Pair
objects,
may be a better choice, both from a state management standpoint and in terms of what
best models your intended UI. Learn more in this week’s highlighted Stack Overflow
question.
Does Nav3 Offer Sub-graphs?
Jetpack Navigation has long supported sub-graphs, so different modules can contribute
pieces of the overall navigation graph. Nav3 lacks sub-graphs, but it offers other
ways to accomplish the same overall objective, as we see in this week’s highlighted
Kotlinlang #compose-android
Slack thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Medium: Material 3 Expressive Design: A New Era Part 2
Stefano Natali
Bluesky
continues on a tour of Material3 Expressive, examining FlexibleBottomAppBar()
,
VerticalFloatingToolbar()
, HorizontalFloatingToolbar()
, and more!
Medium: Implementation of a custom soft keyboard in Android using Compose
A surprising number of developers want to use Compose for Android windows outside of the normal ones associated with activities. Maksym Koval explores one such scenario: implementing a input method editor (IME, a.k.a., soft keyboard) using Compose.
Medium: How to Create Chrome-Inspired Custom Tabs in Jetpack Compose
Kappdev is back, showing us how to apply a custom shape to top tabs, with an eye towards mimicking the rounded-corner look seen in Chrome.
Medium: Testing a LottieAnimation in Compose
Jordi Coll Marin outlines a few approaches for testing whether a LottieAnimation()
composable animates as expected and when it is supposed to. This includes an interesting
use of composition locals to allow tests to control the animation in ways that production
code does not need.
Other Interesting Links
- Jetpack Compose State Management: A Guide for Android Developers
- Medium: A Practical Guide to Jetpack Compose for XR Development
- Medium: CompositionLocal in Jetpack Compose
- Medium: Margin vs Padding — Jetpack Compose
- Medium: Mastering Adaptive UIs in Jetpack Compose: A Dive into NavigableListDetailPaneScaffold
- Medium: Mastering State Management in Jetpack Compose: A Guide for Android Developers
- Medium: Migrating from Coil 2.x to Coil 3.x in Jetpack Compose: Complete Migration Guide
- Medium: Native at heart: Mixing SwiftUi with Compose Multiplatform
- Medium: Part 1: UI State Management with Sealed Classes in Jetpack Compose
- Medium: “Retry When Ready” — A Smarter Way to Handle Network Failures in Jetpack Compose
- Slides: Practical Tips and Tricks for Working with Compose Multiplatform Previews
Resource Roundup
100% pure code!
GitHub: gleb-skobinsky / Rippler
Gleb Gutnik is supplying a Material-style ripple click indication for Compose Multiplatform, supporting Android, iOS, desktop, and Web/Wasm.
GitHub: meticha / triggerx
The Meticha team has created a library for scheduling exact alarms on Android, complete with permission management. Your Compose-based UI can even overlay the lock screen.
GitHub: DongChyeon / PhotoCalendar
Donghyeon Kim brings us another calendar for Compose for Android, supporting month grids or horizontal scrolling layouts. The biggest difference between this and others is out-of-the-box support for photo backgrounds for specific days in the calendar.
GitHub: antorsaha / GlobePicker
Antor Saha implemented a country picker for Compose for Android, with a popup for searching for the country to select.
Notable Releases
WebView for Compose Multiplatform (WebView
for Android, iOS, and desktop)
reached the 2.0.0
milestone release.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-05-27: Google I|O 2025! KotlinConf 2025! Compose and Compose Multiplatform updates! Motion physics in Material3 Expressive!
- 2025-05-20: Compose Multiplatform 1.8.0! Compose 1.8.1 and 1.9.0-alpha02! And this issue is a bit short, but there's a reason for that...
- 2025-05-06: DI in previews! LinkAnnotation! Composable visibility! Drag and drop! And... do choosy developers *still* choose GIF?!?