Fixed
Status Update
Comments
il...@google.com <il...@google.com>
ta...@gmail.com <ta...@gmail.com> #2
Yigit, do you have time to fix it?
reemission of the same liveData is racy
reemission of the same liveData is racy
jo...@gmail.com <jo...@gmail.com> #3
yea i'll take it.
[Deleted User] <[Deleted User]> #4
Thanks for the detailed analysis. This may not be an issue anymore since we've started using Main.immediate there but I' not sure; I'll try to create a test case.
pr...@gmail.com <pr...@gmail.com> #5
just emitting same live data reproduces the issue.
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
yp...@its.jnj.com <yp...@its.jnj.com> #6
With 2.2.0-alpha04 (that use Main.immediate), the issue seems to be still there (I tested it by calling emitSource() twice, like your test case)
da...@gmail.com <da...@gmail.com> #7
yea sorry immediate does not fix it.
I actually have a WIP fix for it:
https://android-review.googlesource.com/c/platform/frameworks/support/+/1112186
if your case is the one i found (emitting same LiveData multiple times, as shown in #5) you can work around it by adding a dummy transformation.
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData.map {it })
emitSource(subLiveData.map {it} )
}
I actually have a WIP fix for it:
if your case is the one i found (emitting same LiveData multiple times, as shown in #5) you can work around it by adding a dummy transformation.
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData.map {it })
emitSource(subLiveData.map {it} )
}
hr...@gmail.com <hr...@gmail.com> #8
Project: platform/frameworks/support
Branch: androidx-master-dev
commit af12e75e6b4110f48e44ca121466943909de8f06
Author: Yigit Boyar <yboyar@google.com>
Date: Tue Sep 03 12:58:11 2019
Fix coroutine livedata race condition
This CL fixes a bug in liveData builder where emitting same
LiveData source twice would make it crash because the second
emission registry could possibly happen before first one is
removed as source.
We fix it by using a suspending dispose function. It does feel
a bit hacky but we cannot make DisposableHandle.dispose async
and we do not want to block there. This does not mean that there
is a problem if developer disposes it manually since our emit
functions take care of making sure it disposes (and there is
no other way to add source to the underlying MediatorLiveData)
Bug: 140249349
Test: BuildLiveDataTest#raceTest_*
Change-Id: I0b464c242a583da4669af195cf2504e2adc4de40
M lifecycle/lifecycle-livedata-ktx/api/2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/current.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
M lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
M lifecycle/lifecycle-livedata-ktx/src/test/java/androidx/lifecycle/BuildLiveDataTest.kt
https://android-review.googlesource.com/1112186
https://goto.google.com/android-sha1/af12e75e6b4110f48e44ca121466943909de8f06
Branch: androidx-master-dev
commit af12e75e6b4110f48e44ca121466943909de8f06
Author: Yigit Boyar <yboyar@google.com>
Date: Tue Sep 03 12:58:11 2019
Fix coroutine livedata race condition
This CL fixes a bug in liveData builder where emitting same
LiveData source twice would make it crash because the second
emission registry could possibly happen before first one is
removed as source.
We fix it by using a suspending dispose function. It does feel
a bit hacky but we cannot make DisposableHandle.dispose async
and we do not want to block there. This does not mean that there
is a problem if developer disposes it manually since our emit
functions take care of making sure it disposes (and there is
no other way to add source to the underlying MediatorLiveData)
Bug: 140249349
Test: BuildLiveDataTest#raceTest_*
Change-Id: I0b464c242a583da4669af195cf2504e2adc4de40
M lifecycle/lifecycle-livedata-ktx/api/2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/current.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
M lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
M lifecycle/lifecycle-livedata-ktx/src/test/java/androidx/lifecycle/BuildLiveDataTest.kt
[Deleted User] <[Deleted User]> #9
Dialog fragments are now used in all modern applications and this is the last missing piece of puzzle to really switch everything to Navigation component.
Hope to see support for this soon enough.
Hope to see support for this soon enough.
wi...@gmail.com <wi...@gmail.com> #10
Please, any update on this?
um...@gmail.com <um...@gmail.com> #11
Sometime, there's need to display the previous fragment along with new fragment which is more of like a dialog. Therefore, it will be nice to have this feature in the next update.
ja...@gmail.com <ja...@gmail.com> #12
This would be really useful, especially since Modal Bottom Sheets need to be implemented as BottomSheetDialogFragments. It would be great to get all of our navigation into the navigation graph.
ap...@google.com <ap...@google.com> #13
Project: platform/frameworks/support
Branch: androidx-master-dev
commit eec025be7822df951131cc0766b928383f58789e
Author: Ian Lake <ilake@google.com>
Date: Mon Apr 22 14:51:05 2019
Add support for <dialog> destinations
Add support for using a DialogFragment as
a destination in your navigation graph via
the <dialog> tag.
Test: added tests, tested in testapp
BUG: 80267254
Change-Id: I82daaa7bde4efe782095eee7b3932092e9086adb
M navigation/fragment/api/2.1.0-alpha03.txt
M navigation/fragment/api/current.txt
M navigation/fragment/ktx/api/2.1.0-alpha03.txt
M navigation/fragment/ktx/api/current.txt
A navigation/fragment/ktx/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt
A navigation/fragment/ktx/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt
A navigation/fragment/src/main/java/androidx/navigation/fragment/DialogFragmentNavigator.java
M navigation/fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
M navigation/fragment/src/main/res/values/attrs.xml
A navigation/integration-tests/testapp/src/main/java/androidx/navigation/testapp/LearnMoreDialogFragment.kt
M navigation/integration-tests/testapp/src/main/java/androidx/navigation/testapp/MainFragment.kt
M navigation/integration-tests/testapp/src/main/res/layout/main_fragment.xml
M navigation/integration-tests/testapp/src/main/res/navigation/nav_main.xml
M navigation/integration-tests/testapp/src/main/res/values/strings.xml
https://android-review.googlesource.com/949238
https://goto.google.com/android-sha1/eec025be7822df951131cc0766b928383f58789e
Branch: androidx-master-dev
commit eec025be7822df951131cc0766b928383f58789e
Author: Ian Lake <ilake@google.com>
Date: Mon Apr 22 14:51:05 2019
Add support for <dialog> destinations
Add support for using a DialogFragment as
a destination in your navigation graph via
the <dialog> tag.
Test: added tests, tested in testapp
BUG: 80267254
Change-Id: I82daaa7bde4efe782095eee7b3932092e9086adb
M navigation/fragment/api/2.1.0-alpha03.txt
M navigation/fragment/api/current.txt
M navigation/fragment/ktx/api/2.1.0-alpha03.txt
M navigation/fragment/ktx/api/current.txt
A navigation/fragment/ktx/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilderTest.kt
A navigation/fragment/ktx/src/main/java/androidx/navigation/fragment/DialogFragmentNavigatorDestinationBuilder.kt
A navigation/fragment/src/main/java/androidx/navigation/fragment/DialogFragmentNavigator.java
M navigation/fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
M navigation/fragment/src/main/res/values/attrs.xml
A navigation/integration-tests/testapp/src/main/java/androidx/navigation/testapp/LearnMoreDialogFragment.kt
M navigation/integration-tests/testapp/src/main/java/androidx/navigation/testapp/MainFragment.kt
M navigation/integration-tests/testapp/src/main/res/layout/main_fragment.xml
M navigation/integration-tests/testapp/src/main/res/navigation/nav_main.xml
M navigation/integration-tests/testapp/src/main/res/values/strings.xml
il...@google.com <il...@google.com> #14
We've added support for dialog destinations internally, it'll be available in Navigation 2.1.0-alpha03
gl...@gmail.com <gl...@gmail.com> #15
Awesome! Cheers guys
vr...@gmail.com <vr...@gmail.com> #16
Are there any public test/demo applications one could use for reference?
Because the integration tests seem to be non public
Because the integration tests seem to be non public
an...@gmail.com <an...@gmail.com> #17
i have tried using dialog as destination it work's fine but when i navigate from dialog to fragment/dialog i am getting runtime error as NavController is missing.
i am using 2.1.0-alpha05
ps...@gmail.com <ps...@gmail.com> #18
Very useful, fixed also.Cheers!
Description
Version used: 1.0.0-alpha01
Devices/Android versions reproduced on: -
Navigation to dialog fragments is not possible or not documented. It would be great to be able to navigate to dialog fragments using deep links.