Commit Graph
32217 Commits
Author SHA1 Message Date
Nicola Corti d2edc71619 Add reproducer to RN-Tester for #44610 (#45293)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45293

I'm justing adding a repro to RN-Tester to further investigate:
https://github.com/facebook/react-native/issues/44610

Changelog:
[Internal] [Changed] - Add reproducer to RN-Tester for #44610

Reviewed By: yungsters

Differential Revision: D59375787

fbshipit-source-id: 3bc4f45e3686109bf731008bc27e47c4eb314e48
2024-07-05 01:53:08 -07:00
Ruslan Lesiutin 62cca7accc upgrade[react-devtools-*]: v.5.3.1 (#45291)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45291

Changelog: [Internal]

Same as D59001348, via `js1 upgrade react-devtools -v ^5.3.1`
allow-large-files

Reviewed By: vzaidman

Differential Revision: D59374023

fbshipit-source-id: 7493000bff24a5e21cb77a9a5992c501ed282a92
2024-07-04 16:02:07 -07:00
Nicolas Gallagher 8f548be91c RSD sync (#45270)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45270

This sync includes the following changes:
- **[499d5d3](https://github.com/facebook/react-strict-dom/commit/499d5d3)**: Skip animation setup if no style transitions //<Nicolas Gallagher>//
- **[8a98c5d](https://github.com/facebook/react-strict-dom/commit/8a98c5d)**: Remove invalid style properties from shortforms set //<Nicolas Gallagher>//
- **[ccb00ff](https://github.com/facebook/react-strict-dom/commit/ccb00ff)**: 0.0.17 //<Nicolas Gallagher>//
- **[8cd0eb0](https://github.com/facebook/react-strict-dom/commit/8cd0eb0)**: Reorganize benchmark test and mock files //<Nicolas Gallagher>//
- **[ce88e44](https://github.com/facebook/react-strict-dom/commit/ce88e44)**: Add support for experimental React Native style implementations //<Nicolas Gallagher>//
- **[111f6b1](https://github.com/facebook/react-strict-dom/commit/111f6b1)**: Install StyleX 0.7.0 //<Nicolas Gallagher>//

Reviewed By: amyogit

Differential Revision: D59343139

fbshipit-source-id: 672c7db98fd6676edfe42e818d04a96203e1c827
2024-07-04 13:04:52 -07:00
Vitali Zaidman 6565706232 Update debugger-frontend from 601b272...a4fff8a (#45292)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45292

Changelog: [Internal] - Update `react-native/debugger-frontend` from 601b272...a4fff8a

Resyncs `react-native/debugger-frontend` from GitHub - see `rn-chrome-devtools-frontend` [changelog](https://github.com/facebookexperimental/rn-chrome-devtools-frontend/compare/601b2724b9f765e413b4ccc15d972f5a28fd4f4d...a4fff8a0b4d44cb1dea89ffeac1b7cb4da8b151b).

Reviewed By: hoxyq

Differential Revision: D59376660

fbshipit-source-id: b5c9782493875ede573a61211886f0f32e9f7360
2024-07-04 10:22:26 -07:00
Tomek Zawadzki ea958c69f6 Fix dynamic_cast (RTTI) by adding key function to ShadowNodeWrapper again (#45290)
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
2024-07-04 10:10:13 -07:00
szymonrybczak d1bf828398 fix(cli): replace querystring with URLSearchParam (#45125)
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
2024-07-04 08:04:56 -07:00
Nicola Corti b34b694f8e Move all custom actions to kebab-case (#45286)
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
2024-07-04 07:57:03 -07:00
Pieter De Baets a7f5963377 Cleanup ReactQueueConfiguration (#45281)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45281

There's a lot of unnecessary complexity here, likely from experiments long expired.

Changelog: [Internal]

Reviewed By: fabriziocucci

Differential Revision: D59369955

fbshipit-source-id: beb80de2b1a9ef650db4ed59231c6b25bf6e626b
2024-07-04 06:59:26 -07:00
Jakub Piasecki b2898540c9 Update ignore file to include ReactBuildConfig in the npm package (#45279)
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
2024-07-04 05:48:40 -07:00
Pieter De Baets f1b6218608 Remove unreferenced JSEngineResolutionAlgorithm from ReactHost API (#45269)
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
2024-07-04 05:27:41 -07:00
Alex Hunt bf11d1efcd Update debugger-frontend from 7cd81c1...601b272 (#45282)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45282

Changelog: [Internal] - Update `react-native/debugger-frontend` from 7cd81c1...601b272

Resyncs `react-native/debugger-frontend` from GitHub - see `rn-chrome-devtools-frontend` [changelog](https://github.com/facebookexperimental/rn-chrome-devtools-frontend/compare/7cd81c1548a4bca19732037dcf82662a6ed9ca39...601b2724b9f765e413b4ccc15d972f5a28fd4f4d).

Reviewed By: EdmondChuiHW

Differential Revision: D59370791

fbshipit-source-id: efee17f3646a32a71f7aa8a16bba7af2bfd6ed34
2024-07-04 05:12:30 -07:00
Jorge Cabiedes Acosta 261f82e897 RN tester example for mix-blend-mode (#45052)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45052

tsia

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D58760458

fbshipit-source-id: 1aadfb000d94b827ed779170254438ed4c469a52
2024-07-03 20:55:27 -07:00
Jorge Cabiedes Acosta fd94033dc1 JS Pumbing to get mix-blend-mode into native (#45051)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45051

tsia

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D58753970

fbshipit-source-id: df3cf8852fbc5f2a95f442c9067358608321ed20
2024-07-03 20:55:27 -07:00
Jorge Cabiedes Acosta ec95533609 Add mix-blend-mode effects to Android (#45053)
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
2024-07-03 20:55:27 -07:00
Christoph Purrer 70bacfe098 Turbo Module EventEmitter registration must return void or Promise<void> (#45267)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45267

Changelog: [Internal] Turbo Module EventEmitter registration must return void or Promise<void>

Differential Revision: D59333197

fbshipit-source-id: 461dbcb23e0ebb1c145123bf785587b06a3d6c34
2024-07-03 20:51:14 -07:00
Sam Zhou af506372ba Deploy 0.239.0 to xplat
Summary:
Changelog: [Internal]

allow-large-files

Reviewed By: alexmckenley

Differential Revision: D59348364

fbshipit-source-id: e3d56ebb78fa19b70f2a689f85882fbe3071223f
2024-07-03 16:24:35 -07:00
Nick Gerleman 95d9cdf228 Fix "Platform.constants.reactNativeVersion.prerelease" Flow and TypeScript types (#45256)
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
2024-07-03 13:51:59 -07:00
Andrew Coates 2939dfc208 Add config version, and invalidate layout on config change (#45259)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45259

This is a continuation of the previous PR: https://github.com/facebook/react-native/pull/45047

I made the change more generic for allowing any kind of config change to invalidate layout.

Changelog: [Internal]

X-link: https://github.com/facebook/yoga/pull/1674

Reviewed By: rozele

Differential Revision: D59286992

Pulled By: NickGerleman

fbshipit-source-id: f46f35b03d5d9a743b798844ee3e1a02c271ccde
2024-07-03 12:46:18 -07:00
Alex Hunt 47bff1f49b Fix reactNativeVersion string in inspector metadata on iOS (#45266)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45266

Changelog: [Internal]

Reviewed By: hoxyq

Differential Revision: D59279156

fbshipit-source-id: b1ef0273b14e964a7413724f6d382f7a00be103e
2024-07-03 11:12:31 -07:00
Alex Hunt 09bfb68a39 Add appDisplayName to inspector host metadata (#45250)
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
2024-07-03 11:12:31 -07:00
Alex Hunt 9da07d70dc Implement new HostTargetMetadata fields (Android Bridgeless) (#45249)
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
2024-07-03 11:12:31 -07:00
Alex Hunt 297ccf325f Implement new HostTargetMetadata fields (Android Bridge) (#45234)
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
2024-07-03 11:12:31 -07:00
Nick Gerleman 3af01a8a44 Fix default for showsHorizontalScrollIndicator and showsVerticalScrollIndicator (#45258)
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
2024-07-03 10:05:13 -07:00
Nick Gerleman d028a68026 Ship set_android_layout_direction by default (#45257)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45257

This doesn't seem to be regressing anything, so let's ship it!

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D58959236

fbshipit-source-id: af6ae5d9145160f5a567e99b5d8db2a4d19a080b
2024-07-03 09:28:27 -07:00
Cedric van Putten 30a3e6e8df refactor(dev-middleware): drop node-fetch in favor of Node built-in fetch (#45227)
Summary:
Node 22 doesn't work well with `node-fetch@2`, as one of their polyfills is using the deprecated `punycode` module. This causes unnecessary warnings like:

<img width="986" alt="image" src="https://github.com/facebook/react-native/assets/1203991/13f66c5b-b6f4-4894-8576-ca9631d93f77">

Instead of upgrading to the [much larger `node-fetch@3`](https://packagephobia.com/result?p=node-fetch%403.3.2), this change drops `node-fetch` in favor of Node's own built-in `fetch` implementation (using [undici](https://github.com/nodejs/undici#readme)).

> Note, `react-native/dev-middleware` [already has the `engines.node >= 18`](https://github.com/facebook/react-native/blob/c7988c9c82793b6b41d4c9190a28ce1202410fa0/packages/dev-middleware/package.json#L38-L40) (which is required for fetch).

## Changelog:

[GENERAL] [CHANGED] - Drop `node-fetch` in favor of Node's built-in fetch from `undici` in `react-native/dev-middleware`

<!-- 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

Pull Request resolved: https://github.com/facebook/react-native/pull/45227

Test Plan: See CI for passing tests

Reviewed By: NickGerleman

Differential Revision: D59202017

Pulled By: robhogan

fbshipit-source-id: 15da5d5602e63958b8a3dc581dc1512649f16c12
2024-07-03 09:14:02 -07:00
Håkon Knutzen b1ec698dc4 Fix data race related to RCTNetworkTask.status (#44694)
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
2024-07-03 08:22:26 -07:00
Nicola Corti c0977c39b9 Migrate analyse_code to GHA (#45247)
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
2024-07-03 05:49:47 -07:00
Rubén Norte 8db2995934 Add missing invocation of item dispatch listeners when forcing batching of mount items on Android (#45264)
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
2024-07-03 05:01:02 -07:00
Sam Zhou 3c6762a5f8 Pre-suppress errors ahead of v0.239 release
Summary: Changelog: [Internal]

Reviewed By: mvitousek

Differential Revision: D59308716

fbshipit-source-id: d741ee004e153810fc913da96505706e43814ec1
2024-07-02 23:37:15 -07:00
Joe Vilches c247e8c8c9 Fix case where absolute nodes would sometimes not be cloned (#45240)
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
2024-07-02 15:14:33 -07:00
Thomas Nardone 0ba2e9adf2 Prevent View Preallocation (#45163)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45163

Avoid view preallocation when rendering on the main thread

Changelog: [Internal]

Reviewed By: rubennorte

Differential Revision: D58833983

fbshipit-source-id: a942d1fac684be5a8073941dbf043ba1d738e3a0
2024-07-02 14:16:32 -07:00
Joe Vilches d99960744c Inset box shadow impl (#45242)
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
2024-07-02 13:44:58 -07:00
Joe Vilches a3cf1624d0 Outset box shadow impl
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
2024-07-02 13:44:58 -07:00
Joe Vilches 24d7cc15db Parse raw box shadow props (#44882)
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
2024-07-02 13:44:58 -07:00
Christoph Purrer 3fc7ebb311 Don't include C++ bridging header in RCTTurboModule.h (#45251)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45251

https://github.com/facebook/react-native/pull/44914 is causing some iOS build breaks

## Changelog:

[iOS] [Changed] - Don't include C++ bridging header in RCTTurboModule.h

Reviewed By: cortinico

Differential Revision: D59280331

fbshipit-source-id: 489bc94ee0e5073129205370245c0093c0754f58
2024-07-02 11:26:11 -07:00
Wojciech Dróżdż 27ba369f23 Add onUserLeaveHint support to ReactActivityDelegate (#43658)
Summary:
**This is a resubmission of the previous PRs. We are trying to figure out why it causes crashes in some apps.**

This PR adds `onUserLeaveHint` support into the `ReactActivityDelegate`. It allows modules to receive an event every time user moves the app into the background. This is slightly different than `onPause` - it's called only when the user intentionally moves the app into the background, e.g. when receiving a call `onPause` should be called but `onUserLeaveHint` shouldn't.

This feature is especially useful for libraries implementing features like Picture in Picture (PiP), where using `onUserLeaveHint` is the [recommended way of auto-entering PiP](https://developer.android.com/develop/ui/views/picture-in-picture#:~:text=You%20might%20want%20to%20include%20logic%20that%20switches%20an%20activity%20into%20PiP%20mode%20instead%20of%20going%20into%20the%20background.%20For%20example%2C%20Google%20Maps%20switches%20to%20PiP%20mode%20if%20the%20user%20presses%20the%20home%20or%20recents%20button%20while%20the%20app%20is%20navigating.%20You%20can%20catch%20this%20case%20by%20overriding%20onUserLeaveHint()%3A) for android < 12.

## Changelog:

[ANDROID] [ADDED] - Added `onUserLeaveHint` support into `ReactActivityDelegate`

Pull Request resolved: https://github.com/facebook/react-native/pull/43658

Test Plan: Tested in the `rn-tester` app - callbacks are correctly called on both old and new architecture.

Reviewed By: javache

Differential Revision: D56015911

Pulled By: cortinico

fbshipit-source-id: fc41af30f697da6fe7db3dd6e579a702f90cf218
2024-07-02 10:43:29 -07:00
Rubén Norte e35a2f4a7c Set up experiment to fix incorrect state updates in smooth scroll animations on Android (#45237)
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
2024-07-02 07:58:37 -07:00
Rubén Norte 818e70f7eb Set up experiment to fix race conditions when doing Fabric state updates on Android (#45236)
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
2024-07-02 07:58:37 -07:00
Nicola Corti c25246044f Migrate test_js to GHA (#45246)
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
2024-07-02 05:17:33 -07:00
Nicola Corti 258ea84f46 Further refine the Gradle caching logic. (#45233)
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
2024-07-02 04:22:43 -07:00
Nicola Corti ffd0b39755 Changelog for 0.75.0-rc.3 (#45244)
Summary:
Just updating the changelog for 0.75.0-rc.3

## Changelog:

[INTERNAL] - Changelog for 0.75.0-rc.3

Pull Request resolved: https://github.com/facebook/react-native/pull/45244

Test Plan: NA

Reviewed By: rshest, blakef

Differential Revision: D59269046

Pulled By: cortinico

fbshipit-source-id: b5124c1574786d90c4bb65feb24328de86169718
2024-07-02 03:25:23 -07:00
Thibault Malbranche 7edc7169c7 chore: changelog for 0.74.3 (#45238)
Summary:
Adds changelog for the 0.74.3 patch.

## 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
-->

[Internal] [Changed] - Add 0.74.3 changelog

Pull Request resolved: https://github.com/facebook/react-native/pull/45238

Reviewed By: cortinico

Differential Revision: D59263876

Pulled By: dmytrorykun

fbshipit-source-id: 0f16d51a01790b4ddcaca092dec7527aab386dcd
2024-07-02 02:41:49 -07:00
Wojciech Lewicki 54dadd7bda fix: add JvmStatic to all methods used in cpp (#45243)
Summary:
Following-up on https://github.com/facebook/react-native/pull/45230, I added all the needed `JvmStatic` annotations for methods used in cpp code here: https://github.com/facebook/hermes/blob/f5c867514c71b25212eb3039230e0c095518b532/lib/Platform/Unicode/PlatformUnicodeJava.cpp.

## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID] [FIXED] - Use `JvmStatic` annotations for all methods from `AndroidUnicodeUtils.kt`

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[ANDROID] [FIXED] - Use `JvmStatic` annotations for all methods from `AndroidUnicodeUtils.kt`

Pull Request resolved: https://github.com/facebook/react-native/pull/45243

Test Plan: Try and use those methods to see that they don't crash on `cpp` side.

Reviewed By: cortinico

Differential Revision: D59264093

Pulled By: dmytrorykun

fbshipit-source-id: 07d683ee38ea1c7d9621ad2e37d04f3d484d3200
2024-07-02 02:40:49 -07:00
Christoph Purrer ad3df84668 Add EventEmitter Code-gen support for Java and ObjC Turbo Modules (#45119)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45119

## Changelog:

[iOS][Added] - Add EventEmitter Code-gen support for Java and ObjC Turbo Modules

Reviewed By: RSNara

Differential Revision: D58929417

fbshipit-source-id: 5208ba5ecb5882d47c3827c2aa8e3a54a3d7f2b6
2024-07-01 14:42:46 -07:00
Pieter De Baets 9d3052378a Revert D59107105: Merge newarchdefaults jni target into fabric and turbomodule targets
Differential Revision:
D59107105

Original commit changeset: fb3b25f3ce45

Original Phabricator Diff: D59107105

fbshipit-source-id: 2197d1deb79e7fc9b3ac7b0772225e13c23e0001
2024-07-01 12:47:24 -07:00
Christoph Purrer f473a2f8f4 Add ObjC Turbo Module Event Emitter example (#44914)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44914

Shows a proof of concept how '*strongly typed Turbo Module scoped*' `EventEmitters` can be used in a ObjC Turbo Module.

## Changelog:

[iOS] [Added] - Add ObjC Turbo Module Event Emitter example

Reviewed By: rshest

Differential Revision: D57650830

fbshipit-source-id: c5c2dee4766484e9e58415e33c084999a9ae3bc6
2024-07-01 09:36:51 -07:00
Pieter De Baets 8b121c5071 Use RAII for cleaning up global_refs in JavaTurboModule (#45218)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45218

Noticed that when an exception occurred we would not cleanup global_refs, leaking them in the global table.

Restructure this to use RAII and rely on JNIArgs to do the cleanup as necessary.

Changelog: [Android][Internal]

Reviewed By: RSNara

Differential Revision: D59156494

fbshipit-source-id: c89552d72387bad2a120373e78a2c545415a7c82
2024-07-01 09:16:25 -07:00
Pieter De Baets c68f35d444 Merge newarchdefaults jni target into fabric and turbomodule targets (#45207)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45207

These are their own shared library, and their own soloader-call, but they can easily be pulled into existing targets without causing excessive bloat.

Changelog: [Android][Removed] react_newarchdefaults is no longer a prefab, instead use fabricjni

Reviewed By: christophpurrer

Differential Revision: D59107105

fbshipit-source-id: fb3b25f3ce4511aa18126477f2beefe1292c6d09
2024-07-01 07:28:42 -07:00
Nicola Corti c911c89728 Setup git config --global --add safe.directory '*' when running jobs inside Docker (#45231)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45231

Following up to cipolleschi's work, it turns out that me setting this command inside
the docker file for React Android is unneffective:
https://github.com/react-native-community/docker-android/pull/228

The reason is that the user executing is different (1001 for the Dockerfile, while GHA executes as root 1000).
So we need to set this, otherwise the nightlies will be invoked with the `-TEMP` prefix:

Changelog:
[Internal] [Changed] - Setup `git config --global --add safe.directory '*'` when running jobs inside Docker

Reviewed By: blakef

Differential Revision: D59223862

fbshipit-source-id: 26674fc8cdaebf6687407072cc4e4f5c38246845
2024-07-01 06:28:51 -07:00
Pieter De Baets de7976c69d Remove unused hybrid class from DefaultComponentsRegistry (#45205)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45205

We only need a static register method, which includes the core components and the provider function. CoreComponentsRegistry isn't referenced at all in Kotlin/Java, and can be replaced with DefaultComponentsRegistry with no change in behaviour in all scenarios.

Changelog: [Android][Removed] CoreComponentsRegistry is now fully replaced by DefaultComponentRegistry.

Reviewed By: cortinico

Differential Revision: D59107106

fbshipit-source-id: e679be490f43dab52eb5e11a08aa9d0ae2a89a92
2024-07-01 05:20:31 -07:00