diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt index cf7600f1885e..f59b730cf225 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt @@ -25,17 +25,17 @@ internal class EventAnimationDriver( @JvmField internal var valueNode: ValueAnimatedNode ) : RCTModernEventEmitter { @Deprecated("Deprecated in Java") - override fun receiveEvent(targetReactTag: Int, eventName: String, event: WritableMap?) = - receiveEvent(-1, targetReactTag, eventName, event) + override fun receiveEvent(targetTag: Int, eventName: String, params: WritableMap?) = + receiveEvent(-1, targetTag, eventName, params) override fun receiveEvent( surfaceId: Int, targetTag: Int, eventName: String, - event: WritableMap? + params: WritableMap? ) = // We assume this event can't be coalesced. `customCoalesceKey` has no meaning in Fabric. - receiveEvent(surfaceId, targetTag, eventName, false, 0, event, EventCategoryDef.UNSPECIFIED) + receiveEvent(surfaceId, targetTag, eventName, false, 0, params, EventCategoryDef.UNSPECIFIED) @Deprecated("Deprecated in Java") override fun receiveTouches( @@ -47,7 +47,7 @@ internal class EventAnimationDriver( } @Deprecated("Deprecated in Java") - override fun receiveTouches(touchEvent: TouchEvent) { + override fun receiveTouches(event: TouchEvent) { throw UnsupportedOperationException("receiveTouches is not support by native animated events") } @@ -57,13 +57,13 @@ internal class EventAnimationDriver( eventName: String, canCoalesceEvent: Boolean, customCoalesceKey: Int, - event: WritableMap?, + params: WritableMap?, @EventCategoryDef category: Int ) { - requireNotNull(event) { "Native animated events must have event data." } + requireNotNull(params) { "Native animated events must have event data." } // Get the new value for the node by looking into the event map using the provided event path. - var currMap: ReadableMap? = event + var currMap: ReadableMap? = params var currArray: ReadableArray? = null for (i in 0 until eventPath.size - 1) { if (currMap != null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt index 3420e0ed61b0..5395eca470a2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt @@ -18,22 +18,22 @@ import com.facebook.systrace.Systrace public class FabricEventEmitter(private val uiManager: FabricUIManager) : RCTModernEventEmitter { @Deprecated("Deprecated in Java") - public override fun receiveEvent(reactTag: Int, eventName: String, params: WritableMap?): Unit { - receiveEvent(ViewUtil.NO_SURFACE_ID, reactTag, eventName, params) + public override fun receiveEvent(targetTag: Int, eventName: String, params: WritableMap?): Unit { + receiveEvent(ViewUtil.NO_SURFACE_ID, targetTag, eventName, params) } public override fun receiveEvent( surfaceId: Int, - reactTag: Int, + targetTag: Int, eventName: String, params: WritableMap? ) { - receiveEvent(surfaceId, reactTag, eventName, false, 0, params, EventCategoryDef.UNSPECIFIED) + receiveEvent(surfaceId, targetTag, eventName, false, 0, params, EventCategoryDef.UNSPECIFIED) } public override fun receiveEvent( surfaceId: Int, - reactTag: Int, + targetTag: Int, eventName: String, canCoalesceEvent: Boolean, customCoalesceKey: Int, @@ -43,7 +43,7 @@ public class FabricEventEmitter(private val uiManager: FabricUIManager) : RCTMod Systrace.beginSection( Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "FabricEventEmitter.receiveEvent('$eventName')") try { - uiManager.receiveEvent(surfaceId, reactTag, eventName, canCoalesceEvent, params, category) + uiManager.receiveEvent(surfaceId, targetTag, eventName, canCoalesceEvent, params, category) } finally { Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/interop/InteropEventEmitter.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/interop/InteropEventEmitter.kt index eca7be1f6832..c76b670251c5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/interop/InteropEventEmitter.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/interop/InteropEventEmitter.kt @@ -31,12 +31,12 @@ public class InteropEventEmitter(private val reactContext: ReactContext) : RCTEv private var eventDispatcherOverride: EventDispatcher? = null @Deprecated("Deprecated in Java") - override fun receiveEvent(targetReactTag: Int, eventName: String, eventData: WritableMap?) { + override fun receiveEvent(targetTag: Int, eventName: String, params: WritableMap?) { val dispatcher: EventDispatcher? = eventDispatcherOverride - ?: UIManagerHelper.getEventDispatcherForReactTag(reactContext, targetReactTag) + ?: UIManagerHelper.getEventDispatcherForReactTag(reactContext, targetTag) val surfaceId = UIManagerHelper.getSurfaceId(reactContext) - dispatcher?.dispatchEvent(InteropEvent(eventName, eventData, surfaceId, targetReactTag)) + dispatcher?.dispatchEvent(InteropEvent(eventName, params, surfaceId, targetTag)) } @Deprecated("Deprecated in Java") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.java deleted file mode 100644 index c51ed518ba56..000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.uimanager.events; - -import androidx.annotation.Nullable; -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.JavaScriptModule; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.bridge.WritableMap; - -/** - * Paper JS interface to emit events from native to JS. - * - *
Deprecated in favor of RCTModernEventEmitter, which works with both the old and new renderer. - */ -@DoNotStrip -@Deprecated -public interface RCTEventEmitter extends JavaScriptModule { - /** - * @param targetReactTag react tag of the view that receives the event - * @param eventName name of event - * @param event event params - * @deprecated Use RCTModernEventEmitter.receiveEvent instead - */ - @Deprecated - void receiveEvent(int targetReactTag, String eventName, @Nullable WritableMap event); - - /** - * Receive and process touches - * - * @param eventName JS event name - * @param touches active pointers data - * @param changedIndices indices of changed pointers - * @deprecated Dispatch the TouchEvent using {@link EventDispatcher} instead - */ - @Deprecated - void receiveTouches(String eventName, WritableArray touches, WritableArray changedIndices); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.kt new file mode 100644 index 000000000000..521c00fad6d6 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.uimanager.events + +import com.facebook.proguard.annotations.DoNotStripAny +import com.facebook.react.bridge.JavaScriptModule +import com.facebook.react.bridge.WritableArray +import com.facebook.react.bridge.WritableMap + +/** + * Paper JS interface to emit events from native to JS. + * + * Deprecated in favor of [RCTModernEventEmitter], which works with both the old and new renderer. + */ +@DoNotStripAny +@Deprecated("Use [RCTModernEventEmitter] instead") +public interface RCTEventEmitter : JavaScriptModule { + /** + * @param targetTag react tag of the view that receives the event + * @param eventName name of event + * @param params event params + */ + @Deprecated("Use [RCTModernEventEmitter.receiveEvent] instead") + public fun receiveEvent(targetTag: Int, eventName: String, params: WritableMap?) + + /** + * Receive and process touches + * + * @param eventName JS event name + * @param touches active pointers data + * @param changedIndices indices of changed pointers + */ + @Deprecated("Dispatch the TouchEvent using [EventDispatcher] instead") + public fun receiveTouches( + eventName: String, + touches: WritableArray, + changedIndices: WritableArray + ) +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java deleted file mode 100644 index 056c7dcdf3e2..000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.uimanager.events; - -import androidx.annotation.Nullable; -import com.facebook.react.bridge.WritableMap; - -/** - * This is a transitional replacement for RCTEventEmitter that works with Fabric and non-Fabric - * renderers. RCTEventEmitter works with Fabric as well, but there are negative perf implications - * and it should be avoided. - * - *
This interface will *also* be deleted in the distant future and be replaced with a new
- * interface that doesn't need the old `receiveEvent` method at all. But for the foreseeable future,
- * this is the recommended interface to use for EventEmitters.
- */
-public interface RCTModernEventEmitter extends RCTEventEmitter {
- void receiveEvent(int surfaceId, int targetTag, String eventName, @Nullable WritableMap event);
-
- void receiveEvent(
- int surfaceId,
- int targetTag,
- String eventName,
- boolean canCoalesceEvent,
- int customCoalesceKey,
- @Nullable WritableMap event,
- @EventCategoryDef int category);
-
- /**
- * @deprecated Dispatch the TouchEvent using {@link EventDispatcher} instead
- */
- @Deprecated
- void receiveTouches(TouchEvent event);
-}
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.kt
new file mode 100644
index 000000000000..dab9e0520172
--- /dev/null
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+package com.facebook.react.uimanager.events
+
+import com.facebook.react.bridge.WritableMap
+
+/**
+ * This is a transitional replacement for [RCTEventEmitter] that works with Fabric and non-Fabric
+ * renderers. [RCTEventEmitter] works with Fabric as well, but there are negative perf implications
+ * and it should be avoided.
+ *
+ * This interface will *also* be deleted in the distant future and be replaced with a new interface
+ * that doesn't need the old `receiveEvent` method at all. But for the foreseeable future, this is
+ * the recommended interface to use for EventEmitters.
+ */
+@Suppress("DEPRECATION")
+public interface RCTModernEventEmitter : RCTEventEmitter {
+ public fun receiveEvent(surfaceId: Int, targetTag: Int, eventName: String, params: WritableMap?)
+
+ public fun receiveEvent(
+ surfaceId: Int,
+ targetTag: Int,
+ eventName: String,
+ canCoalesceEvent: Boolean,
+ customCoalesceKey: Int,
+ params: WritableMap?,
+ @EventCategoryDef category: Int
+ )
+
+ @Deprecated("Dispatch the TouchEvent using [EventDispatcher] instead")
+ public fun receiveTouches(event: TouchEvent)
+}
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.kt
index 53ad8d04d3d7..752de30ee7e7 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.kt
@@ -45,18 +45,18 @@ internal class ReactEventEmitter(private val reactContext: ReactApplicationConte
}
@Deprecated("Please use RCTModernEventEmitter")
- override fun receiveEvent(targetReactTag: Int, eventName: String, event: WritableMap?) {
- receiveEvent(-1, targetReactTag, eventName, event)
+ override fun receiveEvent(targetTag: Int, eventName: String, params: WritableMap?) {
+ receiveEvent(-1, targetTag, eventName, params)
}
override fun receiveEvent(
surfaceId: Int,
targetTag: Int,
eventName: String,
- event: WritableMap?
+ params: WritableMap?
) {
// We assume this event can't be coalesced. `customCoalesceKey` has no meaning in Fabric.
- receiveEvent(surfaceId, targetTag, eventName, false, 0, event, EventCategoryDef.UNSPECIFIED)
+ receiveEvent(surfaceId, targetTag, eventName, false, 0, params, EventCategoryDef.UNSPECIFIED)
}
@Deprecated("Please use RCTModernEventEmitter")
@@ -108,25 +108,19 @@ internal class ReactEventEmitter(private val reactContext: ReactApplicationConte
override fun receiveEvent(
surfaceId: Int,
- targetReactTag: Int,
+ targetTag: Int,
eventName: String,
canCoalesceEvent: Boolean,
customCoalesceKey: Int,
- event: WritableMap?,
+ params: WritableMap?,
@EventCategoryDef category: Int
) {
- @UIManagerType val uiManagerType = getUIManagerType(targetReactTag, surfaceId)
+ @UIManagerType val uiManagerType = getUIManagerType(targetTag, surfaceId)
if (uiManagerType == UIManagerType.FABRIC) {
fabricEventEmitter?.receiveEvent(
- surfaceId,
- targetReactTag,
- eventName,
- canCoalesceEvent,
- customCoalesceKey,
- event,
- category)
+ surfaceId, targetTag, eventName, canCoalesceEvent, customCoalesceKey, params, category)
} else if (uiManagerType == UIManagerType.DEFAULT) {
- ensureDefaultEventEmitter()?.receiveEvent(targetReactTag, eventName, event)
+ ensureDefaultEventEmitter()?.receiveEvent(targetTag, eventName, params)
}
}
diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt
index 4285a84fb127..6fb1d2a21c4a 100644
--- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt
+++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt
@@ -27,21 +27,28 @@ import com.facebook.react.common.SystemClock
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests
import com.facebook.react.uimanager.DisplayMetricsHolder
import com.facebook.react.uimanager.UIManagerModule
-import com.facebook.react.uimanager.events.Event
import com.facebook.react.uimanager.events.EventDispatcher
import com.facebook.react.uimanager.events.RCTEventEmitter
+import com.facebook.react.uimanager.events.TouchEvent
import java.util.Date
import org.assertj.core.api.Assertions.*
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers
import org.mockito.MockedStatic
-import org.mockito.Mockito
-import org.mockito.Mockito.*
-import org.mockito.Mockito.`when` as whenever
+import org.mockito.Mockito.mockStatic
+import org.mockito.kotlin.KArgumentCaptor
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.reset
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.verifyNoMoreInteractions
+import org.mockito.kotlin.whenever
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
@@ -55,16 +62,22 @@ class RootViewTest {
private lateinit var arguments: MockedStatic