diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 66df9a6dd50..b365dc257ee 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -64,6 +64,9 @@ import io.element.android.features.userprofile.api.UserProfileEntryPoint import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode +import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler +import io.element.android.libraries.architecture.animation.rememberFaderTransitionHandler +import io.element.android.libraries.architecture.appyx.rememberDelegateTransitionHandler import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.waitForNavTargetAttached import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher @@ -540,7 +543,16 @@ class LoggedInFlowNode( override fun View(modifier: Modifier) { Box(modifier = modifier) { val ftueState by ftueService.state.collectAsState() - BackstackView() + val backstackSlider = rememberDefaultTransitionHandler() + val backstackFader = rememberFaderTransitionHandler() + val transitionHandler = rememberDelegateTransitionHandler { navTarget -> + when (navTarget) { + NavTarget.Home, + NavTarget.Ftue -> backstackFader + else -> backstackSlider + } + } + BackstackView(transitionHandler = transitionHandler) if (ftueState is FtueState.Complete) { PermanentChild(permanentNavModel = permanentNavModel, navTarget = NavTarget.LoggedInPermanent) } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index 93df005c762..2fa1a16b97b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -9,8 +9,6 @@ package io.element.android.appnav import android.content.Intent import android.os.Parcelable -import androidx.compose.animation.core.Spring -import androidx.compose.animation.core.spring import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.lifecycle.lifecycleScope @@ -21,8 +19,6 @@ import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackFader -import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackSlider import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedInject @@ -42,6 +38,8 @@ import io.element.android.features.signedout.api.SignedOutEntryPoint import io.element.android.libraries.accountselect.api.AccountSelectEntryPoint import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode +import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler +import io.element.android.libraries.architecture.animation.rememberFaderTransitionHandler import io.element.android.libraries.architecture.appyx.rememberDelegateTransitionHandler import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.waitForChildAttached @@ -171,15 +169,12 @@ import timber.log.Timber modifier = modifier, onOpenBugReport = this::onOpenBugReport, ) { - val backstackSlider = rememberBackstackSlider( - transitionSpec = { spring(stiffness = Spring.StiffnessMediumLow) }, - ) - val backstackFader = rememberBackstackFader( - transitionSpec = { spring(stiffness = Spring.StiffnessMediumLow) }, - ) + val backstackSlider = rememberDefaultTransitionHandler() + val backstackFader = rememberFaderTransitionHandler() val transitionHandler = rememberDelegateTransitionHandler { navTarget -> when (navTarget) { is NavTarget.SplashScreen, + is NavTarget.NotLoggedInFlow, is NavTarget.LoggedInFlow -> backstackFader else -> backstackSlider } diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/BaseFlowNode.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/BaseFlowNode.kt index b8d678e79c1..c383d83f89e 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/BaseFlowNode.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/BaseFlowNode.kt @@ -7,8 +7,6 @@ package io.element.android.libraries.architecture -import androidx.compose.animation.core.Spring -import androidx.compose.animation.core.spring import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.runtime.Composable @@ -25,7 +23,7 @@ import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackFader -import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackSlider +import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler import io.element.android.libraries.architecture.overlay.Overlay /** @@ -61,9 +59,7 @@ abstract class BaseFlowNode( @Composable inline fun BaseFlowNode.BackstackView( modifier: Modifier = Modifier, - transitionHandler: TransitionHandler = rememberBackstackSlider( - transitionSpec = { spring(stiffness = Spring.StiffnessMediumLow) }, - ), + transitionHandler: TransitionHandler = rememberDefaultTransitionHandler(), ) { Children( modifier = modifier, diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt index 80a8bcbcf36..06de119c985 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt @@ -12,6 +12,7 @@ import androidx.compose.animation.core.spring import androidx.compose.runtime.Composable import com.bumble.appyx.core.navigation.transition.ModifierTransitionHandler import com.bumble.appyx.navmodel.backstack.BackStack +import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackFader import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackSlider @Composable @@ -20,3 +21,10 @@ fun rememberDefaultTransitionHandler(): ModifierTransitionHandler rememberFaderTransitionHandler(): ModifierTransitionHandler { + return rememberBackstackFader( + transitionSpec = { spring(stiffness = Spring.StiffnessMediumLow) }, + ) +}