Status Update
Comments
yu...@gmail.com <yu...@gmail.com> #2
Branch: androidx-main
commit ff83342e064a03ea410b31f825786c28d009354f
Author: Jeremy Woods <jbwoods@google.com>
Date: Tue Nov 16 08:17:07 2021
Allow nullable boolean array in safe args
While you should not be able to give a boolean a default value of null
you should be able to make an array default to null. We need to enable
safe args to generate boolean array with nullable values.
RelNote: "Fixed a bug in safe args that would not allow boolean arrays
to have a `null` value."
Test: modified NavParserTest
Bug: 174787525
Change-Id: I8c396c8f174d5924bb5ee147261de158256fba94
M navigation/navigation-safe-args-generator/src/test/test-data/naive_test.xml
M navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/Types.kt
M navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavParserTest.kt
il...@google.com <il...@google.com> #3
This has been fixed internally and will be available in the next Navigation release. You can try it out now by following the #7920634
.
il...@google.com <il...@google.com> #4
We need to ensure that singleTop operations (like this) give us a NavBackStackEntry
that is not .equals()
to the old entry. This ensures that Compose won't skip updating the LocalLifecycleOwner.current
value in this case.
This has a couple of (internal only) implications to make sure that our internal state is consistent:
- We need to fix
NavController
's to ensure that the new entry is added to our child/parent Lifecycle tracking mapscall to navigator.onLaunchSingleTop()
- Ensure that we don't clear ViewModels associated with singleTop operations (i.e., validate that the same entry ID isn't on the back stack)
- Update the
to update the value as a single atomic operation (which is now possible since the entries aren'tdefault implementation of NavigatorState.onLaunchSingleTop
.equals()
to one another) - Look at how
TestNavigatorState
treats reference equality to make sure it still clears/saves state properly
ap...@google.com <ap...@google.com> #5
Branch: androidx-main
commit 8ed73a2b43c94f0a1deaf12ab13e5161c2fab5cf
Author: Jeremy Woods <jbwoods@google.com>
Date: Tue Sep 28 18:09:48 2021
Modify NavBackStackEntry equality
Including the Lifecycle and SavedStateRegistry in the NavBackStackEntry
equals and hashcode functions. This will fix our issues in compose where
different instances of NavBackStackEntry were considered the same and we
were not recomposing properly.
This change always required the following:
Ensuring that ViewModels are not cleared during singleTop operations
Making sure markTransitionComplete clears all entries with the same ID
Ensure when NavController calls onSingleTop we update the links between
child and parents
We also made onLaunchSingleTop in NavigatorState a single atomic
operation to remove the old entry and add the new one.
RelNote: "NavBackStackEntries now with different Lifecycles are not
longer considered equal. This means NavHost will properly recompose all
destinations when doing navigation with singleTop and when reselecting
bottom menu items."
Bug: 196997433
Test: Added tests
Change-Id: I1b3510b238d3c4e6ed5cc86a6fddf795bd9acb02
M navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavBackStackEntryTest.kt
M navigation/navigation-testing/src/androidTest/java/androidx/navigation/testing/TestNavigatorStateTest.kt
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
M navigation/navigation-testing/src/main/java/androidx/navigation/testing/TestNavigatorState.kt
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavBackStackEntryLifecycleTest.kt
M navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
jb...@google.com <jb...@google.com> #6
This has been fixed internally and will be available in the next Navigation release.
yu...@gmail.com <yu...@gmail.com> #7
That's great! Is there Snapshot build number I can try before the release to test/use it?
yu...@gmail.com <yu...@gmail.com> #8
Looks like
yu...@gmail.com <yu...@gmail.com> #9
I tried build #7796270 and looks like the bug is gone. Thanks!
Description
Component used: Navigation Version used: Snapshot #7634339 or 2.4.0-alpha07 Devices/Android versions reproduced on: Pixel 4a
This issue is related to another fixed issue: https://issuetracker.google.com/issues/194925622
2.4.0-alpha05 introduced a bug where tab reselection causes empty screens, unless the current screen is the
startDestination
of the root graph.The issue was fixed in Snapshot #7634339 , but it introduced another bug:
Flows collected in compose screens via
rememberFlowWithLifecycle(flow).collectAsState(initial)
complete early on tab reselection, like in the original issue. AboutrememberFlowWithLifecycle
Attaching the minimal sample that shows the problem and a video.
In sample view model, there is a simple flow that emits text in some interval.
In 2.4.0-alpha04 - Collecting flows directly via collectAsState or via rememberFlowWithLifecycle works as expected (interval Flow doesn't complete until the user leaves the screen)
In 2.4.0-alpha05-06 - Screen becomes empty on tab reselection
In Snapshot #7634339 / 2.4.0-alpha07:
rememberFlowWithLifecycle