mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add CompositeReactPackageTurboModuleManagerDelegate [RFC]
Summary: This diff adds a CompositeReactPackageTurboModuleManagerDelegate which can be used to combine 1 or more TurboModuleManagerDelegates into a single one. This is useful when both the app and one or multiple of its libraries provides a TurboModuleManagerDelegate Changelog: [Internal] [Changed] - Add CompositeReactPackageTurboModuleManagerDelegate Reviewed By: mdvacca Differential Revision: D36187694 fbshipit-source-id: 88f1d689342345b4cb7e67186791ad5bd1a6f21b
This commit is contained in:
committed by
Facebook GitHub Bot
parent
7c581f3d30
commit
1f6451bd3f
+67
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import com.facebook.jni.HybridData;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManagerDelegate;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@DoNotStrip
|
||||
public class CompositeReactPackageTurboModuleManagerDelegate
|
||||
extends ReactPackageTurboModuleManagerDelegate {
|
||||
|
||||
private static volatile boolean sIsSoLibraryLoaded;
|
||||
|
||||
protected native HybridData initHybrid();
|
||||
|
||||
private final List<TurboModuleManagerDelegate> mDelegates;
|
||||
|
||||
private CompositeReactPackageTurboModuleManagerDelegate(
|
||||
ReactApplicationContext context,
|
||||
List<ReactPackage> packages,
|
||||
List<TurboModuleManagerDelegate> delegates) {
|
||||
super(context, packages);
|
||||
mDelegates = delegates;
|
||||
for (TurboModuleManagerDelegate delegate : delegates) {
|
||||
addTurboModuleManagerDelegate(delegate);
|
||||
}
|
||||
}
|
||||
|
||||
private native void addTurboModuleManagerDelegate(TurboModuleManagerDelegate delegates);
|
||||
|
||||
public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder {
|
||||
private final List<ReactPackageTurboModuleManagerDelegate.Builder> mDelegatesBuilder;
|
||||
|
||||
public Builder(@NonNull List<ReactPackageTurboModuleManagerDelegate.Builder> delegatesBuilder) {
|
||||
mDelegatesBuilder = delegatesBuilder;
|
||||
}
|
||||
|
||||
protected ReactPackageTurboModuleManagerDelegate build(
|
||||
ReactApplicationContext context, List<ReactPackage> packages) {
|
||||
List<TurboModuleManagerDelegate> delegates = new ArrayList<>();
|
||||
for (ReactPackageTurboModuleManagerDelegate.Builder delegatesBuilder : mDelegatesBuilder) {
|
||||
delegates.add(delegatesBuilder.build(context, Collections.<ReactPackage>emptyList()));
|
||||
}
|
||||
return new CompositeReactPackageTurboModuleManagerDelegate(context, packages, delegates);
|
||||
}
|
||||
}
|
||||
|
||||
protected synchronized void maybeLoadOtherSoLibraries() {
|
||||
// Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context.
|
||||
if (!sIsSoLibraryLoaded) {
|
||||
SoLoader.loadLibrary("turbomodulejsijni");
|
||||
sIsSoLibraryLoaded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user