diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java index a738bd2a4ce..d72f4b36f41 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java @@ -102,7 +102,7 @@ public class EventDispatcher implements LifecycleEventListener { public EventDispatcher(ReactApplicationContext reactContext) { mReactContext = reactContext; mReactContext.addLifecycleEventListener(this); - mReactEventEmitter = new ReactEventEmitter(); + mReactEventEmitter = new ReactEventEmitter(mReactContext); } /** Sends the given Event to JS, coalescing eligible events if JS is backed up. */ diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java index f63d8f4d8bc..49fad0c86c4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java @@ -10,7 +10,9 @@ import static com.facebook.react.uimanager.events.TouchesHelper.TARGET_KEY; import android.util.SparseArray; import androidx.annotation.Nullable; +import com.facebook.common.logging.FLog; import com.facebook.infer.annotation.Assertions; +import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.common.UIManagerType; @@ -18,9 +20,15 @@ import com.facebook.react.uimanager.common.ViewUtil; public class ReactEventEmitter implements RCTEventEmitter { + private static final String TAG = ReactEventEmitter.class.getSimpleName(); + private final SparseArray mEventEmitters = new SparseArray<>(); - public ReactEventEmitter() {} + private final ReactApplicationContext mReactContext; + + public ReactEventEmitter(ReactApplicationContext reactContext) { + mReactContext = reactContext; + } public void register(@UIManagerType int uiManagerType, RCTEventEmitter eventEmitter) { mEventEmitters.put(uiManagerType, eventEmitter); @@ -49,7 +57,11 @@ public class ReactEventEmitter implements RCTEventEmitter { int type = ViewUtil.getUIManagerType(reactTag); RCTEventEmitter eventEmitter = mEventEmitters.get(type); if (eventEmitter == null) { - throw new RuntimeException("Unable to find event emitter for type: " + type); + // TODO T54145494: Refactor RN Event Emitter system to make sure reactTags are always managed + // by RN + FLog.i( + TAG, "Unable to find event emitter for reactTag: %d - uiManagerType: %d", reactTag, type); + eventEmitter = mReactContext.getJSModule(RCTEventEmitter.class); } return eventEmitter; }