react-native-reanimated 3.0.0-rc.9 → 3.0.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 (329) hide show
  1. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +30 -12
  2. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.h +2 -0
  3. package/Common/cpp/Fabric/FabricUtils.cpp +3 -107
  4. package/Common/cpp/Fabric/FabricUtils.h +3 -24
  5. package/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp +54 -37
  6. package/Common/cpp/LayoutAnimations/LayoutAnimationType.h +8 -0
  7. package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.cpp +81 -26
  8. package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.h +20 -3
  9. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +105 -109
  10. package/Common/cpp/NativeModules/NativeReanimatedModule.h +19 -12
  11. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +15 -7
  12. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.h +6 -2
  13. package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.cpp +20 -1
  14. package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.h +9 -0
  15. package/Common/cpp/ReanimatedRuntime/ReanimatedRuntime.cpp +5 -1
  16. package/Common/cpp/Registries/EventHandlerRegistry.cpp +8 -34
  17. package/Common/cpp/Registries/EventHandlerRegistry.h +7 -13
  18. package/Common/cpp/SharedItems/Shareables.cpp +9 -63
  19. package/Common/cpp/SharedItems/Shareables.h +77 -72
  20. package/Common/cpp/Tools/CollectionUtils.h +14 -0
  21. package/Common/cpp/Tools/JsiUtils.cpp +26 -0
  22. package/Common/cpp/Tools/JsiUtils.h +176 -0
  23. package/Common/cpp/Tools/PlatformDepMethodsHolder.h +5 -5
  24. package/Common/cpp/Tools/ReanimatedVersion.cpp +17 -0
  25. package/Common/cpp/Tools/ReanimatedVersion.h +11 -0
  26. package/Common/cpp/Tools/RuntimeDecorator.cpp +49 -230
  27. package/Common/cpp/Tools/RuntimeDecorator.h +0 -2
  28. package/Common/cpp/Tools/WorkletEventHandler.cpp +3 -2
  29. package/Common/cpp/Tools/WorkletEventHandler.h +14 -6
  30. package/RNReanimated.podspec +2 -1
  31. package/android/CMakeLists.txt +188 -181
  32. package/android/build.gradle +362 -311
  33. package/android/proguard-rules.pro +2 -0
  34. package/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java +63 -295
  35. package/android/src/main/cpp/LayoutAnimations.cpp +35 -5
  36. package/android/src/main/cpp/LayoutAnimations.h +23 -6
  37. package/android/src/main/cpp/NativeProxy.cpp +143 -98
  38. package/android/src/main/cpp/NativeProxy.h +22 -28
  39. package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +5 -4
  40. package/android/src/main/java/com/swmansion/reanimated/Utils.java +7 -1
  41. package/android/src/main/java/com/swmansion/reanimated/keyboardObserver/ReanimatedKeyboardEventListener.java +10 -3
  42. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +218 -35
  43. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +43 -17
  44. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +6 -2
  45. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/SharedElement.java +19 -0
  46. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/SharedTransitionManager.java +610 -0
  47. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +93 -23
  48. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/AnimationFrameCallback.java +19 -0
  49. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/EventHandler.java +35 -0
  50. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/KeyboardEventDataUpdater.java +16 -0
  51. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java +206 -0
  52. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/SensorSetter.java +17 -0
  53. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +9 -3
  54. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +3 -4
  55. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -7
  56. package/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java +90 -307
  57. package/android/src/reactNativeVersionPatch/ReanimatedUIManager/70/com/swmansion/reanimated/ReanimatedUIManagerFactory.java +16 -0
  58. package/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/reanimated/ReanimatedUIManagerFactory.java +63 -0
  59. package/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +271 -0
  60. package/android/src/reactNativeVersionPatch/nativeHierarchyManager/latest/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +76 -20
  61. package/ios/LayoutReanimation/REAAnimationsManager.h +28 -4
  62. package/ios/LayoutReanimation/REAAnimationsManager.m +216 -61
  63. package/ios/LayoutReanimation/REAFrame.h +10 -0
  64. package/ios/LayoutReanimation/REAFrame.m +15 -0
  65. package/ios/LayoutReanimation/REAScreensHelper.h +19 -0
  66. package/ios/LayoutReanimation/REAScreensHelper.m +106 -0
  67. package/ios/LayoutReanimation/REASharedElement.h +15 -0
  68. package/ios/LayoutReanimation/REASharedElement.m +16 -0
  69. package/ios/LayoutReanimation/REASharedTransitionManager.h +17 -0
  70. package/ios/LayoutReanimation/REASharedTransitionManager.m +632 -0
  71. package/ios/LayoutReanimation/REASnapshot.h +1 -0
  72. package/ios/LayoutReanimation/REASnapshot.m +96 -11
  73. package/ios/LayoutReanimation/REAUIManager.mm +64 -17
  74. package/ios/REAModule.mm +2 -7
  75. package/ios/REANodesManager.mm +1 -21
  76. package/ios/keyboardObserver/REAKeyboardEventObserver.m +72 -36
  77. package/ios/native/NativeProxy.mm +75 -114
  78. package/ios/native/REAInitializer.mm +2 -7
  79. package/ios/native/REAJSIUtils.h +60 -2
  80. package/ios/sensor/ReanimatedSensor.h +6 -2
  81. package/ios/sensor/ReanimatedSensor.m +43 -7
  82. package/ios/sensor/ReanimatedSensorContainer.h +4 -1
  83. package/ios/sensor/ReanimatedSensorContainer.m +8 -2
  84. package/lib/commonjs/createAnimatedComponent.js +232 -28
  85. package/lib/commonjs/createAnimatedComponent.js.map +1 -1
  86. package/lib/commonjs/reanimated2/Colors.js +43 -22
  87. package/lib/commonjs/reanimated2/Colors.js.map +1 -1
  88. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js +16 -33
  89. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  90. package/lib/commonjs/reanimated2/animation/styleAnimation.js +5 -1
  91. package/lib/commonjs/reanimated2/animation/styleAnimation.js.map +1 -1
  92. package/lib/commonjs/reanimated2/animation/util.js +17 -15
  93. package/lib/commonjs/reanimated2/animation/util.js.map +1 -1
  94. package/lib/commonjs/reanimated2/commonTypes.js +33 -1
  95. package/lib/commonjs/reanimated2/commonTypes.js.map +1 -1
  96. package/lib/commonjs/reanimated2/core.js +33 -14
  97. package/lib/commonjs/reanimated2/core.js.map +1 -1
  98. package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js +2 -2
  99. package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
  100. package/lib/commonjs/reanimated2/globals.d.js.map +1 -1
  101. package/lib/commonjs/reanimated2/hook/index.js +0 -6
  102. package/lib/commonjs/reanimated2/hook/index.js.map +1 -1
  103. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js +5 -2
  104. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  105. package/lib/commonjs/reanimated2/hook/useAnimatedReaction.js +13 -1
  106. package/lib/commonjs/reanimated2/hook/useAnimatedReaction.js.map +1 -1
  107. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js +1 -1
  108. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js.map +1 -1
  109. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js +89 -16
  110. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  111. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js +43 -40
  112. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  113. package/lib/commonjs/reanimated2/hook/useDerivedValue.js +13 -1
  114. package/lib/commonjs/reanimated2/hook/useDerivedValue.js.map +1 -1
  115. package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js +2 -2
  116. package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js.map +1 -1
  117. package/lib/commonjs/reanimated2/hook/utils.js +18 -65
  118. package/lib/commonjs/reanimated2/hook/utils.js.map +1 -1
  119. package/lib/commonjs/reanimated2/index.js +13 -0
  120. package/lib/commonjs/reanimated2/index.js.map +1 -1
  121. package/lib/commonjs/reanimated2/initializers.js +71 -32
  122. package/lib/commonjs/reanimated2/initializers.js.map +1 -1
  123. package/lib/commonjs/reanimated2/interpolateColor.js +96 -19
  124. package/lib/commonjs/reanimated2/interpolateColor.js.map +1 -1
  125. package/lib/commonjs/reanimated2/jestUtils.js +1 -1
  126. package/lib/commonjs/reanimated2/jestUtils.js.map +1 -1
  127. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js +103 -13
  128. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  129. package/lib/commonjs/reanimated2/js-reanimated/Mapper.js +22 -0
  130. package/lib/commonjs/reanimated2/js-reanimated/Mapper.js.map +1 -1
  131. package/lib/commonjs/reanimated2/js-reanimated/WebSensor.js +2 -0
  132. package/lib/commonjs/reanimated2/js-reanimated/WebSensor.js.map +1 -0
  133. package/lib/commonjs/reanimated2/js-reanimated/commonTypes.js.map +1 -1
  134. package/lib/commonjs/reanimated2/js-reanimated/global.js +0 -2
  135. package/lib/commonjs/reanimated2/js-reanimated/global.js.map +1 -1
  136. package/lib/commonjs/reanimated2/js-reanimated/index.js +0 -1
  137. package/lib/commonjs/reanimated2/js-reanimated/index.js.map +1 -1
  138. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +11 -0
  139. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  140. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js +8 -0
  141. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  142. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js +17 -9
  143. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
  144. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +16 -23
  145. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
  146. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -14
  147. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
  148. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -14
  149. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
  150. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Slide.js +8 -15
  151. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
  152. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +16 -23
  153. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
  154. package/lib/commonjs/reanimated2/layoutReanimation/index.js +13 -0
  155. package/lib/commonjs/reanimated2/layoutReanimation/index.js.map +1 -1
  156. package/lib/commonjs/reanimated2/layoutReanimation/sharedTransitions/index.js +94 -0
  157. package/lib/commonjs/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -0
  158. package/lib/commonjs/reanimated2/mappers.js +18 -6
  159. package/lib/commonjs/reanimated2/mappers.js.map +1 -1
  160. package/lib/commonjs/reanimated2/mock.js +20 -1
  161. package/lib/commonjs/reanimated2/mock.js.map +1 -1
  162. package/lib/commonjs/reanimated2/mutables.js +4 -2
  163. package/lib/commonjs/reanimated2/mutables.js.map +1 -1
  164. package/lib/commonjs/reanimated2/platform-specific/checkVersion.js +42 -0
  165. package/lib/commonjs/reanimated2/platform-specific/checkVersion.js.map +1 -0
  166. package/lib/commonjs/reanimated2/platform-specific/checkVersion.web.js +15 -0
  167. package/lib/commonjs/reanimated2/platform-specific/checkVersion.web.js.map +1 -0
  168. package/lib/commonjs/reanimated2/pluginUtils.js +11 -0
  169. package/lib/commonjs/reanimated2/pluginUtils.js.map +1 -0
  170. package/lib/commonjs/reanimated2/shareables.js +36 -15
  171. package/lib/commonjs/reanimated2/shareables.js.map +1 -1
  172. package/lib/commonjs/reanimated2/threads.js +114 -4
  173. package/lib/commonjs/reanimated2/threads.js.map +1 -1
  174. package/lib/commonjs/reanimated2/utils.js +7 -0
  175. package/lib/commonjs/reanimated2/utils.js.map +1 -1
  176. package/lib/commonjs/reanimated2/valueSetter.js +1 -3
  177. package/lib/commonjs/reanimated2/valueSetter.js.map +1 -1
  178. package/lib/module/createAnimatedComponent.js +229 -29
  179. package/lib/module/createAnimatedComponent.js.map +1 -1
  180. package/lib/module/reanimated2/Colors.js +35 -19
  181. package/lib/module/reanimated2/Colors.js.map +1 -1
  182. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js +16 -32
  183. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  184. package/lib/module/reanimated2/animation/styleAnimation.js +5 -1
  185. package/lib/module/reanimated2/animation/styleAnimation.js.map +1 -1
  186. package/lib/module/reanimated2/animation/util.js +17 -16
  187. package/lib/module/reanimated2/animation/util.js.map +1 -1
  188. package/lib/module/reanimated2/commonTypes.js +29 -0
  189. package/lib/module/reanimated2/commonTypes.js.map +1 -1
  190. package/lib/module/reanimated2/core.js +32 -7
  191. package/lib/module/reanimated2/core.js.map +1 -1
  192. package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js +2 -2
  193. package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
  194. package/lib/module/reanimated2/globals.d.js.map +1 -1
  195. package/lib/module/reanimated2/hook/index.js +1 -1
  196. package/lib/module/reanimated2/hook/index.js.map +1 -1
  197. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js +5 -2
  198. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  199. package/lib/module/reanimated2/hook/useAnimatedReaction.js +12 -1
  200. package/lib/module/reanimated2/hook/useAnimatedReaction.js.map +1 -1
  201. package/lib/module/reanimated2/hook/useAnimatedRef.js +2 -2
  202. package/lib/module/reanimated2/hook/useAnimatedRef.js.map +1 -1
  203. package/lib/module/reanimated2/hook/useAnimatedSensor.js +88 -13
  204. package/lib/module/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  205. package/lib/module/reanimated2/hook/useAnimatedStyle.js +46 -43
  206. package/lib/module/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  207. package/lib/module/reanimated2/hook/useDerivedValue.js +12 -1
  208. package/lib/module/reanimated2/hook/useDerivedValue.js.map +1 -1
  209. package/lib/module/reanimated2/hook/useScrollViewOffset.js +2 -2
  210. package/lib/module/reanimated2/hook/useScrollViewOffset.js.map +1 -1
  211. package/lib/module/reanimated2/hook/utils.js +17 -60
  212. package/lib/module/reanimated2/hook/utils.js.map +1 -1
  213. package/lib/module/reanimated2/index.js +1 -0
  214. package/lib/module/reanimated2/index.js.map +1 -1
  215. package/lib/module/reanimated2/initializers.js +72 -33
  216. package/lib/module/reanimated2/initializers.js.map +1 -1
  217. package/lib/module/reanimated2/interpolateColor.js +96 -19
  218. package/lib/module/reanimated2/interpolateColor.js.map +1 -1
  219. package/lib/module/reanimated2/jestUtils.js +1 -1
  220. package/lib/module/reanimated2/jestUtils.js.map +1 -1
  221. package/lib/module/reanimated2/js-reanimated/JSReanimated.js +103 -13
  222. package/lib/module/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  223. package/lib/module/reanimated2/js-reanimated/Mapper.js +21 -0
  224. package/lib/module/reanimated2/js-reanimated/Mapper.js.map +1 -1
  225. package/lib/module/reanimated2/js-reanimated/WebSensor.js +2 -0
  226. package/lib/module/reanimated2/js-reanimated/WebSensor.js.map +1 -0
  227. package/lib/module/reanimated2/js-reanimated/commonTypes.js.map +1 -1
  228. package/lib/module/reanimated2/js-reanimated/global.js +0 -2
  229. package/lib/module/reanimated2/js-reanimated/global.js.map +1 -1
  230. package/lib/module/reanimated2/js-reanimated/index.js +0 -1
  231. package/lib/module/reanimated2/js-reanimated/index.js.map +1 -1
  232. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +9 -1
  233. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  234. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js +1 -0
  235. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  236. package/lib/module/reanimated2/layoutReanimation/animationsManager.js +15 -8
  237. package/lib/module/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
  238. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +16 -21
  239. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
  240. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -12
  241. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
  242. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
  243. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
  244. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js +8 -13
  245. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
  246. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +16 -21
  247. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
  248. package/lib/module/reanimated2/layoutReanimation/index.js +1 -0
  249. package/lib/module/reanimated2/layoutReanimation/index.js.map +1 -1
  250. package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js +82 -0
  251. package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -0
  252. package/lib/module/reanimated2/mappers.js +16 -6
  253. package/lib/module/reanimated2/mappers.js.map +1 -1
  254. package/lib/module/reanimated2/mock.js +20 -1
  255. package/lib/module/reanimated2/mock.js.map +1 -1
  256. package/lib/module/reanimated2/mutables.js +4 -2
  257. package/lib/module/reanimated2/mutables.js.map +1 -1
  258. package/lib/module/reanimated2/platform-specific/checkVersion.js +35 -0
  259. package/lib/module/reanimated2/platform-specific/checkVersion.js.map +1 -0
  260. package/lib/module/reanimated2/platform-specific/checkVersion.web.js +8 -0
  261. package/lib/module/reanimated2/platform-specific/checkVersion.web.js.map +1 -0
  262. package/lib/module/reanimated2/pluginUtils.js +4 -0
  263. package/lib/module/reanimated2/pluginUtils.js.map +1 -0
  264. package/lib/module/reanimated2/shareables.js +36 -12
  265. package/lib/module/reanimated2/shareables.js.map +1 -1
  266. package/lib/module/reanimated2/threads.js +105 -4
  267. package/lib/module/reanimated2/threads.js.map +1 -1
  268. package/lib/module/reanimated2/utils.js +5 -0
  269. package/lib/module/reanimated2/utils.js.map +1 -1
  270. package/lib/module/reanimated2/valueSetter.js +1 -2
  271. package/lib/module/reanimated2/valueSetter.js.map +1 -1
  272. package/package.json +10 -10
  273. package/{plugin.js → plugin/index.js} +128 -249
  274. package/react-native-reanimated.d.ts +57 -10
  275. package/scripts/reanimated_utils.rb +15 -2
  276. package/src/createAnimatedComponent.tsx +238 -28
  277. package/src/reanimated2/Colors.ts +38 -11
  278. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +52 -39
  279. package/src/reanimated2/animation/styleAnimation.ts +8 -1
  280. package/src/reanimated2/animation/util.ts +29 -16
  281. package/src/reanimated2/commonTypes.ts +28 -1
  282. package/src/reanimated2/core.ts +42 -9
  283. package/src/reanimated2/frameCallback/FrameCallbackRegistryUI.ts +2 -2
  284. package/src/reanimated2/globals.d.ts +12 -15
  285. package/src/reanimated2/hook/index.ts +1 -1
  286. package/src/reanimated2/hook/useAnimatedKeyboard.ts +10 -4
  287. package/src/reanimated2/hook/useAnimatedReaction.ts +12 -5
  288. package/src/reanimated2/hook/useAnimatedRef.ts +1 -4
  289. package/src/reanimated2/hook/useAnimatedSensor.ts +88 -11
  290. package/src/reanimated2/hook/useAnimatedStyle.ts +44 -36
  291. package/src/reanimated2/hook/useDerivedValue.ts +8 -1
  292. package/src/reanimated2/hook/useScrollViewOffset.ts +2 -2
  293. package/src/reanimated2/hook/utils.ts +15 -61
  294. package/src/reanimated2/index.ts +1 -0
  295. package/src/reanimated2/initializers.ts +76 -35
  296. package/src/reanimated2/interpolateColor.ts +104 -20
  297. package/src/reanimated2/jestUtils.ts +1 -1
  298. package/src/reanimated2/js-reanimated/JSReanimated.ts +98 -15
  299. package/src/reanimated2/js-reanimated/Mapper.ts +32 -0
  300. package/src/reanimated2/js-reanimated/WebSensor.ts +34 -0
  301. package/src/reanimated2/js-reanimated/commonTypes.ts +0 -1
  302. package/src/reanimated2/js-reanimated/global.ts +0 -1
  303. package/src/reanimated2/js-reanimated/index.ts +0 -1
  304. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +13 -1
  305. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +1 -0
  306. package/src/reanimated2/layoutReanimation/animationsManager.ts +17 -9
  307. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +16 -19
  308. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +14 -11
  309. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +21 -11
  310. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -11
  311. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +36 -19
  312. package/src/reanimated2/layoutReanimation/index.ts +1 -0
  313. package/src/reanimated2/layoutReanimation/sharedTransitions/index.ts +87 -0
  314. package/src/reanimated2/mappers.ts +17 -6
  315. package/src/reanimated2/mock.ts +24 -1
  316. package/src/reanimated2/mutables.ts +2 -0
  317. package/src/reanimated2/platform-specific/checkVersion.ts +39 -0
  318. package/src/reanimated2/platform-specific/checkVersion.web.ts +6 -0
  319. package/src/reanimated2/pluginUtils.ts +8 -0
  320. package/src/reanimated2/shareables.ts +45 -16
  321. package/src/reanimated2/threads.ts +103 -1
  322. package/src/reanimated2/utils.ts +6 -0
  323. package/src/reanimated2/valueSetter.ts +1 -2
  324. package/lib/commonjs/reanimated2/time.js +0 -55
  325. package/lib/commonjs/reanimated2/time.js.map +0 -1
  326. package/lib/module/reanimated2/time.js +0 -37
  327. package/lib/module/reanimated2/time.js.map +0 -1
  328. package/src/reanimated2/time.ts +0 -30
  329. /package/android/src/{main/java → reactNativeVersionPatch/ReanimatedUIManager/70}/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +0 -0
