react-native 0.66.0-rc.4 → 0.67.0-rc.1

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 (447) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +14 -1
  2. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +2 -0
  3. package/Libraries/Animated/AnimatedEvent.js +23 -4
  4. package/Libraries/Animated/NativeAnimatedHelper.js +2 -2
  5. package/Libraries/Animated/components/AnimatedImage.js +3 -3
  6. package/Libraries/Animated/components/AnimatedScrollView.js +3 -3
  7. package/Libraries/Animated/components/AnimatedText.js +3 -3
  8. package/Libraries/Animated/components/AnimatedView.js +1 -3
  9. package/Libraries/Animated/createAnimatedComponent.js +3 -34
  10. package/Libraries/Components/Button.js +3 -0
  11. package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +3 -6
  12. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -7
  13. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +1 -0
  14. package/Libraries/Components/ScrollView/ScrollView.js +17 -16
  15. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +268 -252
  16. package/Libraries/Components/View/View.js +1 -1
  17. package/Libraries/Components/View/ViewAccessibility.js +1 -1
  18. package/Libraries/Core/ExceptionsManager.js +45 -80
  19. package/Libraries/Core/ExtendedError.js +0 -1
  20. package/Libraries/Core/ReactNativeVersion.js +2 -2
  21. package/Libraries/Core/setUpBatchedBridge.js +1 -1
  22. package/Libraries/Core/setUpGlobals.js +2 -4
  23. package/Libraries/Core/setUpTimers.js +2 -2
  24. package/Libraries/Image/Image.ios.js +6 -0
  25. package/Libraries/Image/ImageBackground.js +10 -8
  26. package/Libraries/Image/ImageProps.js +28 -0
  27. package/Libraries/Image/RCTImageView.mm +4 -0
  28. package/Libraries/LogBox/Data/LogBoxData.js +18 -19
  29. package/Libraries/LogBox/UI/LogBoxImages/alert-triangle.png +0 -0
  30. package/Libraries/LogBox/UI/LogBoxImages/chevron-left.png +0 -0
  31. package/Libraries/LogBox/UI/LogBoxImages/chevron-right.png +0 -0
  32. package/Libraries/LogBox/UI/LogBoxImages/close.png +0 -0
  33. package/Libraries/LogBox/UI/LogBoxImages/loader.png +0 -0
  34. package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.m +0 -3
  35. package/Libraries/NativeAnimation/RCTNativeAnimatedModule.mm +6 -3
  36. package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.h +1 -2
  37. package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm +2 -1
  38. package/Libraries/NewAppScreen/components/logo.png +0 -0
  39. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +2 -1
  40. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +2 -0
  41. package/Libraries/Pressability/Pressability.js +13 -13
  42. package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +1 -1
  43. package/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +0 -1
  44. package/Libraries/ReactNative/AppRegistry.js +4 -2
  45. package/Libraries/Renderer/REVISION +1 -1
  46. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +1569 -875
  47. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +529 -319
  48. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +570 -362
  49. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +1592 -891
  50. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +521 -311
  51. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +562 -354
  52. package/Libraries/Share/Share.js +1 -1
  53. package/Libraries/StyleSheet/normalizeColor.js +2 -2
  54. package/Libraries/Text/TextInput/Multiline/RCTUITextView.m +4 -2
  55. package/Libraries/Text/TextInput/RCTBaseTextInputView.m +2 -12
  56. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.m +4 -11
  57. package/Libraries/Text/TextProps.js +1 -7
  58. package/Libraries/TurboModule/TurboModuleRegistry.js +1 -1
  59. package/Libraries/Utilities/HMRClient.js +1 -1
  60. package/README.md +1 -1
  61. package/React/Base/RCTBridge+Private.h +8 -0
  62. package/React/Base/RCTBridge.h +4 -0
  63. package/React/Base/RCTBridge.m +19 -7
  64. package/React/Base/RCTBridgeModule.h +2 -11
  65. package/React/Base/RCTBundleURLProvider.h +1 -1
  66. package/React/Base/RCTBundleURLProvider.mm +5 -3
  67. package/React/Base/RCTConstants.h +0 -6
  68. package/React/Base/RCTConstants.m +0 -15
  69. package/React/Base/RCTConvert.h +1 -1
  70. package/React/Base/RCTDefines.h +12 -3
  71. package/React/Base/RCTEventDispatcherProtocol.h +2 -0
  72. package/React/Base/RCTJSThread.h +29 -0
  73. package/React/Base/RCTJSThread.m +19 -0
  74. package/React/Base/RCTRootView.h +15 -0
  75. package/React/Base/RCTRootView.m +15 -0
  76. package/React/Base/RCTTouchHandler.m +1 -9
  77. package/React/Base/RCTUtils.h +3 -0
  78. package/React/Base/RCTUtils.m +14 -7
  79. package/React/Base/RCTVersion.m +2 -2
  80. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h +11 -0
  81. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +35 -1
  82. package/React/CoreModules/RCTAccessibilityManager+Internal.h +24 -0
  83. package/React/CoreModules/RCTAccessibilityManager.mm +18 -3
  84. package/React/CoreModules/RCTActionSheetManager.mm +14 -5
  85. package/React/CoreModules/RCTAppearance.mm +3 -1
  86. package/React/CoreModules/RCTDevLoadingView.mm +5 -10
  87. package/React/CoreModules/RCTDevSettings.mm +6 -6
  88. package/React/CoreModules/RCTDevSplitBundleLoader.mm +1 -1
  89. package/React/CoreModules/RCTDeviceInfo.mm +4 -4
  90. package/React/CoreModules/RCTEventDispatcher.mm +5 -0
  91. package/React/CoreModules/RCTExceptionsManager.mm +11 -24
  92. package/React/CoreModules/RCTPerfMonitor.mm +9 -4
  93. package/React/CoreModules/RCTRedBox.mm +1 -5
  94. package/React/CxxBridge/RCTCxxBridge.mm +18 -1
  95. package/React/DevSupport/RCTPackagerConnection.h +3 -0
  96. package/React/DevSupport/RCTPackagerConnection.mm +9 -5
  97. package/React/FBReactNativeSpec/FBReactNativeSpec.podspec +11 -3
  98. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +0 -3
  99. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +16 -0
  100. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.h +6 -0
  101. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +3 -5
  102. package/React/Fabric/Mounting/RCTMountingManager.mm +15 -1
  103. package/React/Fabric/RCTScheduler.mm +12 -5
  104. package/React/Fabric/RCTSurfacePresenter.mm +0 -4
  105. package/React/Fabric/RCTSurfaceTouchHandler.mm +6 -20
  106. package/React/Fabric/Surface/RCTFabricSurface.mm +1 -3
  107. package/React/React-RCTFabric.podspec +0 -1
  108. package/React/Views/RCTFont.mm +54 -38
  109. package/React/Views/RCTView.m +1 -6
  110. package/React/Views/RCTViewManager.m +3 -2
  111. package/React/Views/SafeAreaView/RCTSafeAreaView.m +1 -5
  112. package/React/Views/ScrollView/RCTScrollView.m +5 -15
  113. package/React/Views/ScrollView/RCTScrollViewManager.m +0 -7
  114. package/React/Views/UIView+React.m +2 -11
  115. package/React-Core.podspec +0 -1
  116. package/ReactAndroid/build.gradle +11 -5
  117. package/ReactAndroid/gradle.properties +1 -1
  118. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK +0 -1
  119. package/ReactAndroid/src/androidTest/js/TestBundle.js +0 -7
  120. package/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/BUCK +2 -1
  121. package/ReactAndroid/src/main/java/com/facebook/react/BUCK +0 -1
  122. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +7 -0
  123. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +7 -0
  124. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +63 -26
  125. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +46 -1
  126. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +31 -0
  127. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +17 -1
  128. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +2 -0
  129. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +13 -2
  130. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +1 -0
  131. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java +39 -0
  132. package/ReactAndroid/src/main/java/com/facebook/react/bridge/RuntimeScheduler.java +21 -0
  133. package/ReactAndroid/src/main/java/com/facebook/react/common/BUCK +2 -2
  134. package/ReactAndroid/src/main/java/com/facebook/react/common/SurfaceDelegate.java +40 -0
  135. package/ReactAndroid/src/main/java/com/facebook/react/common/SurfaceDelegateFactory.java +24 -0
  136. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/BUCK +0 -6
  137. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +16 -0
  138. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +1 -0
  139. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +5 -2
  140. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevSupportManagerFactory.java +102 -0
  141. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +35 -11
  142. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.java +5 -72
  143. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java +12 -0
  144. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.java +92 -0
  145. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxModule.java +27 -42
  146. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java +14 -0
  147. package/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java +5 -4
  148. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +3 -7
  149. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +41 -2
  150. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.java +8 -3
  151. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.java +43 -9
  152. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk +2 -1
  153. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/AsyncEventBeatV2.cpp +69 -0
  154. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/AsyncEventBeatV2.h +40 -0
  155. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/BUCK +2 -6
  156. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +84 -32
  157. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +4 -2
  158. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.cpp +20 -2
  159. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.h +2 -1
  160. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.java +9 -1
  161. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +19 -4
  162. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.java +6 -2
  163. package/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/BUCK +2 -1
  164. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java +10 -1
  165. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BUCK +0 -6
  166. package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/BUCK +4 -1
  167. package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java +9 -8
  168. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ExceptionsManagerModule.java +7 -19
  169. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/{JavaScriptTimerManager.java → JavaScriptTimerExecutor.java} +1 -1
  170. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java +7 -7
  171. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java +2 -2
  172. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java +7 -1
  173. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +23 -19
  174. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java +1 -4
  175. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
  176. package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java +8 -8
  177. package/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java +1 -1
  178. package/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/jni/BUCK +0 -6
  179. package/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK +0 -1
  180. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +0 -5
  181. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK +0 -12
  182. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java +1 -1
  183. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +75 -10
  184. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +19 -22
  185. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventCategoryDef.java +42 -0
  186. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.java +7 -1
  187. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/LockFreeEventDispatcherImpl.java +2 -2
  188. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.java +7 -0
  189. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java +2 -1
  190. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java +17 -9
  191. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java +43 -8
  192. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventType.java +15 -16
  193. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java +108 -19
  194. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/BUCK +0 -6
  195. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +79 -4
  196. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +5 -0
  197. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +94 -3
  198. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +21 -1
  199. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +5 -0
  200. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +0 -4
  201. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +16 -0
  202. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +9 -1
  203. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +20 -1
  204. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +25 -6
  205. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +25 -5
  206. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditTextInputConnectionWrapper.java +3 -0
  207. package/ReactAndroid/src/main/java/com/facebook/react/views/view/CanvasUtil.java +92 -0
  208. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +8 -8
  209. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +19 -0
  210. package/ReactAndroid/src/main/jni/react/jni/Android.mk +3 -2
  211. package/ReactAndroid/src/main/jni/react/jni/BUCK +4 -5
  212. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +49 -7
  213. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +15 -2
  214. package/ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.cpp +18 -0
  215. package/ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.h +25 -0
  216. package/{ReactCommon/react/renderer/core/Constants.cpp → ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp} +6 -8
  217. package/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h +30 -0
  218. package/ReactAndroid/src/main/jni/react/perftests/BUCK +0 -4
  219. package/ReactAndroid/src/main/third-party/android/androidx/BUCK +6 -6
  220. package/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +43 -0
  221. package/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.java +3 -1
  222. package/ReactCommon/React-Fabric.podspec +9 -1
  223. package/ReactCommon/better/BUCK +0 -6
  224. package/ReactCommon/callinvoker/BUCK +2 -8
  225. package/ReactCommon/cxxreact/BUCK +1 -16
  226. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  227. package/ReactCommon/hermes/inspector/tools/msggen/package.json +7 -4
  228. package/ReactCommon/hermes/inspector/tools/msggen/yarn.lock +13 -10
  229. package/ReactCommon/jsi/BUCK +0 -9
  230. package/ReactCommon/jsinspector/BUCK +0 -5
  231. package/ReactCommon/logger/BUCK +0 -5
  232. package/ReactCommon/react/config/BUCK +0 -6
  233. package/ReactCommon/react/debug/BUCK +0 -6
  234. package/ReactCommon/react/nativemodule/core/BUCK +0 -5
  235. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModuleManager.mm +14 -31
  236. package/ReactCommon/react/nativemodule/samples/BUCK +0 -7
  237. package/ReactCommon/react/renderer/animations/BUCK +1 -4
  238. package/ReactCommon/react/renderer/animations/LayoutAnimationCallbackWrapper.h +34 -0
  239. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.cpp +5 -26
  240. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.h +8 -14
  241. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.cpp +912 -1147
  242. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.h +80 -245
  243. package/ReactCommon/react/renderer/animations/conversions.h +212 -0
  244. package/ReactCommon/react/renderer/animations/primitives.h +104 -0
  245. package/ReactCommon/react/renderer/animations/tests/LayoutAnimationTest.cpp +3 -3
  246. package/ReactCommon/react/renderer/animations/utils.cpp +71 -0
  247. package/ReactCommon/react/renderer/animations/utils.h +80 -0
  248. package/ReactCommon/react/renderer/attributedstring/AttributedString.h +0 -1
  249. package/ReactCommon/react/renderer/attributedstring/BUCK +0 -6
  250. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.cpp +7 -3
  251. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.h +12 -2
  252. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +1 -1
  253. package/ReactCommon/react/renderer/attributedstring/conversions.h +58 -3
  254. package/ReactCommon/react/renderer/attributedstring/primitives.h +18 -1
  255. package/ReactCommon/react/renderer/componentregistry/BUCK +0 -6
  256. package/ReactCommon/react/renderer/componentregistry/native/BUCK +0 -6
  257. package/ReactCommon/react/renderer/components/image/BUCK +0 -6
  258. package/ReactCommon/react/renderer/components/image/ImageComponentDescriptor.h +0 -2
  259. package/ReactCommon/react/renderer/components/inputaccessory/BUCK +0 -6
  260. package/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h +0 -4
  261. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/BUCK +0 -6
  262. package/ReactCommon/react/renderer/components/modal/BUCK +0 -6
  263. package/ReactCommon/react/renderer/components/modal/ModalHostViewComponentDescriptor.h +0 -5
  264. package/ReactCommon/react/renderer/components/progressbar/BUCK +0 -6
  265. package/ReactCommon/react/renderer/components/progressbar/android/react/renderer/components/progressbar/AndroidProgressBarComponentDescriptor.h +0 -3
  266. package/ReactCommon/react/renderer/components/root/BUCK +0 -6
  267. package/ReactCommon/react/renderer/components/safeareaview/BUCK +0 -6
  268. package/ReactCommon/react/renderer/components/scrollview/BUCK +0 -6
  269. package/ReactCommon/react/renderer/components/slider/BUCK +0 -6
  270. package/ReactCommon/react/renderer/components/slider/SliderComponentDescriptor.h +0 -3
  271. package/ReactCommon/react/renderer/components/switch/BUCK +0 -6
  272. package/ReactCommon/react/renderer/components/switch/androidswitch/react/renderer/components/androidswitch/AndroidSwitchComponentDescriptor.h +0 -3
  273. package/ReactCommon/react/renderer/components/text/BUCK +0 -6
  274. package/ReactCommon/react/renderer/components/text/ParagraphComponentDescriptor.h +1 -20
  275. package/ReactCommon/react/renderer/components/textinput/BUCK +0 -6
  276. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputComponentDescriptor.h +0 -3
  277. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.h +2 -0
  278. package/ReactCommon/react/renderer/components/textinput/iostextinput/BUCK +0 -6
  279. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputComponentDescriptor.h +0 -3
  280. package/ReactCommon/react/renderer/components/unimplementedview/BUCK +0 -6
  281. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.cpp +0 -4
  282. package/ReactCommon/react/renderer/components/view/Android.mk +1 -1
  283. package/ReactCommon/react/renderer/components/view/BUCK +0 -6
  284. package/ReactCommon/react/renderer/components/view/Touch.h +1 -32
  285. package/ReactCommon/react/renderer/components/view/ViewComponentDescriptor.h +0 -23
  286. package/ReactCommon/react/renderer/components/view/ViewPropsInterpolation.h +2 -3
  287. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +3 -3
  288. package/ReactCommon/react/renderer/components/view/ViewShadowNode.h +1 -1
  289. package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +4 -0
  290. package/ReactCommon/react/renderer/core/BUCK +2 -6
  291. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +14 -9
  292. package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +1 -10
  293. package/ReactCommon/react/renderer/core/EventEmitter.cpp +9 -4
  294. package/ReactCommon/react/renderer/core/EventEmitter.h +2 -1
  295. package/ReactCommon/react/renderer/core/Props.h +1 -0
  296. package/ReactCommon/react/renderer/core/PropsParserContext.h +3 -2
  297. package/ReactCommon/react/renderer/core/RawEvent.h +7 -5
  298. package/ReactCommon/react/renderer/core/RawPropsKey.cpp +10 -2
  299. package/ReactCommon/react/renderer/core/ReactPrimitives.h +0 -2
  300. package/ReactCommon/react/renderer/core/ShadowNode.cpp +7 -10
  301. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +1 -0
  302. package/ReactCommon/react/renderer/debug/BUCK +0 -6
  303. package/ReactCommon/react/renderer/element/BUCK +0 -6
  304. package/ReactCommon/react/renderer/graphics/Android.mk +1 -1
  305. package/ReactCommon/react/renderer/graphics/BUCK +0 -6
  306. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +0 -1
  307. package/ReactCommon/react/renderer/graphics/Transform.cpp +1 -1
  308. package/ReactCommon/react/renderer/graphics/Transform.h +1 -1
  309. package/ReactCommon/react/renderer/imagemanager/BUCK +0 -6
  310. package/ReactCommon/react/renderer/leakchecker/BUCK +0 -6
  311. package/ReactCommon/react/renderer/mapbuffer/BUCK +0 -6
  312. package/ReactCommon/react/renderer/mounting/Android.mk +2 -1
  313. package/ReactCommon/react/renderer/mounting/BUCK +0 -6
  314. package/ReactCommon/react/renderer/mounting/MountingOverrideDelegate.h +1 -1
  315. package/ReactCommon/react/renderer/mounting/ShadowViewMutation.cpp +12 -0
  316. package/ReactCommon/react/renderer/mounting/ShadowViewMutation.h +10 -1
  317. package/ReactCommon/react/renderer/runtimescheduler/Android.mk +2 -1
  318. package/ReactCommon/react/renderer/runtimescheduler/BUCK +1 -7
  319. package/ReactCommon/react/renderer/runtimescheduler/ErrorUtils.h +36 -0
  320. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +28 -20
  321. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +4 -2
  322. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.cpp +4 -3
  323. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.h +4 -2
  324. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.cpp +32 -0
  325. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h +36 -0
  326. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerClock.h +4 -2
  327. package/ReactCommon/react/renderer/runtimescheduler/SchedulerPriority.h +4 -3
  328. package/ReactCommon/react/renderer/runtimescheduler/Task.cpp +4 -2
  329. package/ReactCommon/react/renderer/runtimescheduler/Task.h +4 -2
  330. package/ReactCommon/react/renderer/runtimescheduler/primitives.h +4 -2
  331. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +26 -1
  332. package/ReactCommon/react/renderer/runtimescheduler/tests/StubErrorUtils.h +72 -0
  333. package/ReactCommon/react/renderer/scheduler/BUCK +0 -6
  334. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +1 -4
  335. package/ReactCommon/react/renderer/scheduler/Scheduler.h +1 -1
  336. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +4 -4
  337. package/ReactCommon/react/renderer/telemetry/BUCK +0 -6
  338. package/ReactCommon/react/renderer/templateprocessor/BUCK +0 -6
  339. package/ReactCommon/react/renderer/textlayoutmanager/BUCK +0 -6
  340. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.h +2 -0
  341. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm +19 -0
  342. package/ReactCommon/react/renderer/timeline/BUCK +6 -12
  343. package/ReactCommon/react/renderer/uimanager/BUCK +0 -6
  344. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +1 -1
  345. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +2 -2
  346. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +1 -1
  347. package/ReactCommon/react/test_utils/BUCK +3 -6
  348. package/ReactCommon/react/{renderer/core/Constants.h → test_utils/MockSurfaceHandler.h} +9 -7
  349. package/ReactCommon/react/utils/BUCK +0 -6
  350. package/ReactCommon/react/utils/ContextContainer.h +0 -27
  351. package/ReactCommon/reactperflogger/BUCK +0 -4
  352. package/ReactCommon/runtimeexecutor/BUCK +0 -6
  353. package/ReactCommon/yoga/BUCK +1 -5
  354. package/android/com/facebook/react/react-native/{0.66.0-rc.4/react-native-0.66.0-rc.4.aar → 0.67.0-rc.1/react-native-0.67.0-rc.1.aar} +0 -0
  355. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.md5 +1 -0
  356. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.sha1 +1 -0
  357. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.sha256 +1 -0
  358. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.sha512 +1 -0
  359. package/android/com/facebook/react/react-native/{0.66.0-rc.4/react-native-0.66.0-rc.4.module → 0.67.0-rc.1/react-native-0.67.0-rc.1.module} +16 -17
  360. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.md5 +1 -0
  361. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.sha1 +1 -0
  362. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.sha256 +1 -0
  363. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.sha512 +1 -0
  364. package/android/com/facebook/react/react-native/{0.66.0-rc.4/react-native-0.66.0-rc.4.pom → 0.67.0-rc.1/react-native-0.67.0-rc.1.pom} +2 -2
  365. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.md5 +1 -0
  366. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.sha1 +1 -0
  367. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.sha256 +1 -0
  368. package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.sha512 +1 -0
  369. package/android/com/facebook/react/react-native/maven-metadata.xml +4 -4
  370. package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
  371. package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
  372. package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -1
  373. package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -1
  374. package/flow/global.js +45 -0
  375. package/index.js +15 -10
  376. package/jest/mockModal.js +31 -0
  377. package/jest/setup.js +5 -3
  378. package/package.json +8 -9
  379. package/react.gradle +53 -18
  380. package/scripts/find-node.sh +13 -0
  381. package/scripts/generate-specs-cli.js +18 -0
  382. package/scripts/ios-configure-glog.sh +4 -0
  383. package/scripts/react-native-xcode.sh +7 -7
  384. package/scripts/react_native_pods.rb +202 -70
  385. package/template/Gemfile +6 -0
  386. package/template/Gemfile.lock +100 -0
  387. package/template/_bundle/config +2 -0
  388. package/template/_flowconfig +1 -1
  389. package/template/_ruby-version +1 -0
  390. package/template/android/app/build.gradle +1 -1
  391. package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
  392. package/template/android/app/src/main/res/values/styles.xml +1 -0
  393. package/template/android/build.gradle +7 -3
  394. package/template/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  395. package/template/android/gradle.properties +1 -1
  396. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -2
  397. package/template/ios/Podfile +0 -1
  398. package/template/package.json +1 -1
  399. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  400. package/third-party-podspecs/glog.podspec +0 -1
  401. package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.android.js +0 -87
  402. package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.ios.js +0 -30
  403. package/Libraries/Components/DatePickerAndroid/DatePickerAndroidTypes.js +0 -30
  404. package/Libraries/Components/StaticContainer.react.js +0 -51
  405. package/Libraries/Components/Touchable/ensurePositiveDelayProps.js +0 -25
  406. package/Libraries/Interaction/InteractionMixin.js +0 -54
  407. package/Libraries/ReactNative/queryLayoutByID.js +0 -58
  408. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/DatePickerDialogTestCase.java +0 -172
  409. package/ReactAndroid/src/androidTest/js/DatePickerDialogTestModule.js +0 -45
  410. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/BUCK +0 -27
  411. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogFragment.java +0 -137
  412. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogModule.java +0 -153
  413. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerMode.java +0 -15
  414. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DismissableDatePickerDialog.java +0 -117
  415. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/BUCK +0 -20
  416. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/RuntimeSchedulerManager.java +0 -39
  417. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/Android.mk +0 -34
  418. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/BUCK +0 -35
  419. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/OnLoad.cpp +0 -15
  420. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/RuntimeSchedulerManager.cpp +0 -46
  421. package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/RuntimeSchedulerManager.h +0 -40
  422. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerDelegate.java +0 -57
  423. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerInterface.java +0 -23
  424. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/BUCK +0 -19
  425. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/DatePickerManagerDelegate.java +0 -62
  426. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/DatePickerManagerInterface.java +0 -25
  427. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/InputAccessoryViewManagerDelegate.java +0 -33
  428. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/InputAccessoryViewManagerInterface.java +0 -17
  429. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/PullToRefreshViewManagerDelegate.java +0 -51
  430. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/PullToRefreshViewManagerInterface.java +0 -21
  431. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SwitchManagerDelegate.java +0 -63
  432. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SwitchManagerInterface.java +0 -24
  433. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.md5 +0 -1
  434. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.sha1 +0 -1
  435. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.sha256 +0 -1
  436. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.sha512 +0 -1
  437. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.md5 +0 -1
  438. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.sha1 +0 -1
  439. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.sha256 +0 -1
  440. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.sha512 +0 -1
  441. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.md5 +0 -1
  442. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.sha1 +0 -1
  443. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.sha256 +0 -1
  444. package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.sha512 +0 -1
  445. package/scripts/generate-specs.sh +0 -99
  446. package/template/_editorconfig +0 -3
  447. package/template/_gitattributes +0 -3
