diff --git a/app/src/main/kotlin/androidx/navigation/compose/NavHost.kt b/app/src/main/kotlin/androidx/navigation/compose/NavHost.kt index 80f68c99c..57802d04d 100644 --- a/app/src/main/kotlin/androidx/navigation/compose/NavHost.kt +++ b/app/src/main/kotlin/androidx/navigation/compose/NavHost.kt @@ -29,6 +29,7 @@ import androidx.compose.animation.core.SeekableTransitionState import androidx.compose.animation.core.rememberTransition import androidx.compose.animation.core.snap import androidx.compose.animation.core.tween +import androidx.compose.animation.core.updateTransition import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.togetherWith @@ -55,6 +56,8 @@ import androidx.navigation.NavHostController import androidx.navigation.Navigator import androidx.navigation.createGraph import androidx.navigation.get +import com.hippo.ehviewer.Settings +import com.hippo.ehviewer.collectAsState import kotlinx.coroutines.CancellationException import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.withContext @@ -246,10 +249,15 @@ public fun NavHost( val zIndices = remember { mutableMapOf() } if (backStackEntry != null) { + val enablePredictiveBack by Settings.predictiveNavAnim.collectAsState() val transitionState = remember { SeekableTransitionState(backStackEntry) } - val transition = rememberTransition(transitionState, label = "entry") - LaunchedEffect(backStackEntry) { - transitionState.animateTo(backStackEntry) + val transition = if (enablePredictiveBack) { + LaunchedEffect(backStackEntry) { + transitionState.animateTo(backStackEntry) + } + rememberTransition(transitionState, label = "entry") + } else { + updateTransition(backStackEntry, label = "entry") } var inPredictiveBack by remember { mutableStateOf(false) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt index 50b99a33e..81e9bae2d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt @@ -109,6 +109,7 @@ object Settings : DataStorePreferences(null) { val listThumbSize = intPref("list_tile_size", 40) val languageFilter = intPref("language_filter", -1) val meteredNetworkWarning = boolPref("cellular_network_warning", false) + val predictiveNavAnim = boolPref("predictive_nav_anim_2", false) val blackDarkTheme = boolPref("black_dark_theme", false) var downloadScheme by stringOrNullPref("image_scheme", null) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt index 8f80f788e..d0840dc09 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt @@ -179,6 +179,10 @@ fun AdvancedScreen(navigator: DestinationsNavigator) { title = stringResource(id = R.string.preload_thumb_aggressively), value = Settings::preloadThumbAggressively, ) + SwitchPreference( + title = stringResource(id = R.string.predictive_nav_anim), + value = Settings.predictiveNavAnim::value, + ) IntSliderPreference( maxValue = 5, minValue = 1, diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 58ca6ff48..f29ae194f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -508,6 +508,7 @@ 详情模式下缩略图大小 账户 激进地预载缩略图 + [实验性] 预见式返回导航动画 自动检查更新 从不 每天 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 574bdc3a6..305323eff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -571,6 +571,7 @@ Thumb size in detail mode Account Preload thumbs aggressively + [Experimental] Predictive back navigation animations User Agent Automatically check for updates Never