Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45378
Kotlin consumers of those APIs are forced with this breaking change:
```
# Before thanks to Java property conversion
Dynamic.type
# After
Dynamic.getType()
```
This restores the old more idiomatic API by moving those 2 funcitons to be vals.
Changelog:
[Android] [Fixed] - Undo breaking change on Dynamic.type and Dynamic.isNull
Reviewed By: javache
Differential Revision: D59631783
fbshipit-source-id: 8d720af34e104ee0e4f3120302a4a84fc17a7b1c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45392
In this diff I'm introducing a new overload of Systrace.beginSection to receive arguments by parameter
changelog: [Android][Added] Introduce Systrace.beginSection with arguments
Reviewed By: sammy-SC
Differential Revision: D59639329
fbshipit-source-id: 23d43e5dd48fdde9c7d49a1c10fa9ecc4c3b7196
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45385
We ran various experiments with this flag, and this does not turn out to provide any significant benefits at this point to make it worth the complexity and platform divergence it introduced.
Changelog: [Internal]
Reviewed By: cortinico
Differential Revision: D58355433
fbshipit-source-id: 4b857a5d0b8aa5915b4a880cbcae2526a16a08a9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45324
Improve concurrency during startup of bridgeless by concurrently initializing eager native modules and triggering bundle load.
Changelog: [Android][Changed] Modules marked with needsEagerInit = true will now be created on the mqt_native thread.
Reviewed By: mdvacca
Differential Revision: D59465977
fbshipit-source-id: 55cc0f0359bafcf32dc538f4346c6a5d5546f658
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45376
This reduces one breaking change users are seeing on `CatalystInstance.getJsCallInvokerHolder`.
I had to specify:
```
Suppress("INAPPLICABLE_JVM_NAME")
get:JvmName("getJSCallInvokerHolder")
```
as the Kotlin compiler is unhappy with me setting a JvmName on a interface property.
More on this here: https://youtrack.jetbrains.com/issue/KT-31420
Changelog:
[Android] [Fixed] - Undo breaking change on `CatalystInstance.getJsCallInvokerHolder`
Reviewed By: javache
Differential Revision: D59631640
fbshipit-source-id: 4d5b3499e4e0e0bec1d380c4b7942ea28ae35465
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45374
This change factors out the language standard in a separate constant so we can easily control it from a single place.
There are only 2 exception to this:
1. hermes-engine: the podspec is used in CI and it has no access to the rct_cxx_language_standard variable
2. Yoga: it can be used as a separate pod, outside of React Native, so it makes sense to leave it alone.
This change also fixes a problem where, in some setup, the language was set to C++14
## Changelog
[Internal] - Refactor Cxx language standard in a single constant
Reviewed By: dmytrorykun, blakef
Differential Revision: D59629061
fbshipit-source-id: 41eac64e47c14e239d8ee78bd88ea30af244d695
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45322
Instead of using multiple weak_ptr and weak_ref, use a single weak_ref to the Java object and use that to get back to the original C++ instance, without the need for additional shared_ptr.
Changelog: [Internal]
Reviewed By: RSNara
Differential Revision: D59465976
fbshipit-source-id: d410bdacf21a1886c6ed95d2c57ac8c6e17428e3
Summary:
Factor out the build-hermes-macos job to reuse the code
## Changelog:
[Internal] - Factor out build hermes macos action
Pull Request resolved: https://github.com/facebook/react-native/pull/45371
Test Plan: GHA are green
Reviewed By: blakef
Differential Revision: D59627977
Pulled By: cipolleschi
fbshipit-source-id: 84226d8a2c036f816fa8ea949b467873a7eef37c
Summary:
Fixes: https://github.com/facebook/react-native/issues/45307
## Changelog:
[Android] [Fixed] - if `npx react-native-community/cli config` fails or timeouts proper error is shown and built is aborted, instead of leaving and empty autolinking.json
During build `npx react-native-community/cli config` is generated into autolinking.json. When command fails, we should error and should not leave and empty `autolinking.json`
Pull Request resolved: https://github.com/facebook/react-native/pull/45333
Test Plan:
Output of the reproducer in https://github.com/facebook/react-native/issues/45307 looks like this:
```log
android % ./gradlew assembleDebug
Starting a Gradle Daemon (subsequent builds will be faster)
ERROR: autolinkLibrariesFromCommand: Failed to create /Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/build/generated/autolinking/autolinking.json - process npx react-native-community/cli config exited with error code: 126
FAILURE: Build failed with an exception.
* Where:
Settings file '/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/settings.gradle' line: 3
* What went wrong:
A problem occurred evaluating settings 'android'.
> ERROR: autolinkLibrariesFromCommand: Failed to create /Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/build/generated/autolinking/autolinking.json - process npx react-native-community/cli config exited with error code: 126
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 10s
8 actionable tasks: 4 executed, 4 up-to-date
```
Output if you modify the package.json to be invalid looks like this:
```log
android % ./gradlew assembleDebug
ERROR: autolinkLibrariesFromCommand: process npx react-native-community/cli config exited with error code: 1
JSONError: JSON Error in /Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/package.json:
35 | "node": ">=18"
36 | },
> 37 | SOMETHING_NON_JSON
| ^
38 | "packageManager": "yarn@3.6.4",
39 | "resolutions": {
40 | "rtn-centered-text": "portal:../RTNCenteredText"
Unexpected token "S" (0x53) in JSON at position 1019 while parsing near "...ode\": \">=18\"\n },\n SOMETHING_NON_JSON\n ..."
35 | "node": ">=18"
36 | },
> 37 | SOMETHING_NON_JSON
| ^
38 | "packageManager": "yarn@3.6.4",
39 | "resolutions": {
40 | "rtn-centered-text": "portal:../RTNCenteredText"
at parseJson (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/parse-json/index.js:29:21)
at loadJson (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/loaders.js:48:16)
at #loadConfiguration (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:116:36)
at #loadConfigFileWithImports (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:87:54)
at #readConfiguration (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:84:82)
at search (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:50:63)
at emplace (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/util.js:36:20)
at ExplorerSync.search (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/ExplorerSync.js:78:42)
at getUserDefinedOptionsFromMetaConfig (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/index.js:32:37)
at mergeOptionsBase (/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/node_modules/react-native-community/cli-config/node_modules/cosmiconfig/dist/index.js:60:31)
FAILURE: Build failed with an exception.
* Where:
Settings file '/Users/boga/Work/OSS/RNMBGL/rn-fabric-boolattribute/ReproducerApp/android/settings.gradle' line: 3
* What went wrong:
A problem occurred evaluating settings 'android'.
> ERROR: autolinkLibrariesFromCommand: process npx react-native-community/cli config exited with error code: 1
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 2s
8 actionable tasks: 4 executed, 4 up-to-date
```
Reviewed By: cipolleschi
Differential Revision: D59582430
Pulled By: cortinico
fbshipit-source-id: bedb9563175cc5c46f5af80cf309769e56b803cc
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45366
This updates ReactImageView to share the background drawing and clipping code used by other built-in components. This means manipulating a background drawable, and clippping at draw time, instead of using Fresco hierarchy background (in view foreground), and radii which manipulate the underlying bitmap.
Changelog: [Internal]
Reviewed By: mdvacca
Differential Revision: D59495407
fbshipit-source-id: ce3c975e5ed323fa3d4610ec1515ef3c8dd8b2d1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45356
Subview clipping was disabled for RTL on Android due to a bug where TextInputs automatically blur when selected. This bug is reintroduced when `set_android_layout_direction` is set.
When `set_android_layout_direction` is enabled, and we use View `getLayoutDirection()` instead of `I18nManager.isRTL()`, the layout direction is not known until layer in the mounting process. This defeats the check a `setRemoveClippedSubviews()` prop setter to ignore the prop if the view is RTL (since it doesn't invalidate when a new layout direction is set).
The root cause of the underlying RTL bug is due to updating clipping status triggered by `onSizeChanged()`, which is called before `onLayout()`, where `ReactHorizontalScrollContainerView` offsets content in RTL. This also seems potentially erroneous, as we do not update the clipping rect on position change (unless that is handled elsewhere).
I moved the check to `onLayout()`, called after ReactHorizontalScrollView will change metrics, which seems to fix the issue. I then removed the exclusion in `removeClippedSubviews` prop setter.
Changelog:
[Android][Fixed] - Fix Android removeClippedSubviews in RTL
Reviewed By: mdvacca
Differential Revision: D59566611
fbshipit-source-id: a2eb12b984dc78940756804b6b7a3950377af9de
Summary:
When setting a shadow on a `Text` inside a `TextInput`, the shadow was rendered with artifacts when `backgroundColor` was set on the `TextInput`.
This is caused by how attributed strings are constructed on the new architecture - all text attributes from the text input (including background color) are propagated onto the string. Then, it's converted to a `Spannable` on Android side, which includes `ReactBackgroundColorSpan` being set on the entire text when it doesn't have a background color set explicitly. Then Android tries to render the shadow not only for the text but also for the background rect which results in the artifacts.
This PR prevents background color from the `TextInput` from being propagated onto the attributed string, so the `ReactBackgroundColorSpan` is only applied when a text fragment has its background set explicitly.
## Changelog:
[ANDROID] [FIXED] - Fixed text shadow rendering with artifacts when `backgroundColor` was set on the `TextInput`
Pull Request resolved: https://github.com/facebook/react-native/pull/45343
Test Plan:
Checked relevant examples on RNTester
|Old arch|New arch (before)|New arch (after)|
|-|-|-|
|<img width="436" alt="Screenshot 2024-07-09 at 14 44 52" src="https://github.com/facebook/react-native/assets/21055725/64005ec4-3e42-4327-9b09-f57d3c477fb6">|<img width="436" alt="Screenshot 2024-07-09 at 14 43 03" src="https://github.com/facebook/react-native/assets/21055725/f558ad26-08de-4231-acdf-92f596ec186c">|<img width="436" alt="Screenshot 2024-07-09 at 14 41 46" src="https://github.com/facebook/react-native/assets/21055725/6b4ff6ed-5267-4f1a-a895-1bbd760f73e5">|
Reviewed By: NickGerleman
Differential Revision: D59527817
Pulled By: cortinico
fbshipit-source-id: d03d4749e4435ef04e51b1018f046be0e5e0bca4
Summary:
Factor out build-apple-slices-hermes to a seprate action to reuse code
## Changelog:
[Internal] - Refactor the CI to reuse code
Pull Request resolved: https://github.com/facebook/react-native/pull/45359
Test Plan: GHA are green
Reviewed By: cortinico
Differential Revision: D59575467
Pulled By: cipolleschi
fbshipit-source-id: 5d253f3dd523cb70b768c62db10fb7ff39fbd49f
Summary:
This PR updates the comments for `~ShadowNodeWrapper()` and `~ShadowNodeListWrapper()` to align them with the actual implementation that now uses `jsi::NativeState` instead of `jsi::HostObject`.
## Changelog:
[GENERAL] [FIXED] - Updated comments for `~ShadowNodeWrapper()` and `~ShadowNodeListWrapper()`
Pull Request resolved: https://github.com/facebook/react-native/pull/45357
Reviewed By: sammy-SC
Differential Revision: D59578988
Pulled By: javache
fbshipit-source-id: 1c46ce8407fc8b337f3a6762caee3b2e0e1edfc6
Summary:
Factor out the action to build hermesc for apple platform so we can reuse it across jobs
## Changelog:
[Internal] - Factor out hermesC apple to reuse code
Pull Request resolved: https://github.com/facebook/react-native/pull/45346
Test Plan: GHA are green
Reviewed By: cortinico
Differential Revision: D59521564
Pulled By: cipolleschi
fbshipit-source-id: c99966e314b3d418d1d83d653c0be68b2931b03b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45348
flattenStyle may return an object which is already frozen (in development), so it is incorrect to further mutate this.
Changelog: [Internal]
Reviewed By: NickGerleman
Differential Revision: D59525418
fbshipit-source-id: 094b7c9c952d8684e24203cc07d6bda51bdf12b5
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45352
We claim that we will never draw multiple elements on top of each other, which isn't correct when we have a background.
We should claim that we can draw overlapping elements if we have a background drawable which we place in the Drawee hierarchy (part of the ImageView foreground drawable), or if the underlying view has a background drawable (which is handled by `ImageView` superclass `hasOverlappingRendering()`).
The effect of this is subtle, and just means that we get correct compositing when an opacity is set on image with background.
Changelog:
[Android][Fixed] - Fix ReactImageView.hasOverlappingRendering()
Reviewed By: mdvacca
Differential Revision: D59489788
fbshipit-source-id: fe2922f064b91f1709ed546dd647d4d4112d04c1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45338
`CSSBackgroundDrawable` is a silly goose and reuses layout types to store color. This has extended into a really strange public API, where we use floating point colors, where the color is itself in int with packed integer color components.
This hides that away, and marks some classes with `UnstableReactNativeAPI` that I plan to hide shortly.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D59488811
fbshipit-source-id: 7dc57edc9888f8a92088d2410ee71c2768ae8ec1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45169
This is a follow-up to D56280451 where I made all SystraceSection calls feed into the Instruments signposts API. This will additionally do the same for all calls to nativeTraceBeginSection/nativeTraceEndSection from JSITracing.cpp.
Changelog: [Internal]
Reviewed By: sammy-SC
Differential Revision: D58895740
fbshipit-source-id: ee1cdff883ac1172f9bafe11ab950738d7ae7f82
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45336
The spec says we need to adjust the border radius of the shadow if spread is present. It gets bigger for outset shadows and smaller for inset shadows.
Source https://drafts.csswg.org/css-backgrounds/#shadow-shape
> To preserve the box’s shape when spread is applied, the corner radii of the shadow are also increased (decreased, for inner shadows) from the border-box (padding-box) radii by adding (subtracting) the spread distance (and flooring at zero). However, in order to create a sharper corner when the border radius is small (and thus ensure continuity between round and sharp corners), when the border radius is less than the spread distance (or in the case of an inner shadow, less than the absolute value of a negative spread distance), the spread distance is first multiplied by the proportion 1 + (r-1)3, where r is the ratio of the border radius to the spread distance, in calculating the corner radii of the spread shadow shape.
Changelog: [Internal]
Reviewed By: NickGerleman
Differential Revision: D59296120
fbshipit-source-id: e55327701547f27961a0d612ed595b4383e1d763
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45340
flattenStyle may return an object which is already frozen (in development), so it is incorrect to further mutate this.
Changelog: [Internal]
Reviewed By: cortinico
Differential Revision: D59515063
fbshipit-source-id: 92df158d5841988d40bcd76b861963b06dad1573
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45323
We're no longer running experiments with TurboModule and legacy module rollout, so this debug info is no longer required, and adds unnecessary verbosity to TurboModule lookup errors.
Changelog: [Internal]
Reviewed By: christophpurrer
Differential Revision: D59465974
fbshipit-source-id: 87a2ebd9c05ad312889bcbd819ccbe885b429064
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45320
TurboModule should be the default path, and we should only fallback to the legacy native modules if we can't find a module through the TurboModule mechanism.
Changelog: [General][Changed] - TurboModules will be looked up as TurboModules first, and fallback to legacy modules after.
Reviewed By: christophpurrer
Differential Revision: D59465978
fbshipit-source-id: c5672d34e90dcee321de0a5acd3a50b6bb1092b8
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45330
changelog: [internal]
With view preallocation, we want to trigger image download in case there is only a single image source even if layout hasn't been determined.
This can lead to images appearing 100s of milliseconds earlier.
This optimisation is already used by plain ImageView: https://fburl.com/code/cp87xmw7
Reviewed By: rubennorte
Differential Revision: D59465972
fbshipit-source-id: e045d6bd9d595d366541ffa32364488be4766ef8
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45319
This test has been cleaned up, we can remove the callers.
Changelog: [Internal]
Reviewed By: fabriziocucci
Differential Revision: D59465975
fbshipit-source-id: 01f4b24f221aa017fbfd2238f81454d38d05920a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45325
We don't want to lose this context when we cleanup the old architecture.
Changelog: [Internal]
Reviewed By: sammy-SC
Differential Revision: D59466876
fbshipit-source-id: 3cf3c63d619d9e8535e369ec1ef7c5706431b85d
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45317
changelog: [internal]
ship optimized version of Text componant. In local benchmarking this version shows 35% improvement over old Text component.
Reviewed By: NickGerleman
Differential Revision: D59460871
fbshipit-source-id: c3a41d3aac4cd40e054b669d56295bcb631d8310
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45331
Let's add the a new JSRuntime API to register the thread. This allows Hermes sampling to correctly work in Bridgeless/Activity.
## Changelog:
[General][Added] - Add experimental api to JSRuntimeFactory to initialize runtime on js thread
Reviewed By: RSNara
Differential Revision: D58787655
fbshipit-source-id: 2202271b9ad88cf8ba2145fb4e9e7bfd6e0c09fa
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45329
Thanks to [#45232](https://github.com/facebook/react-native/issues/45232) we found a bug in the interop layer, where we were not passing the BridgeProxy in bridgeless mode to the view managers.
This Change should fix that issue.
## Changelog:
[iOS][Fixed] - Make sure to pass the RCTBridgeProxy to ViewManagers
Reviewed By: dmytrorykun
Differential Revision: D59468292
fbshipit-source-id: 00666be21385a735878eb567c4b8a0986c609c5f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45328
This assertion is currently not actionable since the stack trace will always be just `mCreateReactContextThread`. Moving this assert is safe, as the only other place we write it is also the UI thread.
Changelog: [Internal]
Reviewed By: robhogan
Differential Revision: D59467576
fbshipit-source-id: c4606672255149a202f99a8f787230e2a23a868a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45321
Changelog: [internal]
This creates a variant of the internal hook in `TextInput` that handles the synchronization of the state between native and JS. The new variant moves everything that's not needed for rendering to refs instead of state.
One of the reasons for this change is that by not setting state in layout effects, we're not forcing passive effects to be flushed synchronously, which can improve perceived performance (as we can start painting before passive effects are executed).
Reviewed By: sammy-SC
Differential Revision: D59400624
fbshipit-source-id: 540c20daf49919fbfabd357a1a057ca126ec6b03
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45315
Changelog: [internal]
This moves some logic from the `TextInput` component to its own hook. It's just a refactor in preparation for a following change were we're going to test replacing this hook with an alternative version that relies less on state (using refs for some things instead).
Reviewed By: sammy-SC
Differential Revision: D59400614
fbshipit-source-id: ea37b8514f89e94be1386774ad70d56389878886
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45318
I'm setting the Gradle cache to write-only for build_android on main/stable branches.
This is so we start from a fresh cache on those jobs (as they're not on the critical path for developers).
Changelog:
[Internal] [Changed] - Attempt to limit the Gradle cache size
Reviewed By: cipolleschi
Differential Revision: D59466459
fbshipit-source-id: 8b7936ebe053ae06256f8506093eb17c07219de9
Summary:
This PR removes usage of deprecated `statusBarFrame` method in `RCTPerfMonitor` . Instead `RCTPerfMonitor` now uses `safeAreaInsets` which also fixes issue causing Perf Monitor to appear under corner in landscape mode on e.g. `iPhone 15 Pro`. It also fixes initial position of expanded state which was causing it to render under notch.
Also removed duplicate background color setting
## Changelog:
[IOS] [REMOVED] - Remove usage of deprecated statusBarFrame method
[IOS] [FIXED] - Fix position of RCTPerfMonitor in landscape mode & expanded mode
Pull Request resolved: https://github.com/facebook/react-native/pull/43058
Test Plan: `RNTester` builds and runs successfully, `RCTPerfMonitor` works and displays correctly
Reviewed By: dmytrorykun
Differential Revision: D59116913
Pulled By: cipolleschi
fbshipit-source-id: 0ff61f61b206c530cfb9e471bc2dc33a0a43c833