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.
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +14 -1
- package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +2 -0
- package/Libraries/Animated/AnimatedEvent.js +23 -4
- package/Libraries/Animated/NativeAnimatedHelper.js +2 -2
- package/Libraries/Animated/components/AnimatedImage.js +3 -3
- package/Libraries/Animated/components/AnimatedScrollView.js +3 -3
- package/Libraries/Animated/components/AnimatedText.js +3 -3
- package/Libraries/Animated/components/AnimatedView.js +1 -3
- package/Libraries/Animated/createAnimatedComponent.js +3 -34
- package/Libraries/Components/Button.js +3 -0
- package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +3 -6
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -7
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +1 -0
- package/Libraries/Components/ScrollView/ScrollView.js +17 -16
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +268 -252
- package/Libraries/Components/View/View.js +1 -1
- package/Libraries/Components/View/ViewAccessibility.js +1 -1
- package/Libraries/Core/ExceptionsManager.js +45 -80
- package/Libraries/Core/ExtendedError.js +0 -1
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Core/setUpBatchedBridge.js +1 -1
- package/Libraries/Core/setUpGlobals.js +2 -4
- package/Libraries/Core/setUpTimers.js +2 -2
- package/Libraries/Image/Image.ios.js +6 -0
- package/Libraries/Image/ImageBackground.js +10 -8
- package/Libraries/Image/ImageProps.js +28 -0
- package/Libraries/Image/RCTImageView.mm +4 -0
- package/Libraries/LogBox/Data/LogBoxData.js +18 -19
- package/Libraries/LogBox/UI/LogBoxImages/alert-triangle.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/chevron-left.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/chevron-right.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/close.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/loader.png +0 -0
- package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.m +0 -3
- package/Libraries/NativeAnimation/RCTNativeAnimatedModule.mm +6 -3
- package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.h +1 -2
- package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm +2 -1
- package/Libraries/NewAppScreen/components/logo.png +0 -0
- package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +2 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +2 -0
- package/Libraries/Pressability/Pressability.js +13 -13
- package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +1 -1
- package/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +0 -1
- package/Libraries/ReactNative/AppRegistry.js +4 -2
- package/Libraries/Renderer/REVISION +1 -1
- package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +1569 -875
- package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +529 -319
- package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +570 -362
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +1592 -891
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +521 -311
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +562 -354
- package/Libraries/Share/Share.js +1 -1
- package/Libraries/StyleSheet/normalizeColor.js +2 -2
- package/Libraries/Text/TextInput/Multiline/RCTUITextView.m +4 -2
- package/Libraries/Text/TextInput/RCTBaseTextInputView.m +2 -12
- package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.m +4 -11
- package/Libraries/Text/TextProps.js +1 -7
- package/Libraries/TurboModule/TurboModuleRegistry.js +1 -1
- package/Libraries/Utilities/HMRClient.js +1 -1
- package/README.md +1 -1
- package/React/Base/RCTBridge+Private.h +8 -0
- package/React/Base/RCTBridge.h +4 -0
- package/React/Base/RCTBridge.m +19 -7
- package/React/Base/RCTBridgeModule.h +2 -11
- package/React/Base/RCTBundleURLProvider.h +1 -1
- package/React/Base/RCTBundleURLProvider.mm +5 -3
- package/React/Base/RCTConstants.h +0 -6
- package/React/Base/RCTConstants.m +0 -15
- package/React/Base/RCTConvert.h +1 -1
- package/React/Base/RCTDefines.h +12 -3
- package/React/Base/RCTEventDispatcherProtocol.h +2 -0
- package/React/Base/RCTJSThread.h +29 -0
- package/React/Base/RCTJSThread.m +19 -0
- package/React/Base/RCTRootView.h +15 -0
- package/React/Base/RCTRootView.m +15 -0
- package/React/Base/RCTTouchHandler.m +1 -9
- package/React/Base/RCTUtils.h +3 -0
- package/React/Base/RCTUtils.m +14 -7
- package/React/Base/RCTVersion.m +2 -2
- package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h +11 -0
- package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +35 -1
- package/React/CoreModules/RCTAccessibilityManager+Internal.h +24 -0
- package/React/CoreModules/RCTAccessibilityManager.mm +18 -3
- package/React/CoreModules/RCTActionSheetManager.mm +14 -5
- package/React/CoreModules/RCTAppearance.mm +3 -1
- package/React/CoreModules/RCTDevLoadingView.mm +5 -10
- package/React/CoreModules/RCTDevSettings.mm +6 -6
- package/React/CoreModules/RCTDevSplitBundleLoader.mm +1 -1
- package/React/CoreModules/RCTDeviceInfo.mm +4 -4
- package/React/CoreModules/RCTEventDispatcher.mm +5 -0
- package/React/CoreModules/RCTExceptionsManager.mm +11 -24
- package/React/CoreModules/RCTPerfMonitor.mm +9 -4
- package/React/CoreModules/RCTRedBox.mm +1 -5
- package/React/CxxBridge/RCTCxxBridge.mm +18 -1
- package/React/DevSupport/RCTPackagerConnection.h +3 -0
- package/React/DevSupport/RCTPackagerConnection.mm +9 -5
- package/React/FBReactNativeSpec/FBReactNativeSpec.podspec +11 -3
- package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +0 -3
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +16 -0
- package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.h +6 -0
- package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +3 -5
- package/React/Fabric/Mounting/RCTMountingManager.mm +15 -1
- package/React/Fabric/RCTScheduler.mm +12 -5
- package/React/Fabric/RCTSurfacePresenter.mm +0 -4
- package/React/Fabric/RCTSurfaceTouchHandler.mm +6 -20
- package/React/Fabric/Surface/RCTFabricSurface.mm +1 -3
- package/React/React-RCTFabric.podspec +0 -1
- package/React/Views/RCTFont.mm +54 -38
- package/React/Views/RCTView.m +1 -6
- package/React/Views/RCTViewManager.m +3 -2
- package/React/Views/SafeAreaView/RCTSafeAreaView.m +1 -5
- package/React/Views/ScrollView/RCTScrollView.m +5 -15
- package/React/Views/ScrollView/RCTScrollViewManager.m +0 -7
- package/React/Views/UIView+React.m +2 -11
- package/React-Core.podspec +0 -1
- package/ReactAndroid/build.gradle +11 -5
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK +0 -1
- package/ReactAndroid/src/androidTest/js/TestBundle.js +0 -7
- package/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/BUCK +2 -1
- package/ReactAndroid/src/main/java/com/facebook/react/BUCK +0 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +7 -0
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +7 -0
- package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +63 -26
- package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +46 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +31 -0
- package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +17 -1
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +13 -2
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java +39 -0
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/RuntimeScheduler.java +21 -0
- package/ReactAndroid/src/main/java/com/facebook/react/common/BUCK +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/common/SurfaceDelegate.java +40 -0
- package/ReactAndroid/src/main/java/com/facebook/react/common/SurfaceDelegateFactory.java +24 -0
- package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/BUCK +0 -6
- package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +16 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +5 -2
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevSupportManagerFactory.java +102 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +35 -11
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.java +5 -72
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java +12 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.java +92 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxModule.java +27 -42
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java +14 -0
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java +5 -4
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +3 -7
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +41 -2
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.java +8 -3
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.java +43 -9
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk +2 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/AsyncEventBeatV2.cpp +69 -0
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/AsyncEventBeatV2.h +40 -0
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/BUCK +2 -6
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +84 -32
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +4 -2
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.cpp +20 -2
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.h +2 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.java +9 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +19 -4
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.java +6 -2
- package/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/BUCK +2 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java +10 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BUCK +0 -6
- package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/BUCK +4 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java +9 -8
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ExceptionsManagerModule.java +7 -19
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/{JavaScriptTimerManager.java → JavaScriptTimerExecutor.java} +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java +7 -7
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java +7 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +23 -19
- package/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java +1 -4
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java +8 -8
- package/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/jni/BUCK +0 -6
- package/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK +0 -1
- package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +0 -5
- package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK +0 -12
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +75 -10
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +19 -22
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventCategoryDef.java +42 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.java +7 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/LockFreeEventDispatcherImpl.java +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.java +7 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java +2 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java +17 -9
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java +43 -8
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEventType.java +15 -16
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java +108 -19
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/BUCK +0 -6
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +79 -4
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +5 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +94 -3
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +21 -1
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +5 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +0 -4
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +16 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +9 -1
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +20 -1
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +25 -6
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +25 -5
- package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditTextInputConnectionWrapper.java +3 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/CanvasUtil.java +92 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +8 -8
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +19 -0
- package/ReactAndroid/src/main/jni/react/jni/Android.mk +3 -2
- package/ReactAndroid/src/main/jni/react/jni/BUCK +4 -5
- package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +49 -7
- package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +15 -2
- package/ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.cpp +18 -0
- package/ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.h +25 -0
- package/{ReactCommon/react/renderer/core/Constants.cpp → ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp} +6 -8
- package/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h +30 -0
- package/ReactAndroid/src/main/jni/react/perftests/BUCK +0 -4
- package/ReactAndroid/src/main/third-party/android/androidx/BUCK +6 -6
- package/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +43 -0
- package/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.java +3 -1
- package/ReactCommon/React-Fabric.podspec +9 -1
- package/ReactCommon/better/BUCK +0 -6
- package/ReactCommon/callinvoker/BUCK +2 -8
- package/ReactCommon/cxxreact/BUCK +1 -16
- package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
- package/ReactCommon/hermes/inspector/tools/msggen/package.json +7 -4
- package/ReactCommon/hermes/inspector/tools/msggen/yarn.lock +13 -10
- package/ReactCommon/jsi/BUCK +0 -9
- package/ReactCommon/jsinspector/BUCK +0 -5
- package/ReactCommon/logger/BUCK +0 -5
- package/ReactCommon/react/config/BUCK +0 -6
- package/ReactCommon/react/debug/BUCK +0 -6
- package/ReactCommon/react/nativemodule/core/BUCK +0 -5
- package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModuleManager.mm +14 -31
- package/ReactCommon/react/nativemodule/samples/BUCK +0 -7
- package/ReactCommon/react/renderer/animations/BUCK +1 -4
- package/ReactCommon/react/renderer/animations/LayoutAnimationCallbackWrapper.h +34 -0
- package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.cpp +5 -26
- package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.h +8 -14
- package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.cpp +912 -1147
- package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.h +80 -245
- package/ReactCommon/react/renderer/animations/conversions.h +212 -0
- package/ReactCommon/react/renderer/animations/primitives.h +104 -0
- package/ReactCommon/react/renderer/animations/tests/LayoutAnimationTest.cpp +3 -3
- package/ReactCommon/react/renderer/animations/utils.cpp +71 -0
- package/ReactCommon/react/renderer/animations/utils.h +80 -0
- package/ReactCommon/react/renderer/attributedstring/AttributedString.h +0 -1
- package/ReactCommon/react/renderer/attributedstring/BUCK +0 -6
- package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.cpp +7 -3
- package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.h +12 -2
- package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +1 -1
- package/ReactCommon/react/renderer/attributedstring/conversions.h +58 -3
- package/ReactCommon/react/renderer/attributedstring/primitives.h +18 -1
- package/ReactCommon/react/renderer/componentregistry/BUCK +0 -6
- package/ReactCommon/react/renderer/componentregistry/native/BUCK +0 -6
- package/ReactCommon/react/renderer/components/image/BUCK +0 -6
- package/ReactCommon/react/renderer/components/image/ImageComponentDescriptor.h +0 -2
- package/ReactCommon/react/renderer/components/inputaccessory/BUCK +0 -6
- package/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h +0 -4
- package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/BUCK +0 -6
- package/ReactCommon/react/renderer/components/modal/BUCK +0 -6
- package/ReactCommon/react/renderer/components/modal/ModalHostViewComponentDescriptor.h +0 -5
- package/ReactCommon/react/renderer/components/progressbar/BUCK +0 -6
- package/ReactCommon/react/renderer/components/progressbar/android/react/renderer/components/progressbar/AndroidProgressBarComponentDescriptor.h +0 -3
- package/ReactCommon/react/renderer/components/root/BUCK +0 -6
- package/ReactCommon/react/renderer/components/safeareaview/BUCK +0 -6
- package/ReactCommon/react/renderer/components/scrollview/BUCK +0 -6
- package/ReactCommon/react/renderer/components/slider/BUCK +0 -6
- package/ReactCommon/react/renderer/components/slider/SliderComponentDescriptor.h +0 -3
- package/ReactCommon/react/renderer/components/switch/BUCK +0 -6
- package/ReactCommon/react/renderer/components/switch/androidswitch/react/renderer/components/androidswitch/AndroidSwitchComponentDescriptor.h +0 -3
- package/ReactCommon/react/renderer/components/text/BUCK +0 -6
- package/ReactCommon/react/renderer/components/text/ParagraphComponentDescriptor.h +1 -20
- package/ReactCommon/react/renderer/components/textinput/BUCK +0 -6
- package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputComponentDescriptor.h +0 -3
- package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.h +2 -0
- package/ReactCommon/react/renderer/components/textinput/iostextinput/BUCK +0 -6
- package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputComponentDescriptor.h +0 -3
- package/ReactCommon/react/renderer/components/unimplementedview/BUCK +0 -6
- package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.cpp +0 -4
- package/ReactCommon/react/renderer/components/view/Android.mk +1 -1
- package/ReactCommon/react/renderer/components/view/BUCK +0 -6
- package/ReactCommon/react/renderer/components/view/Touch.h +1 -32
- package/ReactCommon/react/renderer/components/view/ViewComponentDescriptor.h +0 -23
- package/ReactCommon/react/renderer/components/view/ViewPropsInterpolation.h +2 -3
- package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +3 -3
- package/ReactCommon/react/renderer/components/view/ViewShadowNode.h +1 -1
- package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +4 -0
- package/ReactCommon/react/renderer/core/BUCK +2 -6
- package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +14 -9
- package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +1 -10
- package/ReactCommon/react/renderer/core/EventEmitter.cpp +9 -4
- package/ReactCommon/react/renderer/core/EventEmitter.h +2 -1
- package/ReactCommon/react/renderer/core/Props.h +1 -0
- package/ReactCommon/react/renderer/core/PropsParserContext.h +3 -2
- package/ReactCommon/react/renderer/core/RawEvent.h +7 -5
- package/ReactCommon/react/renderer/core/RawPropsKey.cpp +10 -2
- package/ReactCommon/react/renderer/core/ReactPrimitives.h +0 -2
- package/ReactCommon/react/renderer/core/ShadowNode.cpp +7 -10
- package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +1 -0
- package/ReactCommon/react/renderer/debug/BUCK +0 -6
- package/ReactCommon/react/renderer/element/BUCK +0 -6
- package/ReactCommon/react/renderer/graphics/Android.mk +1 -1
- package/ReactCommon/react/renderer/graphics/BUCK +0 -6
- package/ReactCommon/react/renderer/graphics/React-graphics.podspec +0 -1
- package/ReactCommon/react/renderer/graphics/Transform.cpp +1 -1
- package/ReactCommon/react/renderer/graphics/Transform.h +1 -1
- package/ReactCommon/react/renderer/imagemanager/BUCK +0 -6
- package/ReactCommon/react/renderer/leakchecker/BUCK +0 -6
- package/ReactCommon/react/renderer/mapbuffer/BUCK +0 -6
- package/ReactCommon/react/renderer/mounting/Android.mk +2 -1
- package/ReactCommon/react/renderer/mounting/BUCK +0 -6
- package/ReactCommon/react/renderer/mounting/MountingOverrideDelegate.h +1 -1
- package/ReactCommon/react/renderer/mounting/ShadowViewMutation.cpp +12 -0
- package/ReactCommon/react/renderer/mounting/ShadowViewMutation.h +10 -1
- package/ReactCommon/react/renderer/runtimescheduler/Android.mk +2 -1
- package/ReactCommon/react/renderer/runtimescheduler/BUCK +1 -7
- package/ReactCommon/react/renderer/runtimescheduler/ErrorUtils.h +36 -0
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +28 -20
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +4 -2
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.cpp +4 -3
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.h +4 -2
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.cpp +32 -0
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h +36 -0
- package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerClock.h +4 -2
- package/ReactCommon/react/renderer/runtimescheduler/SchedulerPriority.h +4 -3
- package/ReactCommon/react/renderer/runtimescheduler/Task.cpp +4 -2
- package/ReactCommon/react/renderer/runtimescheduler/Task.h +4 -2
- package/ReactCommon/react/renderer/runtimescheduler/primitives.h +4 -2
- package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +26 -1
- package/ReactCommon/react/renderer/runtimescheduler/tests/StubErrorUtils.h +72 -0
- package/ReactCommon/react/renderer/scheduler/BUCK +0 -6
- package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +1 -4
- package/ReactCommon/react/renderer/scheduler/Scheduler.h +1 -1
- package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +4 -4
- package/ReactCommon/react/renderer/telemetry/BUCK +0 -6
- package/ReactCommon/react/renderer/templateprocessor/BUCK +0 -6
- package/ReactCommon/react/renderer/textlayoutmanager/BUCK +0 -6
- package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.h +2 -0
- package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm +19 -0
- package/ReactCommon/react/renderer/timeline/BUCK +6 -12
- package/ReactCommon/react/renderer/uimanager/BUCK +0 -6
- package/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +1 -1
- package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +2 -2
- package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +1 -1
- package/ReactCommon/react/test_utils/BUCK +3 -6
- package/ReactCommon/react/{renderer/core/Constants.h → test_utils/MockSurfaceHandler.h} +9 -7
- package/ReactCommon/react/utils/BUCK +0 -6
- package/ReactCommon/react/utils/ContextContainer.h +0 -27
- package/ReactCommon/reactperflogger/BUCK +0 -4
- package/ReactCommon/runtimeexecutor/BUCK +0 -6
- package/ReactCommon/yoga/BUCK +1 -5
- 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
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.md5 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.sha1 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.sha256 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.aar.sha512 +1 -0
- 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
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.md5 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.sha1 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.sha256 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.module.sha512 +1 -0
- 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
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.md5 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.sha1 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.sha256 +1 -0
- package/android/com/facebook/react/react-native/0.67.0-rc.1/react-native-0.67.0-rc.1.pom.sha512 +1 -0
- package/android/com/facebook/react/react-native/maven-metadata.xml +4 -4
- package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
- package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
- package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -1
- package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -1
- package/flow/global.js +45 -0
- package/index.js +15 -10
- package/jest/mockModal.js +31 -0
- package/jest/setup.js +5 -3
- package/package.json +8 -9
- package/react.gradle +53 -18
- package/scripts/find-node.sh +13 -0
- package/scripts/generate-specs-cli.js +18 -0
- package/scripts/ios-configure-glog.sh +4 -0
- package/scripts/react-native-xcode.sh +7 -7
- package/scripts/react_native_pods.rb +202 -70
- package/template/Gemfile +6 -0
- package/template/Gemfile.lock +100 -0
- package/template/_bundle/config +2 -0
- package/template/_flowconfig +1 -1
- package/template/_ruby-version +1 -0
- package/template/android/app/build.gradle +1 -1
- package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
- package/template/android/app/src/main/res/values/styles.xml +1 -0
- package/template/android/build.gradle +7 -3
- package/template/android/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/template/android/gradle.properties +1 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -2
- package/template/ios/Podfile +0 -1
- package/template/package.json +1 -1
- package/third-party-podspecs/RCT-Folly.podspec +1 -1
- package/third-party-podspecs/glog.podspec +0 -1
- package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.android.js +0 -87
- package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.ios.js +0 -30
- package/Libraries/Components/DatePickerAndroid/DatePickerAndroidTypes.js +0 -30
- package/Libraries/Components/StaticContainer.react.js +0 -51
- package/Libraries/Components/Touchable/ensurePositiveDelayProps.js +0 -25
- package/Libraries/Interaction/InteractionMixin.js +0 -54
- package/Libraries/ReactNative/queryLayoutByID.js +0 -58
- package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/DatePickerDialogTestCase.java +0 -172
- package/ReactAndroid/src/androidTest/js/DatePickerDialogTestModule.js +0 -45
- package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/BUCK +0 -27
- package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogFragment.java +0 -137
- package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogModule.java +0 -153
- package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerMode.java +0 -15
- package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DismissableDatePickerDialog.java +0 -117
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/BUCK +0 -20
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/RuntimeSchedulerManager.java +0 -39
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/Android.mk +0 -34
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/BUCK +0 -35
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/OnLoad.cpp +0 -15
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/RuntimeSchedulerManager.cpp +0 -46
- package/ReactAndroid/src/main/java/com/facebook/react/runtimescheduler/jni/RuntimeSchedulerManager.h +0 -40
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerDelegate.java +0 -57
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerInterface.java +0 -23
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/BUCK +0 -19
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/DatePickerManagerDelegate.java +0 -62
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/DatePickerManagerInterface.java +0 -25
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/InputAccessoryViewManagerDelegate.java +0 -33
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/InputAccessoryViewManagerInterface.java +0 -17
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/PullToRefreshViewManagerDelegate.java +0 -51
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/PullToRefreshViewManagerInterface.java +0 -21
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SwitchManagerDelegate.java +0 -63
- package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SwitchManagerInterface.java +0 -24
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.md5 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.sha1 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.sha256 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.aar.sha512 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.md5 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.sha1 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.sha256 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.module.sha512 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.md5 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.sha1 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.sha256 +0 -1
- package/android/com/facebook/react/react-native/0.66.0-rc.4/react-native-0.66.0-rc.4.pom.sha512 +0 -1
- package/scripts/generate-specs.sh +0 -99
- package/template/_editorconfig +0 -3
- 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
|
|
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,
|
|
66
|
-
touch.putInt(TARGET_KEY,
|
|
67
|
-
touch.putDouble(TIMESTAMP_KEY, event.
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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,
|
package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java
CHANGED
|
@@ -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
|
|
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 =
|
|
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
|
-
|
|
1164
|
-
|
|
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
|
|
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
|
-
|
|
923
|
-
|
|
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
|
/**
|
package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java
CHANGED
|
@@ -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;
|
package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java
CHANGED
|
@@ -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);
|
package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java
CHANGED
|
@@ -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
|
|
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
|
}
|