diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java index e138e6dfeac..5d0d4297742 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java @@ -10,9 +10,11 @@ package com.facebook.react.bridge; import androidx.annotation.Nullable; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.queue.ReactQueueConfiguration; +import com.facebook.react.common.annotations.DeprecatedInNewArchitecture; import com.facebook.react.common.annotations.VisibleForTesting; import com.facebook.react.internal.turbomodule.core.interfaces.CallInvokerHolder; import com.facebook.react.internal.turbomodule.core.interfaces.NativeMethodCallInvokerHolder; +import com.facebook.react.internal.turbomodule.core.interfaces.TurboModuleRegistry; import java.util.Collection; import java.util.List; @@ -134,4 +136,19 @@ public interface CatalystInstance * hasNativeModule, and getNativeModules can also return TurboModules. */ void setTurboModuleManager(JSIModule getter); + + @DeprecatedInNewArchitecture( + message = + "This method will be deprecated later as part of Stable APIs with bridge removal and not encouraged usage.") + void setTurboModuleRegistry(TurboModuleRegistry turboModuleRegistry); + + @DeprecatedInNewArchitecture( + message = + "This method will be deprecated later as part of Stable APIs with bridge removal and not encouraged usage.") + void setFabricUIManager(UIManager fabricUIManager); + + @DeprecatedInNewArchitecture( + message = + "This method will be deprecated later as part of Stable APIs with bridge removal and not encouraged usage.") + UIManager getFabricUIManager(); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index 3cb8b1ea817..be3c61b6dc3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -103,7 +103,8 @@ public class CatalystInstanceImpl implements CatalystInstance { private @Nullable String mSourceURL; private JavaScriptContextHolder mJavaScriptContextHolder; - private volatile @Nullable TurboModuleRegistry mTurboModuleRegistry = null; + private @Nullable TurboModuleRegistry mTurboModuleRegistry; + private @Nullable UIManager mFabricUIManager; // C++ parts private final HybridData mHybridData; @@ -351,6 +352,9 @@ public class CatalystInstanceImpl implements CatalystInstance { () -> { mNativeModuleRegistry.notifyJSInstanceDestroy(); mJSIModuleRegistry.notifyJSInstanceDestroy(); + if (mFabricUIManager != null) { + mFabricUIManager.invalidate(); + } boolean wasIdle = (mPendingJSCalls.getAndSet(0) == 0); if (!mBridgeIdleListeners.isEmpty()) { for (NotThreadSafeBridgeIdleDebugListener listener : mBridgeIdleListeners) { @@ -570,6 +574,21 @@ public class CatalystInstanceImpl implements CatalystInstance { mTurboModuleRegistry = (TurboModuleRegistry) module; } + @Override + public void setTurboModuleRegistry(TurboModuleRegistry turboModuleRegistry) { + mTurboModuleRegistry = turboModuleRegistry; + } + + @Override + public void setFabricUIManager(UIManager fabricUIManager) { + mFabricUIManager = fabricUIManager; + } + + @Override + public UIManager getFabricUIManager() { + return mFabricUIManager; + } + private void decrementPendingJSCalls() { int newPendingCalls = mPendingJSCalls.decrementAndGet(); // TODO(9604406): handle case of web workers injecting messages to main thread