From cec20c3b970071c04ae1bc5aff5f8915361de8c5 Mon Sep 17 00:00:00 2001 From: Luna Wei Date: Thu, 4 Aug 2022 12:46:18 -0700 Subject: [PATCH] PointerEvents: Use event.getSource() to distinguish Summary: Changelog: [Internal] - Instead of using toolType which is a property per pointer in the MotionEvent, let's use [getSource](https://developer.android.com/reference/android/view/MotionEvent#getSource()) which is the source for the entire event (all pointers). This aligns with what we've seen on Android when we have a mouse and touch input, there is only one active source input device. And removes the need for checking a flag we set here: D36958947 Reviewed By: NickGerleman Differential Revision: D37702090 fbshipit-source-id: ba2a4f0c28e1aff2b8b04314fe6f737b66ed0be3 --- .../uimanager/events/PointerEventHelper.java | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java index 4ea2fd1ec5c..d8134bd1e3f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEventHelper.java @@ -7,6 +7,7 @@ package com.facebook.react.uimanager.events; +import android.view.InputDevice; import android.view.MotionEvent; import android.view.View; import androidx.annotation.Nullable; @@ -22,8 +23,6 @@ public class PointerEventHelper { public static final String POINTER_TYPE_MOUSE = "mouse"; public static final String POINTER_TYPE_UNKNOWN = ""; - private static final int X_FLAG_SUPPORTS_HOVER = 0x01000000; - public static enum EVENT { CANCEL, CANCEL_CAPTURE, @@ -147,26 +146,7 @@ public class PointerEventHelper { } public static boolean supportsHover(MotionEvent motionEvent) { - // A flag has been set on the MotionEvent to indicate it supports hover - // See D36958947 on justifications for this. - // TODO(luwe): Leverage previous events to determine if MotionEvent - // is from an input device that supports hover - boolean supportsHoverFlag = (motionEvent.getFlags() & X_FLAG_SUPPORTS_HOVER) != 0; - if (supportsHoverFlag) { - return true; - } - - int toolType = motionEvent.getToolType(motionEvent.getActionIndex()); - String pointerType = getW3CPointerType(toolType); - - if (pointerType.equals(POINTER_TYPE_MOUSE)) { - return true; - } else if (pointerType.equals(POINTER_TYPE_PEN)) { - return true; // true? - } else if (pointerType.equals(POINTER_TYPE_TOUCH)) { - return false; - } - - return false; + int source = motionEvent.getSource(); + return source == InputDevice.SOURCE_MOUSE || source == InputDevice.SOURCE_CLASS_POINTER; } }