@@ -9,19 +9,17 @@ package com.facebook.react.uimanager.events;
9
9
 
10
10
  import android.view.MotionEvent;
11
11
  import com.facebook.react.bridge.Arguments;
12
+ import com.facebook.react.bridge.ReactSoftExceptionLogger;
12
13
  import com.facebook.react.bridge.WritableArray;
13
14
  import com.facebook.react.bridge.WritableMap;
14
15
  import com.facebook.react.uimanager.PixelUtil;
15
16
 
16
17
  /** Class responsible for generating catalyst touch events based on android {@link MotionEvent}. */
17
18
  public class TouchesHelper {
18
-
19
19
  public static final String TARGET_SURFACE_KEY = "targetSurface";
20
20
  public static final String TARGET_KEY = "target";
21
21
  public static final String CHANGED_TOUCHES_KEY = "changedTouches";
22
22
  public static final String TOUCHES_KEY = "touches";
23
- public static final String TOP_TOUCH_END_KEY = "topTouchEnd";
24
- public static final String TOP_TOUCH_CANCEL_KEY = "topTouchCancel";
25
23
  private static final String PAGE_X_KEY = "pageX";
26
24
  private static final String PAGE_Y_KEY = "pageY";
27
25
  private static final String TIMESTAMP_KEY = "timestamp";
@@ -30,15 +28,16 @@ public class TouchesHelper {
30
28
  private static final String LOCATION_X_KEY = "locationX";
31
29
  private static final String LOCATION_Y_KEY = "locationY";
32
30
 
31
+ private static final String TAG = "TouchesHelper";
32
+
33
33
  /**
34
34
  * Creates catalyst pointers array in format that is expected by RCTEventEmitter JS module from
35
35
  * given {@param event} instance. This method use {@param reactTarget} parameter to set as a
36
36
  * target view id associated with current gesture.
37
37
  */
38
- private static WritableArray createsPointersArray(
39
- int surfaceId, int reactTarget, TouchEvent event) {
40
- WritableArray touches = Arguments.createArray();
38
+ private static WritableMap[] createPointersArray(TouchEvent event) {
41
39
  MotionEvent motionEvent = event.getMotionEvent();
40
+ WritableMap[] touches = new WritableMap[motionEvent.getPointerCount()];
42
41
 
43
42
  // Calculate the coordinates for the target view.
44
43
  // The MotionEvent contains the X,Y of the touch in the coordinate space of the root view
@@ -62,11 +61,12 @@ public class TouchesHelper {
62
61
  float locationY = motionEvent.getY(index) - targetViewCoordinateY;
63
62
  touch.putDouble(LOCATION_X_KEY, PixelUtil.toDIPFromPixel(locationX));
64
63
  touch.putDouble(LOCATION_Y_KEY, PixelUtil.toDIPFromPixel(locationY));
65
- touch.putInt(TARGET_SURFACE_KEY, surfaceId);
66
- touch.putInt(TARGET_KEY, reactTarget);
67
- touch.putDouble(TIMESTAMP_KEY, event.getUnixTimestampMs());
64
+ touch.putInt(TARGET_SURFACE_KEY, event.getSurfaceId());
65
+ touch.putInt(TARGET_KEY, event.getViewTag());
66
+ touch.putDouble(TIMESTAMP_KEY, event.getTimestampMs());
68
67
  touch.putDouble(POINTER_IDENTIFIER_KEY, motionEvent.getPointerId(index));
69
- touches.pushMap(touch);
68
+
69
+ touches[index] = touch;
70
70
  }
71
71
 
72
72
  return touches;
@@ -77,17 +77,12 @@ public class TouchesHelper {
77
77
  * context}. Touch event can encode multiple concurrent touches (pointers).
78
78
  *
79
79
  * @param rctEventEmitter Event emitter used to execute JS module call
80
- * @param type type of the touch event (see {@link TouchEventType})
81
- * @param reactTarget target view react id associated with this gesture
82
80
  * @param touchEvent native touch event to read pointers count and coordinates from
83
81
  */
84
- public static void sendTouchEvent(
85
- RCTEventEmitter rctEventEmitter,
86
- TouchEventType type,
87
- int surfaceId,
88
- int reactTarget,
89
- TouchEvent touchEvent) {
90
- WritableArray pointers = createsPointersArray(surfaceId, reactTarget, touchEvent);
82
+ public static void sendTouchEvent(RCTEventEmitter rctEventEmitter, TouchEvent touchEvent) {
83
+ TouchEventType type = touchEvent.getTouchEventType();
84
+
85
+ WritableArray pointers = getWritableArray(createPointersArray(touchEvent));
91
86
  MotionEvent motionEvent = touchEvent.getMotionEvent();
92
87
 
93
88
  // For START and END events send only index of the pointer that is associated with that event
@@ -105,4 +100,98 @@ public class TouchesHelper {
105
100
 
106
101
  rctEventEmitter.receiveTouches(TouchEventType.getJSEventName(type), pointers, changedIndices);
107
102
  }
103
+
104
+ /**
105
+ * Generate touch event data to match JS expectations. Combines logic in {@link #sendTouchEvent}
106
+ * and FabricEventEmitter to create the same data structure in a more efficient manner.
107
+ *
108
+ * <p>Touches have to be dispatched as separate events for each changed pointer to make JS process
109
+ * them correctly. To avoid allocations, we preprocess touch events in Java world and then convert
110
+ * them to native before dispatch.
111
+ *
112
+ * @param eventEmitter emitter to dispatch event to
113
+ * @param event the touch event to extract data from
114
+ * @param useDispatchV2 whether to dispatch additional data used by {@link Event#dispatchModernV2}
115
+ */
116
+ public static void sendTouchEventModern(
117
+ RCTModernEventEmitter eventEmitter, TouchEvent event, boolean useDispatchV2) {
118
+ TouchEventType type = event.getTouchEventType();
119
+ MotionEvent motionEvent = event.getMotionEvent();
120
+
121
+ if (motionEvent == null) {
122
+ ReactSoftExceptionLogger.logSoftException(
123
+ TAG,
124
+ new IllegalStateException(
125
+ "Cannot dispatch a TouchEvent that has no MotionEvent; the TouchEvent has been recycled"));
126
+ return;
127
+ }
128
+
129
+ WritableMap[] touches = createPointersArray(event);
130
+ WritableMap[] changedTouches = null;
131
+
132
+ switch (type) {
133
+ case START:
134
+ int newPointerIndex = motionEvent.getActionIndex();
135
+
136
+ changedTouches = new WritableMap[] {touches[newPointerIndex].copy()};
137
+ break;
138
+ case END:
139
+ int finishedPointerIndex = motionEvent.getActionIndex();
140
+ /*
141
+ * Clear finished pointer index for compatibility with W3C touch "end" events, where the
142
+ * active touches don't include the set that has just been "ended".
143
+ */
144
+ WritableMap finishedPointer = touches[finishedPointerIndex];
145
+ touches[finishedPointerIndex] = null;
146
+
147
+ changedTouches = new WritableMap[] {finishedPointer};
148
+ break;
149
+ case MOVE:
150
+ changedTouches = new WritableMap[touches.length];
151
+ for (int i = 0; i < touches.length; i++) {
152
+ changedTouches[i] = touches[i].copy();
153
+ }
154
+ break;
155
+ case CANCEL:
156
+ changedTouches = touches;
157
+ touches = new WritableMap[0];
158
+ break;
159
+ }
160
+
161
+ WritableArray touchesArray = getWritableArray(touches);
162
+ WritableArray changedTouchesArray = getWritableArray(/* copyObjects */ true, changedTouches);
163
+
164
+ for (WritableMap eventData : changedTouches) {
165
+ eventData.putArray(CHANGED_TOUCHES_KEY, changedTouchesArray);
166
+ eventData.putArray(TOUCHES_KEY, touchesArray);
167
+
168
+ if (useDispatchV2) {
169
+ eventEmitter.receiveEvent(
170
+ event.getSurfaceId(),
171
+ event.getViewTag(),
172
+ event.getEventName(),
173
+ event.canCoalesce(),
174
+ 0,
175
+ eventData,
176
+ event.getEventCategory());
177
+ } else {
178
+ eventEmitter.receiveEvent(
179
+ event.getSurfaceId(), event.getViewTag(), event.getEventName(), eventData);
180
+ }
181
+ }
182
+ }
183
+
184
+ private static WritableArray getWritableArray(WritableMap... objects) {
185
+ return getWritableArray(false, objects);
186
+ }
187
+
188
+ private static WritableArray getWritableArray(boolean copyObjects, WritableMap... objects) {
189
+ WritableArray result = Arguments.createArray();
190
+ for (WritableMap object : objects) {
191
+ if (object != null) {
192
+ result.pushMap(copyObjects ? object.copy() : object);
193
+ }
194
+ }
195
+ return result;
196
+ }
108
197
  }
@@ -11,12 +11,6 @@ rn_xplat_cxx_library(
11
11
  ],
12
12
  prefix = "react/uimanager/jni",
13
13
  ),
14
- compiler_flags = [
15
- "-fexceptions",
16
- "-frtti",
17
- "-std=c++17",
18
- "-Wall",
19
- ],
20
14
  fbandroid_allow_jni_merging = True,
21
15
  labels = ["supermodule:xplat/default/public.react_native.infra"],
22
16
  platforms = ANDROID,
@@ -7,6 +7,12 @@
7
7
 
8
8
  package com.facebook.react.views.scroll;
9
9
 
10
+ import static com.facebook.react.config.ReactFeatureFlags.enableScrollViewSnapToAlignmentProp;
11
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_CENTER;
12
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_DISABLED;
13
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_END;
14
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_START;
15
+
10
16
  import android.animation.Animator;
11
17
  import android.animation.ObjectAnimator;
12
18
  import android.animation.PropertyValuesHolder;
@@ -21,6 +27,7 @@ import android.view.FocusFinder;
21
27
  import android.view.KeyEvent;
22
28
  import android.view.MotionEvent;
23
29
  import android.view.View;
30
+ import android.view.ViewGroup;
24
31
  import android.view.accessibility.AccessibilityEvent;
25
32
  import android.widget.HorizontalScrollView;
26
33
  import android.widget.OverScroller;
@@ -94,6 +101,7 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
94
101
  private @Nullable List<Integer> mSnapOffsets;
95
102
  private boolean mSnapToStart = true;
96
103
  private boolean mSnapToEnd = true;
104
+ private int mSnapToAlignment = SNAP_ALIGNMENT_DISABLED;
97
105
  private ReactViewBackgroundManager mReactBackgroundManager;
98
106
  private boolean mPagedArrowScrolling = false;
99
107
  private int pendingContentOffsetX = UNSET_CONTENT_OFFSET;
@@ -239,6 +247,10 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
239
247
  mSnapToEnd = snapToEnd;
240
248
  }
241
249
 
250
+ public void setSnapToAlignment(int snapToAlignment) {
251
+ mSnapToAlignment = snapToAlignment;
252
+ }
253
+
242
254
  public void flashScrollIndicators() {
243
255
  awakenScrollBars();
244
256
  }
@@ -905,7 +917,9 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
905
917
  }
906
918
 
907
919
  // pagingEnabled only allows snapping one interval at a time
908
- if (mSnapInterval == 0 && mSnapOffsets == null) {
920
+ if (mSnapInterval == 0
921
+ && mSnapOffsets == null
922
+ && (!enableScrollViewSnapToAlignmentProp || mSnapToAlignment == SNAP_ALIGNMENT_DISABLED)) {
909
923
  smoothScrollAndSnap(velocityX);
910
924
  return;
911
925
  }
@@ -948,8 +962,46 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
948
962
  }
949
963
  }
950
964
  }
