diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 2f629f2093ae..7735f7f6aff7 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -967,6 +967,7 @@ public abstract class com/facebook/react/bridge/ReactContext : android/content/C public abstract fun getNativeModule (Ljava/lang/String;)Lcom/facebook/react/bridge/NativeModule; public abstract fun getNativeModules ()Ljava/util/Collection; public fun getNativeModulesMessageQueueThread ()Lcom/facebook/react/bridge/queue/MessageQueueThread; + public abstract fun getRuntimeExecutor ()Lcom/facebook/react/bridge/RuntimeExecutor; public fun getScrollEndedListeners ()Lcom/facebook/react/bridge/ScrollEndedListeners; public abstract fun getSourceURL ()Ljava/lang/String; public fun getSystemService (Ljava/lang/String;)Ljava/lang/Object; @@ -4162,6 +4163,7 @@ public final class com/facebook/react/uimanager/ThemedReactContext : com/faceboo public fun getNativeModule (Ljava/lang/String;)Lcom/facebook/react/bridge/NativeModule; public fun getNativeModules ()Ljava/util/Collection; public final fun getReactApplicationContext ()Lcom/facebook/react/bridge/ReactApplicationContext; + public fun getRuntimeExecutor ()Lcom/facebook/react/bridge/RuntimeExecutor; public fun getScrollEndedListeners ()Lcom/facebook/react/bridge/ScrollEndedListeners; public fun getSourceURL ()Ljava/lang/String; public final fun getSurfaceID ()Ljava/lang/String; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java index 1ccb8abad435..71a932c5774c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java @@ -312,4 +312,9 @@ public void registerSegment(int segmentId, String path, Callback callback) { Assertions.assertNotNull(mCatalystInstance).registerSegment(segmentId, path); Assertions.assertNotNull(callback).invoke(); } + + @Override + public @Nullable RuntimeExecutor getRuntimeExecutor() { + return mCatalystInstance == null ? null : mCatalystInstance.getRuntimeExecutor(); + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java index e9e89413d451..8bf13e1cf383 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -200,6 +200,12 @@ public LifecycleState getLifecycleState() { return mLifecycleState; } + /** + * Returns the {@link RuntimeExecutor} for the underlying JavaScript runtime, or {@code null} if + * the runtime has not been initialized. Works in both bridged and bridgeless modes. + */ + public abstract @Nullable RuntimeExecutor getRuntimeExecutor(); + /** * This allows scroll views to notify NativeAnimatedModule when user-driven scrolling ends. * diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt index 936dc6c99537..bfaf55b140d3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt @@ -20,6 +20,7 @@ import com.facebook.react.bridge.JavaScriptModuleRegistry import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactSoftExceptionLogger.logSoftException +import com.facebook.react.bridge.RuntimeExecutor import com.facebook.react.bridge.UIManager import com.facebook.react.common.annotations.FrameworkAPI import com.facebook.react.common.annotations.UnstableReactNativeAPI @@ -180,4 +181,6 @@ internal class BridgelessReactContext(context: Context, private val reactHost: R } override fun getJSCallInvokerHolder(): CallInvokerHolder? = reactHost.jsCallInvokerHolder + + override fun getRuntimeExecutor(): RuntimeExecutor? = reactHost.runtimeExecutor } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt index 06cb79b4be32..6625b7eee616 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt @@ -20,6 +20,7 @@ import com.facebook.react.bridge.LifecycleEventListener import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContext +import com.facebook.react.bridge.RuntimeExecutor import com.facebook.react.bridge.ScrollEndedListeners import com.facebook.react.bridge.UIManager import com.facebook.react.common.annotations.internal.LegacyArchitecture @@ -162,6 +163,8 @@ public class ThemedReactContext( override fun getJSCallInvokerHolder(): CallInvokerHolder? = reactApplicationContext.getJSCallInvokerHolder() + override fun getRuntimeExecutor(): RuntimeExecutor? = reactApplicationContext.runtimeExecutor + @Deprecated( "This method is deprecated, please use UIManagerHelper.getUIManager() instead.", ReplaceWith("UIManagerHelper.getUIManager()"),