Status Update
Comments
ya...@google.com <ya...@google.com> #2
Does the program work without the compiler switch. That is, is `"-P", "plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true",` required to reproduce or is just changing the runtime enough?
jb...@google.com <jb...@google.com> #3
Sorry for that, I will try to extract an example when I'm free.
ya...@google.com <ya...@google.com> #4
I have find a sample code to reproduce that
setContent {
val dialogState = remember { DialogState() }
dialogState.Intercept()
LaunchedEffect(Unit) {
delay(1000)
dialogState.bgWork {
delay(5000)
}
dialogState.showSelectActions {
onSelect("a") {
}
onSelect("b") {
}
}
}
}
You can find implementation of DialogState
here
ya...@google.com <ya...@google.com> #5
Let me sort it out
The first crash
Reproduce: navigate to a gallery and navigate back
The reason is we have some code assume the forget order of RememberObserver(DisposableEffect), and 52835066c9044647a65dfb566f03131aab46e793
changed the order. Seems this is a intended behaviour.
I will fix it from my side. My bad
The second crash
Reproduce: #4 comment
StackTrace:
We got a wrong object from SlotTable during recompose
jb...@google.com <jb...@google.com> #6
And interestingly, if we insert delay(1000) between two dialog suspend usage
dialogState.bgWork {
delay(5000)
}
delay(1000)
dialogState.showSelectActions {
onSelect("a") {
}
onSelect("b") {
}
}
It will not crash
ap...@google.com <ap...@google.com> #7
As for the order of `onForgotten`, it may be you are seeing and issue that I fixed in a subsequent version as this, for the snapshot builds, was broken for a few weeks when using the non-skipping group optimization even indirectly.
Description
Component used: androidx.transition
Version used: 1.4.0
Devices/Android versions reproduced on: all
If you do transitions on two sibling ViewGroups, A and B. A starts a transition on its root view, then B starts a transition. Inside of A's onTransitionEnd call back, if you start another transition on ViewGroup A, it will pause the Animators on the transition of ViewGroup B, which means the transition on B never ends.
Since two transitions with different sceneRoots should not interfere with one another, the expectation is that the transition on ViewGroup B does not get paused when by anything happening in ViewGroup A.
Not sure if this helps, but when starting another transition on ViewGroup A, the here which returns the animator associated with ViewGroup B.
pause()
inTransition
makes a call togetRunningAnimators()
In the attached sample you can see that the transition run on the
container
view group never ends.