Status Update
Comments
va...@google.com <va...@google.com>
st...@google.com <st...@google.com>
ap...@google.com <ap...@google.com> #2
Branch: androidx-main
commit 6ebe664e0db444d2602f67a75a4deada37d0a72f
Author: stevebower <stevebower@google.com>
Date: Wed Oct 13 15:26:27 2021
Update transition handling in SwipeDismissableNavHost.
Transitions should reach Lifecycle.State.RESUMED
when animations are complete.
Test: androidx.wear.compose.navigation.
Bug: 202863359
Relnote: "Update transition handling in
SwipeDismissableNavHost"
Change-Id: I1cbe09cd902f785dcb68f11f098b340e4da1e55a
M wear/compose/compose-navigation/build.gradle
M wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
M wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
M wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/WearNavigator.kt
ap...@google.com <ap...@google.com> #3
Branch: androidx-main
commit d65ce67f974132fad4f26a3f72de6a3b3be2ec0d
Author: stevebower <stevebower@google.com>
Date: Fri Oct 15 09:48:16 2021
Wrap transition handling in SideEffect.
State outside this composable should be
updated in one of the Effect APIs
(as per late comments in aosp/1857639).
Test: androidx.wear.compose.navigation.
Bug: 202863359
Relnote: "Update transition handling in
SwipeDismissableNavHost in a SideEffect"
Change-Id: I04994074e7d024dcf857c156c8c265b57e3769f8
M wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
st...@google.com <st...@google.com>
ys...@google.com <ys...@google.com> #4
Heads up - I ended up using repeatOnLifecycle(state = Lifecycle.State.STARTED)
in some code because repeatOnLifecycle(state = Lifecycle.State.RESUMED)
wasn't firing, and Alex mentioned this one.
Will provide a repro offline.
ys...@google.com <ys...@google.com> #5
Shared the repro offline. Steve, do you want me to open a diff bug?
st...@google.com <st...@google.com> #7
When swiping to dismiss, we trigger an animation and call popWithTransition so that the lifecycle does reached Resumed until the animation has completed (when onTransitionComplete gets called) - see WearNavigator::popBackStack.
The problem is that, if we call navController.popBackStack directly, that is also calling WearNavigator.popBackStack, which in turn calls popWithTransition - but there's no corresponding animation, so onTransitionComplete is not called and the lifecycle never reaches Resumed. Conversely, we should not call pop (without transition) for the case where animation is running, because the lifecycle would become Resumed too early.
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit 4c67987dbc870d8e35d811af15ae3edb36f1c836
Author: stevebower <stevebower@google.com>
Date: Mon Mar 28 14:54:44 2022
Destinations do not reach Lifecycle RESUMED after popping the navigation back stack
Test: androidx.wear.compose.navigation
Bug: 202863359
Change-Id: Iff21b4603fd126120241661e066dfaf294d9c25c
M wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
M wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
Description
Component used: androidx.wear.compose:compose-navigation
Version used: 1.0.0-alpha07
When using
SwipeDismissableNavHost
to navigate, destinations are never reaching theRESUMED
lifecycle state, and are always being capped atSTARTED
.It looks like navigation is occurring with
pushWithTransition
andpopWithTransition
, but there is no corresponding call tomarkTransitionCompleted
to allow the state to reachRESUMED
.Can be reproduced withhttps://github.com/android/wear-os-samples/tree/main/ComposeAdvanced