Status Update
Comments
jb...@google.com <jb...@google.com> #2
Can you attach a sample project that reproduces your issue?
ti...@google.com <ti...@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.
il...@gmail.com <il...@gmail.com> #4
Yeah, what we're looking for is a full project (i.e., take a brand new project in Android Studio, put your few bits of code in, and make sure your problem reproduces) as there are a lot of little pieces that can make a difference here.
ti...@google.com <ti...@google.com> #5
Of course the logic of my project is more sophisticated but this reproduces the issue quite well. If you click the first BottomNavigation item N times you need N+1 system back navigation triggers to leave the app.
ti...@google.com <ti...@google.com> #6
So first, we plan to get rid of these APIs in the future. The only behavior for NavigationUI will be to always save and restore the state of the back stack. Luckily, NavigationUI is purposely built only on publicly available APIs so you could always copy our code and make your custom adjustments for whatever your desired behavior is.
The source of the bug is
We need to add a fix to ensure we take into account the proper destination on our side, but as I mentioned those APIs will go away in the future. So if you wanted to proactively create your own API, you could make your API navigate directly to the start destination instead of the graph. That would allow you to not wait on our release and ensure you always have your desired behavior going forward.
al...@gmail.com <al...@gmail.com> #7
Thanks a lot for your help! I basically removed the first embedded graph by moving the code directly into the topmost navGraph and as you said, navigate directly to the start destination. As far as I can tell, it seems to work now.
ho...@gmail.com <ho...@gmail.com> #8
Branch: androidx-main
commit 5624b7cefcfe5e0abb01f1063b040e5f2f135b75
Author: Clara Fok <clarafok@google.com>
Date: Wed Nov 30 16:47:38 2022
Clean up launchSingleTop logic
Basic refactoring in preparation for fix to
Test: ./gradlew navigation:navigation-runtime:cC
Bug: 253256629
Change-Id: Ib65764c345451d8be4613f6e3d278cc1a170091e
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
es...@gmail.com <es...@gmail.com> #9
Branch: androidx-main
commit f433d5458950a632900f8a2685ce6eab27272f8c
Author: Clara Fok <clarafok@google.com>
Date: Thu Dec 01 15:52:28 2022
Fix BottomNavView launchSingleTop with NavGraph
NavController previously did not apply launchSingleTop when user repeatedly navigates to the starting destination of a Menu when this starting destination is a NavGraph. This results in the destination being added mulitple times to backstack.
Now NavController checks if the destination is a NavGraph and if so, adds all destinations from the node to its final startDestination (i.e. nested nav graphs) to singleTop.
NavController backstack and Navigator backstacks entries are replaced accordingly upon singleTop navigations.
Test: ./gradlew navigation:navigation-runtime:cC
Bug: 253256629
Relnote: singleTop now works with NavGraph such that if the top destination of the backstack is a NavGraph's startDestination, all destinations starting from original destination to its startDestination will only be added to the top of the backstack once.
Change-Id: Id4bea16aff3dd776826fc6d746475e293eb64b0e
M navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
pr...@gmail.com <pr...@gmail.com> #10
This has been fixed internally and will be available in Navigation 2.6.0-alpha05
al...@gmail.com <al...@gmail.com> #11
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-common:2.6.0-alpha05
androidx.navigation:navigation-runtime:2.6.0-alpha05
cl...@gmail.com <cl...@gmail.com> #12
I'm still experiencing this issue in my app as of version 2.8.4. Seemingly at random I'll see a scale animation from the top left instead of my custom one.
Feel free to reference it here:
ap...@google.com <ap...@google.com> #13
Project: platform/frameworks/support
Branch: androidx-main
Author: Jeremy Woods <
Link:
Stop incorrect scaling animation when using NavHost
Expand for full commit details
Stop incorrect scaling animation when using NavHost
There is a case where if you can trigger a navigate call right before the
LaunchEffect that is responsible for managing the end of the
AnimatedContent's transition is called, you will get an incorrect scale
animation.
The reason for this is that the call to navigate adds the proper entries
to the visibleEntries list and then the LaunchedEffect immediately
remove it. Then when the AnimatedContent attempts to find this removed
entry it is not there and AnimatedContent thinks it is animated from
nothing and just scales from a blank screen.
Since this is an interrupt case the the AnimatedContent has not actually
finsihed with transition, we should not be hitting the `LaunchedEffect`
and marking the transition complete at all, but that needs to be
addressed by the Animation library so this change provides a workaround
in the mean time that just keeps from incorrectly marking the visible
entry's transition as complete.
RelNote: "Added a workaround to fix an issue that caused an unexpected
scale animation when using Navigation Compose."
Test: tested in sample app
Bug: 353294030
Change-Id: I26cb142affb046e94b34b9501e5405ddcf276fcf
Files:
- M
navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt
Hash: c270d4e53585ab6033d53a2eef1f5327da39e20d
Date: Thu Dec 05 23:09:52 2024
ap...@google.com <ap...@google.com> #14
Project: platform/frameworks/support
Branch: androidx-main
Author: Jeremy Woods <
Link:
Avoid race condition for transitions in NavHost
Expand for full commit details
Avoid race condition for transitions in NavHost
This is cleaning up the code added in aosp/3393408. The issue is caused
by a race condition where the previous animation has ended but the
current animation has yet to start because `animateTo` is still waiting
to acquire the `mutatorMutex`.
We need to verify that what `AnimatedContent` believes is the
`targetState` is the same thing that is on top of the back stack before
we mark the entries as complete.
RelNote: "Fix an issue that caused an unexpected scale animation when
using Navigation Compose."
Test: tested extensively in sample app
Bug: 353294030
Change-Id: I480f4d89ffc7e2dfa536a592a8fc7b6c759be1a4
Files:
- M
navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt
Hash: 4fbe698e1ff01037c6ed1a74538c0c1628ac1730
Date: Fri Dec 06 01:10:47 2024
jb...@google.com <jb...@google.com> #15
This has been fixed internally and will be available in the Navigation 2.8.5
release.
pr...@google.com <pr...@google.com> #16
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-compose:2.8.5
cl...@gmail.com <cl...@gmail.com> #17
Seems solid on my end
na...@google.com <na...@google.com> #18
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-compose:2.9.0-alpha05
Description
Component used: Navigation Compose
Version used: 2.8.0-beta05
Devices/Android versions reproduced on: Emulators, Pixel 8 Pro
Hello!
We occasionally encounter an issue where the NavHost randomly applies a default transition animation instead of the one specified for a particular composable/route. Please take a look at the sample project and screen recording I've attached. Even though composable<DefaultRoute> consistently defines slideInHorizontally/slideOutHorizontally transitions, you may sometimes observe a scale/fade animation instead. This bug is inconsistent and may require multiple attempts to reproduce. One observation is that this issue occurs more frequently when a new transition is requested just as the enter animation of a previous one is nearing completion.
Sample project:https://github.com/smelfungus/NavHostAnimationIssue
Screen recording:https://drive.google.com/file/d/1FPZavURTkuPmnAWJ49pFhIWvz3Qq-M7x/view?usp=sharing