mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-05 22:56:11 +00:00
fix: react-native@0.73 sourceSet to maintain support (#2543)
# Summary #2541 is not compatible with `react-native@0.73`. This PR introduces sourceSet to maintain support for that version. ## Test Plan Build app with `react-native@0.73.x` ## Compatibility | OS | Implemented | | ------- | :---------: | | Android | ✅ |
This commit is contained in:
@@ -118,10 +118,21 @@ android {
|
|||||||
"src/paper/java",
|
"src/paper/java",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
if (getReactNativeMinorVersion() >= 75) {
|
|
||||||
srcDirs += "src/borderRadiusRn75/java"
|
if (getReactNativeMinorVersion() >= 75) { // borderRadius fix https://github.com/software-mansion/react-native-svg/pull/2415
|
||||||
|
// Use for react-native@0.75 and above
|
||||||
|
srcDirs += "src/SvgViewManager75/java"
|
||||||
} else {
|
} else {
|
||||||
srcDirs += "src/transformRn73/java"
|
// Maintain compatibility with react-native@0.73 and react-native@0.74
|
||||||
|
srcDirs += "src/SvgViewManager73/java"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getReactNativeMinorVersion() >= 74) { // new API https://github.com/software-mansion/react-native-svg/pull/2541
|
||||||
|
// Use for react-native@0.74 and above
|
||||||
|
srcDirs += "src/SvgPackage74/java"
|
||||||
|
} else {
|
||||||
|
// Maintain compatibility with react-native@0.73
|
||||||
|
srcDirs += "src/SvgPackage73/java"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
390
android/src/SvgPackage73/java/com/horcrux/svg/SvgPackage.java
Normal file
390
android/src/SvgPackage73/java/com/horcrux/svg/SvgPackage.java
Normal file
@@ -0,0 +1,390 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015-present, Horcrux.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT-style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.horcrux.svg;
|
||||||
|
|
||||||
|
import static com.horcrux.svg.RenderableViewManager.*;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import com.facebook.react.TurboReactPackage;
|
||||||
|
import com.facebook.react.ViewManagerOnDemandReactPackage;
|
||||||
|
import com.facebook.react.bridge.JavaScriptModule;
|
||||||
|
import com.facebook.react.bridge.ModuleSpec;
|
||||||
|
import com.facebook.react.bridge.NativeModule;
|
||||||
|
import com.facebook.react.bridge.ReactApplicationContext;
|
||||||
|
import com.facebook.react.common.MapBuilder;
|
||||||
|
import com.facebook.react.module.annotations.ReactModule;
|
||||||
|
import com.facebook.react.module.annotations.ReactModuleList;
|
||||||
|
import com.facebook.react.module.model.ReactModuleInfo;
|
||||||
|
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
||||||
|
import com.facebook.react.uimanager.ViewManager;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.inject.Provider;
|
||||||
|
|
||||||
|
@ReactModuleList(
|
||||||
|
nativeModules = {
|
||||||
|
SvgViewModule.class,
|
||||||
|
RNSVGRenderableManager.class,
|
||||||
|
})
|
||||||
|
public class SvgPackage extends TurboReactPackage implements ViewManagerOnDemandReactPackage {
|
||||||
|
|
||||||
|
private @Nullable Map<String, ModuleSpec> mViewManagers;
|
||||||
|
|
||||||
|
private Map<String, ModuleSpec> getViewManagersMap(final ReactApplicationContext reactContext) {
|
||||||
|
if (mViewManagers == null) {
|
||||||
|
Map<String, ModuleSpec> specs = MapBuilder.newHashMap();
|
||||||
|
specs.put(
|
||||||
|
GroupViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new GroupViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
PathViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new PathViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
CircleViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new CircleViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
EllipseViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new EllipseViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
LineViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new LineViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
RectViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new RectViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
TextViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new TextViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
TSpanViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new TSpanViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
TextPathViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new TextPathViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
ImageViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new ImageViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
ClipPathViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new ClipPathViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
DefsViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new DefsViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
UseViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new UseViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
SymbolManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new SymbolManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
LinearGradientManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new LinearGradientManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
RadialGradientManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new RadialGradientManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
PatternManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new PatternManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
MaskManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new MaskManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FilterManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FilterManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeBlendManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeBlendManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeColorMatrixManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeColorMatrixManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeCompositeManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeCompositeManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeFloodManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeFloodManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeGaussianBlurManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeGaussianBlurManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeMergeManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeMergeManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
FeOffsetManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new FeOffsetManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
ForeignObjectManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new ForeignObjectManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
MarkerManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new MarkerManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
specs.put(
|
||||||
|
SvgViewManager.REACT_CLASS,
|
||||||
|
ModuleSpec.viewManagerSpec(
|
||||||
|
new Provider<NativeModule>() {
|
||||||
|
@Override
|
||||||
|
public NativeModule get() {
|
||||||
|
return new SvgViewManager();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
mViewManagers = specs;
|
||||||
|
}
|
||||||
|
return mViewManagers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public List<String> getViewManagerNames(ReactApplicationContext reactContext) {
|
||||||
|
return new ArrayList<>(getViewManagersMap(reactContext).keySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<ModuleSpec> getViewManagers(ReactApplicationContext reactContext) {
|
||||||
|
return new ArrayList<>(getViewManagersMap(reactContext).values());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@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 NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) {
|
||||||
|
switch (name) {
|
||||||
|
case SvgViewModule.NAME:
|
||||||
|
return new SvgViewModule(reactContext);
|
||||||
|
case RNSVGRenderableManager.NAME:
|
||||||
|
return new RNSVGRenderableManager(reactContext);
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReactModuleInfoProvider getReactModuleInfoProvider() {
|
||||||
|
try {
|
||||||
|
Class<?> reactModuleInfoProviderClass =
|
||||||
|
Class.forName("com.horcrux.svg.SvgPackage$$ReactModuleInfoProvider");
|
||||||
|
return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance();
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
// ReactModuleSpecProcessor does not run at build-time. Create this ReactModuleInfoProvider by
|
||||||
|
// hand.
|
||||||
|
return new ReactModuleInfoProvider() {
|
||||||
|
@Override
|
||||||
|
public Map<String, ReactModuleInfo> getReactModuleInfos() {
|
||||||
|
final Map<String, ReactModuleInfo> reactModuleInfoMap = new HashMap<>();
|
||||||
|
|
||||||
|
Class<? extends NativeModule>[] moduleList =
|
||||||
|
new Class[] {
|
||||||
|
SvgViewModule.class, RNSVGRenderableManager.class,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (Class<? extends NativeModule> moduleClass : moduleList) {
|
||||||
|
ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class);
|
||||||
|
|
||||||
|
reactModuleInfoMap.put(
|
||||||
|
reactModule.name(),
|
||||||
|
new ReactModuleInfo(
|
||||||
|
reactModule.name(),
|
||||||
|
moduleClass.getName(),
|
||||||
|
reactModule.canOverrideExistingModule(),
|
||||||
|
reactModule.needsEagerInit(),
|
||||||
|
reactModule.hasConstants(),
|
||||||
|
reactModule.isCxxModule(),
|
||||||
|
true));
|
||||||
|
}
|
||||||
|
|
||||||
|
return reactModuleInfoMap;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} catch (InstantiationException | IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"No ReactModuleInfoProvider for MyPackage$$ReactModuleInfoProvider", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public List<Class<? extends JavaScriptModule>> createJSModules() {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user