react-native-reanimated 2.4.1 → 2.7.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 (387) 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/SharedItems/ShareableValue.cpp +2 -2
  5. package/Common/cpp/Tools/RuntimeDecorator.cpp +2 -14
  6. package/Common/cpp/headers/AnimatedSensor/AnimatedSensorModule.h +41 -0
  7. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +14 -0
  8. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +14 -0
  9. package/Common/cpp/headers/SharedItems/MutableValue.h +4 -1
  10. package/Common/cpp/headers/SharedItems/ShareableValue.h +3 -0
  11. package/Common/cpp/headers/SharedItems/ValueWrapper.h +3 -0
  12. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +11 -0
  13. package/Common/cpp/headers/Tools/RuntimeDecorator.h +2 -0
  14. package/README.md +2 -2
  15. package/RNReanimated.podspec +15 -6
  16. package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  17. package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
  18. package/android/.gradle/7.2/executionHistory/executionHistory.bin +0 -0
  19. package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
  20. package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
  21. package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
  22. package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
  23. package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
  24. package/android/.gradle/7.2/gc.properties +0 -0
  25. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  26. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  27. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  28. package/android/.gradle/checksums/checksums.lock +0 -0
  29. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  30. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  31. package/android/.gradle/vcs-1/gc.properties +0 -0
  32. package/android/CMakeLists.txt +198 -0
  33. package/android/README.md +15 -0
  34. package/android/build.gradle +676 -73
  35. package/android/empty.cpp +1 -0
  36. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  37. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  38. package/android/gradle.properties +25 -0
  39. package/android/gradlew +234 -0
  40. package/android/gradlew.bat +89 -0
  41. package/android/react-native-reanimated-64-hermes.aar +0 -0
  42. package/android/react-native-reanimated-64-jsc.aar +0 -0
  43. package/android/react-native-reanimated-65-hermes.aar +0 -0
  44. package/android/react-native-reanimated-65-jsc.aar +0 -0
  45. package/android/react-native-reanimated-66-hermes.aar +0 -0
  46. package/android/react-native-reanimated-66-jsc.aar +0 -0
  47. package/android/react-native-reanimated-67-hermes.aar +0 -0
  48. package/android/react-native-reanimated-67-jsc.aar +0 -0
  49. package/android/react-native-reanimated-68-hermes.aar +0 -0
  50. package/android/react-native-reanimated-68-jsc.aar +0 -0
  51. package/android/rnVersionPatch/62/layoutReanimation/ReanimatedNativeHierarchyManager.java +412 -0
  52. package/android/rnVersionPatch/62/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  53. package/android/rnVersionPatch/63/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  54. package/android/rnVersionPatch/64/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  55. package/android/rnVersionPatch/65/.gitkeep +0 -0
  56. package/android/rnVersionPatch/66/.gitkeep +0 -0
  57. package/android/rnVersionPatch/67/.gitkeep +0 -0
  58. package/android/rnVersionPatch/68/.gitkeep +0 -0
  59. package/android/rnVersionPatch/backup/.gitkeep +0 -0
  60. package/android/settings.gradle +1 -0
  61. package/android/spotless.gradle +9 -0
  62. package/android/src/{AndroidManifest.xml → main/AndroidManifest.xml} +0 -0
  63. package/android/src/main/cpp/AndroidErrorHandler.cpp +42 -0
  64. package/android/src/main/cpp/AndroidLogger.cpp +27 -0
  65. package/android/src/main/cpp/AndroidScheduler.cpp +59 -0
  66. package/android/src/main/cpp/JNIHelper.cpp +59 -0
  67. package/android/src/main/cpp/LayoutAnimations.cpp +103 -0
  68. package/android/src/main/cpp/NativeProxy.cpp +327 -0
  69. package/android/src/main/cpp/OnLoad.cpp +17 -0
  70. package/android/src/main/cpp/TurboModule.cpp +44 -0
  71. package/android/src/main/cpp/headers/AndroidErrorHandler.h +30 -0
  72. package/android/src/main/cpp/headers/AndroidLogger.h +16 -0
  73. package/android/src/main/cpp/headers/AndroidScheduler.h +41 -0
  74. package/android/src/main/cpp/headers/JNIHelper.h +30 -0
  75. package/android/src/main/cpp/headers/LayoutAnimations.h +42 -0
  76. package/android/src/main/cpp/headers/NativeProxy.h +170 -0
  77. package/android/src/main/cpp/headers/TurboModule.h +70 -0
  78. package/android/src/main/java/com/facebook/react/uimanager/UIManagerReanimatedHelper.java +15 -0
  79. package/android/src/main/java/com/swmansion/common/GestureHandlerStateManager.java +5 -0
  80. package/android/src/main/java/com/swmansion/reanimated/AndroidErrorHandler.java +8 -0
  81. package/android/src/main/java/com/swmansion/reanimated/CopiedEvent.java +43 -0
  82. package/android/src/main/java/com/swmansion/reanimated/MapUtils.java +26 -0
  83. package/android/src/main/java/com/swmansion/reanimated/NativeMethodsHelper.java +117 -0
  84. package/android/src/main/java/com/swmansion/reanimated/NativeProxy.java +288 -0
  85. package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +682 -0
  86. package/android/src/main/java/com/swmansion/reanimated/ReanimatedJSIModulePackage.java +29 -0
  87. package/android/src/main/java/com/swmansion/reanimated/ReanimatedModule.java +251 -0
  88. package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +96 -0
  89. package/android/src/main/java/com/swmansion/reanimated/Scheduler.java +51 -0
  90. package/android/src/main/java/com/swmansion/reanimated/UpdateContext.java +11 -0
  91. package/android/src/main/java/com/swmansion/reanimated/Utils.java +32 -0
  92. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +524 -0
  93. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +56 -0
  94. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +11 -0
  95. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +410 -0
  96. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  97. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +292 -0
  98. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +121 -0
  99. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ViewHierarchyObserver.java +12 -0
  100. package/android/src/main/java/com/swmansion/reanimated/nodes/AlwaysNode.java +29 -0
  101. package/android/src/main/java/com/swmansion/reanimated/nodes/BezierNode.java +87 -0
  102. package/android/src/main/java/com/swmansion/reanimated/nodes/BlockNode.java +24 -0
  103. package/android/src/main/java/com/swmansion/reanimated/nodes/CallFuncNode.java +49 -0
  104. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockNode.java +38 -0
  105. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockOpNode.java +73 -0
  106. package/android/src/main/java/com/swmansion/reanimated/nodes/ConcatNode.java +36 -0
  107. package/android/src/main/java/com/swmansion/reanimated/nodes/CondNode.java +41 -0
  108. package/android/src/main/java/com/swmansion/reanimated/nodes/DebugNode.java +33 -0
  109. package/android/src/main/java/com/swmansion/reanimated/nodes/EventNode.java +83 -0
  110. package/android/src/main/java/com/swmansion/reanimated/nodes/FinalNode.java +5 -0
  111. package/android/src/main/java/com/swmansion/reanimated/nodes/FunctionNode.java +20 -0
  112. package/android/src/main/java/com/swmansion/reanimated/nodes/JSCallNode.java +41 -0
  113. package/android/src/main/java/com/swmansion/reanimated/nodes/Node.java +139 -0
  114. package/android/src/main/java/com/swmansion/reanimated/nodes/NoopNode.java +37 -0
  115. package/android/src/main/java/com/swmansion/reanimated/nodes/OperatorNode.java +377 -0
  116. package/android/src/main/java/com/swmansion/reanimated/nodes/ParamNode.java +71 -0
  117. package/android/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java +153 -0
  118. package/android/src/main/java/com/swmansion/reanimated/nodes/SetNode.java +32 -0
  119. package/android/src/main/java/com/swmansion/reanimated/nodes/StyleNode.java +40 -0
  120. package/android/src/main/java/com/swmansion/reanimated/nodes/TransformNode.java +84 -0
  121. package/android/src/main/java/com/swmansion/reanimated/nodes/ValueNode.java +40 -0
  122. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +41 -0
  123. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +40 -0
  124. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -0
  125. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorType.java +35 -0
  126. package/android/src/main/java/com/swmansion/reanimated/transitions/ChangeTransition.java +84 -0
  127. package/android/src/main/java/com/swmansion/reanimated/transitions/SaneSidePropagation.java +25 -0
  128. package/android/src/main/java/com/swmansion/reanimated/transitions/Scale.java +86 -0
  129. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionModule.java +41 -0
  130. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionUtils.java +161 -0
  131. package/ios/LayoutReanimation/REAAnimationsManager.h +1 -1
  132. package/ios/LayoutReanimation/REAAnimationsManager.m +16 -6
  133. package/ios/LayoutReanimation/REASnapshot.m +1 -1
  134. package/ios/LayoutReanimation/REAUIManager.h +1 -1
  135. package/ios/LayoutReanimation/REAUIManager.mm +4 -5
  136. package/ios/Nodes/REAAlwaysNode.h +1 -1
  137. package/ios/Nodes/REAAlwaysNode.m +5 -5
  138. package/ios/Nodes/REABezierNode.h +1 -1
  139. package/ios/Nodes/REABezierNode.m +4 -5
  140. package/ios/Nodes/REABlockNode.h +1 -1
  141. package/ios/Nodes/REABlockNode.m +2 -2
  142. package/ios/Nodes/REACallFuncNode.h +1 -1
  143. package/ios/Nodes/REACallFuncNode.m +5 -5
  144. package/ios/Nodes/REAClockNodes.h +1 -1
  145. package/ios/Nodes/REAClockNodes.m +4 -4
  146. package/ios/Nodes/REAConcatNode.h +1 -1
  147. package/ios/Nodes/REAConcatNode.m +3 -3
  148. package/ios/Nodes/REACondNode.h +1 -1
  149. package/ios/Nodes/REACondNode.m +3 -3
  150. package/ios/Nodes/READebugNode.h +1 -1
  151. package/ios/Nodes/READebugNode.m +3 -3
  152. package/ios/Nodes/REAEventNode.h +1 -2
  153. package/ios/Nodes/REAEventNode.m +3 -3
  154. package/ios/Nodes/REAFunctionNode.h +1 -1
  155. package/ios/Nodes/REAFunctionNode.m +3 -3
  156. package/ios/Nodes/REAJSCallNode.h +1 -1
  157. package/ios/Nodes/REAJSCallNode.m +3 -3
  158. package/ios/Nodes/REANode.m +2 -2
  159. package/ios/Nodes/REAOperatorNode.h +1 -1
  160. package/ios/Nodes/REAOperatorNode.m +2 -3
  161. package/ios/Nodes/REAParamNode.h +1 -1
  162. package/ios/Nodes/REAParamNode.m +4 -4
  163. package/ios/Nodes/REAPropsNode.h +1 -1
  164. package/ios/Nodes/REAPropsNode.m +4 -6
  165. package/ios/Nodes/REASetNode.h +1 -1
  166. package/ios/Nodes/REASetNode.m +4 -4
  167. package/ios/Nodes/REAStyleNode.h +1 -1
  168. package/ios/Nodes/REAStyleNode.m +2 -3
  169. package/ios/Nodes/REATransformNode.h +1 -1
  170. package/ios/Nodes/REATransformNode.m +2 -2
  171. package/ios/Nodes/REAValueNode.h +1 -3
  172. package/ios/Nodes/REAValueNode.m +1 -1
  173. package/ios/REAEventDispatcher.m +1 -1
  174. package/ios/REAModule.h +1 -1
  175. package/ios/REAModule.m +12 -14
  176. package/ios/REANodesManager.h +5 -3
  177. package/ios/REANodesManager.m +97 -27
  178. package/ios/Transitioning/RCTConvert+REATransition.h +1 -2
  179. package/ios/Transitioning/RCTConvert+REATransition.m +1 -1
  180. package/ios/Transitioning/REAAllTransitions.h +1 -1
  181. package/ios/Transitioning/REAAllTransitions.m +2 -3
  182. package/ios/Transitioning/REATransition.h +2 -3
  183. package/ios/Transitioning/REATransition.m +3 -4
  184. package/ios/Transitioning/REATransitionAnimation.m +1 -2
  185. package/ios/Transitioning/REATransitionManager.m +2 -4
  186. package/ios/Transitioning/REATransitionValues.m +2 -3
  187. package/ios/native/NativeMethods.h +1 -3
  188. package/ios/native/NativeMethods.mm +1 -1
  189. package/ios/native/NativeProxy.h +2 -2
  190. package/ios/native/NativeProxy.mm +86 -15
  191. package/ios/native/REAIOSErrorHandler.h +2 -4
  192. package/ios/native/REAIOSErrorHandler.mm +1 -1
  193. package/ios/native/REAIOSLogger.h +1 -3
  194. package/ios/native/REAIOSLogger.mm +1 -1
  195. package/ios/native/REAIOSScheduler.h +1 -3
  196. package/ios/native/REAIOSScheduler.mm +2 -2
  197. package/ios/native/REAInitializer.h +0 -7
  198. package/ios/native/REAInitializer.mm +2 -2
  199. package/ios/native/UIResponder+Reanimated.mm +3 -3
  200. package/ios/sensor/ReanimatedSensor.h +25 -0
  201. package/ios/sensor/ReanimatedSensor.m +217 -0
  202. package/ios/sensor/ReanimatedSensorContainer.h +12 -0
  203. package/ios/sensor/ReanimatedSensorContainer.m +40 -0
  204. package/ios/sensor/ReanimatedSensorType.h +7 -0
  205. package/lib/ConfigHelper.js +2 -3
  206. package/lib/createAnimatedComponent.js +3 -4
  207. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  208. package/lib/reanimated1/derived/interpolate.js +2 -4
  209. package/lib/reanimated2/Colors.js +2 -1
  210. package/lib/reanimated2/Easing.js +9 -3
  211. package/lib/reanimated2/NativeReanimated/NativeReanimated.js +25 -12
  212. package/lib/reanimated2/NativeReanimated/index.js +0 -4
  213. package/lib/reanimated2/ViewDescriptorsSet.js +2 -2
  214. package/lib/reanimated2/animation/styleAnimation.js +2 -1
  215. package/lib/reanimated2/core.js +30 -60
  216. package/lib/reanimated2/globals.d.ts +7 -2
  217. package/lib/reanimated2/hook/index.js +1 -0
  218. package/lib/reanimated2/hook/useAnimatedSensor.js +66 -0
  219. package/lib/reanimated2/interpolateColor.js +11 -11
  220. package/lib/reanimated2/interpolation.js +1 -1
  221. package/lib/reanimated2/jestUtils.js +9 -4
  222. package/lib/reanimated2/js-reanimated/JSReanimated.js +23 -2
  223. package/lib/reanimated2/js-reanimated/index.js +3 -3
  224. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +8 -0
  225. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +2 -1
  226. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +32 -42
  227. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +20 -38
  228. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +32 -44
  229. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -16
  230. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +6 -10
  231. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
  232. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +20 -36
  233. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +16 -20
  234. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +8 -12
  235. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +32 -48
  236. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +22 -18
  237. package/lib/reanimated2/mock.js +3 -2
  238. package/lib/types/lib/ConfigHelper.d.ts +12 -0
  239. package/lib/types/lib/ReanimatedEventEmitter.d.ts +3 -0
  240. package/lib/types/lib/ReanimatedModule.d.ts +2 -0
  241. package/lib/types/lib/ReanimatedModule.macos.d.ts +2 -0
  242. package/lib/types/lib/ReanimatedModule.native.d.ts +2 -0
  243. package/lib/types/lib/ReanimatedModule.windows.d.ts +2 -0
  244. package/lib/types/lib/ReanimatedModuleCompat.d.ts +14 -0
  245. package/lib/types/lib/createAnimatedComponent.d.ts +33 -0
  246. package/lib/types/lib/reanimated2/Bezier.d.ts +6 -0
  247. package/lib/types/lib/reanimated2/Colors.d.ts +31 -0
  248. package/lib/types/lib/reanimated2/Easing.d.ts +172 -0
  249. package/lib/types/lib/reanimated2/NativeMethods.d.ts +14 -0
  250. package/lib/types/lib/reanimated2/NativeReanimated/NativeReanimated.d.ts +20 -0
  251. package/lib/types/lib/reanimated2/NativeReanimated/index.d.ts +3 -0
  252. package/lib/types/lib/reanimated2/PlatformChecker.d.ts +5 -0
  253. package/lib/types/lib/reanimated2/PropAdapters.d.ts +4 -0
  254. package/lib/types/lib/reanimated2/UpdateProps.d.ts +9 -0
  255. package/lib/types/lib/reanimated2/ViewDescriptorsSet.d.ts +20 -0
  256. package/lib/types/lib/reanimated2/WorkletEventHandler.d.ts +13 -0
  257. package/lib/types/lib/reanimated2/__mocks__/MutableValue.d.ts +5 -0
  258. package/lib/types/lib/reanimated2/__mocks__/NativeReanimated.d.ts +13 -0
  259. package/lib/types/lib/reanimated2/__mocks__/NativeReanimated.native.d.ts +13 -0
  260. package/lib/types/lib/reanimated2/animation/commonTypes.d.ts +27 -0
  261. package/lib/types/lib/reanimated2/animation/decay.d.ts +19 -0
  262. package/lib/types/lib/reanimated2/animation/delay.d.ts +7 -0
  263. package/lib/types/lib/reanimated2/animation/index.d.ts +9 -0
  264. package/lib/types/lib/reanimated2/animation/repeat.d.ts +12 -0
  265. package/lib/types/lib/reanimated2/animation/sequence.d.ts +7 -0
  266. package/lib/types/lib/reanimated2/animation/spring.d.ts +22 -0
  267. package/lib/types/lib/reanimated2/animation/styleAnimation.d.ts +7 -0
  268. package/lib/types/lib/reanimated2/animation/timing.d.ts +21 -0
  269. package/lib/types/lib/reanimated2/animation/util.d.ts +9 -0
  270. package/lib/types/lib/reanimated2/commonTypes.d.ts +79 -0
  271. package/lib/types/lib/reanimated2/component/FlatList.d.ts +9 -0
  272. package/lib/types/lib/reanimated2/component/WrappedComponents.d.ts +8 -0
  273. package/lib/types/lib/reanimated2/component/index.d.ts +9 -0
  274. package/lib/types/lib/reanimated2/core.d.ts +24 -0
  275. package/lib/types/lib/reanimated2/hook/Hooks.d.ts +5 -0
  276. package/lib/types/lib/reanimated2/hook/commonTypes.d.ts +14 -0
  277. package/lib/types/lib/reanimated2/hook/index.d.ts +10 -0
  278. package/lib/types/lib/reanimated2/hook/useAnimatedGestureHandler.d.ts +35 -0
  279. package/lib/types/lib/reanimated2/hook/useAnimatedReaction.d.ts +12 -0
  280. package/lib/types/lib/reanimated2/hook/useAnimatedRef.d.ts +3 -0
  281. package/lib/types/lib/reanimated2/hook/useAnimatedScrollHandler.d.ts +21 -0
  282. package/lib/types/lib/reanimated2/hook/useAnimatedSensor.d.ts +20 -0
  283. package/lib/types/lib/reanimated2/hook/useAnimatedStyle.d.ts +11 -0
  284. package/lib/types/lib/reanimated2/hook/useDerivedValue.d.ts +4 -0
  285. package/lib/types/lib/reanimated2/hook/useSharedValue.d.ts +2 -0
  286. package/lib/types/lib/reanimated2/hook/utils.d.ts +28 -0
  287. package/lib/types/lib/reanimated2/index.d.ts +12 -0
  288. package/lib/types/lib/reanimated2/interpolateColor.d.ts +26 -0
  289. package/lib/types/lib/reanimated2/interpolation.d.ts +14 -0
  290. package/lib/types/lib/reanimated2/jestUtils.d.ts +12 -0
  291. package/lib/types/lib/reanimated2/js-reanimated/JSReanimated.d.ts +30 -0
  292. package/lib/types/lib/reanimated2/js-reanimated/Mapper.d.ts +14 -0
  293. package/lib/types/lib/reanimated2/js-reanimated/MapperRegistry.d.ts +14 -0
  294. package/lib/types/lib/reanimated2/js-reanimated/MutableValue.d.ts +14 -0
  295. package/lib/types/lib/reanimated2/js-reanimated/commonTypes.d.ts +44 -0
  296. package/lib/types/lib/reanimated2/js-reanimated/index.d.ts +15 -0
  297. package/lib/types/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.d.ts +1 -0
  298. package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.d.ts +22 -0
  299. package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.d.ts +38 -0
  300. package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.d.ts +25 -0
  301. package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.d.ts +77 -0
  302. package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/index.d.ts +4 -0
  303. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.d.ts +62 -0
  304. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Default.d.ts +4 -0
  305. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.d.ts +42 -0
  306. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.d.ts +50 -0
  307. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.d.ts +18 -0
  308. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.d.ts +10 -0
  309. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.d.ts +18 -0
  310. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.d.ts +34 -0
  311. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.d.ts +34 -0
  312. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.d.ts +18 -0
  313. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.d.ts +66 -0
  314. package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/index.d.ts +10 -0
  315. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.d.ts +19 -0
  316. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.d.ts +13 -0
  317. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.d.ts +6 -0
  318. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.d.ts +6 -0
  319. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.d.ts +7 -0
  320. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.d.ts +9 -0
  321. package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/index.d.ts +6 -0
  322. package/lib/types/lib/reanimated2/layoutReanimation/index.d.ts +4 -0
  323. package/lib/types/lib/reanimated2/mock.d.ts +55 -0
  324. package/lib/types/lib/reanimated2/platform-specific/RNRenderer.d.ts +1 -0
  325. package/lib/types/lib/reanimated2/platform-specific/RNRenderer.web.d.ts +0 -0
  326. package/lib/types/lib/reanimated2/utils.d.ts +7 -0
  327. package/lib/types/lib/setAndForwardRef.d.ts +40 -0
  328. package/lib/types/react-native-reanimated-tests.d.ts +1 -0
  329. package/mock.js +4 -4
  330. package/package.json +43 -39
  331. package/plugin.js +3 -12
  332. package/react-native-reanimated.d.ts +58 -32
  333. package/src/ConfigHelper.ts +4 -5
  334. package/src/createAnimatedComponent.tsx +4 -4
  335. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  336. package/src/reanimated1/derived/interpolate.js +2 -4
  337. package/src/reanimated2/Colors.ts +2 -1
  338. package/src/reanimated2/Easing.ts +9 -3
  339. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +42 -15
  340. package/src/reanimated2/NativeReanimated/index.ts +0 -6
  341. package/src/reanimated2/ViewDescriptorsSet.ts +2 -3
  342. package/src/reanimated2/animation/index.ts +1 -0
  343. package/src/reanimated2/animation/styleAnimation.ts +10 -7
  344. package/src/reanimated2/animation/timing.ts +3 -1
  345. package/src/reanimated2/animation/util.ts +10 -11
  346. package/src/reanimated2/commonTypes.ts +20 -1
  347. package/src/reanimated2/component/FlatList.tsx +3 -2
  348. package/src/reanimated2/core.ts +34 -73
  349. package/src/reanimated2/globals.d.ts +7 -2
  350. package/src/reanimated2/hook/index.ts +1 -0
  351. package/src/reanimated2/hook/useAnimatedSensor.ts +91 -0
  352. package/src/reanimated2/hook/utils.ts +2 -1
  353. package/src/reanimated2/interpolateColor.ts +11 -11
  354. package/src/reanimated2/interpolation.ts +2 -6
  355. package/src/reanimated2/jestUtils.ts +20 -4
  356. package/src/reanimated2/js-reanimated/JSReanimated.ts +25 -2
  357. package/src/reanimated2/js-reanimated/index.ts +3 -3
  358. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +13 -0
  359. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +2 -3
  360. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +51 -21
  361. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +40 -10
  362. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +48 -12
  363. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +16 -4
  364. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +8 -2
  365. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +16 -4
  366. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +32 -8
  367. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -10
  368. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +16 -4
  369. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +64 -16
  370. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +2 -1
  371. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +26 -19
  372. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +2 -1
  373. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +2 -1
  374. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +2 -1
  375. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +2 -1
  376. package/src/reanimated2/mock.ts +3 -2
  377. package/android/expo/linking.gradle +0 -46
  378. package/android/expo/src/main/java/com/swmansion/reanimated/EXReanimatedAdapter.java +0 -12
  379. package/android/expo/src/main/java/expo/modules/adapters/reanimated/EXReanimatedPackage.java +0 -26
  380. package/android/react-native-reanimated-63-hermes.aar +0 -0
  381. package/android/react-native-reanimated-63-jsc.aar +0 -0
  382. package/android/src/main/java/com/swmansion/reanimated/ReanimatedProxyPackage.java +0 -15
  383. package/expo-module.config.json +0 -3
  384. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  385. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  386. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  387. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