965
+ } else if (enableScrollViewSnapToAlignmentProp && mSnapToAlignment != SNAP_ALIGNMENT_DISABLED) {
966
+ if (mSnapInterval > 0) {
967
+ double ratio = (double) targetOffset / mSnapInterval;
968
+ smallerOffset =
969
+ Math.max(
970
+ getItemStartOffset(
971
+ mSnapToAlignment,
972
+ (int) (Math.floor(ratio) * mSnapInterval),
973
+ mSnapInterval,
974
+ width),
975
+ 0);
976
+ largerOffset =
977
+ Math.min(
978
+ getItemStartOffset(
979
+ mSnapToAlignment,
980
+ (int) (Math.ceil(ratio) * mSnapInterval),
981
+ mSnapInterval,
982
+ width),
983
+ maximumOffset);
984
+ } else {
985
+ ViewGroup contentView = (ViewGroup) getContentView();
986
+ for (int i = 1; i < contentView.getChildCount(); i++) {
987
+ View item = contentView.getChildAt(i);
988
+ int itemStartOffset =
989
+ getItemStartOffset(mSnapToAlignment, item.getLeft(), item.getWidth(), width);
990
+ if (itemStartOffset <= targetOffset) {
991
+ if (targetOffset - itemStartOffset < targetOffset - smallerOffset) {
992
+ smallerOffset = itemStartOffset;
993
+ }
994
+ }
995
+
996
+ if (itemStartOffset >= targetOffset) {
997
+ if (itemStartOffset - targetOffset < largerOffset - targetOffset) {
998
+ largerOffset = itemStartOffset;
999
+ }
1000
+ }
1001
+ }
1002
+ }
951
1003
  } else {
952
- double interval = (double) getSnapInterval();
1004
+ double interval = getSnapInterval();
953
1005
  double ratio = (double) targetOffset / interval;
954
1006
  smallerOffset = (int) (Math.floor(ratio) * interval);
955
1007
  largerOffset = Math.min((int) (Math.ceil(ratio) * interval), maximumOffset);
@@ -1032,6 +1084,25 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
1032
1084
  }
