diff --git a/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterActivity.java b/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterActivity.java index 276a1d899d3..d7a315ca26d 100644 --- a/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterActivity.java +++ b/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterActivity.java @@ -7,12 +7,15 @@ package com.facebook.react.uiapp; +import static com.facebook.react.uiapp.RNTesterApplication.IS_FABRIC_ENABLED; + import android.content.res.Configuration; import android.os.Bundle; import androidx.annotation.Nullable; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactRootView; public class RNTesterActivity extends ReactActivity { public static class RNTesterActivityDelegate extends ReactActivityDelegate { @@ -25,6 +28,13 @@ public class RNTesterActivity extends ReactActivity { this.mActivity = activity; } + @Override + protected ReactRootView createRootView() { + ReactRootView reactRootView = new ReactRootView(getContext()); + reactRootView.setIsFabric(IS_FABRIC_ENABLED); + return reactRootView; + } + @Override protected void onCreate(Bundle savedInstanceState) { // Get remote param before calling super which uses it diff --git a/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java b/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java index f272cd46d4c..c6b339b6fd9 100644 --- a/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java +++ b/RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java @@ -7,21 +7,39 @@ package com.facebook.react.uiapp; +import static com.facebook.react.uiapp.BuildConfig.FLAVOR; + import android.app.Application; import android.content.Context; +import androidx.annotation.Nullable; import com.facebook.react.BuildConfig; import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.JSIModulePackage; +import com.facebook.react.bridge.JSIModuleProvider; +import com.facebook.react.bridge.JSIModuleSpec; +import com.facebook.react.bridge.JSIModuleType; +import com.facebook.react.bridge.JavaScriptContextHolder; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.UIManager; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.react.fabric.CoreComponentsRegistry; +import com.facebook.react.fabric.FabricJSIModuleProvider; +import com.facebook.react.fabric.ReactNativeConfig; import com.facebook.react.shell.MainReactPackage; import com.facebook.react.views.text.ReactFontManager; import com.facebook.soloader.SoLoader; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class RNTesterApplication extends Application implements ReactApplication { + + static final boolean IS_FABRIC_ENABLED = FLAVOR.contains("fabric"); + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override @@ -43,6 +61,63 @@ public class RNTesterApplication extends Application implements ReactApplication public List getPackages() { return Arrays.asList(new MainReactPackage()); } + + @Nullable + @Override + protected JSIModulePackage getJSIModulePackage() { + if (!IS_FABRIC_ENABLED) { + return null; + } + + return new JSIModulePackage() { + @Override + public List getJSIModules( + final ReactApplicationContext reactApplicationContext, + final JavaScriptContextHolder jsContext) { + List specs = new ArrayList<>(); + specs.add( + new JSIModuleSpec() { + @Override + public JSIModuleType getJSIModuleType() { + return JSIModuleType.UIManager; + } + + @Override + public JSIModuleProvider getJSIModuleProvider() { + ComponentFactory ComponentFactory = new ComponentFactory(); + CoreComponentsRegistry.register(ComponentFactory); + return new FabricJSIModuleProvider( + reactApplicationContext, + ComponentFactory, + // TODO: T71362667 add ReactNativeConfig's support in RNTester + new ReactNativeConfig() { + @Override + public boolean getBool(String s) { + return true; + } + + @Override + public int getInt64(String s) { + return 0; + } + + @Override + public String getString(String s) { + return ""; + } + + @Override + public double getDouble(String s) { + return 0; + } + }); + } + }); + + return specs; + } + }; + } }; @Override