@@ -1,6 +1,8 @@
1
1
  package com.swmansion.reanimated.layoutReanimation;
2
2
 
3
3
  import android.app.Activity;
4
+ import android.graphics.Point;
5
+ import android.graphics.Rect;
4
6
  import android.util.DisplayMetrics;
5
7
  import android.util.Log;
6
8
  import android.view.View;
@@ -10,6 +12,7 @@ import com.facebook.react.bridge.JavaOnlyMap;
10
12
  import com.facebook.react.bridge.ReactContext;
11
13
  import com.facebook.react.bridge.ReadableArray;
12
14
  import com.facebook.react.bridge.ReadableMap;
15
+ import com.facebook.react.bridge.ReadableNativeArray;
13
16
  import com.facebook.react.bridge.WritableMap;
14
17
  import com.facebook.react.uimanager.IViewManagerWithChildren;
15
18
  import com.facebook.react.uimanager.IllegalViewOperationException;
@@ -24,6 +27,7 @@ import java.util.ArrayList;
24
27
  import java.util.HashMap;
25
28
  import java.util.HashSet;
26
29
  import java.util.Map;
30
+ import javax.annotation.Nullable;
27
31
 
28
32
  public class AnimationsManager implements ViewHierarchyObserver {
29
33
  private WeakReference<Scheduler> mScheduler;
@@ -31,12 +35,15 @@ public class AnimationsManager implements ViewHierarchyObserver {
31
35
  private UIManagerModule mUIManager;
32
36
  private NativeMethodsHolder mNativeMethodsHolder;
33
37
 
38
+ private HashSet<Integer> mEnteringViews = new HashSet<>();
39
+ private HashMap<Integer, Rect> mEnteringViewTargetValues = new HashMap<>();
34
40
  private HashMap<Integer, View> mExitingViews = new HashMap<>();
35
41
  private HashMap<Integer, Integer> mExitingSubviewCountMap = new HashMap<>();
36
42
  private HashSet<Integer> mAncestorsToRemove = new HashSet<>();
37
43
  private HashMap<Integer, Runnable> mCallbacks = new HashMap<>();
38
44
  private ReanimatedNativeHierarchyManager mReanimatedNativeHierarchyManager;
39
45
  private boolean isCatalystInstanceDestroyed;
46
+ private SharedTransitionManager mSharedTransitionManager;
40
47
 
41
48
  public void setReanimatedNativeHierarchyManager(
42
49
  ReanimatedNativeHierarchyManager reanimatedNativeHierarchyManager) {
@@ -55,6 +62,7 @@ public class AnimationsManager implements ViewHierarchyObserver {
55
62
  mContext = context;
56
63
  mUIManager = uiManagerModule;
57
64
  isCatalystInstanceDestroyed = false;
65
+ mSharedTransitionManager = new SharedTransitionManager(this);
58
66
  }
59
67
 
60
68
  public void onCatalystInstanceDestroy() {
@@ -86,8 +94,9 @@ public class AnimationsManager implements ViewHierarchyObserver {
86
94
  if (isCatalystInstanceDestroyed) {
87
95
  return;
88
96
  }
97
+ maybeRegisterSharedView(view);
89
98
 
90
- if (!hasAnimationForTag(view.getId(), "entering")) {
99
+ if (!hasAnimationForTag(view.getId(), LayoutAnimations.Types.ENTERING)) {
91
100
  return;
92
101
  }
93
102
 
@@ -99,8 +108,9 @@ public class AnimationsManager implements ViewHierarchyObserver {
99
108
  HashMap<String, Object> targetValues = after.toTargetMap();
100
109
 
101
110
  if (targetValues != null) {
102
- HashMap<String, Float> preparedValues = prepareDataForAnimationWorklet(targetValues, true);
103
- mNativeMethodsHolder.startAnimation(tag, "entering", preparedValues);
111
+ HashMap<String, Object> preparedValues = prepareDataForAnimationWorklet(targetValues, true);
112
+ mNativeMethodsHolder.startAnimation(tag, LayoutAnimations.Types.ENTERING, preparedValues);
113
+ mEnteringViews.add(tag);
104
114
  }
105
115
  }
106
116
 
@@ -111,12 +121,29 @@ public class AnimationsManager implements ViewHierarchyObserver {
111
121
  }
112
122
  int tag = view.getId();
113
123
 
114
- if (!hasAnimationForTag(tag, "layout")) {
124
+ if (!hasAnimationForTag(tag, LayoutAnimations.Types.LAYOUT)) {
125
+ if (mEnteringViews.contains(tag)) {
126
+ // store values to restore after `entering` finishes
127
+ mEnteringViewTargetValues.put(
128
+ tag,
129
+ new Rect(
130
+ after.originX,
131
+ after.originY,
132
+ after.originX + after.width,
133
+ after.originY + after.height));
134
+ // restore layout before the update, so the `entering`
135
+ // can continue from its current location
136
+ view.layout(
137
+ before.originX,
138
+ before.originY,
139
+ before.originX + before.width,
140
+ before.originY + before.height);
141
+ }
115
142
  return;
116
143
  }
117
144
 
118
- HashMap<String, Object> targetValues = after.toTargetMap();
119
145
  HashMap<String, Object> startValues = before.toCurrentMap();
146
+ HashMap<String, Object> targetValues = after.toTargetMap();
120
147
 
121
148
  // If startValues are equal to targetValues it means that there was no UI Operation changing
122
149
  // layout of the View. So dirtiness of that View is false positive
@@ -135,17 +162,25 @@ public class AnimationsManager implements ViewHierarchyObserver {
135
162
  }
136
163
 
137
164
  // View must be in Layout state
138
- HashMap<String, Float> preparedStartValues = prepareDataForAnimationWorklet(startValues, false);
139
- HashMap<String, Float> preparedTargetValues =
165
+ HashMap<String, Object> preparedStartValues =
166
+ prepareDataForAnimationWorklet(startValues, false);
167
+ HashMap<String, Object> preparedTargetValues =
140
168
  prepareDataForAnimationWorklet(targetValues, true);
141
- HashMap<String, Float> preparedValues = new HashMap<>(preparedTargetValues);
169
+ HashMap<String, Object> preparedValues = new HashMap<>(preparedTargetValues);
142
170
  for (String key : preparedStartValues.keySet()) {
143
171
  preparedValues.put(key, preparedStartValues.get(key));
144
172
  }
145
- mNativeMethodsHolder.startAnimation(tag, "layout", preparedValues);
173
+ mNativeMethodsHolder.startAnimation(tag, LayoutAnimations.Types.LAYOUT, preparedValues);
174
+ }
175
+
176
+ public void maybeRegisterSharedView(View view) {
177
+ if (hasAnimationForTag(view.getId(), LayoutAnimations.Types.SHARED_ELEMENT_TRANSITION)) {
178
+ mSharedTransitionManager.notifyAboutNewView(view);
179
+ }
146
180
  }
147
181
 
148
- public void progressLayoutAnimation(int tag, Map<String, Object> newStyle) {
182
+ public void progressLayoutAnimation(
183
+ int tag, Map<String, Object> newStyle, boolean isSharedTransition) {
149
184
  View view = resolveView(tag);
150
185
 
151
186
  if (view == null) {
@@ -161,24 +196,39 @@ public class AnimationsManager implements ViewHierarchyObserver {
161
196
  ViewManager viewManager = resolveViewManager(tag);
162
197
  ViewManager parentViewManager = resolveViewManager(parent.getId());
163
198
 
164
- setNewProps(newStyle, view, viewManager, parentViewManager, parent.getId());
199
+ if (viewManager == null) {
200
+ return;
201
+ }
202
+
203
+ setNewProps(newStyle, view, viewManager, parentViewManager, parent.getId(), isSharedTransition);
165
204
  }
166
205
 
167
206
  public void endLayoutAnimation(int tag, boolean cancelled, boolean removeView) {
168
- View exitingView = mExitingViews.get(tag);
169
- if (exitingView != null && removeView) {
170
- if (exitingView instanceof ViewGroup && mAncestorsToRemove.contains(tag)) {
171
- cancelAnimationsInSubviews((ViewGroup) exitingView);
207
+ View view = resolveView(tag);
208
+
209
+ if (view == null) {
210
+ return;
211
+ }
212
+
213
+ Rect target = mEnteringViewTargetValues.get(tag);
214
+ if (!removeView && mEnteringViews.contains(tag) && target != null) {
215
+ view.layout(target.left, target.top, target.right, target.bottom);
216
+ }
217
+ mEnteringViews.remove(tag);
218
+ mEnteringViewTargetValues.remove(tag);
219
+
220
+ if (removeView) {
221
+ if (view instanceof ViewGroup && mAncestorsToRemove.contains(tag)) {
222
+ cancelAnimationsInSubviews((ViewGroup) view);
172
223
  }
173
224
 
174
225
  mExitingViews.remove(tag);
175
- maybeDropAncestors(exitingView);
226
+ maybeDropAncestors(view);
176
227
 
177
- ViewGroup parent = (ViewGroup) exitingView.getParent();
178
- if (parent != null) {
179
- removeView(exitingView, parent);
180
- }
228
+ ViewGroup parent = (ViewGroup) view.getParent();
229
+ removeView(view, parent);
181
230
  }
231
+ mSharedTransitionManager.finishSharedAnimation(tag);
182
232
  }
183
233
 
184
234
  public void printSubTree(View view, int level) {
@@ -205,9 +255,14 @@ public class AnimationsManager implements ViewHierarchyObserver {
205
255
  }
206
256
  }
207
257
 
208
- public HashMap<String, Float> prepareDataForAnimationWorklet(
258
+ public HashMap<String, Object> prepareDataForAnimationWorklet(
209
259
  HashMap<String, Object> values, boolean isTargetValues) {
210
- HashMap<String, Float> preparedValues = new HashMap<>();
260
+ return prepareDataForAnimationWorklet(values, isTargetValues, false);
261
+ }
262
+
263
+ public HashMap<String, Object> prepareDataForAnimationWorklet(
264
+ HashMap<String, Object> values, boolean isTargetValues, boolean addTransform) {
265
+ HashMap<String, Object> preparedValues = new HashMap<>();
211
266
  ArrayList<String> keys;
212
267
  if (isTargetValues) {
213
268
  keys = Snapshot.targetKeysToTransform;
@@ -218,6 +273,12 @@ public class AnimationsManager implements ViewHierarchyObserver {
218
273
  preparedValues.put(key, PixelUtil.toDIPFromPixel((int) values.get(key)));
219
274
  }
220
275
 
276
+ if (addTransform) {
277
+ String key =
278
+ isTargetValues ? Snapshot.TARGET_TRANSFORM_MATRIX : Snapshot.CURRENT_TRANSFORM_MATRIX;
279
+ preparedValues.put(key, values.get(key));
280
+ }
281
+
221
282
  DisplayMetrics displayMetrics = new DisplayMetrics();
222
283
  Activity currentActivity = mContext.getCurrentActivity();
223
284
  if (currentActivity != null) {
@@ -235,6 +296,7 @@ public class AnimationsManager implements ViewHierarchyObserver {
235
296
 
236
297
  public void setNativeMethods(NativeMethodsHolder nativeMethods) {
237
298
  mNativeMethodsHolder = nativeMethods;
299
+ mSharedTransitionManager.setNativeMethods(nativeMethods);
238
300
  }
239
301
 
240
302
  public void setNewProps(
@@ -242,7 +304,8 @@ public class AnimationsManager implements ViewHierarchyObserver {
242
304
  View view,
243
305
  ViewManager viewManager,
244
306
  ViewManager parentViewManager,
245
- Integer parentTag) {
307
+ Integer parentTag,
308
+ boolean isPositionAbsolute) {
246
309
  float x =
247
310
  (props.get(Snapshot.ORIGIN_X) != null)
248
311
  ? ((Double) props.get(Snapshot.ORIGIN_X)).floatValue()
@@ -259,9 +322,37 @@ public class AnimationsManager implements ViewHierarchyObserver {
259
322
  (props.get(Snapshot.HEIGHT) != null)
260
323
  ? ((Double) props.get(Snapshot.HEIGHT)).floatValue()
261
324
  : PixelUtil.toDIPFromPixel(view.getHeight());
262
- updateLayout(view, parentViewManager, parentTag, view.getId(), x, y, width, height);
325
+
326
+ if (props.containsKey(Snapshot.TRANSFORM_MATRIX)) {
327
+ float[] matrixValues = new float[9];
328
+ if (props.get(Snapshot.TRANSFORM_MATRIX) instanceof ReadableNativeArray) {
329
+ // this array comes from JavaScript
330
+ ReadableNativeArray matrixArray =
331
+ (ReadableNativeArray) props.get(Snapshot.TRANSFORM_MATRIX);
332
+ for (int i = 0; i < 9; i++) {
333
+ matrixValues[i] = ((Double) matrixArray.getDouble(i)).floatValue();
334
+ }
335
+ } else {
336
+ // this array comes from Java
337
+ ArrayList<Float> casted = (ArrayList<Float>) props.get(Snapshot.TRANSFORM_MATRIX);
338
+ for (int i = 0; i < 9; i++) {
339
+ matrixValues[i] = casted.get(i);
340
+ }
341
+ }
342
+ view.setScaleX(matrixValues[0]);
343
+ view.setScaleY(matrixValues[4]);
344
+ // as far, let's support only scale and translation. Rotation maybe the future feature
345
+ // (http://eecs.qmul.ac.uk/~gslabaugh/publications/euler.pdf)
346
+
347
+ props.remove(Snapshot.TRANSFORM_MATRIX);
348
+ }
349
+
350
+ updateLayout(
351
+ view, parentViewManager, parentTag, view.getId(), x, y, width, height, isPositionAbsolute);
263
352
  props.remove(Snapshot.ORIGIN_X);
264
353
  props.remove(Snapshot.ORIGIN_Y);
354
+ props.remove(Snapshot.GLOBAL_ORIGIN_X);
355
+ props.remove(Snapshot.GLOBAL_ORIGIN_Y);
265
356
  props.remove(Snapshot.WIDTH);
266
357
  props.remove(Snapshot.HEIGHT);
267
358
 
@@ -307,7 +398,8 @@ public class AnimationsManager implements ViewHierarchyObserver {
307
398
  float xf,
308
399
  float yf,
309
400
  float widthf,
310
- float heightf) {
401
+ float heightf,
402
+ boolean isPositionAbsolute) {
311
403
 
312
404
  int x = Math.round(PixelUtil.toPixelFromDIP(xf));
313
405
  int y = Math.round(PixelUtil.toPixelFromDIP(yf));
@@ -348,7 +440,7 @@ public class AnimationsManager implements ViewHierarchyObserver {
348
440
  }
349
441
 
350
442
  // Check if the parent of the view has to layout the view, or the child has to lay itself out.
351
- if (parentTag % 10 == 1) { // ParentIsARoot
443
+ if (parentTag % 10 == 1 && parentViewManager != null) { // parentTag % 10 == 1 - ParentIsARoot
352
444
  IViewManagerWithChildren parentViewManagerWithChildren;
353
445
  if (parentViewManager instanceof IViewManagerWithChildren) {
354
446
  parentViewManagerWithChildren = (IViewManagerWithChildren) parentViewManager;
@@ -362,11 +454,18 @@ public class AnimationsManager implements ViewHierarchyObserver {
362
454
  viewToUpdate.layout(x, y, x + width, y + height);
363
455
  }
364
456
  } else {
457
+ if (isPositionAbsolute) {
458
+ Point newPoint = new Point(x, y);
459
+ View viewToUpdateParent = (View) viewToUpdate.getParent();
460
+ Point convertedPoint = convertScreenLocationToViewCoordinates(newPoint, viewToUpdateParent);
461
+ x = convertedPoint.x;
462
+ y = convertedPoint.y;
463
+ }
365
464
  viewToUpdate.layout(x, y, x + width, y + height);
366
465
  }
367
466
  }
368
467
 
369
- public boolean hasAnimationForTag(int tag, String type) {
468
+ public boolean hasAnimationForTag(int tag, int type) {
370
469
  return mNativeMethodsHolder.hasAnimation(tag, type);
371
470
  }
372
471
 
@@ -376,10 +475,23 @@ public class AnimationsManager implements ViewHierarchyObserver {
376
475
 
377
476
  private boolean removeOrAnimateExitRecursive(View view, ViewGroup parent, boolean shouldRemove) {
378
477
  int tag = view.getId();
379
- boolean hasExitAnimation = hasAnimationForTag(tag, "exiting") || mExitingViews.containsKey(tag);
478
+ ViewManager viewManager = resolveViewManager(tag);
479
+
480
+ if (viewManager != null && viewManager.getName().equals("RNSScreenStack")) {
481
+ cancelAnimationsRecursive(view);
482
+ return false;
483
+ }
484
+
485
+ boolean hasExitAnimation =
486
+ hasAnimationForTag(tag, LayoutAnimations.Types.EXITING) || mExitingViews.containsKey(tag);
380
487
  boolean hasAnimatedChildren = false;
381
488
  shouldRemove = shouldRemove && !hasExitAnimation;
382
489
 
490
+ if (hasAnimationForTag(tag, LayoutAnimations.Types.SHARED_ELEMENT_TRANSITION)) {
491
+ mSharedTransitionManager.notifyAboutRemovedView(view);
492
+ mSharedTransitionManager.makeSnapshot(view);
493
+ }
494
+
383
495
  ArrayList<View> toBeRemoved = new ArrayList<>();
384
496
 
385
497
  // we might want to keep this view around
@@ -402,11 +514,11 @@ public class AnimationsManager implements ViewHierarchyObserver {
402
514
  if (hasExitAnimation) {
403
515
  Snapshot before = new Snapshot(view, mReanimatedNativeHierarchyManager);
404
516
  HashMap<String, Object> currentValues = before.toCurrentMap();
405
- HashMap<String, Float> preparedValues = prepareDataForAnimationWorklet(currentValues, false);
517
+ HashMap<String, Object> preparedValues = prepareDataForAnimationWorklet(currentValues, false);
406
518
  if (!mExitingViews.containsKey(tag)) {
407
519
  mExitingViews.put(tag, view);
408
520
  registerExitingAncestors(view);
409
- mNativeMethodsHolder.startAnimation(tag, "exiting", preparedValues);
521
+ mNativeMethodsHolder.startAnimation(tag, LayoutAnimations.Types.EXITING, preparedValues);
410
522
  }
411
523
  }
412
524
 
@@ -427,6 +539,28 @@ public class AnimationsManager implements ViewHierarchyObserver {
427
539
  return true;
428
540
  }
429
541
 
542
+ public void clearAnimationConfigForTag(int tag) {
543
+ View view = resolveView(tag);
544
+ if (view != null) {
545
+ clearAnimationConfigRecursive(view);
546
+ }
547
+ }
548
+
549
+ public void clearAnimationConfigRecursive(View view) {
550
+ mNativeMethodsHolder.clearAnimationConfig(view.getId());
551
+ if (view instanceof ViewGroup) {
552
+ ViewGroup viewGroup = (ViewGroup) view;
553
+ for (int i = 0; i < viewGroup.getChildCount(); i++) {
554
+ clearAnimationConfigRecursive(viewGroup.getChildAt(i));
555
+ }
556
+ }
557
+ }
558
+
559
+ public void cancelAnimationsInSubviews(View view) {
560
+ cancelAnimationsRecursive(view);
561
+ clearAnimationConfigRecursive(view);
562
+ }
563
+
430
564
  private void registerExitingAncestors(View view) {
431
565
  View parent = (View) view.getParent();
432
566
  while (parent != null && !(parent instanceof RootView)) {
@@ -440,6 +574,9 @@ public class AnimationsManager implements ViewHierarchyObserver {
440
574
  }
441
575
 
442
576
  private void maybeDropAncestors(View exitingView) {
577
+ if (!(exitingView.getParent() instanceof View)) {
578
+ return;
579
+ }
443
580
  View parent = (View) exitingView.getParent();
444
581
  while (parent != null && !(parent instanceof RootView)) {
445
582
  View view = parent;
@@ -461,7 +598,7 @@ public class AnimationsManager implements ViewHierarchyObserver {
461
598
  }
462
599
  }
463
600
 
464
- private void removeView(View view, ViewGroup parent) {
601
+ private void removeView(View view, @Nullable ViewGroup parent) {
465
602
  int tag = view.getId();
466
603
  if (mCallbacks.containsKey(tag)) {
467
604
  Runnable callback = mCallbacks.get(tag);
@@ -473,16 +610,30 @@ public class AnimationsManager implements ViewHierarchyObserver {
473
610
  mReanimatedNativeHierarchyManager.publicDropView(view);
474
611
  }
475
612
 
476
- parent.removeView(view);
613
+ if (parent != null) {
614
+ parent.removeView(view);
615
+ }
616
+ }
617
+
618
+ public void cancelAnimationsRecursive(View view) {
619
+ if (mExitingViews.containsKey(view.getId())) {
620
+ endLayoutAnimation(view.getId(), true, true);
621
+ } else if (view instanceof ViewGroup && mExitingSubviewCountMap.containsKey(view.getId())) {
622
+ cancelAnimationsInSubviews((ViewGroup) view);
623
+ }
477
624
  }
478
625
 
479
626
  private void cancelAnimationsInSubviews(ViewGroup view) {
480
627
  for (int i = view.getChildCount() - 1; i >= 0; i--) {
481
628
  View child = view.getChildAt(i);
482
629
 
630
+ if (child == null) {
631
+ continue;
632
+ }
633
+
483
634
  if (mExitingViews.containsKey(child.getId())) {
484
635
  endLayoutAnimation(child.getId(), true, true);
485
- } else if (child instanceof ViewGroup && mAncestorsToRemove.contains(child.getId())) {
636
+ } else if (child instanceof ViewGroup && mExitingSubviewCountMap.containsKey(child.getId())) {
486
637
  cancelAnimationsInSubviews((ViewGroup) child);
487
638
  }
488
639
  }
@@ -491,12 +642,17 @@ public class AnimationsManager implements ViewHierarchyObserver {
491
642
  private View resolveView(int tag) {
492
643
  if (mExitingViews.containsKey(tag)) {
493
644
  return mExitingViews.get(tag);
645
+ } else {
646
+ View view = mSharedTransitionManager.getTransitioningView(tag);
647
+ if (view != null) {
648
+ return view;
649
+ }
494
650
  }
651
+
495
652
  try {
496
653
  return mUIManager.resolveView(tag);
497
654
  } catch (IllegalViewOperationException e) {
498
655
  // view has been removed already
499
- e.printStackTrace();
500
656
  return null;
501
657
  }
502
658
  }
@@ -505,8 +661,35 @@ public class AnimationsManager implements ViewHierarchyObserver {
505
661
  try {
506
662
  return mReanimatedNativeHierarchyManager.resolveViewManager(tag);
507
663
  } catch (Exception e) {
508
- e.printStackTrace();
509
664
  return null;
510
665
  }
511
666
  }
667
+
668
+ private static Point convertScreenLocationToViewCoordinates(Point fromPoint, View parentView) {
669
+ int[] toPoint = {0, 0};
670
+ if (parentView != null) {
671
+ parentView.getLocationOnScreen(toPoint);
672
+ }
673
+ return new Point(fromPoint.x - toPoint[0], fromPoint.y - toPoint[1]);
674
+ }
675
+
676
+ public void screenDidLayout() {
677
+ mSharedTransitionManager.screenDidLayout();
678
+ }
679
+
680
+ public void viewDidLayout(View view) {
681
+ mSharedTransitionManager.viewDidLayout(view);
682
+ }
683
+
684
+ public void notifyAboutViewsRemoval(int[] tagsToDelete) {
685
+ mSharedTransitionManager.onViewsRemoval(tagsToDelete);
686
+ }
687
+
688
+ public void makeSnapshotOfTopScreenViews(ViewGroup stack) {
689
+ mSharedTransitionManager.doSnapshotForTopScreenViews(stack);
690
+ }
691
+
692
+ protected ReactContext getContext() {
693
+ return mContext;
694
+ }
512
695
  }
@@ -9,6 +9,13 @@ import java.lang.ref.WeakReference;
9
9
  import java.util.Map;
10
10
 
11
11
  public class LayoutAnimations {
12
+ public static class Types {
13
+ static final int ENTERING = 1;
14
+ static final int EXITING = 2;
15
+ static final int LAYOUT = 3;
16
+ static final int SHARED_ELEMENT_TRANSITION = 4;
17
+ }
18
+
12
19
  static {
13
20
  SoLoader.loadLibrary("reanimated");
14
21
  }
@@ -17,7 +24,8 @@ public class LayoutAnimations {
17
24
  @SuppressWarnings("unused")
18
25
  private final HybridData mHybridData;
19
26
 
20
- private WeakReference<ReactApplicationContext> mContext;
27
+ private final WeakReference<ReactApplicationContext> mContext;
28
+ private WeakReference<AnimationsManager> mWeakAnimationsManager = new WeakReference<>(null);
21
29
 
22
30
  public LayoutAnimations(ReactApplicationContext context) {
23
31
  mContext = new WeakReference<>(context);
@@ -27,33 +35,51 @@ public class LayoutAnimations {
27
35
  private native HybridData initHybrid();
28
36
 
29
37
  // LayoutReanimation
30
- public native void startAnimationForTag(int tag, String type, Map<String, String> values);
38
+ public native void startAnimationForTag(int tag, int type, Map<String, String> values);
31
39
 
32
- public native boolean hasAnimationForTag(int tag, String type);
40
+ public native boolean hasAnimationForTag(int tag, int type);
33
41
 
34
42
  public native void clearAnimationConfigForTag(int tag);
35
43
 
44
+ public native void cancelAnimationForTag(
45
+ int tag, int type, boolean cancelled, boolean removeView);
46
+
36
47
  public native boolean isLayoutAnimationEnabled();
37
48
 
49
+ public native int findPrecedingViewTagForTransition(int tag);
50
+
38
51
  private void endLayoutAnimation(int tag, boolean cancelled, boolean removeView) {
39
- ReactApplicationContext context = mContext.get();
40
- if (context != null) {
41
- context
42
- .getNativeModule(ReanimatedModule.class)
43
- .getNodesManager()
44
- .getAnimationsManager()
45
- .endLayoutAnimation(tag, cancelled, removeView);
52
+ AnimationsManager animationsManager = getAnimationsManager();
53
+ if (animationsManager == null) {
54
+ return;
55
+ }
56
+ animationsManager.endLayoutAnimation(tag, cancelled, removeView);
57
+ }
58
+
59
+ private void progressLayoutAnimation(
60
+ int tag, Map<String, Object> newStyle, boolean isSharedTransition) {
61
+ AnimationsManager animationsManager = getAnimationsManager();
62
+ if (animationsManager == null) {
63
+ return;
46
64
  }
65
+ animationsManager.progressLayoutAnimation(tag, newStyle, isSharedTransition);
47
66
  }
48
67
 
49
- private void progressLayoutAnimation(int tag, Map<String, Object> newStyle) {
68
+ private AnimationsManager getAnimationsManager() {
69
+ AnimationsManager animationsManager = mWeakAnimationsManager.get();
70
+ if (animationsManager != null) {
71
+ return mWeakAnimationsManager.get();
72
+ }
73
+
50
74
  ReactApplicationContext context = mContext.get();
51
- if (context != null) {
52
- context
53
- .getNativeModule(ReanimatedModule.class)
54
- .getNodesManager()
55
- .getAnimationsManager()
56
- .progressLayoutAnimation(tag, newStyle);
75
+ if (context == null) {
76
+ return null;
57
77
  }
78
+
79
+ animationsManager =
80
+ context.getNativeModule(ReanimatedModule.class).getNodesManager().getAnimationsManager();
81
+
82
+ mWeakAnimationsManager = new WeakReference<>(animationsManager);
83
+ return animationsManager;
58
84
  }
59
85
  }
@@ -3,11 +3,15 @@ package com.swmansion.reanimated.layoutReanimation;
3
3
  import java.util.HashMap;
4
4
 
5
5
  public interface NativeMethodsHolder {
6
- void startAnimation(int tag, String type, HashMap<String, Float> values);
6
+ void startAnimation(int tag, int type, HashMap<String, Object> values);
7
7
 
8
- boolean hasAnimation(int tag, String type);
8
+ boolean hasAnimation(int tag, int type);
9
9
 
10
10
  void clearAnimationConfig(int tag);
11
11
 
12
+ void cancelAnimation(int tag, int type, boolean cancelled, boolean removeView);
13
+
12
14
  boolean isLayoutAnimationEnabled();
15
+
16
+ int findPrecedingViewTagForTransition(int tag);
13
17
  }
@@ -0,0 +1,19 @@
1
+ package com.swmansion.reanimated.layoutReanimation;
2
+
3
+ import android.view.View;
4
+
5
+ public class SharedElement {
6
+
7
+ public View sourceView;
8
+ public Snapshot sourceViewSnapshot;
9
+ public View targetView;
10
+ public Snapshot targetViewSnapshot;
11
+
12
+ public SharedElement(
13
+ View sourceView, Snapshot sourceViewSnapshot, View targetView, Snapshot targetViewSnapshot) {
14
+ this.sourceView = sourceView;
15
+ this.sourceViewSnapshot = sourceViewSnapshot;
16
+ this.targetView = targetView;
17
+ this.targetViewSnapshot = targetViewSnapshot;
18
+ }
19
+ }