react-native-reanimated 3.0.0-rc.8 → 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 (339) 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 +122 -121
  10. package/Common/cpp/NativeModules/NativeReanimatedModule.h +21 -14
  11. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +15 -7
  12. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.h +8 -4
  13. package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.cpp +50 -1
  14. package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.h +10 -1
  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 +11 -63
  19. package/Common/cpp/SharedItems/Shareables.h +113 -93
  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 +67 -247
  27. package/Common/cpp/Tools/RuntimeDecorator.h +2 -3
  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 +31 -5
  62. package/ios/LayoutReanimation/REAAnimationsManager.m +265 -77
  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 +67 -60
  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 +18 -35
  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/component/FlatList.js +19 -3
  97. package/lib/commonjs/reanimated2/component/FlatList.js.map +1 -1
  98. package/lib/commonjs/reanimated2/core.js +34 -83
  99. package/lib/commonjs/reanimated2/core.js.map +1 -1
  100. package/lib/commonjs/reanimated2/errors.js +66 -0
  101. package/lib/commonjs/reanimated2/errors.js.map +1 -0
  102. package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js +2 -2
  103. package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
  104. package/lib/commonjs/reanimated2/globals.d.js.map +1 -1
  105. package/lib/commonjs/reanimated2/hook/index.js +0 -6
  106. package/lib/commonjs/reanimated2/hook/index.js.map +1 -1
  107. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js +5 -2
  108. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  109. package/lib/commonjs/reanimated2/hook/useAnimatedReaction.js +13 -1
  110. package/lib/commonjs/reanimated2/hook/useAnimatedReaction.js.map +1 -1
  111. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js +1 -1
  112. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js.map +1 -1
  113. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js +89 -16
  114. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  115. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js +43 -50
  116. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  117. package/lib/commonjs/reanimated2/hook/useDerivedValue.js +13 -1
  118. package/lib/commonjs/reanimated2/hook/useDerivedValue.js.map +1 -1
  119. package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js +2 -2
  120. package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js.map +1 -1
  121. package/lib/commonjs/reanimated2/hook/utils.js +18 -65
  122. package/lib/commonjs/reanimated2/hook/utils.js.map +1 -1
  123. package/lib/commonjs/reanimated2/index.js +13 -0
  124. package/lib/commonjs/reanimated2/index.js.map +1 -1
  125. package/lib/commonjs/reanimated2/initializers.js +196 -0
  126. package/lib/commonjs/reanimated2/initializers.js.map +1 -0
  127. package/lib/commonjs/reanimated2/interpolateColor.js +96 -19
  128. package/lib/commonjs/reanimated2/interpolateColor.js.map +1 -1
  129. package/lib/commonjs/reanimated2/jestUtils.js +1 -1
  130. package/lib/commonjs/reanimated2/jestUtils.js.map +1 -1
  131. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js +101 -16
  132. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  133. package/lib/commonjs/reanimated2/js-reanimated/Mapper.js +22 -0
  134. package/lib/commonjs/reanimated2/js-reanimated/Mapper.js.map +1 -1
  135. package/lib/commonjs/reanimated2/js-reanimated/WebSensor.js +2 -0
  136. package/lib/commonjs/reanimated2/js-reanimated/WebSensor.js.map +1 -0
  137. package/lib/commonjs/reanimated2/js-reanimated/commonTypes.js.map +1 -1
  138. package/lib/commonjs/reanimated2/js-reanimated/global.js +4 -9
  139. package/lib/commonjs/reanimated2/js-reanimated/global.js.map +1 -1
  140. package/lib/commonjs/reanimated2/js-reanimated/index.js +0 -1
  141. package/lib/commonjs/reanimated2/js-reanimated/index.js.map +1 -1
  142. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +11 -0
  143. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  144. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js +8 -0
  145. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  146. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js +16 -12
  147. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
  148. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +16 -23
  149. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
  150. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -14
  151. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
  152. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -14
  153. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
  154. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Slide.js +8 -15
  155. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
  156. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +16 -23
  157. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
  158. package/lib/commonjs/reanimated2/layoutReanimation/index.js +13 -0
  159. package/lib/commonjs/reanimated2/layoutReanimation/index.js.map +1 -1
  160. package/lib/commonjs/reanimated2/layoutReanimation/sharedTransitions/index.js +94 -0
  161. package/lib/commonjs/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -0
  162. package/lib/commonjs/reanimated2/mappers.js +18 -6
  163. package/lib/commonjs/reanimated2/mappers.js.map +1 -1
  164. package/lib/commonjs/reanimated2/mock.js +45 -0
  165. package/lib/commonjs/reanimated2/mock.js.map +1 -1
  166. package/lib/commonjs/reanimated2/mutables.js +4 -2
  167. package/lib/commonjs/reanimated2/mutables.js.map +1 -1
  168. package/lib/commonjs/reanimated2/platform-specific/checkVersion.js +42 -0
  169. package/lib/commonjs/reanimated2/platform-specific/checkVersion.js.map +1 -0
  170. package/lib/commonjs/reanimated2/platform-specific/checkVersion.web.js +15 -0
  171. package/lib/commonjs/reanimated2/platform-specific/checkVersion.web.js.map +1 -0
  172. package/lib/commonjs/reanimated2/pluginUtils.js +11 -0
  173. package/lib/commonjs/reanimated2/pluginUtils.js.map +1 -0
  174. package/lib/commonjs/reanimated2/shareables.js +38 -11
  175. package/lib/commonjs/reanimated2/shareables.js.map +1 -1
  176. package/lib/commonjs/reanimated2/threads.js +114 -4
  177. package/lib/commonjs/reanimated2/threads.js.map +1 -1
  178. package/lib/commonjs/reanimated2/utils.js +7 -0
  179. package/lib/commonjs/reanimated2/utils.js.map +1 -1
  180. package/lib/commonjs/reanimated2/valueSetter.js +1 -3
  181. package/lib/commonjs/reanimated2/valueSetter.js.map +1 -1
  182. package/lib/module/createAnimatedComponent.js +229 -29
  183. package/lib/module/createAnimatedComponent.js.map +1 -1
  184. package/lib/module/reanimated2/Colors.js +35 -19
  185. package/lib/module/reanimated2/Colors.js.map +1 -1
  186. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js +18 -34
  187. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  188. package/lib/module/reanimated2/animation/styleAnimation.js +5 -1
  189. package/lib/module/reanimated2/animation/styleAnimation.js.map +1 -1
  190. package/lib/module/reanimated2/animation/util.js +17 -16
  191. package/lib/module/reanimated2/animation/util.js.map +1 -1
  192. package/lib/module/reanimated2/commonTypes.js +29 -0
  193. package/lib/module/reanimated2/commonTypes.js.map +1 -1
  194. package/lib/module/reanimated2/component/FlatList.js +18 -4
  195. package/lib/module/reanimated2/component/FlatList.js.map +1 -1
  196. package/lib/module/reanimated2/core.js +30 -76
  197. package/lib/module/reanimated2/core.js.map +1 -1
  198. package/lib/module/reanimated2/errors.js +58 -0
  199. package/lib/module/reanimated2/errors.js.map +1 -0
  200. package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js +2 -2
  201. package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
  202. package/lib/module/reanimated2/globals.d.js.map +1 -1
  203. package/lib/module/reanimated2/hook/index.js +1 -1
  204. package/lib/module/reanimated2/hook/index.js.map +1 -1
  205. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js +5 -2
  206. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  207. package/lib/module/reanimated2/hook/useAnimatedReaction.js +12 -1
  208. package/lib/module/reanimated2/hook/useAnimatedReaction.js.map +1 -1
  209. package/lib/module/reanimated2/hook/useAnimatedRef.js +2 -2
  210. package/lib/module/reanimated2/hook/useAnimatedRef.js.map +1 -1
  211. package/lib/module/reanimated2/hook/useAnimatedSensor.js +88 -13
  212. package/lib/module/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  213. package/lib/module/reanimated2/hook/useAnimatedStyle.js +45 -52
  214. package/lib/module/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  215. package/lib/module/reanimated2/hook/useDerivedValue.js +12 -1
  216. package/lib/module/reanimated2/hook/useDerivedValue.js.map +1 -1
  217. package/lib/module/reanimated2/hook/useScrollViewOffset.js +2 -2
  218. package/lib/module/reanimated2/hook/useScrollViewOffset.js.map +1 -1
  219. package/lib/module/reanimated2/hook/utils.js +17 -60
  220. package/lib/module/reanimated2/hook/utils.js.map +1 -1
  221. package/lib/module/reanimated2/index.js +1 -0
  222. package/lib/module/reanimated2/index.js.map +1 -1
  223. package/lib/module/reanimated2/initializers.js +182 -0
  224. package/lib/module/reanimated2/initializers.js.map +1 -0
  225. package/lib/module/reanimated2/interpolateColor.js +96 -19
  226. package/lib/module/reanimated2/interpolateColor.js.map +1 -1
  227. package/lib/module/reanimated2/jestUtils.js +1 -1
  228. package/lib/module/reanimated2/jestUtils.js.map +1 -1
  229. package/lib/module/reanimated2/js-reanimated/JSReanimated.js +101 -16
  230. package/lib/module/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  231. package/lib/module/reanimated2/js-reanimated/Mapper.js +21 -0
  232. package/lib/module/reanimated2/js-reanimated/Mapper.js.map +1 -1
  233. package/lib/module/reanimated2/js-reanimated/WebSensor.js +2 -0
  234. package/lib/module/reanimated2/js-reanimated/WebSensor.js.map +1 -0
  235. package/lib/module/reanimated2/js-reanimated/commonTypes.js.map +1 -1
  236. package/lib/module/reanimated2/js-reanimated/global.js +4 -9
  237. package/lib/module/reanimated2/js-reanimated/global.js.map +1 -1
  238. package/lib/module/reanimated2/js-reanimated/index.js +0 -1
  239. package/lib/module/reanimated2/js-reanimated/index.js.map +1 -1
  240. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +9 -1
  241. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  242. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js +1 -0
  243. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  244. package/lib/module/reanimated2/layoutReanimation/animationsManager.js +15 -10
  245. package/lib/module/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
  246. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +16 -21
  247. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
  248. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -12
  249. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
  250. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
  251. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
  252. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js +8 -13
  253. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
  254. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +16 -21
  255. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
  256. package/lib/module/reanimated2/layoutReanimation/index.js +1 -0
  257. package/lib/module/reanimated2/layoutReanimation/index.js.map +1 -1
  258. package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js +82 -0
  259. package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -0
  260. package/lib/module/reanimated2/mappers.js +16 -6
  261. package/lib/module/reanimated2/mappers.js.map +1 -1
  262. package/lib/module/reanimated2/mock.js +45 -0
  263. package/lib/module/reanimated2/mock.js.map +1 -1
  264. package/lib/module/reanimated2/mutables.js +4 -2
  265. package/lib/module/reanimated2/mutables.js.map +1 -1
  266. package/lib/module/reanimated2/platform-specific/checkVersion.js +35 -0
  267. package/lib/module/reanimated2/platform-specific/checkVersion.js.map +1 -0
  268. package/lib/module/reanimated2/platform-specific/checkVersion.web.js +8 -0
  269. package/lib/module/reanimated2/platform-specific/checkVersion.web.js.map +1 -0
  270. package/lib/module/reanimated2/pluginUtils.js +4 -0
  271. package/lib/module/reanimated2/pluginUtils.js.map +1 -0
  272. package/lib/module/reanimated2/shareables.js +38 -9
  273. package/lib/module/reanimated2/shareables.js.map +1 -1
  274. package/lib/module/reanimated2/threads.js +105 -4
  275. package/lib/module/reanimated2/threads.js.map +1 -1
  276. package/lib/module/reanimated2/utils.js +5 -0
  277. package/lib/module/reanimated2/utils.js.map +1 -1
  278. package/lib/module/reanimated2/valueSetter.js +1 -2
  279. package/lib/module/reanimated2/valueSetter.js.map +1 -1
  280. package/package.json +9 -8
  281. package/{plugin.js → plugin/index.js} +173 -228
  282. package/react-native-reanimated.d.ts +57 -10
  283. package/scripts/reanimated_utils.rb +15 -2
  284. package/src/createAnimatedComponent.tsx +238 -28
  285. package/src/reanimated2/Colors.ts +38 -11
  286. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +63 -41
  287. package/src/reanimated2/animation/styleAnimation.ts +8 -1
  288. package/src/reanimated2/animation/util.ts +29 -16
  289. package/src/reanimated2/commonTypes.ts +28 -1
  290. package/src/reanimated2/component/FlatList.tsx +30 -5
  291. package/src/reanimated2/core.ts +45 -75
  292. package/src/reanimated2/errors.ts +57 -0
  293. package/src/reanimated2/frameCallback/FrameCallbackRegistryUI.ts +2 -2
  294. package/src/reanimated2/globals.d.ts +34 -18
  295. package/src/reanimated2/hook/index.ts +1 -1
  296. package/src/reanimated2/hook/useAnimatedKeyboard.ts +10 -4
  297. package/src/reanimated2/hook/useAnimatedReaction.ts +12 -5
  298. package/src/reanimated2/hook/useAnimatedRef.ts +1 -4
  299. package/src/reanimated2/hook/useAnimatedSensor.ts +88 -11
  300. package/src/reanimated2/hook/useAnimatedStyle.ts +43 -45
  301. package/src/reanimated2/hook/useDerivedValue.ts +8 -1
  302. package/src/reanimated2/hook/useScrollViewOffset.ts +2 -2
  303. package/src/reanimated2/hook/utils.ts +15 -61
  304. package/src/reanimated2/index.ts +1 -0
  305. package/src/reanimated2/initializers.ts +184 -0
  306. package/src/reanimated2/interpolateColor.ts +104 -20
  307. package/src/reanimated2/jestUtils.ts +1 -1
  308. package/src/reanimated2/js-reanimated/JSReanimated.ts +105 -18
  309. package/src/reanimated2/js-reanimated/Mapper.ts +32 -0
  310. package/src/reanimated2/js-reanimated/WebSensor.ts +34 -0
  311. package/src/reanimated2/js-reanimated/commonTypes.ts +0 -1
  312. package/src/reanimated2/js-reanimated/global.ts +4 -8
  313. package/src/reanimated2/js-reanimated/index.ts +0 -1
  314. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +13 -1
  315. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +1 -0
  316. package/src/reanimated2/layoutReanimation/animationsManager.ts +17 -12
  317. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +16 -19
  318. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +14 -11
  319. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +21 -11
  320. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -11
  321. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +36 -19
  322. package/src/reanimated2/layoutReanimation/index.ts +1 -0
  323. package/src/reanimated2/layoutReanimation/sharedTransitions/index.ts +87 -0
  324. package/src/reanimated2/mappers.ts +17 -6
  325. package/src/reanimated2/mock.ts +128 -0
  326. package/src/reanimated2/mutables.ts +2 -0
  327. package/src/reanimated2/platform-specific/checkVersion.ts +39 -0
  328. package/src/reanimated2/platform-specific/checkVersion.web.ts +6 -0
  329. package/src/reanimated2/pluginUtils.ts +8 -0
  330. package/src/reanimated2/shareables.ts +47 -11
  331. package/src/reanimated2/threads.ts +103 -1
  332. package/src/reanimated2/utils.ts +6 -0
  333. package/src/reanimated2/valueSetter.ts +1 -2
  334. package/lib/commonjs/reanimated2/time.js +0 -55
  335. package/lib/commonjs/reanimated2/time.js.map +0 -1
  336. package/lib/module/reanimated2/time.js +0 -37
  337. package/lib/module/reanimated2/time.js.map +0 -1
  338. package/src/reanimated2/time.ts +0 -30
  339. /package/android/src/{main/java → reactNativeVersionPatch/ReanimatedUIManager/70}/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +0 -0