1033
1085
  }
1034
1086
 
1087
+ private int getItemStartOffset(
1088
+ int snapToAlignment, int itemStartPosition, int itemWidth, int viewPortWidth) {
1089
+ int itemStartOffset;
1090
+ switch (snapToAlignment) {
1091
+ case SNAP_ALIGNMENT_CENTER:
1092
+ itemStartOffset = itemStartPosition - (viewPortWidth - itemWidth) / 2;
1093
+ break;
1094
+ case SNAP_ALIGNMENT_START:
1095
+ itemStartOffset = itemStartPosition;
1096
+ break;
1097
+ case SNAP_ALIGNMENT_END:
1098
+ itemStartOffset = itemStartPosition - (viewPortWidth - itemWidth);
1099
+ break;
1100
+ default:
1101
+ throw new IllegalStateException("Invalid SnapToAlignment value: " + mSnapToAlignment);
1102
+ }
1103
+ return itemStartOffset;
1104
+ }
1105
+
1035
1106
  private void smoothScrollToNextPage(int direction) {
1036
1107
  if (DEBUG_MODE) {
1037
1108
  FLog.i(TAG, "smoothScrollToNextPage[%d] direction %d", getId(), direction);
@@ -1160,8 +1231,12 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
1160
1231
  }
1161
1232
 
1162
1233
  super.scrollTo(x, y);
1163
- updateStateOnScroll(x, y);
1164
- setPendingContentOffsets(x, y);
1234
+ // The final scroll position might be different from (x, y). For example, we may need to scroll
1235
+ // to the last item in the list, but that item cannot be move to the start position of the view.
1236
+ final int actualX = getScrollX();
1237
+ final int actualY = getScrollY();
1238
+ updateStateOnScroll(actualX, actualY);
1239
+ setPendingContentOffsets(actualX, actualY);
1165
1240
  }
