From 7043ecc7c7b6c066ab6981676cc5bc20fbbf6d4a Mon Sep 17 00:00:00 2001 From: "Andrei.Salavei" Date: Fri, 1 Mar 2024 10:31:05 +0100 Subject: [PATCH 1/2] Fix scroll interruption by Pager component when the scroll happens in perpendicular direction --- .../kotlin/androidx/compose/foundation/pager/Pager.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt index c0bad454437d0..f0710db7b41ae 100644 --- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt +++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt @@ -895,7 +895,10 @@ private class DefaultPagerNestedScrollConnection( available: Offset, source: NestedScrollSource ): Offset { - if (source == NestedScrollSource.Fling && available != Offset.Zero) { + if (source == NestedScrollSource.Fling && + (orientation == Orientation.Horizontal && available.x != 0f) || + (orientation == Orientation.Vertical && available.y != 0f) + ) { throw CancellationException("End of scrollable area reached") } return Offset.Zero From f110ec1a0162202e31f5fe5b65a4d2cfbfb1b522 Mon Sep 17 00:00:00 2001 From: "Andrei.Salavei" Date: Fri, 1 Mar 2024 11:14:52 +0100 Subject: [PATCH 2/2] Refactor using proposed change --- .../kotlin/androidx/compose/foundation/pager/Pager.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt index f0710db7b41ae..05df8a804c9a1 100644 --- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt +++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt @@ -895,10 +895,7 @@ private class DefaultPagerNestedScrollConnection( available: Offset, source: NestedScrollSource ): Offset { - if (source == NestedScrollSource.Fling && - (orientation == Orientation.Horizontal && available.x != 0f) || - (orientation == Orientation.Vertical && available.y != 0f) - ) { + if (source == NestedScrollSource.Fling && available.toFloat() != 0f) { throw CancellationException("End of scrollable area reached") } return Offset.Zero @@ -907,6 +904,9 @@ private class DefaultPagerNestedScrollConnection( override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity { return available.consumeOnOrientation(orientation) } + + private fun Offset.toFloat(): Float = + if (orientation == Orientation.Horizontal) this.x else this.y } @OptIn(ExperimentalFoundationApi::class)