@@ -1,339 +1,122 @@
1
1
  package com.swmansion.reanimated;
2
2
 
3
- import android.os.SystemClock;
3
+ import static com.swmansion.reanimated.Utils.simplifyStringNumbersList;
4
+
4
5
  import android.util.Log;
5
- import androidx.annotation.Nullable;
6
+
6
7
  import com.facebook.jni.HybridData;
7
8
  import com.facebook.proguard.annotations.DoNotStrip;
8
- import com.facebook.react.ReactApplication;
9
- import com.facebook.react.bridge.NativeModule;
10
- import com.facebook.react.bridge.queue.MessageQueueThread;
11
9
  import com.facebook.react.bridge.ReactApplicationContext;
12
- import com.facebook.react.bridge.ReadableMap;
13
- import com.facebook.react.bridge.ReadableNativeArray;
14
- import com.facebook.react.bridge.WritableArray;
15
- import com.facebook.react.bridge.WritableMap;
16
- import com.facebook.react.devsupport.interfaces.DevSupportManager;
10
+ import com.facebook.react.bridge.queue.MessageQueueThread;
17
11
  import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
18
- import com.facebook.react.uimanager.UIManagerModule;
19
- import com.facebook.react.uimanager.events.RCTEventEmitter;
20
- import com.facebook.soloader.SoLoader;
21
- import com.swmansion.common.GestureHandlerStateManager;
22
- import com.swmansion.reanimated.keyboardObserver.ReanimatedKeyboardEventListener;
23
12
  import com.swmansion.reanimated.layoutReanimation.AnimationsManager;
