From cd4bebb6c6741ce5fef56815c2af73af624a29a3 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Fri, 21 May 2021 11:30:34 -0700 Subject: [PATCH] Make sure that touch events have a SurfaceId only in Fabric Summary: Could fix some infrequent crashes in non-Fabric. Changelog: [Internal] Reviewed By: ShikaSD Differential Revision: D28605773 fbshipit-source-id: 57555e013657e61cfb02b25d9fd14c9c15774e0e --- .../react/uimanager/JSTouchDispatcher.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java index db0224d0871..b50f3dafb48 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java @@ -12,6 +12,7 @@ import android.view.ViewGroup; import com.facebook.common.logging.FLog; import com.facebook.infer.annotation.Assertions; import com.facebook.react.common.ReactConstants; +import com.facebook.react.uimanager.common.UIManagerType; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.uimanager.events.TouchEvent; import com.facebook.react.uimanager.events.TouchEventCoalescingKeyHelper; @@ -50,14 +51,22 @@ public class JSTouchDispatcher { mTargetTag = -1; } + /** + * See Event.java. By contract, this surfaceId should be a valid SurfaceId in Fabric, and should + * ALWAYS return -1 in non-Fabric. + * + * @return + */ private int getSurfaceId() { - if (mRootViewGroup instanceof ReactRoot) { + if (mRootViewGroup != null + && mRootViewGroup instanceof ReactRoot + && ((ReactRoot) mRootViewGroup).getUIManagerType() == UIManagerType.FABRIC) { + if (mRootViewGroup.getContext() instanceof ThemedReactContext) { + ThemedReactContext context = (ThemedReactContext) mRootViewGroup.getContext(); + return context.getSurfaceId(); + } return ((ReactRoot) mRootViewGroup).getRootViewTag(); } - if (mRootViewGroup != null && mRootViewGroup.getContext() instanceof ThemedReactContext) { - ThemedReactContext context = (ThemedReactContext) mRootViewGroup.getContext(); - return context.getSurfaceId(); - } return -1; }