Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45303
`ViewManagersPropertyCache` uses reflection to find all ReactProp but fails when any symbols in the method refer to classes not available in the current build.
Work around this by extracting this helper to a separate private inner class.
Changelog: [Internal]
Reviewed By: NickGerleman
Differential Revision: D59397865
fbshipit-source-id: e77d3167698e4311e8778ebab28a0c8a0d2666c2
Summary:
To fix [The Memory Leak Issue](https://github.com/facebook/react-native/issues/45080) This change modifies the timing of view creation in the LogModule. The motivation behind this update is to address a potential memory leak issue. Previously, views were being created and held onto, which could lead to references to the Activity being retained even when they were no longer needed. By creating the view only when the show method is called and ensuring it is removed in the hide method, we can prevent these memory leaks and improve the overall memory management and stability of the LogModule.
Fixes https://github.com/facebook/react-native/issues/45080
- Adjusted the timing of view creation to occur when the `show` method is called.
- Ensured that the created view can be removed in the `hide` method.
- This update addresses potential memory leaks by preventing the view from holding a reference to the Activity.
These changes improve memory management and stability within the LogModule.
Modify the timing of view creation in LogModule. The view is now created when the show method is called, and it can be removed in the hide method. This change resolves potential memory leaks caused by the view holding a reference to the Activity.
## Changelog:
[ANDROID] [FIXED] - Fix LogModule to create view when show is called
Pull Request resolved: https://github.com/facebook/react-native/pull/45261
Reviewed By: dmytrorykun
Differential Revision: D59372962
Pulled By: cortinico
fbshipit-source-id: 6693afdb279c7164ff0f68c93f8ca8a54b1c2077
Summary:
In https://github.com/facebook/react-native/issues/44483 `If-None-Match` request failed to get a 304 after a 200 response. This is caused by NSRequest's
cachePolicy which prevents sending a request to server to check 304 state and return directly a 200 response.
## Changelog:
[IOS] [FIXED] - fix: on iOS not getting 304 from `If-None-Match` request
Pull Request resolved: https://github.com/facebook/react-native/pull/45263
Test Plan: repeat request given in https://github.com/facebook/react-native/issues/44483
Reviewed By: cortinico
Differential Revision: D59364609
Pulled By: dmytrorykun
fbshipit-source-id: 2a8b86c526320a1e9c1c58e41aa9c74beeeac2ce
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45287
Fixes https://github.com/facebook/react-native/issues/45277
This fixes an NPE reported in OSS if you do this call in JavaScript:
```
const fr = new FileReader();
fr.readAsText({});
```
Changelog:
[Android] [Fixed] - Fix NPE in FileReaderModule
Reviewed By: dmytrorykun
Differential Revision: D59372620
fbshipit-source-id: ad5073376eaa26852c8277bdbb7d76b1aa480b3c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45295
When registering Babel to run RN from source, we currently call `babel/register` directly from `scripts/babel-register.js`.
This has the effect of overwriting any previous registration, which causes problems in the FB monorepo because RN also loads other projects that lie outside this registration (like Metro) from source - possibly requiring different configurations.
Moreover, if Metro is subsequently loaded from source, its own registration clobbers RN's.
Instead, this diff runs the registration through `metro-babel-register`, which maintains a cumulative list of registration directories and applies a uniform transform.
Note that this means we're not using exactly the same transform at build/publish time as for running from source - to fix that, we ought to move everything to a central `babel.config.js`, but that's a much bigger change, and this gets us close enough to unblock.
Changelog: [Internal]
Reviewed By: hoxyq
Differential Revision: D59376984
fbshipit-source-id: 0dbb00970ac87dbe40ec8904bf51ef4b1fee5e0f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45294
Just doing some cleanup here as those exports are scattered around this file.
Changelog:
[Internal] [Changed] - Cleanup exports for PressableExample in RN-Tester
Reviewed By: yungsters
Differential Revision: D59376617
fbshipit-source-id: 0f6f81fca7b5cbcdc05bbb6a1f87d3ad74c20b50
Summary:
This PR restores the virtual destructor for `ShadowNodeWrapper` which was added in https://github.com/facebook/react-native/pull/33500 and unfortunately removed in https://github.com/facebook/react-native/pull/40864.
The virtual destructor here serves as a key function. Without a key function, `obj.hasNativeState<ShadowNodeWrapper>(rt)` **does not** work correctly between shared library boundaries on Android and always returns false.
We need this pretty badly in third-party libraries like react-native-reanimated or react-native-gesture-handler.
## Changelog:
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[ANDROID] [FIXED] - Fix dynamic_cast (RTTI) for ShadowNodeWrapper when accessed by third-party libraries again
Pull Request resolved: https://github.com/facebook/react-native/pull/45290
Test Plan: This patch fixes an issue in Reanimated's fabric-example app.
Reviewed By: fabriziocucci
Differential Revision: D59375554
Pulled By: javache
fbshipit-source-id: 09f3eda89a67c26d6dacca3428e08d1b7138d350
Summary:
[`querystring`](https://www.npmjs.com/package/querystring) package is deprecated. In this Pull Request I've replaced usage of `querystring` with `URLSearchParam` what is recommended by Node.js.
It's also causing a warning when installing dependencies inside a React Native app:
```
warning react-native > react-native/community-cli-plugin > querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
```
## Changelog:
[INTERNAL] [FIXED] - Replace `querystring` package with `URLSearchParam`
Pull Request resolved: https://github.com/facebook/react-native/pull/45125
Test Plan:
Params should be parsed in the same way and warning shouldn't be presented.
js1 jest xplat/js/tools/metro/packages/metro/src/cli/__tests__/parseKeyValueParamArray-test.js
Reviewed By: cipolleschi
Differential Revision: D58948498
Pulled By: GijsWeterings
fbshipit-source-id: 79b1f7b3feae230d2d3641205c513b98b3fda511
Summary:
We do have a mixture of casing in the custom GH actions in our repo.
This aligns them all to be `kebab-case`
## Changelog:
[INTERNAL] - Aling all custom actions to kebab-case
Pull Request resolved: https://github.com/facebook/react-native/pull/45286
Test Plan: CI
Reviewed By: blakef
Differential Revision: D59374046
Pulled By: cortinico
fbshipit-source-id: 030a9323e501e375585e90f10a3b29c3bb671b28
Summary:
Changes `.npmignore` file to only exclude the `ReactAndroid/build` directory instead of all `build` directories under `ReactAndroid` (which included the `ReactAndroid/src/main/java/com/facebook/react/common/build` package). This problem was caused by the newer version of NPM being used.
Closes https://github.com/facebook/react-native/issues/45204
## Changelog:
[ANDROID] [FIXED] - Fixed build from source failing due to a missing file
Pull Request resolved: https://github.com/facebook/react-native/pull/45279
Test Plan:
Run `npm pack` or `npm publish -dry-run`.
Before this change it includes 3774 files in the package and `ReactBuildConfig` isn't included. After this change it includes 3775 files in the package and `ReactBuildConfig` is included.
Reviewed By: javache
Differential Revision: D59371555
Pulled By: cortinico
fbshipit-source-id: f54f1e88e30429d538b9e160e6ce20d994c5d1b8
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45269
There's no callers to this property, and we already create a `jsRuntimeFactory` above in DefaultReactHost, which will actually decide which VM to use.
Changelog: [Android][Removed] Unused jsEngineResolutionAlgorithm from ReactHost
Reviewed By: cortinico
Differential Revision: D59333435
fbshipit-source-id: 21be4d138bca64c0cb78de366bf2e247b4f37650
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45053
Add support for most keyword values of mix-blend-mode on Android
Missing compositing operators and global values
Changelog: [Internal]
Reviewed By: NickGerleman
Differential Revision: D58752052
fbshipit-source-id: e63e01d45a7e0924f3853f08dff5cec7e2f1ceaf
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45256
The actual stamped versions here are all strings.
Android interface for constants is untyped, and we always return a string here. iOS, we will try to parse the string into a double, which will fail for every prerelease version RN has ever published.
Platform on Windows seems to uniquely be doing the right thing.
Changelog:
[General][Fixed] - Fix Platform.constants.reactNativeVersion type
Reviewed By: robhogan, necolas
Differential Revision: D59141948
fbshipit-source-id: 9c758e5eb8796b03197258d87ec06b31018e211c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45250
Adds and implements a new `appDisplayName` field as part of `HostTargetMetadata` and the `ReactNativeApplication.metadataUpdated` CDP event.
This will be used to display the app display name in the debugger frontend.
Changelog: [Internal]
Reviewed By: robhogan
Differential Revision: D59273360
fbshipit-source-id: d770cccadb520b9c13c7288cd690df21683d2cc1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45249
Follows D58288489, D58415181.
Implements the remaining `HostTargetMetadata` fields, sent by the debugger on `ReactNativeApplication.metadataUpdated`, on **Android Bridgeless**.
This will be used to display details such as the app name and React Native version in the debugger frontend.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D59271755
fbshipit-source-id: a2488fed98df0800ec0a611d2317cd40cd809aac
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45234
Follows D58288489.
Implements the remaining `HostTargetMetadata` fields, sent by the debugger on `ReactNativeApplication.metadataUpdated`, on **Android Bridge** (Bridgeless to follow).
This will be used to display details such as the app name and React Native version in the debugger frontend.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D58415181
fbshipit-source-id: 8aca707c0b9f6e933ac5e5b4ac47ba8d48e99241
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45258
Setting this to false, then removing, will not reset back to default state of `true`. Add explicit defaults so that the absence of the prop will lead to scroll indicators always being shown.
Changelog:
[Android][Fixed] - Fix default for `showsHorizontalScrollIndicator` and `showsVerticalScrollIndicator`
Reviewed By: javache
Differential Revision: D59285745
fbshipit-source-id: 6a7c204cfe9c4ab9e4efbbda300cdfdaf57e8f37
Summary:
Fix entails using non-synthesized getter, such that underlying backing is an std::atomic<RCTNetworkTaskStatus>.
In the greater scheme of things, I believe `RCTNetworkTask` should be improved as it has several `nonatomic` properties that are read and written to on different threads. Thread safety of this class seems to have been addressed on a per property basis, judging from the employment of `std::mutex` elsewhere in the implementation.
This is an attempt at fixing https://github.com/facebook/react-native/issues/44687.
## Changelog:
[iOS][FIXED] - Fix data race related to access on `RCTNetworkTask.status`.
Pull Request resolved: https://github.com/facebook/react-native/pull/44694
Test Plan: Added unit test in class `RCTNetworkTaskTests`.
Reviewed By: cortinico
Differential Revision: D59217353
Pulled By: javache
fbshipit-source-id: 1af77238ddd99db21e2e53f174a81e207d5832b2
Summary:
This migrates `analyse_code` to GHA into a single job called `lint`.
## Changelog:
[INTERNAL] - Migrate analyse_code to GHA
Pull Request resolved: https://github.com/facebook/react-native/pull/45247
Test Plan: CI
Reviewed By: NickGerleman
Differential Revision: D59283393
Pulled By: cortinico
fbshipit-source-id: dcdc4828a551062b3706e6450614b8c94e1a7e81
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45264
Changelog: [internal]
We added a flag to fix some issues when committing state updates synchronously from the main thread in https://github.com/facebook/react-native/pull/44015 but that implementation was incorrectly not invoking item dispatch listeners after mount.
This adds the missing logic so we can unblock shipping sync state updates.
Reviewed By: javache
Differential Revision: D59319230
fbshipit-source-id: b0ab7e7c79a3315ef29dbb024e62c10444192509
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45240
X-link: https://github.com/facebook/yoga/pull/1675
There was a bug where some crash would happen if a tree was cloned that had static/absolute parent/child pair inside it. This was because we were no longer calling `cloneChildrenIfNeeded` on the static parent, but would still layout the absolute child. So that child's owner would be stale and have new layout. In React Native this would lead to a failed assert which causes the crash.
The fix here is to clone the children of static nodes during `layoutAbsoluteDescendants` so that we guarantee the node is either cloned if it is going to have new layout.
Changelog: [Internal]
Reviewed By: NickGerleman
Differential Revision: D59175629
fbshipit-source-id: 4d110a08ba5368704327d5ab69a8695b28e746f4
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45242
tsia, comments should explain how this works but tldr is
* Set up cropping region to only draw within the view's bounds
* Draw 2 offscreen rects to cast the shadow. One represents the bounds of the original view, the other represents the clear region. Fill these rects with EO fill algo so the intersection is clear. The disjoint will be colored and cast a shadow.
* Do that for each shadow in reverse order
Changelog: [Internal]
bypass-github-export-checks
Reviewed By: lenaic
Differential Revision: D58885576
fbshipit-source-id: 2f3a5de75e93c7d34676128bbddbe38d64f1fb59
Summary:
tisa. Algo is
* Draw offscreen rect the size of the outset shadow (so accounting for spread)
* Set g state to cast shadow in proper place ON screen
* Clear out region in view
The rects need to be offscreen for the following reasons
* We need to account for spread radius, and CGContext shadows do not have support for this. So the only way to create a bigger shadow is the create a path that is the same size as the shadow we want
* We cannot just position this rect onscreen with no offset (so the shadow is casting directly under it) since the blur will look unnatural
* Offscreen means we do not see filled shadow rect but we do see the shadow it casts by offsetting it in the proper location
Changelog: [Internal]
Reviewed By: lenaic
Differential Revision: D58881588
fbshipit-source-id: 2ea1b8945a3b9f182c4fb11668ac91a0ae7846ca
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44882
tsia, nothing too fancy here. Just taking the box shadows from raw props and throwing them into a struct so we can read it.
Changelog: [Internal]
bypass-github-export-checks
Reviewed By: NickGerleman
Differential Revision: D57617028
fbshipit-source-id: 29cf683b663b4903721d674efbf61a200eaf3a64
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45237
Changelog: [internal]
This creates a feature flag to test a fix for an incorrect state update dispatched to Fabric when using smooth scroll animations.
Specifically, when starting a smooth scroll animation from X to Y, the scroll view would set the state to Y, and then all the range from X to Y again. For example, the sequence of state updates when smooth scrolling from 0 to 5 would be `0 -> 5 -> 1 -> 2 -> 3 -> 4 -> 5`, which is obviously incorrect.
This flag prevents setting the final value before it's actually reached.
Reviewed By: javache
Differential Revision: D59233069
fbshipit-source-id: 221602d7d30635070e7776ce756e2ef438edf638
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45236
Changelog: [internal]
## Context
We're currently observing inconsistencies between the state of the UI on Android and the propagated state in Fabric.
When investigating the issue, we saw that there are some state updates that were going to be dispatched from scroll views to Fabric were skipped because the state object in native was deallocated.
The reason for that is a race condition between:
1. Dispatching new state updates from the UI thread
2. Updating the state previously dispatched from the UI thread on the JS thread.
{F1735383134}
## Changes
This creates a new feature flag to replace the weak reference with a strong one, so when the previous state is deallocated we can still access it to set new state.
The use of weak references was introduced in D44472121 to avoid holding onto JSI references (which could be contained in the state) when the runtime was deallocated, but we later introduced an explicit clean up mechanism in D45905628 that would make that unnecessary.
Reviewed By: javache
Differential Revision: D59233070
fbshipit-source-id: 018d8935f506430ecab96df0f7a998a37ee0f556
Summary:
This migrates the `test_js` workflow to GHA
## Changelog:
[INTERNAL] - Migrate test_js to GHA
Pull Request resolved: https://github.com/facebook/react-native/pull/45246
Test Plan: Will wait for CI
Reviewed By: javache
Differential Revision: D59270333
Pulled By: cortinico
fbshipit-source-id: e77eb9819e0819638c51e61b1e477ac04680a2f4
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45233
We want the Gradle cache to be written only on main/-stable branches run, and only for jobs with `cache-read-only` == false (i.e. `build_android`).
This changes implements it.
Changelog:
[Internal] [Changed] - Further refine the Gradle caching logic.
Reviewed By: blakef
Differential Revision: D59225944
fbshipit-source-id: b6c3a5d4d0d399d6fe42287976925c43f3f12eb7