mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Converted RNTesterReactHostDelegate.java to RNTesterReactHostDelegate.kt (#38978)
Summary: This PR converts RNTesterReactHostDelegate into Kotlin as requested in https://github.com/facebook/react-native/issues/38825 . ## Changelog: [INTERNAL] [CHANGED] - Convert to RNTesterReactHostDelegate.java => Kotlin Pull Request resolved: https://github.com/facebook/react-native/pull/38978 Test Plan: Run yarn && yarn android All tests should pass Reviewed By: huntie, rshest Differential Revision: D48598018 Pulled By: cortinico fbshipit-source-id: f29eaa32c63835e090baf60bbde6c0c72b9041c2
This commit is contained in:
committed by
Facebook GitHub Bot
parent
e6899326e1
commit
0b6e9bf0d8
-180
@@ -1,180 +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.uiapp;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.fbreact.specs.SampleLegacyModule;
|
||||
import com.facebook.fbreact.specs.SampleTurboModule;
|
||||
import com.facebook.react.JSEngineResolutionAlgorithm;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
|
||||
import com.facebook.react.TurboReactPackage;
|
||||
import com.facebook.react.bridge.JSBundleLoader;
|
||||
import com.facebook.react.bridge.NativeModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridgeless.BindingsInstaller;
|
||||
import com.facebook.react.bridgeless.JSCInstance;
|
||||
import com.facebook.react.bridgeless.JSEngineInstance;
|
||||
import com.facebook.react.bridgeless.ReactHostDelegate;
|
||||
import com.facebook.react.bridgeless.ReactHostImpl;
|
||||
import com.facebook.react.bridgeless.hermes.HermesInstance;
|
||||
import com.facebook.react.common.annotations.UnstableReactNativeAPI;
|
||||
import com.facebook.react.config.ReactFeatureFlags;
|
||||
import com.facebook.react.defaults.DefaultTurboModuleManagerDelegate;
|
||||
import com.facebook.react.fabric.ReactNativeConfig;
|
||||
import com.facebook.react.module.model.ReactModuleInfo;
|
||||
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
||||
import com.facebook.react.shell.MainReactPackage;
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManager;
|
||||
import com.facebook.react.uiapp.component.MyLegacyViewManager;
|
||||
import com.facebook.react.uiapp.component.MyNativeViewManager;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@UnstableReactNativeAPI
|
||||
public class RNTesterReactHostDelegate implements ReactHostDelegate {
|
||||
private final Context mContext;
|
||||
private @Nullable ReactHostImpl mReactHost;
|
||||
private @Nullable List<ReactPackage> mReactPackages;
|
||||
|
||||
RNTesterReactHostDelegate(Context context) {
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
public void setReactHost(ReactHostImpl reactHost) {
|
||||
mReactHost = reactHost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJsMainModulePath() {
|
||||
return "js/RNTesterApp.android";
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSBundleLoader getJsBundleLoader() {
|
||||
return JSBundleLoader.createAssetLoader(mContext, "assets://RNTesterApp.android.bundle", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized BindingsInstaller getBindingsInstaller() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ReactPackageTurboModuleManagerDelegate.Builder getTurboModuleManagerDelegateBuilder() {
|
||||
return new DefaultTurboModuleManagerDelegate.Builder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSEngineInstance getJsEngineInstance() {
|
||||
if (mReactHost.getJSEngineResolutionAlgorithm() == JSEngineResolutionAlgorithm.JSC) {
|
||||
return new JSCInstance();
|
||||
} else {
|
||||
return new HermesInstance();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleInstanceException(Exception e) {}
|
||||
|
||||
@Override
|
||||
public ReactNativeConfig getReactNativeConfig(TurboModuleManager turboModuleManager) {
|
||||
return ReactNativeConfig.DEFAULT_CONFIG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReactPackage> getReactPackages() {
|
||||
if (mReactPackages == null) {
|
||||
mReactPackages =
|
||||
Arrays.<ReactPackage>asList(
|
||||
new MainReactPackage(),
|
||||
new TurboReactPackage() {
|
||||
public NativeModule getModule(
|
||||
final String name, final ReactApplicationContext reactContext) {
|
||||
if (!ReactFeatureFlags.useTurboModules) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (SampleTurboModule.NAME.equals(name)) {
|
||||
return new SampleTurboModule(reactContext);
|
||||
}
|
||||
|
||||
if (SampleLegacyModule.NAME.equals(name)) {
|
||||
return new SampleLegacyModule(reactContext);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Note: Specialized annotation processor for @ReactModule isn't configured in OSS
|
||||
// yet. For now, hardcode this information, though it's not necessary for most
|
||||
// modules.
|
||||
public ReactModuleInfoProvider getReactModuleInfoProvider() {
|
||||
return new ReactModuleInfoProvider() {
|
||||
public Map<String, ReactModuleInfo> getReactModuleInfos() {
|
||||
final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
|
||||
if (ReactFeatureFlags.useTurboModules) {
|
||||
moduleInfos.put(
|
||||
SampleTurboModule.NAME,
|
||||
new ReactModuleInfo(
|
||||
SampleTurboModule.NAME,
|
||||
"SampleTurboModule",
|
||||
false, // canOverrideExistingModule
|
||||
false, // needsEagerInit
|
||||
true, // hasConstants
|
||||
false, // isCxxModule
|
||||
true // isTurboModule
|
||||
));
|
||||
|
||||
moduleInfos.put(
|
||||
SampleLegacyModule.NAME,
|
||||
new ReactModuleInfo(
|
||||
SampleLegacyModule.NAME,
|
||||
"SampleLegacyModule",
|
||||
false, // canOverrideExistingModule
|
||||
false, // needsEagerInit
|
||||
true, // hasConstants
|
||||
false, // isCxxModule
|
||||
false // isTurboModule
|
||||
));
|
||||
}
|
||||
return moduleInfos;
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
new ReactPackage() {
|
||||
@NonNull
|
||||
@Override
|
||||
public List<NativeModule> createNativeModules(
|
||||
@NonNull ReactApplicationContext reactContext) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public List<ViewManager> createViewManagers(
|
||||
@NonNull ReactApplicationContext reactContext) {
|
||||
List<ViewManager> viewManagers = new ArrayList<>();
|
||||
viewManagers.add(new MyNativeViewManager());
|
||||
viewManagers.add(new MyLegacyViewManager(reactContext));
|
||||
return viewManagers;
|
||||
}
|
||||
});
|
||||
}
|
||||
return mReactPackages;
|
||||
}
|
||||
}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* 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.uiapp
|
||||
|
||||
import android.content.Context
|
||||
import com.facebook.fbreact.specs.SampleLegacyModule
|
||||
import com.facebook.fbreact.specs.SampleTurboModule
|
||||
import com.facebook.react.JSEngineResolutionAlgorithm
|
||||
import com.facebook.react.ReactPackage
|
||||
import com.facebook.react.ReactPackageTurboModuleManagerDelegate
|
||||
import com.facebook.react.TurboReactPackage
|
||||
import com.facebook.react.bridge.JSBundleLoader
|
||||
import com.facebook.react.bridge.NativeModule
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridgeless.BindingsInstaller
|
||||
import com.facebook.react.bridgeless.JSCInstance
|
||||
import com.facebook.react.bridgeless.JSEngineInstance
|
||||
import com.facebook.react.bridgeless.ReactHostDelegate
|
||||
import com.facebook.react.bridgeless.ReactHostImpl
|
||||
import com.facebook.react.bridgeless.hermes.HermesInstance
|
||||
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
||||
import com.facebook.react.config.ReactFeatureFlags
|
||||
import com.facebook.react.defaults.DefaultTurboModuleManagerDelegate
|
||||
import com.facebook.react.fabric.ReactNativeConfig
|
||||
import com.facebook.react.module.model.ReactModuleInfo
|
||||
import com.facebook.react.module.model.ReactModuleInfoProvider
|
||||
import com.facebook.react.shell.MainReactPackage
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManager
|
||||
import com.facebook.react.uiapp.component.MyLegacyViewManager
|
||||
import com.facebook.react.uiapp.component.MyNativeViewManager
|
||||
import com.facebook.react.uimanager.ViewManager
|
||||
|
||||
@UnstableReactNativeAPI
|
||||
class RNTesterReactHostDelegate internal constructor(context: Context) : ReactHostDelegate {
|
||||
var reactHost: ReactHostImpl? = null
|
||||
|
||||
override val jsMainModulePath: String = "js/RNTesterApp.android"
|
||||
|
||||
override val jsBundleLoader: JSBundleLoader =
|
||||
JSBundleLoader.createAssetLoader(context, "assets://RNTesterApp.android.bundle", true)
|
||||
|
||||
@get:Synchronized override val bindingsInstaller: BindingsInstaller? = null
|
||||
|
||||
override val turboModuleManagerDelegateBuilder: ReactPackageTurboModuleManagerDelegate.Builder =
|
||||
DefaultTurboModuleManagerDelegate.Builder()
|
||||
|
||||
override val jsEngineInstance: JSEngineInstance =
|
||||
if (reactHost?.jsEngineResolutionAlgorithm == JSEngineResolutionAlgorithm.JSC) {
|
||||
JSCInstance()
|
||||
} else {
|
||||
HermesInstance()
|
||||
}
|
||||
|
||||
override fun handleInstanceException(error: Exception) {}
|
||||
|
||||
override fun getReactNativeConfig(turboModuleManager: TurboModuleManager): ReactNativeConfig =
|
||||
ReactNativeConfig.DEFAULT_CONFIG
|
||||
|
||||
override val reactPackages: List<ReactPackage> by lazy {
|
||||
listOf(
|
||||
MainReactPackage(),
|
||||
object : TurboReactPackage() {
|
||||
override fun getModule(
|
||||
name: String,
|
||||
reactContext: ReactApplicationContext
|
||||
): NativeModule? =
|
||||
when {
|
||||
!ReactFeatureFlags.useTurboModules -> null
|
||||
name == SampleTurboModule.NAME -> SampleTurboModule(reactContext)
|
||||
name == SampleLegacyModule.NAME -> SampleLegacyModule(reactContext)
|
||||
else -> null
|
||||
}
|
||||
|
||||
// Note: Specialized annotation processor for @ReactModule isn't
|
||||
// configured in OSS
|
||||
// yet. For now, hardcode this information, though it's not necessary
|
||||
// for most modules
|
||||
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider =
|
||||
ReactModuleInfoProvider {
|
||||
if (ReactFeatureFlags.useTurboModules) {
|
||||
mapOf(
|
||||
SampleTurboModule.NAME to
|
||||
ReactModuleInfo(
|
||||
SampleTurboModule.NAME,
|
||||
"SampleTurboModule",
|
||||
false, // canOverrideExistingModule
|
||||
false, // needsEagerInit
|
||||
true, // hasConstants
|
||||
false, // isCxxModule
|
||||
true // isTurboModule
|
||||
),
|
||||
SampleLegacyModule.NAME to
|
||||
ReactModuleInfo(
|
||||
SampleLegacyModule.NAME,
|
||||
"SampleLegacyModule",
|
||||
false, // canOverrideExistingModule
|
||||
false, // needsEagerInit
|
||||
true, // hasConstants
|
||||
false, // isCxxModule
|
||||
false // isTurboModule
|
||||
),
|
||||
)
|
||||
} else {
|
||||
emptyMap()
|
||||
}
|
||||
}
|
||||
},
|
||||
object : ReactPackage {
|
||||
override fun createNativeModules(
|
||||
reactContext: ReactApplicationContext
|
||||
): List<NativeModule> = emptyList()
|
||||
|
||||
override fun createViewManagers(
|
||||
reactContext: ReactApplicationContext
|
||||
): List<ViewManager<*, *>> =
|
||||
listOf(MyNativeViewManager(), MyLegacyViewManager(reactContext))
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user