From b1b388f1c2356a865240e706acdb37af982991ad Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 13 Mar 2019 11:30:42 -0700 Subject: [PATCH] Encode scroll motion events in the Android touch processor (#8149) --- .../engine/android/AndroidTouchProcessor.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/android/AndroidTouchProcessor.java b/shell/platform/android/io/flutter/embedding/engine/android/AndroidTouchProcessor.java index f26cc3e2b..8598b8a8d 100644 --- a/shell/platform/android/io/flutter/embedding/engine/android/AndroidTouchProcessor.java +++ b/shell/platform/android/io/flutter/embedding/engine/android/AndroidTouchProcessor.java @@ -150,7 +150,9 @@ public class AndroidTouchProcessor { // Mouse hover support is not implemented for API < 18. boolean isPointerEvent = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && event.isFromSource(InputDevice.SOURCE_CLASS_POINTER); - if (!isPointerEvent || event.getActionMasked() != MotionEvent.ACTION_HOVER_MOVE) { + boolean isMovementEvent = (event.getActionMasked() == MotionEvent.ACTION_HOVER_MOVE + || event.getActionMasked() == MotionEvent.ACTION_SCROLL); + if (!isPointerEvent || !isMovementEvent) { return false; } @@ -181,7 +183,9 @@ public class AndroidTouchProcessor { int pointerKind = getPointerDeviceTypeForToolType(event.getToolType(pointerIndex)); - int signalKind = PointerSignalKind.NONE; + int signalKind = event.getActionMasked() == MotionEvent.ACTION_SCROLL + ? PointerSignalKind.SCROLL + : PointerSignalKind.NONE; long timeStamp = event.getEventTime() * 1000; // Convert from milliseconds to microseconds. @@ -242,8 +246,13 @@ public class AndroidTouchProcessor { packet.putLong(pointerData); // platformData - packet.putDouble(0.0); // scroll_delta_x - packet.putDouble(0.0); // scroll_delta_y + if (signalKind == PointerSignalKind.SCROLL) { + packet.putDouble(-event.getAxisValue(MotionEvent.AXIS_HSCROLL)); // scroll_delta_x + packet.putDouble(-event.getAxisValue(MotionEvent.AXIS_VSCROLL)); // scroll_delta_y + } else { + packet.putDouble(0.0); // scroll_delta_x + packet.putDouble(0.0); // scroll_delta_x + } } @PointerChange @@ -269,6 +278,9 @@ public class AndroidTouchProcessor { if (maskedAction == MotionEvent.ACTION_CANCEL) { return PointerChange.CANCEL; } + if (maskedAction == MotionEvent.ACTION_SCROLL) { + return PointerChange.HOVER; + } return -1; } -- GitLab