0.26.0
Happy new year!
Shared Elements API!
After a lot of iteration and work, this release adds support for Compose's new shared elements APIs.
These are still experimental and subject to change, both in Circuit and the underlying Compose APIs.
See this PR for full details as well as sample integrations: #1550. Please share feedback in this discussion. More formal docs to come as well, we'll publish updates there!
For now, the easiest way to support shared element transitions is to wrap your content with a SharedElementTransitionLayout
.
CircuitCompositionLocals(circuit) {
SharedElementTransitionLayout {
NavigableCircuitContent(
navigator = navigator,
backStack = backStack,
)
}
}
SharedElementTransitionLayout
creates and provides a SharedElementTransitionScope
to content within it, and in turn exposes a SharedTransitionScope
for use with standard compose shared elements/bounds animations. This is supported in NavigableCircuitContent
and overlays.
There is also a PreviewSharedElementTransitionLayout
for help with Compose previews.
Behaviour Changes: rememberRetained
Previously, rememberRetained
could sometimes restore values when a composable was re-added, depending on whether its parent RetainedStateRegistry
had been saved (#1783).
Now, rememberRetained
aligns with remember
and rememberSaveable
: if a composable is removed and later re-added, its value will not be restored unless it is explicitly saved and then restored via the registry.
Update rememberRetained to allow CanRetainChecker to be updated in place.
Behaviour Change: RetainedStateRegistry
saveAll
now returns the saved values.RetainedStateRegistry.Entry.unregister
now returns whether the unsaved valueProvider was actually removed.saveAll
andsaveValue
now skip storing child values whenCanRetainChecker
returnsfalse
.
New: RetainedStateHolder
Similar to SaveableStateHolder
, RetainedStateHolder
provides a mechanism to maintain separate RetainedStateRegistry
entries for specific keys. This allows saving the state defined with rememberRetained
for a subtree before it is disposed, so that the subtree can later be recomposed with its state restored.
val retainedStateHolder = rememberRetainedStateHolder()
var currentTab by remember { mutableStateOf(TabA) }
retainedStateHolder.RetainedStateProvider(key = currentTab.name) {
// rememberRetained values in tab content are preserved across tab switches
when (currentTab) {
TabA -> {
TabAContent()
}
TabB -> {
TabBContent()
}
TabC -> {
TabCContent()
}
}
}
Implementation Changes: NavigableCircuitContent
- The approach of managing a separate
RetainedStateRegistry
for each record has been changed to useRetainedStateHolder
instead. - Change
SaveableStateHolder
to release saved states of removed records.
Misc
- Fixe an issue causing codegen to fail for class @Inject annotations.
- Compile against Android SDK 35.
- Update Compose Android BOM to
2025.01.01
. - Update to androidx.annotation
1.9.1
. - Update to androidx.activity
1.10.0
. - Update to Compose Android
1.7.7
. - Update to Compose Multiplatform
1.7.3
. - Update to Kotlin
1.9.10
. - [code gen] Update to KSP
1.9.10-1.0.29
. - [code gen] Update to Dagger
2.55
. - [code gen] Update to KotlinPoet
2.0.0
. - [code gen] Build against Anvil-KSP
0.4.1
. Should still be compatible with square/anvil as well. - [code gen] Build against kotlin-inject-anvil
0.1.2
. Should still be compatible with square/anvil as well. - [samples] Update mosaic + modernize mosaic counter sample to fully use effects.
- [docs] Fix variable casing in Navigation documentation example.
Special thanks to @vulpeszerda, @rharter, @alexvanyo, and @easyhooon for contributing to this release!
What's Changed
- Update dependency mkdocs-macros-plugin to v1.3.7 by @slack-oss-bot in #1756
- Update coil3 to v3.0.0-rc02 by @slack-oss-bot in #1757
- Update ktor monorepo to v3.0.1 by @slack-oss-bot in #1759
- Update dependency pymdown-extensions to v10.12 by @slack-oss-bot in #1758
- Update androidx.lifecycle to v2.8.7 by @slack-oss-bot in #1761
- Update compose.material to v1.7.5 by @slack-oss-bot in #1762
- Update compose.runtime to v1.7.5 by @slack-oss-bot in #1763
- Update dependency androidx.annotation:annotation to v1.9.1 by @slack-oss-bot in #1765
- Update dependency androidx.compose.foundation:foundation to v1.7.5 by @slack-oss-bot in #1767
- Update dependency androidx.constraintlayout:constraintlayout-compose to v1.1.0 by @slack-oss-bot in #1772
- Update anvil to v0.4.0 by @slack-oss-bot in #1773
- Update dependency androidx.compose.material3:material3 to v1.3.1 by @slack-oss-bot in #1769
- Update dependency mkdocs-material to v9.5.43 by @slack-oss-bot in #1771
- Update dependency androidx.compose.animation:animation to v1.7.5 by @slack-oss-bot in #1766
- Update dependency androidx.compose:compose-bom to v2024.10.01 by @slack-oss-bot in #1770
- Update agp to v8.7.2 by @slack-oss-bot in #1768
- Update compose.ui to v1.7.5 by @slack-oss-bot in #1764
- Update dependency androidx.core:core-ktx to v1.15.0 by @slack-oss-bot in #1774
- Update dependency com.facebook:ktfmt to v0.53 by @slack-oss-bot in #1775
- Update dependency com.fleeksoft.ksoup:ksoup-ktor2 to v0.2.0 by @slack-oss-bot in #1776
- Update roborazzi to v1.30.1 by @slack-oss-bot in #1777
- Update kotlinInject.anvil to v0.1.0 by @slack-oss-bot in #1780
- Update coil3 to v3.0.0 by @slack-oss-bot in #1779
- Update dependency mkdocs-material to v9.5.44 by @slack-oss-bot in #1781
- Update roborazzi to v1.32.1 by @slack-oss-bot in #1782
- Update coil3 to v3.0.1 by @slack-oss-bot in #1784
- Update dependency app.cash.paparazzi to v1.3.5 by @slack-oss-bot in #1786
- Update dependency com.android.tools:desugar_jdk_libs to v2.1.3 by @slack-oss-bot in #1787
- Update roborazzi to v1.32.2 by @slack-oss-bot in #1788
- Update coil3 to v3.0.2 by @slack-oss-bot in #1789
- Update kct to v0.6.0 by @slack-oss-bot in #1793
- Update dependency gradle to v8.11 by @slack-oss-bot in #1792
- Update ksp to v2.0.21-1.0.27 by @slack-oss-bot in #1753
- Update compose.jb to v1.7.1 by @slack-oss-bot in #1795
- Update dependency androidx.compose:compose-bom to v2024.11.00 by @slack-oss-bot in #1798
- Update dependency me.saket.telephoto:zoomable-image-coil to v0.14.0 by @slack-oss-bot in #1799
- Update kotlinpoet to v2 (major) by @slack-oss-bot in #1754
- Introduce kotlin binary compatibility checker by @ZacSweers in #1800
- Update coil3 to v3.0.3 by @slack-oss-bot in #1802
- Update ksp to v2.0.21-1.0.28 by @slack-oss-bot in #1804
- Update plugin emulatorWtf to v0.18.1 by @slack-oss-bot in #1806
- Update dependency org.robolectric:robolectric to v4.14 by @slack-oss-bot in #1803
- Fixes issue causing codegen to fail for class
@Inject
annotations. by @rharter in #1807 - Update dependency gradle to v8.11.1 by @slack-oss-bot in #1808
- Update dependency mkdocs-material to v9.5.45 by @slack-oss-bot in #1809
- Update dependency org.robolectric:robolectric to v4.14.1 by @slack-oss-bot in #1810
- Remove coil 2 by @ZacSweers in #1811
- Enable configuration cache sharing on CI by @ZacSweers in #1812
- Update dependency tornado to v6.4.2 by @slack-oss-bot in #1813
- Update kotlinInject.anvil to v0.1.1 by @slack-oss-bot in #1814
- Update roborazzi to v1.33.0 by @slack-oss-bot in #1815
- Update roborazzi to v1.34.0 by @slack-oss-bot in #1816
- Update dependency mkdocs-material to v9.5.46 by @slack-oss-bot in #1819
- Update dependency io.reactivex.rxjava3:rxjava to v3.1.10 by @slack-oss-bot in #1818
- Update coil to v3.0.4 by @slack-oss-bot in #1817
- Update dependency org.jsoup:jsoup to v1.18.2 by @slack-oss-bot in #1820
- Update dependency org.jetbrains.kotlinx:atomicfu to v0.26.1 by @slack-oss-bot in #1824
- Prevent STAR rotation crash by @stagg in #1826
- Update dependency co.touchlab.skie to v0.9.5 by @slack-oss-bot in #1823
- Update dependency mkdocs-material to v9.5.47 by @slack-oss-bot in #1827
- Update dependency com.github.ajalt.clikt:clikt to v5.0.2 by @slack-oss-bot in #1828
- Update dependency org.jsoup:jsoup to v1.18.3 by @slack-oss-bot in #1829
- Update agp to v8.7.3 by @slack-oss-bot in #1830
- Update ktor monorepo to v3.0.2 by @slack-oss-bot in #1832
- Shared transitions by @stagg in #1550
- Update dependency six to v1.17.0 by @slack-oss-bot in #1833
- Update kct to v0.7.0 by @slack-oss-bot in #1825
- Update dependency mkdocs-material to v9.5.48 by @slack-oss-bot in #1837
- Update eithernet to v2.0.0 by @slack-oss-bot in #1838
- Update compose.material to v1.7.6 by @slack-oss-bot in #1841
- Update compose.runtime to v1.7.6 by @slack-oss-bot in #1842
- Update compose.ui to v1.7.6 by @slack-oss-bot in #1843
- Update dependency androidx.compose.animation:animation to v1.7.6 by @slack-oss-bot in #1844
- Update dependency androidx.compose.foundation:foundation to v1.7.6 by @slack-oss-bot in #1845
- Update dependency androidx.compose:compose-bom to v2024.12.01 by @slack-oss-bot in #1846
- Update dependency co.touchlab.skie to v0.10.0 by @slack-oss-bot in #1847
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1839
- Update dependency org.jline:jline to v3.28.0 by @slack-oss-bot in #1840
- Update dependency mkdocs-material to v9.5.49 by @slack-oss-bot in #1849
- Update roborazzi to v1.37.0 by @slack-oss-bot in #1836
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1851
- Update dependency livereload to v2.7.1 by @slack-oss-bot in #1853
- Update ktor monorepo to v3.0.3 by @slack-oss-bot in #1854
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1855
- Update plugin binaryCompatibilityValidator to v0.17.0 by @slack-oss-bot in #1858
- Update dependency com.android.tools:desugar_jdk_libs to v2.1.4 by @slack-oss-bot in #1859
- Update dependency Jinja2 to v3.1.5 by @slack-oss-bot in #1863
- Update dependency click to v8.1.8 by @slack-oss-bot in #1864
- Update dependency gradle to v8.12 by @slack-oss-bot in #1862
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1861
- Update dependency pymdown-extensions to v10.13 by @slack-oss-bot in #1867
- Update dagger to v2.54 by @slack-oss-bot in #1831
- Remove unused accompanist deps by @slack-oss-bot in #1848
- Fix variable casing in Navigation documentation example by @easyhooon in #1870
- Update to Dokka 2.0.0 by @ZacSweers in #1732
- Update to Kotlin 2.1.0 by @ZacSweers in #1677
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1869
- Update dependency net.harawata:appdirs to v1.3.0 by @slack-oss-bot in #1871
- Update kotlinx-coroutines monorepo to v1.10.1 by @slack-oss-bot in #1857
- Update kotlinInject.anvil to v0.1.2 by @slack-oss-bot in #1866
- Update roborazzi to v1.38.0 by @slack-oss-bot in #1868
- Update compose.jb by @slack-oss-bot in #1860
- Update dependency Pygments to v2.19.0 by @slack-oss-bot in #1873
- Update roborazzi to v1.39.0 by @slack-oss-bot in #1874
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1872
- Update dependency Pygments to v2.19.1 by @slack-oss-bot in #1877
- Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json-okio to v1.8.0 by @slack-oss-bot in #1879
- Update okio to v3.10.0 by @slack-oss-bot in #1880
- Update dependency pymdown-extensions to v10.14 by @slack-oss-bot in #1882
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1878
- Update okio to v3.10.2 by @slack-oss-bot in #1881
- Update dagger to v2.55 by @slack-oss-bot in #1885
- Update agp to v8.8.0 by @slack-oss-bot in #1884
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1886
- Update dependency org.jetbrains.kotlinx:atomicfu to v0.27.0 by @slack-oss-bot in #1887
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1888
- Update anvil to v0.4.1 by @slack-oss-bot in #1892
- Update dependency androidx.datastore:datastore-preferences to v1.1.2 by @slack-oss-bot in #1896
- Update dependency com.facebook:ktfmt to v0.54 by @slack-oss-bot in #1898
- Update dependency mkdocs-material to v9.5.50 by @slack-oss-bot in #1900
- Update dependency pymdown-extensions to v10.14.1 by @slack-oss-bot in #1902
- Update roborazzi to v1.40.1 by @slack-oss-bot in #1903
- Update dependency gradle to v8.12.1 by @slack-oss-bot in #1904
- Update dependency pymdown-extensions to v10.14.2 by @slack-oss-bot in #1906
- Update compose.material to v1.7.7 by @slack-oss-bot in #1908
- Update compose.runtime to v1.7.7 by @slack-oss-bot in #1909
- Update compose.ui to v1.7.7 by @slack-oss-bot in #1910
- Update dependency androidx.compose.animation:animation to v1.7.7 by @slack-oss-bot in #1911
- Update dependency pymdown-extensions to v10.14.3 by @slack-oss-bot in #1916
- Update dependency mkdocs-material to v9.6.1 by @slack-oss-bot in #1913
- Update dependency org.jline:jline to v3.29.0 by @slack-oss-bot in #1915
- Update dependency androidx.compose.foundation:foundation to v1.7.7 by @slack-oss-bot in #1912
- Update dependency fastlane to v2.226.0 by @slack-oss-bot in #1893
- Update dependency androidx.compose:compose-bom to v2025 by @slack-oss-bot in #1899
- Update rememberRetained to allow CanRetainChecker to be updated in place by @alexvanyo in #1920
- Update dependency co.touchlab.skie to v0.10.1 by @slack-oss-bot in #1917
- Update dependency mkdocs-material to v9.6.2 by @slack-oss-bot in #1918
- Update kotlin monorepo to v2.1.10 by @slack-oss-bot in #1905
- Update androidx.activity to v1.10.0 + sdk 35 by @slack-oss-bot in #1897
- Update coil to v3.1.0 by @slack-oss-bot in #1921
- Change SaveableStateHolder to remove saved states of removed records by @vulpeszerda in #1922
- Change rememberRetain not to retain the value of removed node by @vulpeszerda in #1794
- Update mosaic + modernize mosaic counter sample by @ZacSweers in #1923
New Contributors
- @rharter made their first contribution in #1807
- @easyhooon made their first contribution in #1870
Full Changelog: 0.25.0...0.26.0