- Version updated: Kotlin
1.7.0
, Gradle 7.4.2
, JB Compose 1.2.0-alpha01-dev753
, Jetpack Compose 1.2.0
(#158)
- Replaced
BackPressedHandler
with BackHandler
(#164)
- Added
otherChild
argument to stackAnimation
selector function (#162)
- Removed
IDLE
entry from Compose animation Direction
enum (#161)
- Nullable result in
StackAnimation
selector function (#163)
- Nullable
Children
animation
argument (#165)
- Better error messages when creating child components with same keys (#87)
- Removed previously deprecated
Router
(#159)
- Removed previously deprecated
ValueObserver
type alias (#160)
Breaking changes
This release brings Decompose closer to v1.0.0
release. The main focus was to support latest Compose versions, further improve stack animation API, and support the new Predictive Back Gesture on Android 13. Please read about breaking changes in this release.
This release is binary and source incompatible with v0.8.0
.
Predictive Back Gesture on Android 13
Android 13 introduces the new Predictive Back Gesture. It is essential for Decompose to support it, so BackPressedHandler
was replaced with the new BackHandler
from Essenty library. The new BackHandler
has different API (closer to AndroidX OnBackPressedDispatcher
) compatible with Predictive Back Gesture. Please read corresponding section in Essenty readme.
If you are not using BackPressedHandler
or BackPressedDispatcher
, then most likely you won't notice any changes and the source code should compile just fine. However, if you do use either of them, then you will need to update your code.
Migration tips
// Before
class SomeComponent(componentContext: ComponentContext) : ComponentContext by componentContext {
init {
backPressedHandler.register {
// Process back pressed event
true | false // return true to consume the event, false to allow other handlers
}
}
}
// After
class SomeComponent(componentContext: ComponentContext) : ComponentContext by componentContext {
private val backCallback = BackCallback(isEnabled = false) { /* Process back pressed event */ }
init {
backHandler.register(backCallback)
}
private fun updateBackCallback() {
backCallback.isEnabled = true | false // return true to consume all back button events, false to allow other handlers
}
}
// Before
val backPressedDispatcher = BackPressedDispatcher()
val componentContext = DefaultComponentContext(..., backPressedHandler = backPressedDispatcher)
// ...
val backHandled = backPressedDispatcher.onBackPressed()
// After
val backDispatcher = BackDispatcher()
val componentContext = DefaultComponentContext(..., backHandler = backDispatcher)
// ...
val backHandled = backPressedDispatcher.back()
Changes in stack animation API
The stackAnimation {}
function's selector got an additional argument - otherChild
. Now it is possible to choose StackAnimator
for a child based on both - the child itself, and the second child (the other one) in the scene. For example - having different animations for a child X
when it is being opened from child A
or B
. It is also now possible to return null
from the selector
function, if no animation is required for a child
The Direction.IDLE
enum entry is removed, animators are not called when there is no ongoing animation, thanks to the new movableContentOf
Compose API.
Removed Router and ValueObserver
The Router
API was deprecated in v0.8.0
and is now completely removed. Please read v0.8.0 release notes for migration guides if you didn't migrate yet.
The previously deprecated ValueObserver
type alias is also removed. Please use normal function types instead - (T) -> Unit
.
Versions and dependencies
Kotlin: 1.7.0
Essenty: 0.5.2
extensions-compose-jetpack
Jetpack Compose: 1.2.0
Jetpack Compose Compiler: 1.2.0
extensions-compose-jetbrains
JetBrains Compose: 1.2.0-alpha01-dev753
Source code(tar.gz)
Source code(zip)