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.
Files changed (249) hide show
  1. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +72 -0
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +30 -1
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +64 -39
  4. package/Common/cpp/Tools/RuntimeDecorator.cpp +2 -0
  5. package/Common/cpp/headers/AnimatedSensor/AnimatedSensorModule.h +41 -0
  6. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +14 -0
  7. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +14 -0
  8. package/Common/cpp/headers/SharedItems/MutableValue.h +4 -1
  9. package/Common/cpp/headers/SharedItems/ShareableValue.h +3 -0
  10. package/Common/cpp/headers/SharedItems/ValueWrapper.h +3 -0
  11. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +11 -0
  12. package/Common/cpp/headers/Tools/RuntimeDecorator.h +2 -0
  13. package/LICENSE +1 -1
  14. package/README.md +2 -2
  15. package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  16. package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
  17. package/android/.gradle/7.2/executionHistory/executionHistory.bin +0 -0
  18. package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
  19. package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
  20. package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
  21. package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
  22. package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
  23. package/android/.gradle/7.2/gc.properties +0 -0
  24. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  25. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  26. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  27. package/android/.gradle/checksums/checksums.lock +0 -0
  28. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  29. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  30. package/android/.gradle/vcs-1/gc.properties +0 -0
  31. package/android/CMakeLists.txt +198 -0
  32. package/android/README.md +15 -0
  33. package/android/build.gradle +686 -73
  34. package/android/empty.cpp +1 -0
  35. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  36. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  37. package/android/gradle.properties +25 -0
  38. package/android/gradlew +234 -0
  39. package/android/gradlew.bat +89 -0
  40. package/android/react-native-reanimated-64-hermes.aar +0 -0
  41. package/android/react-native-reanimated-64-jsc.aar +0 -0
  42. package/android/react-native-reanimated-65-hermes.aar +0 -0
  43. package/android/react-native-reanimated-65-jsc.aar +0 -0
  44. package/android/react-native-reanimated-66-hermes.aar +0 -0
  45. package/android/react-native-reanimated-66-jsc.aar +0 -0
  46. package/android/react-native-reanimated-67-hermes.aar +0 -0
  47. package/android/react-native-reanimated-67-jsc.aar +0 -0
  48. package/android/react-native-reanimated-68-hermes.aar +0 -0
  49. package/android/react-native-reanimated-68-jsc.aar +0 -0
  50. package/android/rnVersionPatch/62/layoutReanimation/ReanimatedNativeHierarchyManager.java +412 -0
  51. package/android/rnVersionPatch/62/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  52. package/android/rnVersionPatch/63/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  53. package/android/rnVersionPatch/64/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  54. package/android/rnVersionPatch/65/.gitkeep +0 -0
  55. package/android/rnVersionPatch/66/.gitkeep +0 -0
  56. package/android/rnVersionPatch/67/.gitkeep +0 -0
  57. package/android/rnVersionPatch/68/.gitkeep +0 -0
  58. package/android/rnVersionPatch/backup/.gitkeep +0 -0
  59. package/android/settings.gradle +1 -0
  60. package/android/spotless.gradle +9 -0
  61. package/android/src/{AndroidManifest.xml → main/AndroidManifest.xml} +0 -0
  62. package/android/src/main/cpp/AndroidErrorHandler.cpp +42 -0
  63. package/android/src/main/cpp/AndroidLogger.cpp +27 -0
  64. package/android/src/main/cpp/AndroidScheduler.cpp +59 -0
  65. package/android/src/main/cpp/JNIHelper.cpp +59 -0
  66. package/android/src/main/cpp/LayoutAnimations.cpp +103 -0
  67. package/android/src/main/cpp/NativeProxy.cpp +327 -0
  68. package/android/src/main/cpp/OnLoad.cpp +17 -0
  69. package/android/src/main/cpp/TurboModule.cpp +44 -0
  70. package/android/src/main/cpp/headers/AndroidErrorHandler.h +30 -0
  71. package/android/src/main/cpp/headers/AndroidLogger.h +16 -0
  72. package/android/src/main/cpp/headers/AndroidScheduler.h +41 -0
  73. package/android/src/main/cpp/headers/JNIHelper.h +30 -0
  74. package/android/src/main/cpp/headers/LayoutAnimations.h +42 -0
  75. package/android/src/main/cpp/headers/NativeProxy.h +170 -0
  76. package/android/src/main/cpp/headers/TurboModule.h +70 -0
  77. package/android/src/main/java/com/facebook/react/uimanager/UIManagerReanimatedHelper.java +15 -0
  78. package/android/src/main/java/com/swmansion/common/GestureHandlerStateManager.java +5 -0
  79. package/android/src/main/java/com/swmansion/reanimated/AndroidErrorHandler.java +8 -0
  80. package/android/src/main/java/com/swmansion/reanimated/CopiedEvent.java +43 -0
  81. package/android/src/main/java/com/swmansion/reanimated/MapUtils.java +26 -0
  82. package/android/src/main/java/com/swmansion/reanimated/NativeMethodsHelper.java +117 -0
  83. package/android/src/main/java/com/swmansion/reanimated/NativeProxy.java +285 -0
  84. package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +682 -0
  85. package/android/src/main/java/com/swmansion/reanimated/ReanimatedJSIModulePackage.java +29 -0
  86. package/android/src/main/java/com/swmansion/reanimated/ReanimatedModule.java +251 -0
  87. package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +96 -0
  88. package/android/src/main/java/com/swmansion/reanimated/Scheduler.java +51 -0
  89. package/android/src/main/java/com/swmansion/reanimated/UpdateContext.java +11 -0
  90. package/android/src/main/java/com/swmansion/reanimated/Utils.java +32 -0
  91. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +517 -0
  92. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +56 -0
  93. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +11 -0
  94. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +410 -0
  95. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  96. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +292 -0
  97. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +121 -0
  98. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ViewHierarchyObserver.java +12 -0
  99. package/android/src/main/java/com/swmansion/reanimated/nodes/AlwaysNode.java +29 -0
  100. package/android/src/main/java/com/swmansion/reanimated/nodes/BezierNode.java +87 -0
  101. package/android/src/main/java/com/swmansion/reanimated/nodes/BlockNode.java +24 -0
  102. package/android/src/main/java/com/swmansion/reanimated/nodes/CallFuncNode.java +49 -0
  103. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockNode.java +38 -0
  104. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockOpNode.java +73 -0
  105. package/android/src/main/java/com/swmansion/reanimated/nodes/ConcatNode.java +36 -0
  106. package/android/src/main/java/com/swmansion/reanimated/nodes/CondNode.java +41 -0
  107. package/android/src/main/java/com/swmansion/reanimated/nodes/DebugNode.java +33 -0
  108. package/android/src/main/java/com/swmansion/reanimated/nodes/EventNode.java +83 -0
  109. package/android/src/main/java/com/swmansion/reanimated/nodes/FinalNode.java +5 -0
  110. package/android/src/main/java/com/swmansion/reanimated/nodes/FunctionNode.java +20 -0
  111. package/android/src/main/java/com/swmansion/reanimated/nodes/JSCallNode.java +41 -0
  112. package/android/src/main/java/com/swmansion/reanimated/nodes/Node.java +139 -0
  113. package/android/src/main/java/com/swmansion/reanimated/nodes/NoopNode.java +37 -0
  114. package/android/src/main/java/com/swmansion/reanimated/nodes/OperatorNode.java +377 -0
  115. package/android/src/main/java/com/swmansion/reanimated/nodes/ParamNode.java +71 -0
  116. package/android/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java +153 -0
  117. package/android/src/main/java/com/swmansion/reanimated/nodes/SetNode.java +32 -0
  118. package/android/src/main/java/com/swmansion/reanimated/nodes/StyleNode.java +40 -0
  119. package/android/src/main/java/com/swmansion/reanimated/nodes/TransformNode.java +84 -0
  120. package/android/src/main/java/com/swmansion/reanimated/nodes/ValueNode.java +40 -0
  121. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +41 -0
  122. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +40 -0
  123. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -0
  124. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorType.java +35 -0
  125. package/android/src/main/java/com/swmansion/reanimated/transitions/ChangeTransition.java +84 -0
  126. package/android/src/main/java/com/swmansion/reanimated/transitions/SaneSidePropagation.java +25 -0
  127. package/android/src/main/java/com/swmansion/reanimated/transitions/Scale.java +86 -0
  128. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionModule.java +41 -0
  129. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionUtils.java +161 -0
  130. package/ios/LayoutReanimation/REAAnimationsManager.h +1 -1
  131. package/ios/LayoutReanimation/REAAnimationsManager.m +18 -4
  132. package/ios/REAModule.m +8 -9
  133. package/ios/REANodesManager.h +4 -1
  134. package/ios/REANodesManager.m +75 -3
  135. package/ios/native/NativeMethods.h +1 -1
  136. package/ios/native/NativeProxy.mm +85 -5
  137. package/ios/sensor/ReanimatedSensor.h +21 -0
  138. package/ios/sensor/ReanimatedSensor.m +169 -0
  139. package/ios/sensor/ReanimatedSensorContainer.h +13 -0
  140. package/ios/sensor/ReanimatedSensorContainer.m +41 -0
  141. package/ios/sensor/ReanimatedSensorType.h +7 -0
  142. package/lib/ConfigHelper.js +2 -2
  143. package/lib/createAnimatedComponent.js +3 -4
  144. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  145. package/lib/reanimated1/derived/interpolate.js +2 -4
  146. package/lib/reanimated2/Colors.js +3 -98
  147. package/lib/reanimated2/Easing.js +5 -0
  148. package/lib/reanimated2/NativeMethods.js +15 -5
  149. package/lib/reanimated2/NativeReanimated/NativeReanimated.js +25 -12
  150. package/lib/reanimated2/NativeReanimated/index.js +2 -6
  151. package/lib/reanimated2/ViewDescriptorsSet.js +2 -2
  152. package/lib/reanimated2/animation/styleAnimation.js +2 -1
  153. package/lib/reanimated2/core.js +30 -24
  154. package/lib/reanimated2/globals.d.ts +6 -0
  155. package/lib/reanimated2/hook/index.js +1 -0
  156. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +1 -2
  157. package/lib/reanimated2/hook/useAnimatedSensor.js +66 -0
  158. package/lib/reanimated2/hook/useAnimatedStyle.js +31 -14
  159. package/lib/reanimated2/hook/utils.js +14 -11
  160. package/lib/reanimated2/index.js +2 -0
  161. package/lib/reanimated2/interpolateColor.js +98 -0
  162. package/lib/reanimated2/interpolation.js +1 -1
  163. package/lib/reanimated2/jestUtils.js +9 -4
  164. package/lib/reanimated2/js-reanimated/JSReanimated.js +24 -3
  165. package/lib/reanimated2/js-reanimated/commonTypes.js +1 -0
  166. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +8 -0
  167. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +2 -1
  168. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +32 -42
  169. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +20 -38
  170. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +32 -44
  171. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -16
  172. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +6 -10
  173. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
  174. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +20 -36
  175. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +16 -20
  176. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +8 -12
  177. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +32 -48
  178. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +22 -18
  179. package/lib/reanimated2/mock.js +3 -2
  180. package/mock.js +6 -4
  181. package/package.json +44 -36
  182. package/plugin.js +3 -0
  183. package/react-native-reanimated.d.ts +102 -15
  184. package/src/ConfigHelper.ts +4 -4
  185. package/src/createAnimatedComponent.tsx +3 -3
  186. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  187. package/src/reanimated1/derived/interpolate.js +2 -4
  188. package/src/reanimated2/Colors.ts +8 -151
  189. package/src/reanimated2/Easing.ts +11 -0
  190. package/src/reanimated2/NativeMethods.ts +19 -6
  191. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +42 -14
  192. package/src/reanimated2/NativeReanimated/index.ts +2 -8
  193. package/src/reanimated2/ViewDescriptorsSet.ts +2 -3
  194. package/src/reanimated2/animation/commonTypes.ts +44 -40
  195. package/src/reanimated2/animation/decay.ts +1 -1
  196. package/src/reanimated2/animation/delay.ts +2 -16
  197. package/src/reanimated2/animation/index.ts +8 -8
  198. package/src/reanimated2/animation/repeat.ts +2 -12
  199. package/src/reanimated2/animation/sequence.ts +3 -10
  200. package/src/reanimated2/animation/spring.ts +1 -1
  201. package/src/reanimated2/animation/styleAnimation.ts +11 -25
  202. package/src/reanimated2/animation/timing.ts +4 -2
  203. package/src/reanimated2/animation/util.ts +22 -20
  204. package/src/reanimated2/commonTypes.ts +68 -1
  205. package/src/reanimated2/component/FlatList.tsx +2 -1
  206. package/src/reanimated2/core.ts +35 -29
  207. package/src/reanimated2/globals.d.ts +6 -0
  208. package/src/reanimated2/hook/commonTypes.ts +5 -0
  209. package/src/reanimated2/hook/index.ts +1 -0
  210. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +1 -2
  211. package/src/reanimated2/hook/useAnimatedRef.ts +1 -5
  212. package/src/reanimated2/hook/useAnimatedSensor.ts +91 -0
  213. package/src/reanimated2/hook/useAnimatedStyle.ts +35 -16
  214. package/src/reanimated2/hook/utils.ts +20 -18
  215. package/src/reanimated2/index.ts +2 -0
  216. package/src/reanimated2/interpolateColor.ts +178 -0
  217. package/src/reanimated2/interpolation.ts +2 -6
  218. package/src/reanimated2/jestUtils.ts +9 -4
  219. package/src/reanimated2/js-reanimated/JSReanimated.ts +28 -6
  220. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  221. package/src/reanimated2/js-reanimated/MapperRegistry.ts +1 -1
  222. package/src/reanimated2/js-reanimated/commonTypes.ts +51 -0
  223. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +13 -0
  224. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +2 -3
  225. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +51 -21
  226. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +40 -10
  227. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +48 -12
  228. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +16 -4
  229. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +8 -2
  230. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +16 -4
  231. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +32 -8
  232. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -10
  233. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +16 -4
  234. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +64 -16
  235. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +2 -1
  236. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +32 -21
  237. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +2 -1
  238. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +2 -1
  239. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +2 -1
  240. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +2 -1
  241. package/src/reanimated2/mock.ts +3 -2
  242. package/src/reanimated2/utils.ts +1 -1
  243. package/android/react-native-reanimated-63-hermes.aar +0 -0
  244. package/android/react-native-reanimated-63-jsc.aar +0 -0
  245. package/android/src/main/java/com/swmansion/reanimated/ReanimatedProxyPackage.java +0 -15
  246. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  247. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  248. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  249. 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
+ }