Fix find-by slide animations.

This commit is contained in:
Alex Hart 2024-03-04 13:06:01 -04:00
parent fc9d94701c
commit 4035932340
2 changed files with 47 additions and 6 deletions

View file

@ -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) {

View file

@ -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 <T> navHostDefaultAnimationSpec(): FiniteAnimationSpec<T> {
return tween<T>(
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
)
}
}