Permalink
Browse files

Workaround a wrong fling direction for inverted ScrollViews on Androi…

…d P (#21117)

Summary:
This is a safe workaround to an issue in Android P: https://issuetracker.google.com/issues/112385925

It is based on a fact that even though `fling` receive a wrong sign in `velocityY`, `mOnScrollDispatchHelper.getYFlingVelocity()` still returns a fling direction.

Fixes #19434
Pull Request resolved: #21117

Differential Revision: D13082740

Pulled By: hramos

fbshipit-source-id: 1b28586d2c7bdcae4a111d3cead4a0455cebb99a
  • Loading branch information...
mandrigin authored and facebook-github-bot committed Nov 15, 2018
1 parent 984eef8 commit b971c5beb8c7f90543ea037194790142f4f57c80
Showing with 14 additions and 4 deletions.
  1. +14 −4 ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java
@@ -309,8 +309,18 @@ 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.
final int correctedVelocityY = (int)(Math.abs(velocityY) * Math.signum(mOnScrollDispatchHelper.getYFlingVelocity()));


if (mPagingEnabled) {
flingAndSnap(velocityY);
flingAndSnap(correctedVelocityY);
} else if (mScroller != null) {
// FB SCROLLVIEW CHANGE

@@ -326,7 +336,7 @@ public void fling(int velocityY) {
getScrollX(), // startX
getScrollY(), // startY
0, // velocityX
velocityY, // velocityY
correctedVelocityY, // velocityY
0, // minX
0, // maxX
0, // minY
@@ -339,9 +349,9 @@ public void fling(int velocityY) {

// END FB SCROLLVIEW CHANGE
} else {
super.fling(velocityY);
super.fling(correctedVelocityY);
}
handlePostTouchScrolling(0, velocityY);
handlePostTouchScrolling(0, correctedVelocityY);
}

private void enableFpsListener() {

0 comments on commit b971c5b

Please sign in to comment.