Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit b1b388f

Browse files
Encode scroll motion events in the Android touch processor (#8149)
1 parent 2daebeb commit b1b388f

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

shell/platform/android/io/flutter/embedding/engine/android/AndroidTouchProcessor.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ public boolean onGenericMotionEvent(MotionEvent event) {
150150
// Mouse hover support is not implemented for API < 18.
151151
boolean isPointerEvent = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2
152152
&& event.isFromSource(InputDevice.SOURCE_CLASS_POINTER);
153-
if (!isPointerEvent || event.getActionMasked() != MotionEvent.ACTION_HOVER_MOVE) {
153+
boolean isMovementEvent = (event.getActionMasked() == MotionEvent.ACTION_HOVER_MOVE
154+
|| event.getActionMasked() == MotionEvent.ACTION_SCROLL);
155+
if (!isPointerEvent || !isMovementEvent) {
154156
return false;
155157
}
156158

@@ -181,7 +183,9 @@ private void addPointerForIndex(
181183

182184
int pointerKind = getPointerDeviceTypeForToolType(event.getToolType(pointerIndex));
183185

184-
int signalKind = PointerSignalKind.NONE;
186+
int signalKind = event.getActionMasked() == MotionEvent.ACTION_SCROLL
187+
? PointerSignalKind.SCROLL
188+
: PointerSignalKind.NONE;
185189

186190
long timeStamp = event.getEventTime() * 1000; // Convert from milliseconds to microseconds.
187191

@@ -242,8 +246,13 @@ private void addPointerForIndex(
242246

243247
packet.putLong(pointerData); // platformData
244248

245-
packet.putDouble(0.0); // scroll_delta_x
246-
packet.putDouble(0.0); // scroll_delta_y
249+
if (signalKind == PointerSignalKind.SCROLL) {
250+
packet.putDouble(-event.getAxisValue(MotionEvent.AXIS_HSCROLL)); // scroll_delta_x
251+
packet.putDouble(-event.getAxisValue(MotionEvent.AXIS_VSCROLL)); // scroll_delta_y
252+
} else {
253+
packet.putDouble(0.0); // scroll_delta_x
254+
packet.putDouble(0.0); // scroll_delta_x
255+
}
247256
}
248257

249258
@PointerChange
@@ -269,6 +278,9 @@ private int getPointerChangeForAction(int maskedAction) {
269278
if (maskedAction == MotionEvent.ACTION_CANCEL) {
270279
return PointerChange.CANCEL;
271280
}
281+
if (maskedAction == MotionEvent.ACTION_SCROLL) {
282+
return PointerChange.HOVER;
283+
}
272284
return -1;
273285
}
274286

0 commit comments

Comments
 (0)