Fixed
Status Update
Comments
ap...@google.com <ap...@google.com> #2
Can you attach a sample project that reproduces your issue?
jb...@google.com <jb...@google.com> #3
I'm experiencing this issue in a commercial non-open source project so I'd have to provide extracted code fragments. The menu file for instance looks similar to this:
<menu>
<item
android:id="@+id/destination_one" />
<item
android:id="@+id/destination_two" />
<item
android:id="@+id/destination_three" />
<item
android:id="@+id/destination_four" />
</menu>
The menu item ids match the top level destination ids as for instance destination_one as required by the NavigationUI library.
The xml layout file of the main activity (there is only one activity) looks pretty much like this:
<androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.constraintlayout.widget.ConstraintLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/navigation_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/main_navigation" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/navigation_host_fragment"
app:menu="@menu/main_menu" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
The main_navigation
is the first navigation graph I posted in the original post. The behavior I described above only affects the first bottomNavigation item which corresponds to the top level navGraph's startDestination.
Description
With the currently implementation of
visibleTransitionsInProgress
in possible that there is a scenario where you can have duplicate entries in the list and cause the wrong back stack entry to be composed.This is because we first add all of the
STARTED
entries to the lists and then we add aLifecycleObserver
than then re-adds entries when they go throughON_START
.While we could change the list to a
MutableSet
to avoid this, we would then lose the snapshot functionality ofmutableStateListOf()
and we want to still recompose in response to adding and removing entries from the list. So we should just treat the list like it is a set manually instead.