From ba1a303ae2d7873135d415f36dee75ce8174a73a Mon Sep 17 00:00:00 2001 From: Tong Mu Date: Mon, 26 Aug 2019 11:49:55 -0700 Subject: [PATCH] Patch buttons for chromebook touchpad (#11420) Changes irregular events of touchpad scrolling on Chromebook to have buttons: 1. --- .../android/AndroidTouchProcessor.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java b/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java index 7870f9e9ab1..51dffdaffe9 100644 --- a/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java +++ b/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java @@ -76,6 +76,8 @@ public class AndroidTouchProcessor { @NonNull private final FlutterRenderer renderer; + private static final int _POINTER_BUTTON_PRIMARY = 1; + /** * Constructs an {@code AndroidTouchProcessor} that will send touch event data * to the Flutter execution context represented by the given {@link FlutterRenderer}. @@ -199,13 +201,22 @@ public class AndroidTouchProcessor { packet.putDouble(event.getX(pointerIndex)); // physical_x packet.putDouble(event.getY(pointerIndex)); // physical_y + long buttons; if (pointerKind == PointerDeviceKind.MOUSE) { - packet.putLong(event.getButtonState() & 0x1F); // buttons + buttons = event.getButtonState() & 0x1F; + // TODO(dkwingsmt): Remove this fix after implementing touchpad gestures + // https://github.com/flutter/flutter/issues/23604#issuecomment-524471152 + if (buttons == 0 && + event.getSource() == InputDevice.SOURCE_MOUSE && + (pointerChange == PointerChange.DOWN || pointerChange == PointerChange.MOVE)) { + buttons = _POINTER_BUTTON_PRIMARY; + } } else if (pointerKind == PointerDeviceKind.STYLUS) { - packet.putLong((event.getButtonState() >> 4) & 0xF); // buttons + buttons = (event.getButtonState() >> 4) & 0xF; } else { - packet.putLong(0); // buttons + buttons = 0; } + packet.putLong(buttons); // buttons packet.putLong(0); // obscured