diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt index 36aa855b3b..cd97a9f779 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt @@ -12,8 +12,6 @@ import android.os.Bundle import androidx.activity.compose.setContent import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContract -import androidx.compose.animation.slideInHorizontally -import androidx.compose.animation.slideOutHorizontally import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement.Absolute.spacedBy import androidx.compose.foundation.layout.Box @@ -69,6 +67,8 @@ import androidx.navigation.compose.dialog import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import kotlinx.coroutines.launch +import org.signal.core.ui.Animations.navHostSlideInTransition +import org.signal.core.ui.Animations.navHostSlideOutTransition import org.signal.core.ui.Buttons import org.signal.core.ui.Dialogs import org.signal.core.ui.Dividers @@ -120,10 +120,10 @@ class FindByActivity : PassphraseRequiredActivity() { NavHost( navController = navController, startDestination = "find-by-content", - enterTransition = { slideInHorizontally(initialOffsetX = { it }) }, - exitTransition = { slideOutHorizontally(targetOffsetX = { -it }) }, - popEnterTransition = { slideInHorizontally(initialOffsetX = { -it }) }, - popExitTransition = { slideOutHorizontally(targetOffsetX = { it }) } + enterTransition = { navHostSlideInTransition { it } }, + exitTransition = { navHostSlideOutTransition { -it } }, + popEnterTransition = { navHostSlideInTransition { -it } }, + popExitTransition = { navHostSlideOutTransition { it } } ) { composable("find-by-content") { val title = remember(state.mode) { diff --git a/core-ui/src/main/java/org/signal/core/ui/Animations.kt b/core-ui/src/main/java/org/signal/core/ui/Animations.kt new file mode 100644 index 0000000000..4d7103b053 --- /dev/null +++ b/core-ui/src/main/java/org/signal/core/ui/Animations.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.ui + +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.core.FiniteAnimationSpec +import androidx.compose.animation.core.tween +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.runtime.Stable +import kotlin.time.Duration.Companion.milliseconds + +object Animations { + + private val NAV_HOST_DEFAULT_ANIMATION_DURATION = 200.milliseconds + + @Stable + fun navHostDefaultAnimationSpec(): FiniteAnimationSpec { + return tween( + durationMillis = NAV_HOST_DEFAULT_ANIMATION_DURATION.inWholeMilliseconds.toInt() + ) + } + + fun navHostSlideInTransition(initialOffsetX: (Int) -> Int): EnterTransition { + return slideInHorizontally( + animationSpec = navHostDefaultAnimationSpec(), + initialOffsetX = initialOffsetX + ) + } + + fun navHostSlideOutTransition(targetOffsetX: (Int) -> Int): ExitTransition { + return slideOutHorizontally( + animationSpec = navHostDefaultAnimationSpec(), + targetOffsetX = targetOffsetX + ) + } +}