From a0baba654ee7fc73d825e8fc497378af6206b5ca Mon Sep 17 00:00:00 2001 From: David Vacca Date: Wed, 10 Jun 2020 22:45:53 -0700 Subject: [PATCH] Expose receiveEvent as a high level API on UIManager Summary: This diff exposes receiveEvent on the UIManager class. This is necessary to support backward compatibility between Fabric and classic RN changelog: [Internal] Reviewed By: JoshuaGross Differential Revision: D21979687 fbshipit-source-id: 1ec75896687d55e699f79c520e21f05fac368ee6 --- .../main/java/com/facebook/react/bridge/UIManager.java | 10 ++++++++++ .../com/facebook/react/fabric/FabricUIManager.java | 1 + .../com/facebook/react/uimanager/UIManagerModule.java | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java index d6f6cd97365..1707c623edb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java @@ -113,4 +113,14 @@ public interface UIManager extends JSIModule, PerformanceCounter { * @param listener */ void removeUIManagerEventListener(UIManagerListener listener); + + /** + * This method dispatches events from RN Android code to JS. The delivery of this event will not + * be queued in EventDispatcher class. + * + * @param reactTag tag + * @param eventName name of the event + * @param event parameters + */ + void receiveEvent(int reactTag, String eventName, @Nullable WritableMap event); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 9c80c9442fd..e644fe69e3c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -946,6 +946,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { doLeftAndRightSwapInRTL); } + @Override public void receiveEvent(int reactTag, String eventName, @Nullable WritableMap params) { EventEmitterWrapper eventEmitter = mMountingManager.getEventEmitter(reactTag); if (eventEmitter == null) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 823b1ad1395..52750844ed8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -950,4 +950,11 @@ public class UIManagerModule extends ReactContextBaseJavaModule .getNativeViewHierarchyManager() .resolveView(tag); } + + @Override + public void receiveEvent(int targetTag, String eventName, @Nullable WritableMap event) { + getReactApplicationContext() + .getJSModule(RCTEventEmitter.class) + .receiveEvent(targetTag, eventName, event); + } }