diff --git a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimationState.kt b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimationState.kt index 39b31d3cd15..382a9f7edd1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimationState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimationState.kt @@ -119,4 +119,4 @@ class AppScaffoldAnimationStateFactory( AppScaffoldNavigator.NavigationState.RELEASE -> defaultDetailReleaseAnimationState(latestDetailSeekState) } } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimators.kt b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimators.kt index a614bfd8a97..e29d7f05e4a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimators.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldAnimators.kt @@ -16,7 +16,6 @@ import androidx.compose.material3.adaptive.layout.PaneAdaptedValue import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldPaneScope import androidx.compose.runtime.Composable import androidx.compose.runtime.State -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.unit.Dp @@ -220,24 +219,32 @@ fun ThreePaneScaffoldPaneScope.defaultDetailSeekAnimationState(): AppScaffoldAni @OptIn(ExperimentalMaterial3AdaptiveApi::class) @Composable fun ThreePaneScaffoldPaneScope.defaultDetailReleaseAnimationState(from: AppScaffoldAnimationState): AppScaffoldAnimationState { - val scale = remember { from.contentScale } - val offset = remember { from.contentOffset } - val corners = remember { from.contentCorners } + val initialScale = remember { from.contentScale } + val initialOffset = remember { from.contentOffset } - val scaleState = remember { mutableStateOf(scale) } - val offsetState = remember { mutableStateOf(offset) } - val cornersState = remember { mutableStateOf(corners) } + val scale = animateFloat( + targetWhenHiding = { initialScale }, + targetWhenShowing = { 1f } + ) + + val offset = animateDp( + targetWhenHiding = { initialOffset }, + targetWhenShowing = { 0.dp } + ) + + val cornersState = animateDp( + targetWhenHiding = { 0.dp }, + targetWhenShowing = { 0.dp } + ) val alpha = animateFloat { 1f } - return remember { - AppScaffoldAnimationState( - scale = scaleState, - scaleMinimum = from.scaleMinimum, - offset = offsetState, - corners = cornersState, - cornersMaximum = from.cornersMaximum, - alpha = alpha - ) - } -} + return AppScaffoldAnimationState( + scale = scale, + scaleMinimum = from.scaleMinimum, + offset = offset, + corners = cornersState, + cornersMaximum = 0.dp, + alpha = alpha + ) +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldNavigator.kt b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldNavigator.kt index c057d54094c..8c03a7ae792 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldNavigator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/window/AppScaffoldNavigator.kt @@ -35,17 +35,19 @@ open class AppScaffoldNavigator @RememberInComposition constructor(private va var state: NavigationState by mutableStateOf(NavigationState.ENTER) private set + private var wasSeekInProgress = false + override suspend fun navigateTo(pane: ThreePaneScaffoldRole, contentKey: T?) { + wasSeekInProgress = false state = NavigationState.ENTER return delegate.navigateTo(pane, contentKey) } override suspend fun navigateBack(backNavigationBehavior: BackNavigationBehavior): Boolean { - if (state == NavigationState.SEEK) { + if (state == NavigationState.SEEK || wasSeekInProgress) { + wasSeekInProgress = false state = NavigationState.RELEASE - } - - if (state == NavigationState.ENTER) { + } else if (state == NavigationState.ENTER) { state = NavigationState.EXIT } @@ -54,7 +56,10 @@ open class AppScaffoldNavigator @RememberInComposition constructor(private va override suspend fun seekBack(backNavigationBehavior: BackNavigationBehavior, fraction: Float) { if (fraction > 0f && state != NavigationState.SEEK) { + wasSeekInProgress = true state = NavigationState.SEEK + } else if (fraction < 0.001f && state == NavigationState.SEEK) { + state = NavigationState.ENTER } return delegate.seekBack(backNavigationBehavior, fraction) @@ -133,4 +138,4 @@ fun rememberThreePaneScaffoldNavigatorDelegate( defaultPanePreferredWidth = defaultPanePreferredWidth ) ) -} +} \ No newline at end of file