Migrate packages to not eager initialize view managers

Summary:
Migrate packages need for Catalyst app to use lazy view manager initialisation

Changelog:
[Android][Changed] - Migrate packages to not eager initialize view managers

Reviewed By: javache

Differential Revision: D43711708

fbshipit-source-id: fd172fc664d68fb7ee1d5a980516cdf48e30a979
This commit is contained in:
Lulu Wu 2023-03-06 03:28:32 -08:00 коммит произвёл Facebook GitHub Bot
Родитель d2dd79f3c5
Коммит d7eb3bfcb3
1 изменённых файлов: 182 добавлений и 1 удалений

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

@ -9,7 +9,9 @@ package com.facebook.react.shell;
import androidx.annotation.Nullable;
import com.facebook.react.TurboReactPackage;
import com.facebook.react.ViewManagerOnDemandReactPackage;
import com.facebook.react.animated.NativeAnimatedModule;
import com.facebook.react.bridge.ModuleSpec;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.annotations.ReactModule;
@ -38,6 +40,7 @@ import com.facebook.react.modules.toast.ToastModule;
import com.facebook.react.modules.vibration.VibrationModule;
import com.facebook.react.modules.websocket.WebSocketModule;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import com.facebook.react.uimanager.UIManagerModule;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.views.drawer.ReactDrawerLayoutManager;
import com.facebook.react.views.image.ReactImageManager;
@ -56,9 +59,11 @@ import com.facebook.react.views.textinput.ReactTextInputManager;
import com.facebook.react.views.unimplementedview.ReactUnimplementedViewManager;
import com.facebook.react.views.view.ReactViewManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Provider;
/** Package defining basic modules and view managers. */
@ReactModuleList(
@ -85,9 +90,10 @@ import java.util.Map;
VibrationModule.class,
WebSocketModule.class,
})
public class MainReactPackage extends TurboReactPackage {
public class MainReactPackage extends TurboReactPackage implements ViewManagerOnDemandReactPackage {
private MainPackageConfig mConfig;
private @Nullable Map<String, ModuleSpec> mViewManagers;
public MainReactPackage() {}
@ -175,6 +181,181 @@ public class MainReactPackage extends TurboReactPackage {
return viewManagers;
}
private static void appendMap(
Map<String, ModuleSpec> map, String name, Provider<? extends NativeModule> provider) {
map.put(name, ModuleSpec.viewManagerSpec(provider));
}
/** @return a map of view managers that should be registered with {@link UIManagerModule} */
public Map<String, ModuleSpec> getViewManagersMap(final ReactApplicationContext reactContext) {
if (mViewManagers == null) {
Map<String, ModuleSpec> viewManagers = new HashMap<>();
appendMap(
viewManagers,
ReactDrawerLayoutManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactDrawerLayoutManager();
}
});
appendMap(
viewManagers,
ReactHorizontalScrollViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactHorizontalScrollViewManager();
}
});
appendMap(
viewManagers,
ReactHorizontalScrollContainerViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactHorizontalScrollContainerViewManager();
}
});
appendMap(
viewManagers,
ReactProgressBarViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactProgressBarViewManager();
}
});
appendMap(
viewManagers,
ReactScrollViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactScrollViewManager();
}
});
appendMap(
viewManagers,
ReactSwitchManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactSwitchManager();
}
});
appendMap(
viewManagers,
SwipeRefreshLayoutManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new SwipeRefreshLayoutManager();
}
});
appendMap(
viewManagers,
FrescoBasedReactTextInlineImageViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new FrescoBasedReactTextInlineImageViewManager();
}
});
appendMap(
viewManagers,
ReactImageManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactImageManager();
}
});
appendMap(
viewManagers,
ReactModalHostManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactModalHostManager();
}
});
appendMap(
viewManagers,
ReactRawTextManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactRawTextManager();
}
});
appendMap(
viewManagers,
ReactTextInputManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactTextInputManager();
}
});
appendMap(
viewManagers,
ReactTextViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactTextViewManager();
}
});
appendMap(
viewManagers,
ReactViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactViewManager();
}
});
appendMap(
viewManagers,
ReactVirtualTextViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactVirtualTextViewManager();
}
});
appendMap(
viewManagers,
ReactUnimplementedViewManager.REACT_CLASS,
new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new ReactUnimplementedViewManager();
}
});
mViewManagers = viewManagers;
}
return mViewManagers;
}
@Override
public List<ModuleSpec> getViewManagers(ReactApplicationContext reactContext) {
return new ArrayList<>(getViewManagersMap(reactContext).values());
}
@Override
public Collection<String> getViewManagerNames(ReactApplicationContext reactContext) {
return getViewManagersMap(reactContext).keySet();
}
@Override
public @Nullable ViewManager createViewManager(
ReactApplicationContext reactContext, String viewManagerName) {
ModuleSpec spec = getViewManagersMap(reactContext).get(viewManagerName);
return spec != null ? (ViewManager) spec.getProvider().get() : null;
}
@Override
public ReactModuleInfoProvider getReactModuleInfoProvider() {
try {