diff --git a/Libraries/Components/Picker/Picker.js b/Libraries/Components/Picker/Picker.js index bb5416b45e6b2b..7c411f4741e4d3 100644 --- a/Libraries/Components/Picker/Picker.js +++ b/Libraries/Components/Picker/Picker.js @@ -166,24 +166,24 @@ class Picker extends React.Component { static Item: typeof PickerItem = PickerItem; - static defaultProps: {|mode: $TEMPORARY$string<'dialog'>|} = { - mode: MODE_DIALOG, - }; - render(): React.Node { + const {mode = MODE_DIALOG, children, ...rest} = this.props; + if (Platform.OS === 'ios') { /* $FlowFixMe[prop-missing] (>=0.81.0 site=react_native_ios_fb) This * suppression was added when renaming suppression sites. */ /* $FlowFixMe[incompatible-type] (>=0.81.0 site=react_native_ios_fb) This * suppression was added when renaming suppression sites. */ - return {this.props.children}; + return {children}; } else if (Platform.OS === 'android') { return ( /* $FlowFixMe[incompatible-type] (>=0.81.0 site=react_native_android_fb) This * suppression was added when renaming suppression sites. */ /* $FlowFixMe[prop-missing] (>=0.81.0 site=react_native_android_fb) This * suppression was added when renaming suppression sites. */ - {this.props.children} + + {children} + ); } else { return ; diff --git a/Libraries/Components/Picker/__tests__/__snapshots__/Picker-test.js.snap b/Libraries/Components/Picker/__tests__/__snapshots__/Picker-test.js.snap index 32c40aa992d57a..af39b089a304bb 100644 --- a/Libraries/Components/Picker/__tests__/__snapshots__/Picker-test.js.snap +++ b/Libraries/Components/Picker/__tests__/__snapshots__/Picker-test.js.snap @@ -64,7 +64,6 @@ exports[` should render as expected: should deep render when not mocke exports[` should render as expected: should shallow render as when mocked 1`] = ` @@ -81,7 +80,6 @@ exports[` should render as expected: should shallow render as should render as expected: should shallow render as when not mocked 1`] = ` diff --git a/Libraries/Components/Switch/Switch.js b/Libraries/Components/Switch/Switch.js index b2d251342f91f4..abb7f00b761df7 100644 --- a/Libraries/Components/Switch/Switch.js +++ b/Libraries/Components/Switch/Switch.js @@ -12,6 +12,7 @@ import Platform from '../../Utilities/Platform'; import * as React from 'react'; import StyleSheet from '../../StyleSheet/StyleSheet'; +import useMergeRefs from '../../Utilities/useMergeRefs'; import AndroidSwitchNativeComponent, { Commands as AndroidSwitchCommands, @@ -153,7 +154,8 @@ const SwitchWithForwardedRef: React.AbstractComponent< const nativeSwitchRef = React.useRef | null>(null); - React.useImperativeHandle(forwardedRef, () => nativeSwitchRef.current); + + const ref = useMergeRefs(nativeSwitchRef, forwardedRef); const [native, setNative] = React.useState({value: null}); @@ -200,7 +202,7 @@ const SwitchWithForwardedRef: React.AbstractComponent< onChange={handleChange} onResponderTerminationRequest={returnsFalse} onStartShouldSetResponder={returnsTrue} - ref={nativeSwitchRef} + ref={ref} /> ); } else { @@ -232,7 +234,7 @@ const SwitchWithForwardedRef: React.AbstractComponent< onChange={handleChange} onResponderTerminationRequest={returnsFalse} onStartShouldSetResponder={returnsTrue} - ref={nativeSwitchRef} + ref={ref} /> ); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java index 004af2f6471bbd..650c5b91276db9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java @@ -813,6 +813,14 @@ private void onViewStateDeleted(ViewState viewState) { viewState.mStateWrapper = null; } + // Destroy EventEmitterWrapper immediately instead of waiting for Java GC. + // Notably, this is also required to ensure that the EventEmitterWrapper is deallocated + // before the JS VM is deallocated, since it holds onto a JSI::Pointer. + if (viewState.mEventEmitter != null) { + viewState.mEventEmitter.destroy(); + viewState.mEventEmitter = null; + } + // For non-root views we notify viewmanager with {@link ViewManager#onDropInstance} ViewManager viewManager = viewState.mViewManager; if (!viewState.mIsRoot && viewManager != null) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java index 38f025fbb609e4..05112f45e449ad 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java @@ -105,6 +105,11 @@ public void setSnapToInterval(ReactHorizontalScrollView view, float snapToInterv @ReactProp(name = "snapToOffsets") public void setSnapToOffsets( ReactHorizontalScrollView view, @Nullable ReadableArray snapToOffsets) { + if (snapToOffsets == null) { + view.setSnapOffsets(null); + return; + } + DisplayMetrics screenDisplayMetrics = DisplayMetricsHolder.getScreenDisplayMetrics(); List offsets = new ArrayList(); for (int i = 0; i < snapToOffsets.size(); i++) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java index c7eed9b6e28f80..8c6b6070a8095f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java @@ -102,6 +102,11 @@ public void setSnapToInterval(ReactScrollView view, float snapToInterval) { @ReactProp(name = "snapToOffsets") public void setSnapToOffsets(ReactScrollView view, @Nullable ReadableArray snapToOffsets) { + if (snapToOffsets == null) { + view.setSnapOffsets(null); + return; + } + DisplayMetrics screenDisplayMetrics = DisplayMetricsHolder.getScreenDisplayMetrics(); List offsets = new ArrayList(); for (int i = 0; i < snapToOffsets.size(); i++) { diff --git a/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputEventEmitter.cpp b/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputEventEmitter.cpp index 8d4284771d2900..6342a6c1ff239a 100644 --- a/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputEventEmitter.cpp +++ b/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputEventEmitter.cpp @@ -72,8 +72,7 @@ void TextInputEventEmitter::onBlur( void TextInputEventEmitter::onChange( TextInputMetrics const &textInputMetrics) const { - dispatchTextInputEvent( - "change", textInputMetrics, EventPriority::SynchronousUnbatched); + dispatchTextInputEvent("change", textInputMetrics); } void TextInputEventEmitter::onChangeText( diff --git a/build.gradle.kts b/build.gradle.kts index 47d59f05b27108..2357d613483b27 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,9 +12,10 @@ buildscript { mavenCentral() } dependencies { + val kotlin_version: String by project classpath("com.android.tools.build:gradle:4.2.1") classpath("de.undercouch:gradle-download-task:4.1.1") - + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/gradle.properties b/gradle.properties index 0edb7925961a4c..94445081b288f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,3 +6,4 @@ org.gradle.parallel=true ANDROID_NDK_VERSION=20.1.5948944 android.useAndroidX=true +kotlin_version=1.4.21 diff --git a/packages/react-native-gradle-plugin/build.gradle.kts b/packages/react-native-gradle-plugin/build.gradle.kts index baf3afc39d6442..e81ff060a6e39a 100644 --- a/packages/react-native-gradle-plugin/build.gradle.kts +++ b/packages/react-native-gradle-plugin/build.gradle.kts @@ -8,7 +8,6 @@ plugins { `java-gradle-plugin` `kotlin-dsl` - kotlin("jvm") version "1.4.20" } repositories { diff --git a/scripts/.tests.env b/scripts/.tests.env index 2c833a8b454175..defef2eb98a249 100644 --- a/scripts/.tests.env +++ b/scripts/.tests.env @@ -24,7 +24,7 @@ export AVD_ABI=x86 export ANDROID_DISABLE_AVD_TESTS=1 ## IOS ## -export IOS_TARGET_OS="14.5" +export IOS_TARGET_OS="latest" export IOS_DEVICE="iPhone 8" export SDK_IOS="iphonesimulator" diff --git a/template/android/app/src/main/res/values/styles.xml b/template/android/app/src/main/res/values/styles.xml index 9fab0be743760d..24bc061368750c 100644 --- a/template/android/app/src/main/res/values/styles.xml +++ b/template/android/app/src/main/res/values/styles.xml @@ -3,7 +3,6 @@