diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d44540ec..2b74e0df 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,8 +4,10 @@ - + @@ -19,6 +21,7 @@ = emptyList(), - deepLinks: List = emptyList(), - content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit -) = composable( + route: String, + arguments: List = emptyList(), + deepLinks: List = emptyList(), + usePredictiveBack: Boolean = Build.VERSION.SDK_INT >= 34, + content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit, +) { + if (usePredictiveBack) { + animatedComposablePredictiveBack(route, arguments, deepLinks, content) + } else { + animatedComposableLegacy(route, arguments, deepLinks, content) + } +} + +fun NavGraphBuilder.animatedComposablePredictiveBack( + route: String, + arguments: List = emptyList(), + deepLinks: List = emptyList(), + content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit, +) = + composable( route = route, arguments = arguments, deepLinks = deepLinks, - enterTransition = { - materialSharedAxisXIn(initialOffsetX = { (it * INITIAL_OFFSET_FACTOR).toInt() }) - }, + enterTransition = { materialSharedAxisXIn(initialOffsetX = { (it * INITIAL_OFFSET_FACTOR).toInt() }) }, exitTransition = { materialSharedAxisXOut(targetOffsetX = { -(it * INITIAL_OFFSET_FACTOR).toInt() }) }, popEnterTransition = { - materialSharedAxisXIn(initialOffsetX = { -(it * INITIAL_OFFSET_FACTOR).toInt() }) + scaleIn( + animationSpec = tween(durationMillis = 350, easing = EmphasizedDecelerate), + initialScale = INITIAL_SCALE_FACTOR, + ) + materialSharedAxisXIn(initialOffsetX = { -(it * INITIAL_OFFSET_FACTOR).toInt() }) }, popExitTransition = { - materialSharedAxisXOut(targetOffsetX = { (it * INITIAL_OFFSET_FACTOR).toInt() }) + materialSharedAxisXOut(targetOffsetX = { (it * INITIAL_OFFSET_FACTOR).toInt() }) + + scaleOut( + targetScale = INITIAL_SCALE_FACTOR, + animationSpec = tween(durationMillis = 350, easing = EmphasizedAccelerate), + ) }, - content = content + content = content, + ) + +fun NavGraphBuilder.animatedComposableLegacy( + route: String, + arguments: List = emptyList(), + deepLinks: List = emptyList(), + content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit +) = composable( + route = route, + arguments = arguments, + deepLinks = deepLinks, + enterTransition = { + materialSharedAxisXIn(initialOffsetX = { (it * INITIAL_OFFSET_FACTOR).toInt() }) + }, + exitTransition = { + materialSharedAxisXOut(targetOffsetX = { -(it * INITIAL_OFFSET_FACTOR).toInt() }) + }, + popEnterTransition = { + materialSharedAxisXIn(initialOffsetX = { -(it * INITIAL_OFFSET_FACTOR).toInt() }) + }, + popExitTransition = { + materialSharedAxisXOut(targetOffsetX = { (it * INITIAL_OFFSET_FACTOR).toInt() }) + }, + content = content ) diff --git a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt index fae4b522..63163fcf 100644 --- a/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt +++ b/app/src/main/java/me/ash/reader/ui/page/home/feeds/FeedsPage.kt @@ -204,9 +204,6 @@ fun FeedsPage( } } - BackHandler(true) { - context.findActivity()?.moveTaskToBack(false) - } RYScaffold( topBarTonalElevation = topBarTonalElevation.value.dp,