Integrate Fabric into RN tester

Summary:
This diff integrates Fabric into RN Tester

changelog: [internal] internal

Reviewed By: JoshuaGross

Differential Revision: D23012446

fbshipit-source-id: 7a8410b0d73c26c347db17f6ec43663bb22524e3
This commit is contained in:
David Vacca 2020-08-10 15:06:01 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 5115ac0bef
Коммит 8724a24bf5
2 изменённых файлов: 85 добавлений и 0 удалений

Просмотреть файл

@ -7,12 +7,15 @@
package com.facebook.react.uiapp; package com.facebook.react.uiapp;
import static com.facebook.react.uiapp.RNTesterApplication.IS_FABRIC_ENABLED;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate; import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
public class RNTesterActivity extends ReactActivity { public class RNTesterActivity extends ReactActivity {
public static class RNTesterActivityDelegate extends ReactActivityDelegate { public static class RNTesterActivityDelegate extends ReactActivityDelegate {
@ -25,6 +28,13 @@ public class RNTesterActivity extends ReactActivity {
this.mActivity = activity; this.mActivity = activity;
} }
@Override
protected ReactRootView createRootView() {
ReactRootView reactRootView = new ReactRootView(getContext());
reactRootView.setIsFabric(IS_FABRIC_ENABLED);
return reactRootView;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
// Get remote param before calling super which uses it // Get remote param before calling super which uses it

Просмотреть файл

@ -7,21 +7,39 @@
package com.facebook.react.uiapp; package com.facebook.react.uiapp;
import static com.facebook.react.uiapp.BuildConfig.FLAVOR;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import androidx.annotation.Nullable;
import com.facebook.react.BuildConfig; import com.facebook.react.BuildConfig;
import com.facebook.react.ReactApplication; import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage; 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.shell.MainReactPackage;
import com.facebook.react.views.text.ReactFontManager; import com.facebook.react.views.text.ReactFontManager;
import com.facebook.soloader.SoLoader; import com.facebook.soloader.SoLoader;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
public class RNTesterApplication extends Application implements ReactApplication { public class RNTesterApplication extends Application implements ReactApplication {
static final boolean IS_FABRIC_ENABLED = FLAVOR.contains("fabric");
private final ReactNativeHost mReactNativeHost = private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) { new ReactNativeHost(this) {
@Override @Override
@ -43,6 +61,63 @@ public class RNTesterApplication extends Application implements ReactApplication
public List<ReactPackage> getPackages() { public List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(new MainReactPackage()); return Arrays.<ReactPackage>asList(new MainReactPackage());
} }
@Nullable
@Override
protected JSIModulePackage getJSIModulePackage() {
if (!IS_FABRIC_ENABLED) {
return null;
}
return new JSIModulePackage() {
@Override
public List<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) {
List<JSIModuleSpec> specs = new ArrayList<>();
specs.add(
new JSIModuleSpec() {
@Override
public JSIModuleType getJSIModuleType() {
return JSIModuleType.UIManager;
}
@Override
public JSIModuleProvider<UIManager> 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 @Override