Encode scroll motion events in the Android touch processor (flutter/engine#8149)

This commit is contained in:
Jason Simmons
2019-03-13 11:30:42 -07:00
committed by GitHub
parent b35721efd5
commit c204de1fde

View File

@@ -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;
}