24
13
  import com.swmansion.reanimated.layoutReanimation.LayoutAnimations;
25
14
  import com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder;
26
- import com.swmansion.reanimated.sensor.ReanimatedSensorContainer;
27
- import com.swmansion.reanimated.sensor.ReanimatedSensorType;
15
+ import com.swmansion.reanimated.nativeProxy.NativeProxyCommon;
16
+
28
17
  import java.lang.ref.WeakReference;
29
- import java.util.ArrayList;
30
18
  import java.util.HashMap;
31
- import java.util.HashSet;
32
- import java.util.Map;
33
- import java.util.Set;
34
-
35
- public class NativeProxy {
36
-
37
- static {
38
- SoLoader.loadLibrary("reanimated");
39
- }
40
-
41
- @DoNotStrip
42
- public static class AnimationFrameCallback implements NodesManager.OnAnimationFrame {
43
-
44
- @DoNotStrip private final HybridData mHybridData;
45
19
 
20
+ public class NativeProxy extends NativeProxyCommon {
46
21
  @DoNotStrip
47
- private AnimationFrameCallback(HybridData hybridData) {
48
- mHybridData = hybridData;
22
+ @SuppressWarnings("unused")
23
+ private final HybridData mHybridData;
24
+
25
+ public NativeProxy(ReactApplicationContext context) {
26
+ super(context);
27
+ CallInvokerHolderImpl holder =
28
+ (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder();
29
+ LayoutAnimations LayoutAnimations = new LayoutAnimations(context);
30
+ mHybridData =
31
+ initHybrid(
32
+ context.getJavaScriptContextHolder().get(),
33
+ holder,
34
+ mScheduler,
35
+ LayoutAnimations);
36
+ prepareLayoutAnimations(LayoutAnimations);
37
+ ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread();
38
+ installJSIBindings(messageQueueThread);
49
39
  }
50
40
 
51
- @Override
52
- public native void onAnimationFrame(double timestampMs);
53
- }
54
-
55
- @DoNotStrip
56
- public static class EventHandler implements RCTEventEmitter {
41
+ private native HybridData initHybrid(
42
+ long jsContext,
43
+ CallInvokerHolderImpl jsCallInvokerHolder,
44
+ Scheduler scheduler,
45
+ LayoutAnimations LayoutAnimations);
57
46
 
58
- @DoNotStrip private final HybridData mHybridData;
59
- private UIManagerModule.CustomEventNamesResolver mCustomEventNamesResolver;
60
-
61
- @DoNotStrip
62
- private EventHandler(HybridData hybridData) {
63
- mHybridData = hybridData;
64
- }
47
+ private native void installJSIBindings(MessageQueueThread messageQueueThread);
65
48
 
66
- @Override
67
- public void receiveEvent(int targetTag, String eventName, @Nullable WritableMap event) {
68
- String resolvedEventName = mCustomEventNamesResolver.resolveCustomEventName(eventName);
69
- receiveEvent(targetTag + resolvedEventName, event);
70
- }
49
+ public native boolean isAnyHandlerWaitingForEvent(String eventName);
71
50
 
72
- public native void receiveEvent(String eventKey, @Nullable WritableMap event);
51
+ public native void performOperations();
73
52
 
74
53
  @Override
75
- public void receiveTouches(
76
- String eventName, WritableArray touches, WritableArray changedIndices) {
77
- // not interested in processing touch events this way, we process raw events only
78
- }
79
- }
80
-
81
- @DoNotStrip
82
- public static class SensorSetter {
83
-
84
- @DoNotStrip private final HybridData mHybridData;
85
-
86
- @DoNotStrip
87
- private SensorSetter(HybridData hybridData) {
88
- mHybridData = hybridData;
89
- }
90
-
91
- public native void sensorSetter(float[] value);
92
- }
93
-
94
- @DoNotStrip
95
- public static class KeyboardEventDataUpdater {
96
- @DoNotStrip private final HybridData mHybridData;
97
-
98
- @DoNotStrip
99
- private KeyboardEventDataUpdater(HybridData hybridData) {
100
- mHybridData = hybridData;
101
- }
102
-
103
- public native void keyboardEventDataUpdater(int keyboardState, int height);
104
- }
105
-
106
- @DoNotStrip
107
- @SuppressWarnings("unused")
108
- private final HybridData mHybridData;
109
-
110
- private NodesManager mNodesManager;
111
- private final WeakReference<ReactApplicationContext> mContext;
112
- private Scheduler mScheduler = null;
113
- private ReanimatedSensorContainer reanimatedSensorContainer;
114
- private final GestureHandlerStateManager gestureHandlerStateManager;
115
- private ReanimatedKeyboardEventListener reanimatedKeyboardEventListener;
116
- private Long firstUptime = SystemClock.uptimeMillis();
117
- private boolean slowAnimationsEnabled = false;
118
-
119
- public NativeProxy(ReactApplicationContext context) {
120
- CallInvokerHolderImpl holder =
121
- (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder();
122
- LayoutAnimations LayoutAnimations = new LayoutAnimations(context);
123
- mScheduler = new Scheduler(context);
124
-
125
- mHybridData =
126
- initHybrid(
127
- context.getJavaScriptContextHolder().get(),
128
- holder,
129
- mScheduler,
130
- LayoutAnimations);
131
- mContext = new WeakReference<>(context);
132
- prepare(LayoutAnimations);
133
- reanimatedSensorContainer = new ReanimatedSensorContainer(mContext);
134
- reanimatedKeyboardEventListener = new ReanimatedKeyboardEventListener(mContext);
135
- addDevMenuOption();
136
-
137
- GestureHandlerStateManager tempHandlerStateManager;
138
- try {
139
- Class<NativeModule> gestureHandlerModuleClass =
140
- (Class<NativeModule>)
141
- Class.forName("com.swmansion.gesturehandler.react.RNGestureHandlerModule");
142
- tempHandlerStateManager =
143
- (GestureHandlerStateManager) context.getNativeModule(gestureHandlerModuleClass);
144
- } catch (ClassCastException | ClassNotFoundException e) {
145
- tempHandlerStateManager = null;
54
+ protected HybridData getHybridData() {
55
+ return mHybridData;
146
56
  }
147
- gestureHandlerStateManager = tempHandlerStateManager;
148
- }
149
57
 
150
- private native HybridData initHybrid(
151
- long jsContext,
152
- CallInvokerHolderImpl jsCallInvokerHolder,
153
- Scheduler scheduler,
154
- LayoutAnimations LayoutAnimations);
155
-
156
- private native void installJSIBindings(MessageQueueThread messageQueueThread);
157
-
158
- public native boolean isAnyHandlerWaitingForEvent(String eventName);
159
-
160
- public native void performOperations();
161
-
162
- public Scheduler getScheduler() {
163
- return mScheduler;
164
- }
165
-
166
- private void toggleSlowAnimations() {
167
- slowAnimationsEnabled = !slowAnimationsEnabled;
168
- if (slowAnimationsEnabled) {
169
- firstUptime = SystemClock.uptimeMillis();
170
- }
171
- }
172
-
173
- private void addDevMenuOption() {
174
- // In Expo, `ApplicationContext` is not an instance of `ReactApplication`
175
- if (mContext.get().getApplicationContext() instanceof ReactApplication) {
176
- final DevSupportManager devSupportManager =
177
- ((ReactApplication) mContext.get().getApplicationContext())
178
- .getReactNativeHost()
179
- .getReactInstanceManager()
180
- .getDevSupportManager();
181
-
182
- devSupportManager.addCustomDevOption(
183
- "Toggle slow animations (Reanimated)", this::toggleSlowAnimations);
184
- }
185
- }
186
-
187
- @DoNotStrip
188
- private void requestRender(AnimationFrameCallback callback) {
189
- mNodesManager.postOnAnimation(callback);
190
- }
191
-
192
- @DoNotStrip
193
- private void updateProps(int viewTag, Map<String, Object> props) {
194
- mNodesManager.updateProps(viewTag, props);
195
- }
196
-
197
- @DoNotStrip
198
- private void synchronouslyUpdateUIProps(int viewTag, ReadableMap uiProps) {
199
- mNodesManager.synchronouslyUpdateUIProps(viewTag, uiProps);
200
- }
201
-
202
- @DoNotStrip
203
- private String obtainProp(int viewTag, String propName) {
204
- return mNodesManager.obtainProp(viewTag, propName);
205
- }
206
-
207
- @DoNotStrip
208
- private void scrollTo(int viewTag, double x, double y, boolean animated) {
209
- mNodesManager.scrollTo(viewTag, x, y, animated);
210
- }
211
-
212
- @DoNotStrip
213
- private void setGestureState(int handlerTag, int newState) {
214
- if (gestureHandlerStateManager != null) {
215
- gestureHandlerStateManager.setGestureHandlerState(handlerTag, newState);
216
- }
217
- }
218
-
219
- @DoNotStrip
220
- private long getCurrentTime() {
221
- if (slowAnimationsEnabled) {
222
- final long ANIMATIONS_DRAG_FACTOR = 10;
223
- return this.firstUptime + (SystemClock.uptimeMillis() - this.firstUptime) / ANIMATIONS_DRAG_FACTOR;
224
- } else {
225
- return SystemClock.uptimeMillis();
226
- }
227
- }
228
-
229
- @DoNotStrip
230
- private float[] measure(int viewTag) {
231
- return mNodesManager.measure(viewTag);
232
- }
233
-
234
- @DoNotStrip
235
- private void configureProps(ReadableNativeArray uiProps, ReadableNativeArray nativeProps) {
236
- Set<String> uiPropsSet = convertProps(uiProps);
237
- Set<String> nativePropsSet = convertProps(nativeProps);
238
- mNodesManager.configureProps(uiPropsSet, nativePropsSet);
239
- }
240
-
241
- private Set<String> convertProps(ReadableNativeArray props) {
242
- Set<String> propsSet = new HashSet<>();
243
- ArrayList<Object> propsList = props.toArrayList();
244
- for (int i = 0; i < propsList.size(); i++) {
245
- propsSet.add((String) propsList.get(i));
246
- }
247
- return propsSet;
248
- }
249
-
250
- @DoNotStrip
251
- private void registerEventHandler(EventHandler handler) {
252
- handler.mCustomEventNamesResolver = mNodesManager.getEventNameResolver();
253
- mNodesManager.registerEventHandler(handler);
254
- }
255
-
256
- @DoNotStrip
257
- private int registerSensor(int sensorType, int interval, SensorSetter setter) {
258
- return reanimatedSensorContainer.registerSensor(
259
- ReanimatedSensorType.getInstanceById(sensorType), interval, setter);
260
- }
261
-
262
- @DoNotStrip
263
- private void unregisterSensor(int sensorId) {
264
- reanimatedSensorContainer.unregisterSensor(sensorId);
265
- }
266
-
267
- @DoNotStrip
268
- private int subscribeForKeyboardEvents(KeyboardEventDataUpdater keyboardEventDataUpdater) {
269
- return reanimatedKeyboardEventListener.subscribeForKeyboardEvents(keyboardEventDataUpdater);
270
- }
271
-
272
- @DoNotStrip
273
- private void unsubscribeFromKeyboardEvents(int listenerId) {
274
- reanimatedKeyboardEventListener.unsubscribeFromKeyboardEvents(listenerId);
275
- }
276
-
277
- public void onCatalystInstanceDestroy() {
278
- mScheduler.deactivate();
279
- mHybridData.resetNative();
280
- }
58
+ public static NativeMethodsHolder createNativeMethodsHolder(LayoutAnimations layoutAnimations) {
59
+ WeakReference<LayoutAnimations> weakLayoutAnimations = new WeakReference<>(layoutAnimations);
60
+ return new NativeMethodsHolder() {
61
+ @Override
62
+ public void startAnimation(int tag, int type, HashMap<String, Object> values) {
63
+ LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
64
+ if (layoutAnimations != null) {
65
+ HashMap<String, String> preparedValues = new HashMap<>();
66
+ for (String key : values.keySet()) {
67
+ String stringValue = values.get(key).toString();
68
+ if (key.endsWith("TransformMatrix")) {
69
+ preparedValues.put(key, simplifyStringNumbersList(stringValue));
70
+ } else {
71
+ preparedValues.put(key, stringValue);
72
+ }
73
+ }
74
+ layoutAnimations.startAnimationForTag(tag, type, preparedValues);
75
+ }
76
+ }
281
77
 
282
- public void prepare(LayoutAnimations LayoutAnimations) {
283
- if (Utils.isChromeDebugger) {
284
- Log.w("[REANIMATED]", "You can not use LayoutAnimation with enabled Chrome Debugger");
285
- return;
286
- }
287
- mNodesManager = mContext.get().getNativeModule(ReanimatedModule.class).getNodesManager();
288
- ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread();
289
- installJSIBindings(messageQueueThread);
290
- AnimationsManager animationsManager =
291
- mContext
292
- .get()
293
- .getNativeModule(ReanimatedModule.class)
294
- .getNodesManager()
295
- .getAnimationsManager();
78
+ @Override
79
+ public boolean isLayoutAnimationEnabled() {
80
+ LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
81
+ if (layoutAnimations != null) {
82
+ return layoutAnimations.isLayoutAnimationEnabled();
83
+ }
84
+ return false;
85
+ }
296
86
 
297
- WeakReference<LayoutAnimations> weakLayoutAnimations = new WeakReference<>(LayoutAnimations);
298
- animationsManager.setNativeMethods(
299
- new NativeMethodsHolder() {
300
- @Override
301
- public void startAnimation(int tag, String type, HashMap<String, Float> values) {
302
- LayoutAnimations LayoutAnimations = weakLayoutAnimations.get();
303
- if (LayoutAnimations != null) {
304
- HashMap<String, String> preparedValues = new HashMap<>();
305
- for (String key : values.keySet()) {
306
- preparedValues.put(key, values.get(key).toString());
307
- }
308
- LayoutAnimations.startAnimationForTag(tag, type, preparedValues);
87
+ @Override
88
+ public boolean hasAnimation(int tag, int type) {
89
+ LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
90
+ if (layoutAnimations != null) {
91
+ return layoutAnimations.hasAnimationForTag(tag, type);
92
+ }
93
+ return false;
309
94
  }
310
- }
311
95
 
312
- @Override
313
- public boolean isLayoutAnimationEnabled() {
314
- LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
315
- if (layoutAnimations != null) {
316
- return layoutAnimations.isLayoutAnimationEnabled();
96
+ @Override
97
+ public void clearAnimationConfig(int tag) {
98
+ LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
99
+ if (layoutAnimations != null) {
100
+ layoutAnimations.clearAnimationConfigForTag(tag);
101
+ }
317
102
  }
318
- return false;
319
- }
320
103
 
321
- @Override
322
- public boolean hasAnimation(int tag, String type) {
323
- LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
324
- if (layoutAnimations != null) {
325
- return layoutAnimations.hasAnimationForTag(tag, type);
104
+ @Override
105
+ public void cancelAnimation(int tag, int type, boolean cancelled, boolean removeView) {
106
+ LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
107
+ if (layoutAnimations != null) {
108
+ layoutAnimations.cancelAnimationForTag(tag, type, cancelled, removeView);
109
+ }
326
110
  }
327
- return false;
328
- }
329
111
 
330
- @Override
331
- public void clearAnimationConfig(int tag) {
332
- LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
333
- if (layoutAnimations != null) {
334
- layoutAnimations.clearAnimationConfigForTag(tag);
335
- }
336
- }
337
- });
338
- }
112
+ @Override
113
+ public int findPrecedingViewTagForTransition(int tag) {
114
+ LayoutAnimations layoutAnimations = weakLayoutAnimations.get();
115
+ if (layoutAnimations != null) {
116
+ return layoutAnimations.findPrecedingViewTagForTransition(tag);
117
+ }
118
+ return -1;
119
+ }
120
+ };
121
+ }
339
122
  }
@@ -0,0 +1,16 @@
1
+ package com.swmansion.reanimated;
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext;
4
+ import com.facebook.react.uimanager.ReanimatedUIManager;
5
+ import com.facebook.react.uimanager.UIManagerModule;
6
+ import com.facebook.react.uimanager.ViewManager;
7
+
8
+ import java.util.List;
9
+
10
+ public class ReanimatedUIManagerFactory {
11
+
12
+ static UIManagerModule create(ReactApplicationContext reactContext, List<ViewManager> viewManagers, int minTimeLeftInFrameForNonBatchedOperationMs) {
13
+ return new ReanimatedUIManager(reactContext, viewManagers, minTimeLeftInFrameForNonBatchedOperationMs);
14
+ }
15
+
16
+ }
@@ -0,0 +1,63 @@
1
+ package com.swmansion.reanimated;
2
+
3
+ import android.os.Build;
4
+ import android.util.Log;
5
+
6
+ import com.facebook.react.bridge.ReactApplicationContext;
7
+ import com.facebook.react.uimanager.ReanimatedUIImplementation;
8
+ import com.facebook.react.uimanager.ReanimatedUIManager;
9
+ import com.facebook.react.uimanager.UIImplementation;
10
+ import com.facebook.react.uimanager.UIManagerModule;
11
+ import com.facebook.react.uimanager.ViewManager;
12
+ import com.facebook.react.uimanager.ViewManagerRegistry;
13
+
14
+ import java.lang.reflect.Field;
15
+ import java.lang.reflect.Modifier;
16
+ import java.util.List;
17
+
18
+ public class ReanimatedUIManagerFactory {
19
+
20
+ static UIManagerModule create(ReactApplicationContext reactContext, List<ViewManager> viewManagers, int minTimeLeftInFrameForNonBatchedOperationMs) {
21
+ ViewManagerRegistry viewManagerRegistry = new ViewManagerRegistry(viewManagers);
22
+
23
+ UIManagerModule uiManagerModule =
24
+ new ReanimatedUIManager(
25
+ reactContext, viewManagers, minTimeLeftInFrameForNonBatchedOperationMs);
26
+
27
+ UIImplementation uiImplementation =
28
+ new ReanimatedUIImplementation(
29
+ reactContext,
30
+ viewManagerRegistry,
31
+ uiManagerModule.getEventDispatcher(),
32
+ minTimeLeftInFrameForNonBatchedOperationMs);
33
+
34
+ Class clazz = uiManagerModule.getClass().getSuperclass();
35
+ if (clazz == null) {
36
+ Log.e("reanimated", "unable to resolve super class of ReanimatedUIManager");
37
+ return uiManagerModule;
38
+ }
39
+
40
+ try {
41
+ Field uiImplementationField = clazz.getDeclaredField("mUIImplementation");
42
+ uiImplementationField.setAccessible(true);
43
+
44
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
45
+ try {
46
+ // accessFlags is supported only by API >=23
47
+ Field modifiersField = Field.class.getDeclaredField("accessFlags");
48
+ modifiersField.setAccessible(true);
49
+ modifiersField.setInt(
50
+ uiImplementationField, uiImplementationField.getModifiers() & ~Modifier.FINAL);
51
+ } catch (NoSuchFieldException | IllegalAccessException e) {
52
+ e.printStackTrace();
53
+ }
54
+ }
55
+ uiImplementationField.set(uiManagerModule, uiImplementation);
56
+ } catch (NoSuchFieldException | IllegalAccessException e) {
57
+ e.printStackTrace();
58
+ }
59
+
60
+ return uiManagerModule;
61
+ }
62
+
63
+ }