react-native-reanimated 2.3.3 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +72 -0
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +30 -1
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +64 -39
- package/Common/cpp/Tools/RuntimeDecorator.cpp +2 -0
- package/Common/cpp/headers/AnimatedSensor/AnimatedSensorModule.h +41 -0
- package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +14 -0
- package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +14 -0
- package/Common/cpp/headers/SharedItems/MutableValue.h +4 -1
- package/Common/cpp/headers/SharedItems/ShareableValue.h +3 -0
- package/Common/cpp/headers/SharedItems/ValueWrapper.h +3 -0
- package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +11 -0
- package/Common/cpp/headers/Tools/RuntimeDecorator.h +2 -0
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.2/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/7.2/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/CMakeLists.txt +198 -0
- package/android/README.md +15 -0
- package/android/build.gradle +686 -73
- package/android/empty.cpp +1 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradle.properties +25 -0
- package/android/gradlew +234 -0
- package/android/gradlew.bat +89 -0
- package/android/react-native-reanimated-64-hermes.aar +0 -0
- package/android/react-native-reanimated-64-jsc.aar +0 -0
- package/android/react-native-reanimated-65-hermes.aar +0 -0
- package/android/react-native-reanimated-65-jsc.aar +0 -0
- package/android/react-native-reanimated-66-hermes.aar +0 -0
- package/android/react-native-reanimated-66-jsc.aar +0 -0
- package/android/react-native-reanimated-67-hermes.aar +0 -0
- package/android/react-native-reanimated-67-jsc.aar +0 -0
- package/android/react-native-reanimated-68-hermes.aar +0 -0
- package/android/react-native-reanimated-68-jsc.aar +0 -0
- package/android/rnVersionPatch/62/layoutReanimation/ReanimatedNativeHierarchyManager.java +412 -0
- package/android/rnVersionPatch/62/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/rnVersionPatch/63/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/rnVersionPatch/64/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/rnVersionPatch/65/.gitkeep +0 -0
- package/android/rnVersionPatch/66/.gitkeep +0 -0
- package/android/rnVersionPatch/67/.gitkeep +0 -0
- package/android/rnVersionPatch/68/.gitkeep +0 -0
- package/android/rnVersionPatch/backup/.gitkeep +0 -0
- package/android/settings.gradle +1 -0
- package/android/spotless.gradle +9 -0
- package/android/src/{AndroidManifest.xml → main/AndroidManifest.xml} +0 -0
- package/android/src/main/cpp/AndroidErrorHandler.cpp +42 -0
- package/android/src/main/cpp/AndroidLogger.cpp +27 -0
- package/android/src/main/cpp/AndroidScheduler.cpp +59 -0
- package/android/src/main/cpp/JNIHelper.cpp +59 -0
- package/android/src/main/cpp/LayoutAnimations.cpp +103 -0
- package/android/src/main/cpp/NativeProxy.cpp +327 -0
- package/android/src/main/cpp/OnLoad.cpp +17 -0
- package/android/src/main/cpp/TurboModule.cpp +44 -0
- package/android/src/main/cpp/headers/AndroidErrorHandler.h +30 -0
- package/android/src/main/cpp/headers/AndroidLogger.h +16 -0
- package/android/src/main/cpp/headers/AndroidScheduler.h +41 -0
- package/android/src/main/cpp/headers/JNIHelper.h +30 -0
- package/android/src/main/cpp/headers/LayoutAnimations.h +42 -0
- package/android/src/main/cpp/headers/NativeProxy.h +170 -0
- package/android/src/main/cpp/headers/TurboModule.h +70 -0
- package/android/src/main/java/com/facebook/react/uimanager/UIManagerReanimatedHelper.java +15 -0
- package/android/src/main/java/com/swmansion/common/GestureHandlerStateManager.java +5 -0
- package/android/src/main/java/com/swmansion/reanimated/AndroidErrorHandler.java +8 -0
- package/android/src/main/java/com/swmansion/reanimated/CopiedEvent.java +43 -0
- package/android/src/main/java/com/swmansion/reanimated/MapUtils.java +26 -0
- package/android/src/main/java/com/swmansion/reanimated/NativeMethodsHelper.java +117 -0
- package/android/src/main/java/com/swmansion/reanimated/NativeProxy.java +285 -0
- package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +682 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedJSIModulePackage.java +29 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedModule.java +251 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +96 -0
- package/android/src/main/java/com/swmansion/reanimated/Scheduler.java +51 -0
- package/android/src/main/java/com/swmansion/reanimated/UpdateContext.java +11 -0
- package/android/src/main/java/com/swmansion/reanimated/Utils.java +32 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +517 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +56 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +11 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +410 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +292 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +121 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ViewHierarchyObserver.java +12 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/AlwaysNode.java +29 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/BezierNode.java +87 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/BlockNode.java +24 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/CallFuncNode.java +49 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ClockNode.java +38 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ClockOpNode.java +73 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ConcatNode.java +36 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/CondNode.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/DebugNode.java +33 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/EventNode.java +83 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/FinalNode.java +5 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/FunctionNode.java +20 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/JSCallNode.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/Node.java +139 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/NoopNode.java +37 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/OperatorNode.java +377 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ParamNode.java +71 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java +153 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/SetNode.java +32 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/StyleNode.java +40 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/TransformNode.java +84 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ValueNode.java +40 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +40 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorType.java +35 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/ChangeTransition.java +84 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/SaneSidePropagation.java +25 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/Scale.java +86 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionModule.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionUtils.java +161 -0
- package/ios/LayoutReanimation/REAAnimationsManager.h +1 -1
- package/ios/LayoutReanimation/REAAnimationsManager.m +18 -4
- package/ios/REAModule.m +8 -9
- package/ios/REANodesManager.h +4 -1
- package/ios/REANodesManager.m +75 -3
- package/ios/native/NativeMethods.h +1 -1
- package/ios/native/NativeProxy.mm +85 -5
- package/ios/sensor/ReanimatedSensor.h +21 -0
- package/ios/sensor/ReanimatedSensor.m +169 -0
- package/ios/sensor/ReanimatedSensorContainer.h +13 -0
- package/ios/sensor/ReanimatedSensorContainer.m +41 -0
- package/ios/sensor/ReanimatedSensorType.h +7 -0
- package/lib/ConfigHelper.js +2 -2
- package/lib/createAnimatedComponent.js +3 -4
- package/lib/reanimated1/core/AnimatedFunction.js +1 -1
- package/lib/reanimated1/derived/interpolate.js +2 -4
- package/lib/reanimated2/Colors.js +3 -98
- package/lib/reanimated2/Easing.js +5 -0
- package/lib/reanimated2/NativeMethods.js +15 -5
- package/lib/reanimated2/NativeReanimated/NativeReanimated.js +25 -12
- package/lib/reanimated2/NativeReanimated/index.js +2 -6
- package/lib/reanimated2/ViewDescriptorsSet.js +2 -2
- package/lib/reanimated2/animation/styleAnimation.js +2 -1
- package/lib/reanimated2/core.js +30 -24
- package/lib/reanimated2/globals.d.ts +6 -0
- package/lib/reanimated2/hook/index.js +1 -0
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +1 -2
- package/lib/reanimated2/hook/useAnimatedSensor.js +66 -0
- package/lib/reanimated2/hook/useAnimatedStyle.js +31 -14
- package/lib/reanimated2/hook/utils.js +14 -11
- package/lib/reanimated2/index.js +2 -0
- package/lib/reanimated2/interpolateColor.js +98 -0
- package/lib/reanimated2/interpolation.js +1 -1
- package/lib/reanimated2/jestUtils.js +9 -4
- package/lib/reanimated2/js-reanimated/JSReanimated.js +24 -3
- package/lib/reanimated2/js-reanimated/commonTypes.js +1 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +8 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +2 -1
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +32 -42
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +20 -38
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +32 -44
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -16
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +6 -10
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +20 -36
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +16 -20
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +8 -12
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +32 -48
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +22 -18
- package/lib/reanimated2/mock.js +3 -2
- package/mock.js +6 -4
- package/package.json +44 -36
- package/plugin.js +3 -0
- package/react-native-reanimated.d.ts +102 -15
- package/src/ConfigHelper.ts +4 -4
- package/src/createAnimatedComponent.tsx +3 -3
- package/src/reanimated1/core/AnimatedFunction.js +1 -1
- package/src/reanimated1/derived/interpolate.js +2 -4
- package/src/reanimated2/Colors.ts +8 -151
- package/src/reanimated2/Easing.ts +11 -0
- package/src/reanimated2/NativeMethods.ts +19 -6
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +42 -14
- package/src/reanimated2/NativeReanimated/index.ts +2 -8
- package/src/reanimated2/ViewDescriptorsSet.ts +2 -3
- package/src/reanimated2/animation/commonTypes.ts +44 -40
- package/src/reanimated2/animation/decay.ts +1 -1
- package/src/reanimated2/animation/delay.ts +2 -16
- package/src/reanimated2/animation/index.ts +8 -8
- package/src/reanimated2/animation/repeat.ts +2 -12
- package/src/reanimated2/animation/sequence.ts +3 -10
- package/src/reanimated2/animation/spring.ts +1 -1
- package/src/reanimated2/animation/styleAnimation.ts +11 -25
- package/src/reanimated2/animation/timing.ts +4 -2
- package/src/reanimated2/animation/util.ts +22 -20
- package/src/reanimated2/commonTypes.ts +68 -1
- package/src/reanimated2/component/FlatList.tsx +2 -1
- package/src/reanimated2/core.ts +35 -29
- package/src/reanimated2/globals.d.ts +6 -0
- package/src/reanimated2/hook/commonTypes.ts +5 -0
- package/src/reanimated2/hook/index.ts +1 -0
- package/src/reanimated2/hook/useAnimatedGestureHandler.ts +1 -2
- package/src/reanimated2/hook/useAnimatedRef.ts +1 -5
- package/src/reanimated2/hook/useAnimatedSensor.ts +91 -0
- package/src/reanimated2/hook/useAnimatedStyle.ts +35 -16
- package/src/reanimated2/hook/utils.ts +20 -18
- package/src/reanimated2/index.ts +2 -0
- package/src/reanimated2/interpolateColor.ts +178 -0
- package/src/reanimated2/interpolation.ts +2 -6
- package/src/reanimated2/jestUtils.ts +9 -4
- package/src/reanimated2/js-reanimated/JSReanimated.ts +28 -6
- package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
- package/src/reanimated2/js-reanimated/MapperRegistry.ts +1 -1
- package/src/reanimated2/js-reanimated/commonTypes.ts +51 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +13 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +2 -3
- package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +51 -21
- package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +40 -10
- package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +48 -12
- package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +16 -4
- package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +8 -2
- package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +16 -4
- package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +32 -8
- package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -10
- package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +16 -4
- package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +64 -16
- package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +32 -21
- package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +2 -1
- package/src/reanimated2/mock.ts +3 -2
- package/src/reanimated2/utils.ts +1 -1
- package/android/react-native-reanimated-63-hermes.aar +0 -0
- package/android/react-native-reanimated-63-jsc.aar +0 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedProxyPackage.java +0 -15
- package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
package com.swmansion.reanimated;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
import com.facebook.react.bridge.Callback;
|
|
5
|
+
import com.facebook.react.bridge.LifecycleEventListener;
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
8
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
9
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
10
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
11
|
+
import com.facebook.react.uimanager.NativeViewHierarchyManager;
|
|
12
|
+
import com.facebook.react.uimanager.UIBlock;
|
|
13
|
+
import com.facebook.react.uimanager.UIManagerModule;
|
|
14
|
+
import com.facebook.react.uimanager.UIManagerModuleListener;
|
|
15
|
+
import com.swmansion.reanimated.transitions.TransitionModule;
|
|
16
|
+
import java.util.ArrayList;
|
|
17
|
+
import javax.annotation.Nullable;
|
|
18
|
+
|
|
19
|
+
@ReactModule(name = ReanimatedModule.NAME)
|
|
20
|
+
public class ReanimatedModule extends ReactContextBaseJavaModule
|
|
21
|
+
implements LifecycleEventListener, UIManagerModuleListener {
|
|
22
|
+
|
|
23
|
+
public static final String NAME = "ReanimatedModule";
|
|
24
|
+
|
|
25
|
+
private interface UIThreadOperation {
|
|
26
|
+
void execute(NodesManager nodesManager);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private ArrayList<UIThreadOperation> mOperations = new ArrayList<>();
|
|
30
|
+
|
|
31
|
+
private @Nullable NodesManager mNodesManager;
|
|
32
|
+
private @Nullable TransitionModule mTransitionManager;
|
|
33
|
+
|
|
34
|
+
private UIManagerModule mUIManager;
|
|
35
|
+
|
|
36
|
+
public ReanimatedModule(ReactApplicationContext reactContext) {
|
|
37
|
+
super(reactContext);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@Override
|
|
41
|
+
public void initialize() {
|
|
42
|
+
ReactApplicationContext reactCtx = getReactApplicationContext();
|
|
43
|
+
UIManagerModule uiManager = reactCtx.getNativeModule(UIManagerModule.class);
|
|
44
|
+
reactCtx.addLifecycleEventListener(this);
|
|
45
|
+
uiManager.addUIManagerListener(this);
|
|
46
|
+
mTransitionManager = new TransitionModule(uiManager);
|
|
47
|
+
|
|
48
|
+
mUIManager = uiManager;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Override
|
|
52
|
+
public void onHostPause() {
|
|
53
|
+
if (mNodesManager != null) {
|
|
54
|
+
mNodesManager.onHostPause();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Override
|
|
59
|
+
public void onHostResume() {
|
|
60
|
+
if (mNodesManager != null) {
|
|
61
|
+
mNodesManager.onHostResume();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Override
|
|
66
|
+
public void onHostDestroy() {
|
|
67
|
+
// do nothing
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@Override
|
|
71
|
+
public void willDispatchViewUpdates(final UIManagerModule uiManager) {
|
|
72
|
+
if (mOperations.isEmpty()) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
final ArrayList<UIThreadOperation> operations = mOperations;
|
|
76
|
+
mOperations = new ArrayList<>();
|
|
77
|
+
uiManager.addUIBlock(
|
|
78
|
+
new UIBlock() {
|
|
79
|
+
@Override
|
|
80
|
+
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
|
|
81
|
+
NodesManager nodesManager = getNodesManager();
|
|
82
|
+
for (UIThreadOperation operation : operations) {
|
|
83
|
+
operation.execute(nodesManager);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Override
|
|
90
|
+
public String getName() {
|
|
91
|
+
return NAME;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/*package*/
|
|
95
|
+
public NodesManager getNodesManager() {
|
|
96
|
+
if (mNodesManager == null) {
|
|
97
|
+
mNodesManager = new NodesManager(getReactApplicationContext());
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return mNodesManager;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
104
|
+
public void installTurboModule() {
|
|
105
|
+
// When debugging in chrome the JS context is not available.
|
|
106
|
+
// https://github.com/facebook/react-native/blob/v0.67.0-rc.6/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.java#L25
|
|
107
|
+
Utils.isChromeDebugger = getReactApplicationContext().getJavaScriptContextHolder().get() == 0;
|
|
108
|
+
|
|
109
|
+
if (!Utils.isChromeDebugger) {
|
|
110
|
+
this.getNodesManager().initWithContext(getReactApplicationContext());
|
|
111
|
+
} else {
|
|
112
|
+
Log.w(
|
|
113
|
+
"[REANIMATED]",
|
|
114
|
+
"Unable to create Reanimated Native Module. You can ignore this message if you are using Chrome Debugger now.");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@ReactMethod
|
|
119
|
+
public void animateNextTransition(int tag, ReadableMap config) {
|
|
120
|
+
mTransitionManager.animateNextTransition(tag, config);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@ReactMethod
|
|
124
|
+
public void createNode(final int tag, final ReadableMap config) {
|
|
125
|
+
mOperations.add(
|
|
126
|
+
new UIThreadOperation() {
|
|
127
|
+
@Override
|
|
128
|
+
public void execute(NodesManager nodesManager) {
|
|
129
|
+
nodesManager.createNode(tag, config);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@ReactMethod
|
|
135
|
+
public void dropNode(final int tag) {
|
|
136
|
+
mOperations.add(
|
|
137
|
+
new UIThreadOperation() {
|
|
138
|
+
@Override
|
|
139
|
+
public void execute(NodesManager nodesManager) {
|
|
140
|
+
nodesManager.dropNode(tag);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@ReactMethod
|
|
146
|
+
public void connectNodes(final int parentID, final int childID) {
|
|
147
|
+
mOperations.add(
|
|
148
|
+
new UIThreadOperation() {
|
|
149
|
+
@Override
|
|
150
|
+
public void execute(NodesManager nodesManager) {
|
|
151
|
+
nodesManager.connectNodes(parentID, childID);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@ReactMethod
|
|
157
|
+
public void disconnectNodes(final int parentID, final int childID) {
|
|
158
|
+
mOperations.add(
|
|
159
|
+
new UIThreadOperation() {
|
|
160
|
+
@Override
|
|
161
|
+
public void execute(NodesManager nodesManager) {
|
|
162
|
+
nodesManager.disconnectNodes(parentID, childID);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@ReactMethod
|
|
168
|
+
public void connectNodeToView(final int nodeID, final int viewTag) {
|
|
169
|
+
mOperations.add(
|
|
170
|
+
new UIThreadOperation() {
|
|
171
|
+
@Override
|
|
172
|
+
public void execute(NodesManager nodesManager) {
|
|
173
|
+
nodesManager.connectNodeToView(nodeID, viewTag);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@ReactMethod
|
|
179
|
+
public void disconnectNodeFromView(final int nodeID, final int viewTag) {
|
|
180
|
+
mOperations.add(
|
|
181
|
+
new UIThreadOperation() {
|
|
182
|
+
@Override
|
|
183
|
+
public void execute(NodesManager nodesManager) {
|
|
184
|
+
nodesManager.disconnectNodeFromView(nodeID, viewTag);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@ReactMethod
|
|
190
|
+
public void attachEvent(final int viewTag, final String eventName, final int eventNodeID) {
|
|
191
|
+
mOperations.add(
|
|
192
|
+
new UIThreadOperation() {
|
|
193
|
+
@Override
|
|
194
|
+
public void execute(NodesManager nodesManager) {
|
|
195
|
+
nodesManager.attachEvent(viewTag, eventName, eventNodeID);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
@ReactMethod
|
|
201
|
+
public void detachEvent(final int viewTag, final String eventName, final int eventNodeID) {
|
|
202
|
+
mOperations.add(
|
|
203
|
+
new UIThreadOperation() {
|
|
204
|
+
@Override
|
|
205
|
+
public void execute(NodesManager nodesManager) {
|
|
206
|
+
nodesManager.detachEvent(viewTag, eventName, eventNodeID);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
@ReactMethod
|
|
212
|
+
public void getValue(final int nodeID, final Callback callback) {
|
|
213
|
+
mOperations.add(
|
|
214
|
+
new UIThreadOperation() {
|
|
215
|
+
@Override
|
|
216
|
+
public void execute(NodesManager nodesManager) {
|
|
217
|
+
nodesManager.getValue(nodeID, callback);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
@ReactMethod
|
|
223
|
+
public void setValue(final int nodeID, final Double newValue) {
|
|
224
|
+
mOperations.add(
|
|
225
|
+
new UIThreadOperation() {
|
|
226
|
+
@Override
|
|
227
|
+
public void execute(NodesManager nodesManager) {
|
|
228
|
+
nodesManager.setValue(nodeID, newValue);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@ReactMethod
|
|
234
|
+
public void addListener(String eventName) {
|
|
235
|
+
// Keep: Required for RN built in Event Emitter Calls.
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@ReactMethod
|
|
239
|
+
public void removeListeners(Integer count) {
|
|
240
|
+
// Keep: Required for RN built in Event Emitter Calls.
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
@Override
|
|
244
|
+
public void onCatalystInstanceDestroy() {
|
|
245
|
+
super.onCatalystInstanceDestroy();
|
|
246
|
+
|
|
247
|
+
if (mNodesManager != null) {
|
|
248
|
+
mNodesManager.onCatalystInstanceDestroy();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
package com.swmansion.reanimated;
|
|
2
|
+
|
|
3
|
+
import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_END;
|
|
4
|
+
import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_START;
|
|
5
|
+
|
|
6
|
+
import com.facebook.react.ReactApplication;
|
|
7
|
+
import com.facebook.react.ReactInstanceManager;
|
|
8
|
+
import com.facebook.react.ReactPackage;
|
|
9
|
+
import com.facebook.react.TurboReactPackage;
|
|
10
|
+
import com.facebook.react.bridge.NativeModule;
|
|
11
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
12
|
+
import com.facebook.react.bridge.ReactMarker;
|
|
13
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
14
|
+
import com.facebook.react.module.model.ReactModuleInfo;
|
|
15
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
16
|
+
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
17
|
+
import com.facebook.react.uimanager.ReanimatedUIManager;
|
|
18
|
+
import com.facebook.react.uimanager.UIManagerModule;
|
|
19
|
+
import com.facebook.systrace.Systrace;
|
|
20
|
+
import java.util.HashMap;
|
|
21
|
+
import java.util.Map;
|
|
22
|
+
|
|
23
|
+
public class ReanimatedPackage extends TurboReactPackage implements ReactPackage {
|
|
24
|
+
|
|
25
|
+
@Override
|
|
26
|
+
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
|
|
27
|
+
if (name.equals(ReanimatedModule.NAME)) {
|
|
28
|
+
return new ReanimatedModule(reactContext);
|
|
29
|
+
}
|
|
30
|
+
if (name.equals(ReanimatedUIManager.NAME)) {
|
|
31
|
+
return createUIManager(reactContext);
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override
|
|
37
|
+
public ReactModuleInfoProvider getReactModuleInfoProvider() {
|
|
38
|
+
Class<? extends NativeModule>[] moduleList =
|
|
39
|
+
new Class[] {
|
|
40
|
+
ReanimatedModule.class, ReanimatedUIManager.class,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
final Map<String, ReactModuleInfo> reactModuleInfoMap = new HashMap<>();
|
|
44
|
+
for (Class<? extends NativeModule> moduleClass : moduleList) {
|
|
45
|
+
ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class);
|
|
46
|
+
|
|
47
|
+
reactModuleInfoMap.put(
|
|
48
|
+
reactModule.name(),
|
|
49
|
+
new ReactModuleInfo(
|
|
50
|
+
reactModule.name(),
|
|
51
|
+
moduleClass.getName(),
|
|
52
|
+
true,
|
|
53
|
+
reactModule.needsEagerInit(),
|
|
54
|
+
reactModule.hasConstants(),
|
|
55
|
+
reactModule.isCxxModule(),
|
|
56
|
+
TurboModule.class.isAssignableFrom(moduleClass)));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return new ReactModuleInfoProvider() {
|
|
60
|
+
@Override
|
|
61
|
+
public Map<String, ReactModuleInfo> getReactModuleInfos() {
|
|
62
|
+
return reactModuleInfoMap;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private UIManagerModule createUIManager(final ReactApplicationContext reactContext) {
|
|
68
|
+
ReactMarker.logMarker(CREATE_UI_MANAGER_MODULE_START);
|
|
69
|
+
Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "createUIManagerModule");
|
|
70
|
+
final ReactInstanceManager reactInstanceManager = getReactInstanceManager(reactContext);
|
|
71
|
+
int minTimeLeftInFrameForNonBatchedOperationMs = -1;
|
|
72
|
+
try {
|
|
73
|
+
return new ReanimatedUIManager(
|
|
74
|
+
reactContext,
|
|
75
|
+
reactInstanceManager.getOrCreateViewManagers(reactContext),
|
|
76
|
+
minTimeLeftInFrameForNonBatchedOperationMs);
|
|
77
|
+
} finally {
|
|
78
|
+
Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE);
|
|
79
|
+
ReactMarker.logMarker(CREATE_UI_MANAGER_MODULE_END);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get the {@link ReactInstanceManager} used by this app. By default, assumes {@link
|
|
85
|
+
* ReactApplicationContext#getApplicationContext()} is an instance of {@link ReactApplication} and
|
|
86
|
+
* calls {@link ReactApplication#getReactNativeHost().getReactInstanceManager()}. Override this
|
|
87
|
+
* method if your application class does not implement {@code ReactApplication} or you simply have
|
|
88
|
+
* a different mechanism for storing a {@code ReactInstanceManager}, e.g. as a static field
|
|
89
|
+
* somewhere.
|
|
90
|
+
*/
|
|
91
|
+
public ReactInstanceManager getReactInstanceManager(ReactApplicationContext reactContext) {
|
|
92
|
+
return ((ReactApplication) reactContext.getApplicationContext())
|
|
93
|
+
.getReactNativeHost()
|
|
94
|
+
.getReactInstanceManager();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
package com.swmansion.reanimated;
|
|
2
|
+
|
|
3
|
+
import com.facebook.jni.HybridData;
|
|
4
|
+
import com.facebook.proguard.annotations.DoNotStrip;
|
|
5
|
+
import com.facebook.react.bridge.GuardedRunnable;
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
+
import com.facebook.react.bridge.UiThreadUtil;
|
|
8
|
+
import java.util.concurrent.atomic.AtomicBoolean;
|
|
9
|
+
|
|
10
|
+
public class Scheduler {
|
|
11
|
+
|
|
12
|
+
@DoNotStrip
|
|
13
|
+
@SuppressWarnings("unused")
|
|
14
|
+
private final HybridData mHybridData;
|
|
15
|
+
|
|
16
|
+
private final ReactApplicationContext mContext;
|
|
17
|
+
private final AtomicBoolean mActive = new AtomicBoolean(true);
|
|
18
|
+
|
|
19
|
+
private final Runnable mUIThreadRunnable =
|
|
20
|
+
new Runnable() {
|
|
21
|
+
@Override
|
|
22
|
+
public void run() {
|
|
23
|
+
if (mActive.get()) {
|
|
24
|
+
triggerUI();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
public Scheduler(ReactApplicationContext context) {
|
|
30
|
+
mHybridData = initHybrid();
|
|
31
|
+
mContext = context;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private native HybridData initHybrid();
|
|
35
|
+
|
|
36
|
+
public native void triggerUI();
|
|
37
|
+
|
|
38
|
+
@DoNotStrip
|
|
39
|
+
private void scheduleOnUI() {
|
|
40
|
+
UiThreadUtil.runOnUiThread(
|
|
41
|
+
new GuardedRunnable(mContext.getExceptionHandler()) {
|
|
42
|
+
public void runGuarded() {
|
|
43
|
+
mUIThreadRunnable.run();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public void deactivate() {
|
|
49
|
+
mActive.set(false);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package com.swmansion.reanimated;
|
|
2
|
+
|
|
3
|
+
import com.swmansion.reanimated.nodes.Node;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
|
|
6
|
+
public class UpdateContext {
|
|
7
|
+
|
|
8
|
+
public long updateLoopID = 0;
|
|
9
|
+
public String callID = "";
|
|
10
|
+
public final ArrayList<Node> updatedNodes = new ArrayList<>();
|
|
11
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.swmansion.reanimated;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
5
|
+
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
6
|
+
import java.util.HashMap;
|
|
7
|
+
import java.util.Map;
|
|
8
|
+
|
|
9
|
+
public class Utils {
|
|
10
|
+
|
|
11
|
+
protected static boolean isChromeDebugger = false;
|
|
12
|
+
|
|
13
|
+
public static Map<String, Integer> processMapping(ReadableMap style) {
|
|
14
|
+
ReadableMapKeySetIterator iter = style.keySetIterator();
|
|
15
|
+
HashMap<String, Integer> mapping = new HashMap<>();
|
|
16
|
+
while (iter.hasNextKey()) {
|
|
17
|
+
String propKey = iter.nextKey();
|
|
18
|
+
int nodeIndex = style.getInt(propKey);
|
|
19
|
+
mapping.put(propKey, nodeIndex);
|
|
20
|
+
}
|
|
21
|
+
return mapping;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public static int[] processIntArray(ReadableArray ary) {
|
|
25
|
+
int size = ary.size();
|
|
26
|
+
int[] res = new int[size];
|
|
27
|
+
for (int i = 0; i < size; i++) {
|
|
28
|
+
res[i] = ary.getInt(i);
|
|
29
|
+
}
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
}
|