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 and SnapshotStateSet are now Parcelable and can be used in rememberSaveable()

  • 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.

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.