From b6e36c6170bd6ae8506aa55663959fff368b23c3 Mon Sep 17 00:00:00 2001 From: Genki Kondo Date: Mon, 27 Mar 2023 12:31:37 -0700 Subject: [PATCH] Trigger pointer leave when active controller switched (#36662) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36662 For VR, JSPointerDispatcher skips calculating the delta of hit targets (which happens in onMove) on the frame in which the active controller is switched because the motion event is a DOWN event, not a MOVE event in that specific frame. This diff fixes the issue by just calling onMove in addition to onDown for DOWN motion events. Unfortunately we do not have separate pointer IDs for each controller. This won't change the behavior for non-hoverable pointers. For hoverable pointers, it will dispatch an extra pointer_enter if the hit path has changed between the last move event and the down event. Changelog: [Internal][Fixed] - Trigger pointer leave when active controller switched Reviewed By: lunaleaps, javache Differential Revision: D44377324 fbshipit-source-id: 9f668e64f486b9a12ab36563ec2b7cf93f208a54 --- .../com/facebook/react/uimanager/JSPointerDispatcher.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java index 8f4a992f85383a..0dd991f1aaf392 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java @@ -158,6 +158,10 @@ private void onDown( motionEvent, enterViewTargets, eventDispatcher); + } else { + // There are cases when the pointer may have moved in the same frame as the down event. + // Dispatch the move event before the down event. + onMove(activeTargetTag, eventState, motionEvent, eventDispatcher); } boolean listeningForDown =