From 7c43cbb6a066b4d8ed282a5c6d64fea92ddd889c Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Mon, 17 Sep 2018 11:03:46 -0400 Subject: [PATCH] workaround to wrong fling direction for android P: https://github.com/facebook/react-native/pull/21117 --- .../facebook/react/views/scroll/ReactScrollView.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java index 9df87e57e7404f..78414d97bdf053 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java @@ -292,6 +292,16 @@ public void getClippingRect(Rect outClippingRect) { @Override public void fling(int velocityY) { + // Workaround. + // On Android P if a ScrollView is inverted, we will get a wrong sign for + // velocityY (see https://issuetracker.google.com/issues/112385925). + // At the same time, mOnScrollDispatchHelper tracks the correct velocity direction. + // + // Hence, we can use the absolute value from whatever the OS gives + // us and use the sign of what mOnScrollDispatchHelper has tracked. + velocityY = (int)(Math.abs(velocityY) * Math.signum(mOnScrollDispatchHelper.getYFlingVelocity())); + + if (mPagingEnabled) { smoothScrollAndSnap(velocityY); } else if (mScroller != null) {