Skip to content

Commit 9cb0261

Browse files
Provide easy registration of C++ TurboModules in rn-tester Android (#35225)
Summary: Pull Request resolved: #35225 Changelog: [Android] [Changed] - Provide easy registration of C++ TurboModules in rn-tester Android Reviewed By: javache Differential Revision: D41069277 fbshipit-source-id: 450de9302df2916acf324d4c316996b185b2833f
1 parent dac6806 commit 9cb0261

File tree

4 files changed

+44
-13
lines changed

4 files changed

+44
-13
lines changed

ReactAndroid/cmake-utils/default-app-setup/OnLoad.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,14 @@ void registerComponents(
4848
rncli_registerProviders(registry);
4949
}
5050

51-
std::shared_ptr<TurboModule> provideModules(
51+
std::shared_ptr<TurboModule> cxxModuleProvider(
52+
const std::string &name,
53+
const std::shared_ptr<CallInvoker> &jsInvoker) {
54+
// Not implemented yet: provide pure-C++ NativeModules here.
55+
return nullptr;
56+
}
57+
58+
std::shared_ptr<TurboModule> javaModuleProvider(
5259
const std::string &name,
5360
const JavaTurboModule::InitParams &params) {
5461
// Here you can provide your own module provider for TurboModules coming from
@@ -70,8 +77,10 @@ std::shared_ptr<TurboModule> provideModules(
7077

7178
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
7279
return facebook::jni::initialize(vm, [] {
73-
facebook::react::DefaultTurboModuleManagerDelegate::
74-
moduleProvidersFromEntryPoint = &facebook::react::provideModules;
80+
facebook::react::DefaultTurboModuleManagerDelegate::cxxModuleProvider =
81+
&facebook::react::cxxModuleProvider;
82+
facebook::react::DefaultTurboModuleManagerDelegate::javaModuleProvider =
83+
&facebook::react::javaModuleProvider;
7584
facebook::react::DefaultComponentsRegistry::
7685
registerComponentDescriptorsFromEntryPoint =
7786
&facebook::react::registerComponents;

ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,15 @@
1212
namespace facebook {
1313
namespace react {
1414

15+
std::function<std::shared_ptr<TurboModule>(
16+
const std::string &,
17+
const std::shared_ptr<CallInvoker> &)>
18+
DefaultTurboModuleManagerDelegate::cxxModuleProvider{nullptr};
19+
1520
std::function<std::shared_ptr<TurboModule>(
1621
const std::string &,
1722
const JavaTurboModule::InitParams &)>
18-
DefaultTurboModuleManagerDelegate::moduleProvidersFromEntryPoint{nullptr};
23+
DefaultTurboModuleManagerDelegate::javaModuleProvider{nullptr};
1924

2025
jni::local_ref<DefaultTurboModuleManagerDelegate::jhybriddata>
2126
DefaultTurboModuleManagerDelegate::initHybrid(jni::alias_ref<jhybridobject>) {
@@ -32,17 +37,21 @@ void DefaultTurboModuleManagerDelegate::registerNatives() {
3237
std::shared_ptr<TurboModule> DefaultTurboModuleManagerDelegate::getTurboModule(
3338
const std::string &name,
3439
const std::shared_ptr<CallInvoker> &jsInvoker) {
35-
// Not implemented yet: provide pure-C++ NativeModules here.
40+
auto moduleProvider = DefaultTurboModuleManagerDelegate::cxxModuleProvider;
41+
if (moduleProvider) {
42+
return moduleProvider(name, jsInvoker);
43+
}
3644
return nullptr;
3745
}
3846

3947
std::shared_ptr<TurboModule> DefaultTurboModuleManagerDelegate::getTurboModule(
4048
const std::string &name,
4149
const JavaTurboModule::InitParams &params) {
42-
auto resolvedModule = (DefaultTurboModuleManagerDelegate::
43-
moduleProvidersFromEntryPoint)(name, params);
44-
if (resolvedModule != nullptr) {
45-
return resolvedModule;
50+
auto moduleProvider = DefaultTurboModuleManagerDelegate::javaModuleProvider;
51+
if (moduleProvider) {
52+
if (auto resolvedModule = moduleProvider(name, params)) {
53+
return resolvedModule;
54+
}
4655
}
4756
return rncore_ModuleProvider(name, params);
4857
}

ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,15 @@ class DefaultTurboModuleManagerDelegate : public jni::HybridClass<
2727

2828
static void registerNatives();
2929

30+
static std::function<std::shared_ptr<TurboModule>(
31+
const std::string &,
32+
const std::shared_ptr<CallInvoker> &)>
33+
cxxModuleProvider;
34+
3035
static std::function<std::shared_ptr<TurboModule>(
3136
const std::string &,
3237
const JavaTurboModule::InitParams &)>
33-
moduleProvidersFromEntryPoint;
38+
javaModuleProvider;
3439

3540
std::shared_ptr<TurboModule> getTurboModule(
3641
const std::string &name,

packages/rn-tester/android/app/src/main/jni/OnLoad.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@ void registerComponents(
2323
RNTMyNativeViewComponentDescriptor>());
2424
}
2525

26-
std::shared_ptr<TurboModule> provideModules(
26+
std::shared_ptr<TurboModule> cxxModuleProvider(
27+
const std::string &name,
28+
const std::shared_ptr<CallInvoker> &jsInvoker) {
29+
return nullptr;
30+
}
31+
32+
std::shared_ptr<TurboModule> javaModuleProvider(
2733
const std::string &name,
2834
const JavaTurboModule::InitParams &params) {
2935
auto module = AppSpecs_ModuleProvider(name, params);
@@ -42,8 +48,10 @@ std::shared_ptr<TurboModule> provideModules(
4248

4349
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
4450
return facebook::jni::initialize(vm, [] {
45-
facebook::react::DefaultTurboModuleManagerDelegate::
46-
moduleProvidersFromEntryPoint = &facebook::react::provideModules;
51+
facebook::react::DefaultTurboModuleManagerDelegate::cxxModuleProvider =
52+
&facebook::react::cxxModuleProvider;
53+
facebook::react::DefaultTurboModuleManagerDelegate::javaModuleProvider =
54+
&facebook::react::javaModuleProvider;
4755
facebook::react::DefaultComponentsRegistry::
4856
registerComponentDescriptorsFromEntryPoint =
4957
&facebook::react::registerComponents;

0 commit comments

Comments
 (0)