From aa9c8abd1adbc3c804a99e0bd318827ca3c4c83e Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Thu, 28 Jan 2021 14:01:07 -0800 Subject: [PATCH] Support RCTModernEventEmitter+RCTEventEmitter in ViewGroupClickEvent Event class Summary: Support RCTModernEventEmitter+RCTEventEmitter in an Event class(es). This improves perf in Fabric. Migrate any constructor callsites to the new constructor and deprecate the previous one. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D26054855 fbshipit-source-id: 9592d854962d53f64d836b8361256cac5c4325df --- .../react/views/text/ReactClickableSpan.java | 3 ++- .../react/views/view/ReactViewManager.java | 4 +++- .../react/views/view/ViewGroupClickEvent.java | 15 +++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactClickableSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactClickableSpan.java index 37f7000a915..bb093d2691d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactClickableSpan.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactClickableSpan.java @@ -52,7 +52,8 @@ class ReactClickableSpan extends ClickableSpan implements ReactSpan { EventDispatcher eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, mReactTag); if (eventDispatcher != null) { - eventDispatcher.dispatchEvent(new ViewGroupClickEvent(mReactTag)); + eventDispatcher.dispatchEvent( + new ViewGroupClickEvent(UIManagerHelper.getSurfaceId(context), mReactTag)); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java index 66aacfcfd15..1192b50f2e4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java @@ -239,7 +239,9 @@ public class ReactViewManager extends ReactClippingViewManager { if (mEventDispatcher == null) { return; } - mEventDispatcher.dispatchEvent(new ViewGroupClickEvent(view.getId())); + mEventDispatcher.dispatchEvent( + new ViewGroupClickEvent( + UIManagerHelper.getSurfaceId(view.getContext()), view.getId())); } }); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ViewGroupClickEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ViewGroupClickEvent.java index c328752a564..d7a380802fb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ViewGroupClickEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ViewGroupClickEvent.java @@ -7,16 +7,22 @@ package com.facebook.react.views.view; +import androidx.annotation.Nullable; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; -import com.facebook.react.uimanager.events.RCTEventEmitter; /** Represents a Click on the ReactViewGroup */ public class ViewGroupClickEvent extends Event { private static final String EVENT_NAME = "topClick"; + @Deprecated public ViewGroupClickEvent(int viewId) { - super(viewId); + this(-1, viewId); + } + + public ViewGroupClickEvent(int surfaceId, int viewId) { + super(surfaceId, viewId); } @Override @@ -29,8 +35,9 @@ public class ViewGroupClickEvent extends Event { return false; } + @Nullable @Override - public void dispatch(RCTEventEmitter rctEventEmitter) { - rctEventEmitter.receiveEvent(getViewTag(), getEventName(), Arguments.createMap()); + protected WritableMap getEventData() { + return Arguments.createMap(); } }