@@ -0,0 +1,682 @@
1
+ package com.swmansion.reanimated;
2
+
3
+ import android.util.SparseArray;
4
+ import android.view.View;
5
+ import com.facebook.react.bridge.Arguments;
6
+ import com.facebook.react.bridge.Callback;
7
+ import com.facebook.react.bridge.GuardedRunnable;
8
+ import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
9
+ import com.facebook.react.bridge.JavaOnlyMap;
10
+ import com.facebook.react.bridge.ReactApplicationContext;
11
+ import com.facebook.react.bridge.ReactContext;
12
+ import com.facebook.react.bridge.ReadableArray;
13
+ import com.facebook.react.bridge.ReadableMap;
14
+ import com.facebook.react.bridge.ReadableType;
15
+ import com.facebook.react.bridge.UiThreadUtil;
16
+ import com.facebook.react.bridge.WritableArray;
17
+ import com.facebook.react.bridge.WritableMap;
18
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
19
+ import com.facebook.react.modules.core.ReactChoreographer;
20
+ import com.facebook.react.uimanager.GuardedFrameCallback;
21
+ import com.facebook.react.uimanager.IllegalViewOperationException;
22
+ import com.facebook.react.uimanager.ReactShadowNode;
23
+ import com.facebook.react.uimanager.ReactStylesDiffMap;
24
+ import com.facebook.react.uimanager.UIImplementation;
25
+ import com.facebook.react.uimanager.UIManagerModule;
26
+ import com.facebook.react.uimanager.UIManagerReanimatedHelper;
27
+ import com.facebook.react.uimanager.events.Event;
28
+ import com.facebook.react.uimanager.events.EventDispatcherListener;
29
+ import com.facebook.react.uimanager.events.RCTEventEmitter;
30
+ import com.swmansion.reanimated.layoutReanimation.AnimationsManager;
31
+ import com.swmansion.reanimated.nodes.AlwaysNode;
32
+ import com.swmansion.reanimated.nodes.BezierNode;
33
+ import com.swmansion.reanimated.nodes.BlockNode;
34
+ import com.swmansion.reanimated.nodes.CallFuncNode;
35
+ import com.swmansion.reanimated.nodes.ClockNode;
36
+ import com.swmansion.reanimated.nodes.ClockOpNode;
37
+ import com.swmansion.reanimated.nodes.ConcatNode;
38
+ import com.swmansion.reanimated.nodes.CondNode;
39
+ import com.swmansion.reanimated.nodes.DebugNode;
40
+ import com.swmansion.reanimated.nodes.EventNode;
41
+ import com.swmansion.reanimated.nodes.FunctionNode;
42
+ import com.swmansion.reanimated.nodes.JSCallNode;
43
+ import com.swmansion.reanimated.nodes.Node;
44
+ import com.swmansion.reanimated.nodes.NoopNode;
45
+ import com.swmansion.reanimated.nodes.OperatorNode;
46
+ import com.swmansion.reanimated.nodes.ParamNode;
47
+ import com.swmansion.reanimated.nodes.PropsNode;
48
+ import com.swmansion.reanimated.nodes.SetNode;
49
+ import com.swmansion.reanimated.nodes.StyleNode;
50
+ import com.swmansion.reanimated.nodes.TransformNode;
51
+ import com.swmansion.reanimated.nodes.ValueNode;
52
+ import java.util.ArrayList;
53
+ import java.util.Collections;
54
+ import java.util.HashMap;
55
+ import java.util.LinkedList;
56
+ import java.util.List;
57
+ import java.util.Map;
58
+ import java.util.Queue;
59
+ import java.util.Set;
60
+ import java.util.concurrent.ConcurrentLinkedQueue;
61
+ import java.util.concurrent.Semaphore;
62
+ import java.util.concurrent.atomic.AtomicBoolean;
63
+ import javax.annotation.Nullable;
64
+
65
+ public class NodesManager implements EventDispatcherListener {
66
+
67
+ private static final Double ZERO = Double.valueOf(0);
68
+
69
+ public void scrollTo(int viewTag, double x, double y, boolean animated) {
70
+ View view;
71
+ try {
72
+ view = mUIManager.resolveView(viewTag);
73
+ } catch (IllegalViewOperationException e) {
74
+ e.printStackTrace();
75
+ return;
76
+ }
77
+ NativeMethodsHelper.scrollTo(view, x, y, animated);
78
+ }
79
+
80
+ public float[] measure(int viewTag) {
81
+ View view;
82
+ try {
83
+ view = mUIManager.resolveView(viewTag);
84
+ } catch (IllegalViewOperationException e) {
85
+ e.printStackTrace();
86
+ return (new float[] {});
87
+ }
88
+ return NativeMethodsHelper.measure(view);
89
+ }
90
+
91
+ public interface OnAnimationFrame {
92
+ void onAnimationFrame(double timestampMs);
93
+ }
94
+
95
+ private AnimationsManager mAnimationManager = null;
96
+ private final SparseArray<Node> mAnimatedNodes = new SparseArray<>();
97
+ private final Map<String, EventNode> mEventMapping = new HashMap<>();
98
+ private final UIImplementation mUIImplementation;
99
+ private final DeviceEventManagerModule.RCTDeviceEventEmitter mEventEmitter;
100
+ private final ReactChoreographer mReactChoreographer;
101
+ private final GuardedFrameCallback mChoreographerCallback;
102
+ protected final UIManagerModule.CustomEventNamesResolver mCustomEventNamesResolver;
103
+ private final AtomicBoolean mCallbackPosted = new AtomicBoolean();
104
+ private final NoopNode mNoopNode;
105
+ private final ReactContext mContext;
106
+ private final UIManagerModule mUIManager;
107
+
108
+ private RCTEventEmitter mCustomEventHandler;
109
+ private List<OnAnimationFrame> mFrameCallbacks = new ArrayList<>();
110
+ private ConcurrentLinkedQueue<CopiedEvent> mEventQueue = new ConcurrentLinkedQueue<>();
111
+ private boolean mWantRunUpdates;
112
+
113
+ public double currentFrameTimeMs;
114
+ public final UpdateContext updateContext;
115
+ public Set<String> uiProps = Collections.emptySet();
116
+ public Set<String> nativeProps = Collections.emptySet();
117
+
118
+ public NativeProxy getNativeProxy() {
119
+ return mNativeProxy;
120
+ }
121
+
122
+ private NativeProxy mNativeProxy;
123
+
124
+ public AnimationsManager getAnimationsManager() {
125
+ return mAnimationManager;
126
+ }
127
+
128
+ public void onCatalystInstanceDestroy() {
129
+ if (mAnimationManager != null) {
130
+ mAnimationManager.onCatalystInstanceDestroy();
131
+ }
132
+
133
+ if (mNativeProxy != null) {
134
+ mNativeProxy.onCatalystInstanceDestroy();
135
+ mNativeProxy = null;
136
+ }
137
+ }
138
+
139
+ public void initWithContext(ReactApplicationContext reactApplicationContext) {
140
+ mNativeProxy = new NativeProxy(reactApplicationContext);
141
+ mAnimationManager.setScheduler(getNativeProxy().getScheduler());
142
+ }
143
+
144
+ private final class NativeUpdateOperation {
145
+ public int mViewTag;
146
+ public WritableMap mNativeProps;
147
+
148
+ public NativeUpdateOperation(int viewTag, WritableMap nativeProps) {
149
+ mViewTag = viewTag;
150
+ mNativeProps = nativeProps;
151
+ }
152
+ }
153
+
154
+ private Queue<NativeUpdateOperation> mOperationsInBatch = new LinkedList<>();
155
+ private boolean mTryRunBatchUpdatesSynchronously = false;
156
+
157
+ public NodesManager(ReactContext context) {
158
+ mContext = context;
159
+ mUIManager = context.getNativeModule(UIManagerModule.class);
160
+ updateContext = new UpdateContext();
161
+ mUIImplementation = mUIManager.getUIImplementation();
162
+ mCustomEventNamesResolver = mUIManager.getDirectEventNamesResolver();
163
+ mEventEmitter = context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
164
+
165
+ mReactChoreographer = ReactChoreographer.getInstance();
166
+ mChoreographerCallback =
167
+ new GuardedFrameCallback(context) {
168
+ @Override
169
+ protected void doFrameGuarded(long frameTimeNanos) {
170
+ onAnimationFrame(frameTimeNanos);
171
+ }
172
+ };
173
+
174
+ mNoopNode = new NoopNode(this);
175
+
176
+ // We register as event listener at the end, because we pass `this` and we haven't finished
177
+ // contructing an object yet.
178
+ // This lead to a crash described in
179
+ // https://github.com/software-mansion/react-native-reanimated/issues/604 which was caused by
180
+ // Nodes Manager being constructed on UI thread and registering for events.
181
+ // Events are handled in the native modules thread in the `onEventDispatch()` method.
182
+ // This method indirectly uses `mChoreographerCallback` which was created after event
183
+ // registration, creating race condition
184
+ mUIManager.getEventDispatcher().addListener(this);
185
+
186
+ mAnimationManager = new AnimationsManager(mContext, mUIImplementation, mUIManager);
187
+ }
188
+
189
+ public void onHostPause() {
190
+ if (mCallbackPosted.get()) {
191
+ stopUpdatingOnAnimationFrame();
192
+ mCallbackPosted.set(true);
193
+ }
194
+ }
195
+
196
+ public void onHostResume() {
197
+ if (mCallbackPosted.getAndSet(false)) {
198
+ startUpdatingOnAnimationFrame();
199
+ }
200
+ }
201
+
202
+ public void startUpdatingOnAnimationFrame() {
203
+ if (!mCallbackPosted.getAndSet(true)) {
204
+ mReactChoreographer.postFrameCallback(
205
+ ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE, mChoreographerCallback);
206
+ }
207
+ }
208
+
209
+ private void stopUpdatingOnAnimationFrame() {
210
+ if (mCallbackPosted.getAndSet(false)) {
211
+ mReactChoreographer.removeFrameCallback(
212
+ ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE, mChoreographerCallback);
213
+ }
214
+ }
215
+
216
+ private void performOperations() {
217
+ if (!mOperationsInBatch.isEmpty()) {
218
+ final Queue<NativeUpdateOperation> copiedOperationsQueue = mOperationsInBatch;
219
+ mOperationsInBatch = new LinkedList<>();
220
+ final boolean trySynchronously = mTryRunBatchUpdatesSynchronously;
221
+ mTryRunBatchUpdatesSynchronously = false;
222
+ final Semaphore semaphore = new Semaphore(0);
223
+ mContext.runOnNativeModulesQueueThread(
224
+ new GuardedRunnable(mContext.getExceptionHandler()) {
225
+ @Override
226
+ public void runGuarded() {
227
+ boolean queueWasEmpty =
228
+ UIManagerReanimatedHelper.isOperationQueueEmpty(mUIImplementation);
229
+ boolean shouldDispatchUpdates = trySynchronously && queueWasEmpty;
230
+ if (!shouldDispatchUpdates) {
231
+ semaphore.release();
232
+ }
233
+ while (!copiedOperationsQueue.isEmpty()) {
234
+ NativeUpdateOperation op = copiedOperationsQueue.remove();
235
+ ReactShadowNode shadowNode = mUIImplementation.resolveShadowNode(op.mViewTag);
236
+ if (shadowNode != null) {
237
+ mUIManager.updateView(op.mViewTag, shadowNode.getViewClass(), op.mNativeProps);
238
+ }
239
+ }
240
+ if (queueWasEmpty) {
241
+ mUIImplementation.dispatchViewUpdates(-1); // no associated batchId
242
+ }
243
+ if (shouldDispatchUpdates) {
244
+ semaphore.release();
245
+ }
246
+ }
247
+ });
248
+ if (trySynchronously) {
249
+ while (true) {
250
+ try {
251
+ semaphore.acquire();
252
+ break;
253
+ } catch (InterruptedException e) {
254
+ // noop
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+
261
+ private void onAnimationFrame(long frameTimeNanos) {
262
+ currentFrameTimeMs = frameTimeNanos / 1000000.;
263
+
264
+ while (!mEventQueue.isEmpty()) {
265
+ CopiedEvent copiedEvent = mEventQueue.poll();
266
+ handleEvent(copiedEvent.getTargetTag(), copiedEvent.getEventName(), copiedEvent.getPayload());
267
+ }
268
+
269
+ if (!mFrameCallbacks.isEmpty()) {
270
+ List<OnAnimationFrame> frameCallbacks = mFrameCallbacks;
271
+ mFrameCallbacks = new ArrayList<>(frameCallbacks.size());
272
+ for (int i = 0, size = frameCallbacks.size(); i < size; i++) {
273
+ frameCallbacks.get(i).onAnimationFrame(currentFrameTimeMs);
274
+ }
275
+ }
276
+
277
+ if (mWantRunUpdates) {
278
+ Node.runUpdates(updateContext);
279
+ }
280
+ performOperations();
281
+
282
+ mCallbackPosted.set(false);
283
+ mWantRunUpdates = false;
284
+
285
+ if (!mFrameCallbacks.isEmpty() || !mEventQueue.isEmpty()) {
286
+ // enqueue next frame
287
+ startUpdatingOnAnimationFrame();
288
+ }
289
+ }
290
+
291
+ /**
292
+ * Null-safe way of getting node's value. If node is not present we return 0. This also matches
293
+ * iOS behavior when the app won't just crash.
294
+ */
295
+ public Object getNodeValue(int nodeID) {
296
+ Node node = mAnimatedNodes.get(nodeID);
297
+ if (node != null) {
298
+ return node.value();
299
+ }
300
+ return ZERO;
301
+ }
302
+
303
+ /**
304
+ * Null-safe way of getting node reference. This method always returns non-null instance. If the
305
+ * node is not present we try to return a "no-op" node that allows for "set" calls and always
306
+ * returns 0 as a value.
307
+ */
308
+ public <T extends Node> T findNodeById(int id, Class<T> type) {
309
+ Node node = mAnimatedNodes.get(id);
310
+ if (node == null) {
311
+ if (type == Node.class || type == ValueNode.class) {
312
+ return (T) mNoopNode;
313
+ }
314
+ throw new IllegalArgumentException(
315
+ "Requested node with id " + id + " of type " + type + " cannot be found");
316
+ }
317
+ if (type.isInstance(node)) {
318
+ return (T) node;
319
+ }
320
+ throw new IllegalArgumentException(
321
+ "Node with id "
322
+ + id
323
+ + " is of incompatible type "
324
+ + node.getClass()
325
+ + ", requested type was "
326
+ + type);
327
+ }
328
+
329
+ public void createNode(int nodeID, ReadableMap config) {
330
+ if (mAnimatedNodes.get(nodeID) != null) {
331
+ throw new JSApplicationIllegalArgumentException(
332
+ "Animated node with ID " + nodeID + " already exists");
333
+ }
334
+ String type = config.getString("type");
335
+ final Node node;
336
+ if ("props".equals(type)) {
337
+ node = new PropsNode(nodeID, config, this, mUIImplementation);
338
+ } else if ("style".equals(type)) {
339
+ node = new StyleNode(nodeID, config, this);
340
+ } else if ("transform".equals(type)) {
341
+ node = new TransformNode(nodeID, config, this);
342
+ } else if ("value".equals(type)) {
343
+ node = new ValueNode(nodeID, config, this);
344
+ } else if ("block".equals(type)) {
345
+ node = new BlockNode(nodeID, config, this);
346
+ } else if ("cond".equals(type)) {
347
+ node = new CondNode(nodeID, config, this);
348
+ } else if ("op".equals(type)) {
349
+ node = new OperatorNode(nodeID, config, this);
350
+ } else if ("set".equals(type)) {
351
+ node = new SetNode(nodeID, config, this);
352
+ } else if ("debug".equals(type)) {
353
+ node = new DebugNode(nodeID, config, this);
354
+ } else if ("clock".equals(type)) {
355
+ node = new ClockNode(nodeID, config, this);
356
+ } else if ("clockStart".equals(type)) {
357
+ node = new ClockOpNode.ClockStartNode(nodeID, config, this);
358
+ } else if ("clockStop".equals(type)) {
359
+ node = new ClockOpNode.ClockStopNode(nodeID, config, this);
360
+ } else if ("clockTest".equals(type)) {
361
+ node = new ClockOpNode.ClockTestNode(nodeID, config, this);
362
+ } else if ("call".equals(type)) {
363
+ node = new JSCallNode(nodeID, config, this);
364
+ } else if ("bezier".equals(type)) {
365
+ node = new BezierNode(nodeID, config, this);
366
+ } else if ("event".equals(type)) {
367
+ node = new EventNode(nodeID, config, this);
368
+ } else if ("always".equals(type)) {
369
+ node = new AlwaysNode(nodeID, config, this);
370
+ } else if ("concat".equals(type)) {
371
+ node = new ConcatNode(nodeID, config, this);
372
+ } else if ("param".equals(type)) {
373
+ node = new ParamNode(nodeID, config, this);
374
+ } else if ("func".equals(type)) {
375
+ node = new FunctionNode(nodeID, config, this);
376
+ } else if ("callfunc".equals(type)) {
377
+ node = new CallFuncNode(nodeID, config, this);
378
+ } else {
379
+ throw new JSApplicationIllegalArgumentException("Unsupported node type: " + type);
380
+ }
381
+ mAnimatedNodes.put(nodeID, node);
382
+ }
383
+
384
+ public void dropNode(int tag) {
385
+ Node node = mAnimatedNodes.get(tag);
386
+ if (node != null) {
387
+ node.onDrop();
388
+ }
389
+ mAnimatedNodes.remove(tag);
390
+ }
391
+
392
+ public void connectNodes(int parentID, int childID) {
393
+ Node parentNode = mAnimatedNodes.get(parentID);
394
+ Node childNode = mAnimatedNodes.get(childID);
395
+ if (childNode == null) {
396
+ throw new JSApplicationIllegalArgumentException(
397
+ "Animated node with ID " + childID + " does not exists");
398
+ }
399
+ parentNode.addChild(childNode);
400
+ }
401
+
402
+ public void disconnectNodes(int parentID, int childID) {
403
+ Node parentNode = mAnimatedNodes.get(parentID);
404
+ Node childNode = mAnimatedNodes.get(childID);
405
+ if (childNode == null) {
406
+ throw new JSApplicationIllegalArgumentException(
407
+ "Animated node with ID " + childID + " does not exists");
408
+ }
409
+ parentNode.removeChild(childNode);
410
+ }
411
+
412
+ public void connectNodeToView(int nodeID, int viewTag) {
413
+ Node node = mAnimatedNodes.get(nodeID);
414
+ if (node == null) {
415
+ throw new JSApplicationIllegalArgumentException(
416
+ "Animated node with ID " + nodeID + " does not exists");
417
+ }
418
+ if (!(node instanceof PropsNode)) {
419
+ throw new JSApplicationIllegalArgumentException(
420
+ "Animated node connected to view should be" + "of type " + PropsNode.class.getName());
421
+ }
422
+ ((PropsNode) node).connectToView(viewTag);
423
+ }
424
+
425
+ public void disconnectNodeFromView(int nodeID, int viewTag) {
426
+ Node node = mAnimatedNodes.get(nodeID);
427
+ if (node == null) {
428
+ throw new JSApplicationIllegalArgumentException(
429
+ "Animated node with ID " + nodeID + " does not exists");
430
+ }
431
+ if (!(node instanceof PropsNode)) {
432
+ throw new JSApplicationIllegalArgumentException(
433
+ "Animated node connected to view should be" + "of type " + PropsNode.class.getName());
434
+ }
435
+ ((PropsNode) node).disconnectFromView(viewTag);
436
+ }
437
+
438
+ public void enqueueUpdateViewOnNativeThread(
439
+ int viewTag, WritableMap nativeProps, boolean trySynchronously) {
440
+ if (trySynchronously) {
441
+ mTryRunBatchUpdatesSynchronously = true;
442
+ }
443
+ mOperationsInBatch.add(new NativeUpdateOperation(viewTag, nativeProps));
444
+ }
445
+
446
+ public void attachEvent(int viewTag, String eventName, int eventNodeID) {
447
+ String key = viewTag + eventName;
448
+
449
+ EventNode node = (EventNode) mAnimatedNodes.get(eventNodeID);
450
+ if (node == null) {
451
+ throw new JSApplicationIllegalArgumentException(
452
+ "Event node " + eventNodeID + " does not exists");
453
+ }
454
+ if (mEventMapping.containsKey(key)) {
455
+ throw new JSApplicationIllegalArgumentException(
456
+ "Event handler already set for the given view and event type");
457
+ }
458
+
459
+ mEventMapping.put(key, node);
460
+ }
461
+
462
+ public void detachEvent(int viewTag, String eventName, int eventNodeID) {
463
+ String key = viewTag + eventName;
464
+ mEventMapping.remove(key);
465
+ }
466
+
467
+ public void configureProps(Set<String> uiPropsSet, Set<String> nativePropsSet) {
468
+ uiProps = uiPropsSet;
469
+ nativeProps = nativePropsSet;
470
+ }
471
+
472
+ public void getValue(int nodeID, Callback callback) {
473
+ callback.invoke(mAnimatedNodes.get(nodeID).value());
474
+ }
475
+
476
+ public void postRunUpdatesAfterAnimation() {
477
+ mWantRunUpdates = true;
478
+ startUpdatingOnAnimationFrame();
479
+ }
480
+
481
+ public void postOnAnimation(OnAnimationFrame onAnimationFrame) {
482
+ mFrameCallbacks.add(onAnimationFrame);
483
+ startUpdatingOnAnimationFrame();
484
+ }
485
+
486
+ @Override
487
+ public void onEventDispatch(Event event) {
488
+ // Events can be dispatched from any thread so we have to make sure handleEvent is run from the
489
+ // UI thread.
490
+ if (UiThreadUtil.isOnUiThread()) {
491
+ handleEvent(event);
492
+ performOperations();
493
+ } else {
494
+ boolean shouldSaveEvent = false;
495
+ String eventName = mCustomEventNamesResolver.resolveCustomEventName(event.getEventName());
496
+ int viewTag = event.getViewTag();
497
+ String key = viewTag + eventName;
498
+
499
+ shouldSaveEvent |=
500
+ (mCustomEventHandler != null
501
+ && mNativeProxy != null
502
+ && mNativeProxy.isAnyHandlerWaitingForEvent(key));
503
+ if (shouldSaveEvent) {
504
+ mEventQueue.offer(new CopiedEvent(event));
505
+ }
506
+ startUpdatingOnAnimationFrame();
507
+ }
508
+ }
509
+
510
+ private void handleEvent(Event event) {
511
+ // If the event has a different name in native, convert it to it's JS name.
512
+ String eventName = mCustomEventNamesResolver.resolveCustomEventName(event.getEventName());
513
+ int viewTag = event.getViewTag();
514
+ String key = viewTag + eventName;
515
+
516
+ if (mCustomEventHandler != null) {
517
+ event.dispatch(mCustomEventHandler);
518
+ }
519
+
520
+ if (!mEventMapping.isEmpty()) {
521
+ EventNode node = mEventMapping.get(key);
522
+ if (node != null) {
523
+ event.dispatch(node);
524
+ }
525
+ }
526
+ }
527
+
528
+ private void handleEvent(int targetTag, String eventName, @Nullable WritableMap event) {
529
+ if (mCustomEventHandler != null) {
530
+ mCustomEventHandler.receiveEvent(targetTag, eventName, event);
531
+ }
532
+
533
+ String key = targetTag + eventName;
534
+
535
+ if (!mEventMapping.isEmpty()) {
536
+ EventNode node = mEventMapping.get(key);
537
+ if (node != null) {
538
+ node.receiveEvent(targetTag, eventName, event);
539
+ }
540
+ }
541
+ }
542
+
543
+ public UIManagerModule.CustomEventNamesResolver getEventNameResolver() {
544
+ return mCustomEventNamesResolver;
545
+ }
546
+
547
+ public void registerEventHandler(RCTEventEmitter handler) {
548
+ mCustomEventHandler = handler;
549
+ }
550
+
551
+ public void sendEvent(String name, WritableMap body) {
552
+ mEventEmitter.emit(name, body);
553
+ }
554
+
555
+ public void setValue(int nodeID, Double newValue) {
556
+ Node node = mAnimatedNodes.get(nodeID);
557
+ if (node != null) {
558
+ ((ValueNode) node).setValue(newValue);
559
+ }
560
+ }
561
+
562
+ public void updateProps(int viewTag, Map<String, Object> props) {
563
+ // TODO: update PropsNode to use this method instead of its own way of updating props
564
+ boolean hasUIProps = false;
565
+ boolean hasNativeProps = false;
566
+ boolean hasJSProps = false;
567
+ JavaOnlyMap newUIProps = new JavaOnlyMap();
568
+ WritableMap newJSProps = Arguments.createMap();
569
+ WritableMap newNativeProps = Arguments.createMap();
570
+
571
+ for (Map.Entry<String, Object> entry : props.entrySet()) {
572
+ String key = entry.getKey();
573
+ Object value = entry.getValue();
574
+ if (uiProps.contains(key)) {
575
+ hasUIProps = true;
576
+ addProp(newUIProps, key, value);
577
+ } else if (nativeProps.contains(key)) {
578
+ hasNativeProps = true;
579
+ addProp(newNativeProps, key, value);
580
+ } else {
581
+ hasJSProps = true;
582
+ addProp(newJSProps, key, value);
583
+ }
584
+ }
585
+
586
+ if (viewTag != View.NO_ID) {
587
+ if (hasUIProps) {
588
+ mUIImplementation.synchronouslyUpdateViewOnUIThread(
589
+ viewTag, new ReactStylesDiffMap(newUIProps));
590
+ }
591
+ if (hasNativeProps) {
592
+ enqueueUpdateViewOnNativeThread(viewTag, newNativeProps, true);
593
+ }
594
+ if (hasJSProps) {
595
+ WritableMap evt = Arguments.createMap();
596
+ evt.putInt("viewTag", viewTag);
597
+ evt.putMap("props", newJSProps);
598
+ sendEvent("onReanimatedPropsChange", evt);
599
+ }
600
+ }
601
+ }
602
+
603
+ public String obtainProp(int viewTag, String propName) {
604
+ View view = mUIManager.resolveView(viewTag);
605
+ String result =
606
+ "error: unknown propName " + propName + ", currently supported: opacity, zIndex";
607
+ if (propName.equals("opacity")) {
608
+ Float opacity = view.getAlpha();
609
+ result = Float.toString(opacity);
610
+ } else if (propName.equals("zIndex")) {
611
+ Float zIndex = view.getElevation();
612
+ result = Float.toString(zIndex);
613
+ }
614
+ return result;
615
+ }
616
+
617
+ private static WritableMap copyReadableMap(ReadableMap map) {
618
+ WritableMap copy = Arguments.createMap();
619
+ copy.merge(map);
620
+ return copy;
621
+ }
622
+
623
+ private static WritableArray copyReadableArray(ReadableArray array) {
624
+ WritableArray copy = Arguments.createArray();
625
+ for (int i = 0; i < array.size(); i++) {
626
+ ReadableType type = array.getType(i);
627
+ switch (type) {
628
+ case Boolean:
629
+ copy.pushBoolean(array.getBoolean(i));
630
+ break;
631
+ case String:
632
+ copy.pushString(array.getString(i));
633
+ break;
634
+ case Null:
635
+ copy.pushNull();
636
+ break;
637
+ case Number:
638
+ copy.pushDouble(array.getDouble(i));
639
+ break;
640
+ case Map:
641
+ copy.pushMap(copyReadableMap(array.getMap(i)));
642
+ break;
643
+ case Array:
644
+ copy.pushArray(copyReadableArray(array.getArray(i)));
645
+ break;
646
+ default:
647
+ throw new IllegalStateException("Unknown type of ReadableArray");
648
+ }
649
+ }
650
+ return copy;
651
+ }
652
+
653
+ private static void addProp(WritableMap propMap, String key, Object value) {
654
+ if (value == null) {
655
+ propMap.putNull(key);
656
+ } else if (value instanceof Double) {
657
+ propMap.putDouble(key, (Double) value);
658
+ } else if (value instanceof Integer) {
659
+ propMap.putInt(key, (Integer) value);
660
+ } else if (value instanceof Number) {
661
+ propMap.putDouble(key, ((Number) value).doubleValue());
662
+ } else if (value instanceof Boolean) {
663
+ propMap.putBoolean(key, (Boolean) value);
664
+ } else if (value instanceof String) {
665
+ propMap.putString(key, (String) value);
666
+ } else if (value instanceof ReadableArray) {
667
+ if (!(value instanceof WritableArray)) {
668
+ propMap.putArray(key, copyReadableArray((ReadableArray) value));
669
+ } else {
670
+ propMap.putArray(key, (ReadableArray) value);
671
+ }
672
+ } else if (value instanceof ReadableMap) {
673
+ if (!(value instanceof WritableMap)) {
674
+ propMap.putMap(key, copyReadableMap((ReadableMap) value));
675
+ } else {
676
+ propMap.putMap(key, (ReadableMap) value);
677
+ }
678
+ } else {
679
+ throw new IllegalStateException("Unknown type of animated value");
680
+ }
681
+ }
682
+ }
@@ -0,0 +1,29 @@
1
+ package com.swmansion.reanimated;
2
+
3
+ import android.util.Log;
4
+ import com.facebook.react.bridge.JSIModulePackage;
5
+ import com.facebook.react.bridge.JSIModuleSpec;
6
+ import com.facebook.react.bridge.JavaScriptContextHolder;
7
+ import com.facebook.react.bridge.ReactApplicationContext;
8
+ import java.util.Arrays;
9
+ import java.util.List;
10
+
11
+ public class ReanimatedJSIModulePackage implements JSIModulePackage {
12
+ /**
13
+ * @deprecated Since 2.5.0, Reanimated autoinstalls on Android - you can remove
14
+ * getJSIModulePackage() override in MainApplication.java.
15
+ */
16
+ @Deprecated
17
+ public ReanimatedJSIModulePackage() {
18
+ super();
19
+ }
20
+
21
+ @Override
22
+ public List<JSIModuleSpec> getJSIModules(
23
+ ReactApplicationContext reactApplicationContext, JavaScriptContextHolder jsContext) {
24
+ Log.w(
25
+ "[REANIMATED]",
26
+ "Since 2.5.0, Reanimated autoinstalls on Android - you can remove getJSIModulePackage() override in MainApplication.java.");
27
+ return Arrays.<JSIModuleSpec>asList();
28
+ }
29
+ }