1166
1241
 
1167
1242
  /**
@@ -102,6 +102,11 @@ public class ReactHorizontalScrollViewManager extends ViewGroupManager<ReactHori
102
102
  view.setSnapInterval((int) (snapToInterval * screenDisplayMetrics.density));
103
103
  }
104
104
 
105
+ @ReactProp(name = "snapToAlignment")
106
+ public void setSnapToAlignment(ReactHorizontalScrollView view, String alignment) {
107
+ view.setSnapToAlignment(ReactScrollViewHelper.parseSnapToAlignment(alignment));
108
+ }
109
+
105
110
  @ReactProp(name = "snapToOffsets")
106
111
  public void setSnapToOffsets(
107
112
  ReactHorizontalScrollView view, @Nullable ReadableArray snapToOffsets) {
@@ -7,6 +7,12 @@
7
7
 
8
8
  package com.facebook.react.views.scroll;
9
9
 
10
+ import static com.facebook.react.config.ReactFeatureFlags.enableScrollViewSnapToAlignmentProp;
11
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_CENTER;
12
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_DISABLED;
13
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_END;
14
+ import static com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_START;
15
+
10
16
  import android.animation.Animator;
11
17
  import android.animation.ObjectAnimator;
12
18
  import android.animation.PropertyValuesHolder;
@@ -92,6 +98,7 @@ public class ReactScrollView extends ScrollView
92
98
  private @Nullable List<Integer> mSnapOffsets;
93
99
  private boolean mSnapToStart = true;
94
100
  private boolean mSnapToEnd = true;
101
+ private int mSnapToAlignment = SNAP_ALIGNMENT_DISABLED;
95
102
  private @Nullable View mContentView;
96
103
  private ReactViewBackgroundManager mReactBackgroundManager;
97
104
  private int pendingContentOffsetX = UNSET_CONTENT_OFFSET;
@@ -218,6 +225,10 @@ public class ReactScrollView extends ScrollView
218
225
  mSnapToEnd = snapToEnd;
219
226
  }
220
227
 
228
+ public void setSnapToAlignment(int snapToAlignment) {
229
+ mSnapToAlignment = snapToAlignment;
230
+ }
231
+
221
232
  public void flashScrollIndicators() {
222
233
  awakenScrollBars();
223
234
  }
@@ -634,6 +645,10 @@ public class ReactScrollView extends ScrollView
634
645
  return scroller.getFinalY();
635
646
  }
636
647
 
648
+ private View getContentView() {
649
+ return getChildAt(0);
650
+ }
651
+
637
652
  /**
638
653
  * This will smooth scroll us to the nearest snap offset point It currently just looks at where
639
654
  * the content is and slides to the nearest point. It is intended to be run after we are done
@@ -690,7 +705,9 @@ public class ReactScrollView extends ScrollView
690
705
  }
691
706
 
692
707
  // pagingEnabled only allows snapping one interval at a time
693
- if (mSnapInterval == 0 && mSnapOffsets == null) {
708
+ if (mSnapInterval == 0
709
+ && mSnapOffsets == null
710
+ && (!enableScrollViewSnapToAlignmentProp || mSnapToAlignment == SNAP_ALIGNMENT_DISABLED)) {
694
711
  smoothScrollAndSnap(velocityY);
695
712
  return;
696
713
  }
@@ -727,6 +744,57 @@ public class ReactScrollView extends ScrollView
727
744
  }
728
745
  }
729
746
  }
747
+
748
+ } else if (enableScrollViewSnapToAlignmentProp && mSnapToAlignment != SNAP_ALIGNMENT_DISABLED) {
749
+ if (mSnapInterval > 0) {
750
+ double ratio = (double) targetOffset / mSnapInterval;
751
+ smallerOffset =
752
+ Math.max(
753
+ getItemStartOffset(
754
+ mSnapToAlignment,
755
+ (int) (Math.floor(ratio) * mSnapInterval),
756
+ mSnapInterval,
757
+ height),
758
+ 0);
759
+ largerOffset =
760
+ Math.min(
761
+ getItemStartOffset(
762
+ mSnapToAlignment,
763
+ (int) (Math.ceil(ratio) * mSnapInterval),
764
+ mSnapInterval,
765
+ height),
766
+ maximumOffset);
767
+ } else {
768
+ ViewGroup contentView = (ViewGroup) getContentView();
769
+ for (int i = 1; i < contentView.getChildCount(); i++) {
770
+ View item = contentView.getChildAt(i);
771
+ int itemStartOffset;
772
+ switch (mSnapToAlignment) {
773
+ case SNAP_ALIGNMENT_CENTER:
774
+ itemStartOffset = item.getTop() - (height - item.getHeight()) / 2;
775
+ break;
776
+ case SNAP_ALIGNMENT_START:
777
+ itemStartOffset = item.getTop();
778
+ break;
779
+ case SNAP_ALIGNMENT_END:
780
+ itemStartOffset = item.getTop() - (height - item.getHeight());
781
+ break;
782
+ default:
783
+ throw new IllegalStateException("Invalid SnapToAlignment value: " + mSnapToAlignment);
784
+ }
785
+ if (itemStartOffset <= targetOffset) {
786
+ if (targetOffset - itemStartOffset < targetOffset - smallerOffset) {
787
+ smallerOffset = itemStartOffset;
788
+ }
789
+ }
790
+
791
+ if (itemStartOffset >= targetOffset) {
792
+ if (itemStartOffset - targetOffset < largerOffset - targetOffset) {
793
+ largerOffset = itemStartOffset;
794
+ }
795
+ }
796
+ }
797
+ }
730
798
  } else {
731
799
  double interval = (double) getSnapInterval();
732
800
  double ratio = (double) targetOffset / interval;
@@ -802,6 +870,25 @@ public class ReactScrollView extends ScrollView
802
870
  }
803
871
  }
804
872
 
873
+ private int getItemStartOffset(
874
+ int snapToAlignment, int itemStartPosition, int itemHeight, int viewPortHeight) {
875
+ int itemStartOffset;
876
+ switch (snapToAlignment) {
877
+ case SNAP_ALIGNMENT_CENTER:
878
+ itemStartOffset = itemStartPosition - (viewPortHeight - itemHeight) / 2;
879
+ break;
880
+ case SNAP_ALIGNMENT_START:
881
+ itemStartOffset = itemStartPosition;
882
+ break;
883
+ case SNAP_ALIGNMENT_END:
884
+ itemStartOffset = itemStartPosition - (viewPortHeight - itemHeight);
885
+ break;
886
+ default:
887
+ throw new IllegalStateException("Invalid SnapToAlignment value: " + mSnapToAlignment);
888
+ }
889
+ return itemStartOffset;
890
+ }
891
+
805
892
  private int getSnapInterval() {
806
893
  if (mSnapInterval != 0) {
807
894
  return mSnapInterval;
@@ -919,8 +1006,12 @@ public class ReactScrollView extends ScrollView
919
1006
  @Override
920
1007
  public void scrollTo(int x, int y) {
921
1008
  super.scrollTo(x, y);
922
- updateStateOnScroll(x, y);
923
- setPendingContentOffsets(x, y);
1009
+ // The final scroll position might be different from (x, y). For example, we may need to scroll
1010
+ // to the last item in the list, but that item cannot be move to the start position of the view.
1011
+ final int actualX = getScrollX();
1012
+ final int actualY = getScrollY();
1013
+ updateStateOnScroll(actualX, actualY);
1014
+ setPendingContentOffsets(actualX, actualY);
924
1015
  }
925
1016
 
926
1017
  /**
@@ -11,6 +11,7 @@ import android.content.Context;
11
11
  import android.view.View;
12
12
  import android.view.ViewGroup;
13
13
  import android.widget.OverScroller;
14
+ import androidx.annotation.Nullable;
14
15
  import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
15
16
  import com.facebook.react.bridge.ReactContext;
16
17
  import com.facebook.react.uimanager.UIManagerHelper;
@@ -26,6 +27,11 @@ public class ReactScrollViewHelper {
26
27
  public static final String AUTO = "auto";
27
28
  public static final String OVER_SCROLL_NEVER = "never";
28
29
 
30
+ public static final int SNAP_ALIGNMENT_DISABLED = 0;
31
+ public static final int SNAP_ALIGNMENT_START = 1;
32
+ public static final int SNAP_ALIGNMENT_CENTER = 2;
33
+ public static final int SNAP_ALIGNMENT_END = 3;
34
+
29
35
  public interface ScrollListener {
30
36
  void onScroll(
31
37
  ViewGroup scrollView, ScrollEventType scrollEventType, float xVelocity, float yVelocity);
@@ -34,7 +40,7 @@ public class ReactScrollViewHelper {
34
40
  }
35
41
 
36
42
  // Support global native listeners for scroll events
37
- private static Set<ScrollListener> sScrollListeners =
43
+ private static final Set<ScrollListener> sScrollListeners =
38
44
  Collections.newSetFromMap(new WeakHashMap<ScrollListener, Boolean>());
39
45
 
40
46
  // If all else fails, this is the hardcoded value in OverScroller.java, in AOSP.
@@ -119,6 +125,20 @@ public class ReactScrollViewHelper {
119
125
  }
120
126
  }
121
127
 
128
+ public static int parseSnapToAlignment(@Nullable String alignment) {
129
+ if (alignment == null) {
130
+ return SNAP_ALIGNMENT_DISABLED;
131
+ } else if ("start".equalsIgnoreCase(alignment)) {
132
+ return SNAP_ALIGNMENT_START;
133
+ } else if ("center".equalsIgnoreCase(alignment)) {
134
+ return SNAP_ALIGNMENT_CENTER;
135
+ } else if ("end".equals(alignment)) {
136
+ return SNAP_ALIGNMENT_END;
137
+ } else {
138
+ throw new JSApplicationIllegalArgumentException("wrong snap alignment value: " + alignment);
139
+ }
140
+ }
141
+
122
142
  public static int getDefaultScrollAnimationDuration(Context context) {
123
143
  if (!mSmoothScrollDurationInitialized) {
124
144
  mSmoothScrollDurationInitialized = true;
@@ -115,6 +115,11 @@ public class ReactScrollViewManager extends ViewGroupManager<ReactScrollView>
115
115
  view.setSnapOffsets(offsets);
116
116
  }
117
117
 
118
+ @ReactProp(name = "snapToAlignment")
119
+ public void setSnapToAlignment(ReactScrollView view, String alignment) {
120
+ view.setSnapToAlignment(ReactScrollViewHelper.parseSnapToAlignment(alignment));
121
+ }
122
+
118
123
  @ReactProp(name = "snapToStart")
119
124
  public void setSnapToStart(ReactScrollView view, boolean snapToStart) {
120
125
  view.setSnapToStart(snapToStart);
@@ -110,10 +110,6 @@ public abstract class ReactTextAnchorViewManager<T extends View, C extends React
110
110
  view.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE);
111
111
  } else if (frequency.equals("full")) {
112
112
  view.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL);
113
- } else if (frequency.equals("balanced")) {
114
- view.setHyphenationFrequency(Layout.BREAK_STRATEGY_BALANCED);
115
- } else if (frequency.equals("high")) {
116
- view.setHyphenationFrequency(Layout.BREAK_STRATEGY_HIGH_QUALITY);
117
113
  } else if (frequency.equals("normal")) {
118
114
  view.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL);
119
115
  } else {
@@ -32,6 +32,7 @@ import com.facebook.react.uimanager.ThemedReactContext;
32
32
  import com.facebook.react.uimanager.UIViewOperationQueue;
33
33
  import com.facebook.react.uimanager.annotations.ReactProp;
34
34
  import com.facebook.react.uimanager.events.RCTEventEmitter;
35
+ import com.facebook.yoga.YogaBaselineFunction;
35
36
  import com.facebook.yoga.YogaConstants;
36
37
  import com.facebook.yoga.YogaDirection;
37
38
  import com.facebook.yoga.YogaMeasureFunction;
@@ -159,6 +160,20 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
159
160
  }
160
161
  };
161
162
 
163
+ private final YogaBaselineFunction mTextBaselineFunction =
164
+ new YogaBaselineFunction() {
165
+ @Override
166
+ public float baseline(YogaNode node, float width, float height) {
167
+ Spannable text =
168
+ Assertions.assertNotNull(
169
+ mPreparedSpannableText,
170
+ "Spannable element has not been prepared in onBeforeLayout");
171
+
172
+ Layout layout = measureSpannedText(text, width, YogaMeasureMode.EXACTLY);
173
+ return layout.getLineBaseline(layout.getLineCount() - 1);
174
+ }
175
+ };
176
+
162
177
  public ReactTextShadowNode() {
163
178
  this(null);
164
179
  }
@@ -171,6 +186,7 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
171
186
  private void initMeasureFunction() {
172
187
  if (!isVirtual()) {
173
188
  setMeasureFunction(mTextMeasureFunction);
189
+ setBaselineFunction(mTextBaselineFunction);
174
190
  }
175
191
  }
176
192
 
@@ -56,6 +56,7 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
56
56
  private boolean mAdjustsFontSizeToFit = false;
57
57
  private int mLinkifyMaskType = 0;
58
58
  private boolean mNotifyOnInlineViewLayout;
59
+ private boolean mTextIsSelectable = false;
59
60
 
60
61
  private ReactViewBackgroundManager mReactBackgroundManager;
61
62
  private Spannable mSpanned;
@@ -370,7 +371,7 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
370
371
  for (int i = 0; i < spans.length; i++) {
371
372
  int spanStart = spannedText.getSpanStart(spans[i]);
372
373
  int spanEnd = spannedText.getSpanEnd(spans[i]);
373
- if (spanEnd > index && (spanEnd - spanStart) <= targetSpanTextLength) {
374
+ if (spanEnd >= index && (spanEnd - spanStart) <= targetSpanTextLength) {
374
375
  target = spans[i].getReactTag();
375
376
  targetSpanTextLength = (spanEnd - spanStart);
376
377
  }
@@ -433,9 +434,16 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
433
434
  }
434
435
  }
435
436
 
437
+ @Override
438
+ public void setTextIsSelectable(boolean selectable) {
439
+ mTextIsSelectable = selectable;
440
+ super.setTextIsSelectable(selectable);
441
+ }
442
+
436
443
  @Override
437
444
  public void onAttachedToWindow() {
438
445
  super.onAttachedToWindow();
446
+ setTextIsSelectable(mTextIsSelectable);
439
447
  if (mContainsImages && getText() instanceof Spanned) {
440
448
  Spanned text = (Spanned) getText();
441
449
  TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
@@ -68,9 +68,10 @@ public class TextAttributeProps {
68
68
  private static final int DEFAULT_TEXT_SHADOW_COLOR = 0x55000000;
69
69
  private static final int DEFAULT_JUSTIFICATION_MODE =
70
70
  (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) ? 0 : Layout.JUSTIFICATION_MODE_NONE;
71
-
72
71
  private static final int DEFAULT_BREAK_STRATEGY =
73
72
  (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) ? 0 : Layout.BREAK_STRATEGY_HIGH_QUALITY;
73
+ private static final int DEFAULT_HYPHENATION_FREQUENCY =
74
+ (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) ? 0 : Layout.HYPHENATION_FREQUENCY_NONE;
74
75
 
75
76
  protected float mLineHeight = Float.NaN;
76
77
  protected boolean mIsColorSet = false;
@@ -568,4 +569,22 @@ public class TextAttributeProps {
568
569
  }
569
570
  return androidTextBreakStrategy;
570
571
  }
572
+
573
+ public static int getHyphenationFrequency(@Nullable String hyphenationFrequency) {
574
+ int androidHyphenationFrequency = DEFAULT_HYPHENATION_FREQUENCY;
575
+ if (hyphenationFrequency != null) {
576
+ switch (hyphenationFrequency) {
577
+ case "none":
578
+ androidHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE;
579
+ break;
580
+ case "normal":
581
+ androidHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NORMAL;
582
+ break;
583
+ default:
584
+ androidHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_FULL;
585
+ break;
586
+ }
587
+ }
588
+ return androidHyphenationFrequency;
589
+ }
571
590
  }