From 66f4e7fee6b900cc7008cb5ed62f7b30fe425e64 Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Tue, 12 Oct 2021 22:54:38 +0700 Subject: [PATCH] Reverse edge effects when dragging in opposite direction --- .../components/NestedScrollStretch.kt | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt index bf88598f65..4458c9d4d8 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt @@ -81,6 +81,26 @@ private class NestedScrollStretchConnection(context: Context, invalidate: Runnab val topEdgeEffect = StretchEdgeEffect(context, invalidate, invalidate) val bottomEdgeEffect = StretchEdgeEffect(context, invalidate, invalidate) + override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { + val availableY = available.y + when { + source != NestedScrollSource.Drag || height == 0 -> return Offset.Zero + availableY != 0f -> { + if (availableY < 0f) { + val consumed = topEdgeEffect.onPullDistance(availableY / height, 0f) + if (topEdgeEffect.distance == 0f) topEdgeEffect.onRelease() + return Offset(0f, consumed * height) + } + if (availableY > 0f) { + val consumed = bottomEdgeEffect.onPullDistance(-availableY / height, 0f) + if (bottomEdgeEffect.distance == 0f) bottomEdgeEffect.onRelease() + return Offset(0f, -consumed * height) + } + } + } + return Offset.Zero + } + override fun onPostScroll( consumed: Offset, available: Offset, @@ -89,7 +109,7 @@ private class NestedScrollStretchConnection(context: Context, invalidate: Runnab val availableY = available.y when { source != NestedScrollSource.Drag || height == 0 -> return Offset.Zero - availableY != 0F -> { + availableY != 0f -> { if (availableY > 0f) { topEdgeEffect.onPull(availableY / height) } else {