Commit Graph
1452 Commits
Author SHA1 Message Date
Ruslan Shestopalyuk db60eca6d0 Migrate react/devsupport/LogBox*.java to Kotlin (#43730)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43730

# Changelog:
[Internal] -

As in the title, converts corresponding type declarations in `react/devsupport/LogBox*.java` to Kotlin.

Reviewed By: NickGerleman

Differential Revision: D55574528

fbshipit-source-id: 56cf5de75d18cd73929cb7f0c9375a3f62e83574
2024-04-02 03:29:30 -07:00
Fabrizio Cucci d6fbc6b241 Kotlinify ViewDefaults (#43738)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43738

Changelog: [Internal]

As part of the Sustainability Week (see [post](https://fb.workplace.com/groups/251759413609061/permalink/742797531171911/)).

Reviewed By: rshest

Differential Revision: D55584737

fbshipit-source-id: 1b009ac9cc7f7670ee36d705d0439c0743bd5165
2024-04-02 02:47:48 -07:00
Nick Gerleman ac74bd8c64 Fix PixelUtil OSS Build failure (#43754)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43754

Moves off of deprecated `DisplayMetrics.scaledDensity` API to builtin font scaling API, while still clamping to max multiplier using previous logic.

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D55623674

fbshipit-source-id: 2668eea8dbd154cc046e2c515323ad66b289dc64
2024-04-02 01:52:39 -07:00
Ruslan Shestopalyuk 08f57473cc Convert react/uimanager/*Util.java -> Kotlin (#43729)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43729

# Changelog:
[Internal] -

As in the title, converts corresponding type declarations in `react/uimanager/*Util.kt` to Kotlin.

Reviewed By: tdn120

Differential Revision: D55574531

fbshipit-source-id: 974234bd57c77e863aa723388e48ffc455e73a96
2024-04-01 16:17:13 -07:00
Ruslan Shestopalyuk 287b5d697f LayoutAnimation types to Kotlin (#43728)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43728

# Changelog:
[Internal] -

As in the title, converts corresponding type declarations in `react/uimanager/layoutanimation/*Type.kt` to Kotlin.

Differential Revision: D55574530

fbshipit-source-id: 8527b5c9b491435c60ed9c05092ffeccd7552f9c
2024-04-01 12:37:48 -07:00
Ruslan Shestopalyuk 1e44cbe9f4 Migrate ErrorType.java to Kotlin (#43727)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43727

# Changelog:
[Internal] -

As in the title, converts this one particular Java file to Kotlin.

Reviewed By: arushikesarwani94

Differential Revision: D55574526

fbshipit-source-id: 04af5b870670a5560eaba7ab8c029c580032d09a
2024-04-01 12:37:48 -07:00
Ruslan Shestopalyuk 220588004b ImageResizeMethod/Mode to Kotlin (#43725)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43725

## Changelog:
[Internal] -

Converts `react/views/image/ImageResizeMethod.java` and `react/views/image/ImageResizeMode.java` to Kotlin.

Grouped together, as it kind of makes sense.

Reviewed By: fabriziocucci

Differential Revision: D55574319

fbshipit-source-id: 5fb47425e1eb0fca1e06527e16e994d659a749a8
2024-03-31 16:14:53 -07:00
Ramanpreet Nara fa4bfde630 Revert D55505416: Pull react instance method impls out of ReactContext
Differential Revision:
D55505416

Original commit changeset: ce1e3ab379eb

Original Phabricator Diff: D55505416

fbshipit-source-id: ae988ae3464f40923521922d4c3ac4a57846a3ef
2024-03-31 06:10:45 -07:00
Ramanpreet Nara 14fb1cc335 Pull react instance method impls out of ReactContext
Summary:
## Context
Prior, ReactContext used to implement bridge logic.

For bridgeless mode, we created BridgelessReactContext < ReactContext

## Problem

This could lead to failures: we could call bridge methods in bridgeless mode.

## Changes
Primary change:
- Make all the react instance methods inside ReactContext abstract.

Secondary changes: Implement react instance methods in concrete subclasses:
- **New:** BridgeReactContext: By delegating to CatalystInstance
- **New:** ThemedReactContext: By delegating to inner ReactContext
- **Unchanged:** BridgelessReactContext: By delegating to ReactHost

## Auxiliary changes
This fixes ThemedReactContext in bridgeless mode.

**Problem:** Prior, ThemedReactContext's react instance methods did not work in bridgeless mode: ThemedReactContext wasn't initialized in bridgeless mode, so all those methods had undefined behaviour.

**Solution:** ThemedReactContext now implements all react instance methods, by just forwarding to the initialized ReactContext it decorates (which has an instance).

Changelog: [Android][Removed] Delete ReactContext.initializeWithInstance(). ReactContext now no longer contains legacy react instance methods. Please use BridgeReactInstance instead.

 ---

Reviewed By: fkgozali

Differential Revision: D55505416

fbshipit-source-id: ce1e3ab379eb788d26130dd44a66544aada3db02
2024-03-30 16:53:30 -07:00
Viresh Umbre f7ec4694a6 Revert D53145010: Pull react instance method impls out of ReactContext
Differential Revision:
D53145010

Original commit changeset: 2405bc24afb0

Original Phabricator Diff: D53145010

fbshipit-source-id: 2d37cef8f6b6810f9b114ea633373668bcc805dc
2024-03-28 16:14:07 -07:00
Ramanpreet Nara f99dc486cd Pull react instance method impls out of ReactContext
Summary:
## Context
Prior, ReactContext used to implement bridge logic.

For bridgeless mode, we created BridgelessReactContext < ReactContext

## Problem

This could lead to failures: we could call bridge methods in bridgeless mode.

## Changes
Primary change:
- Make all the react instance methods inside ReactContext abstract.

Secondary changes: Implement react instance methods in concrete subclasses:
- **New:** BridgeReactContext: By delegating to CatalystInstance
- **New:** ThemedReactContext: By delegating to inner ReactContext
- **Unchanged:** BridgelessReactContext: By delegating to ReactHost

## Auxiliary changes
This fixes ThemedReactContext in bridgeless mode.

**Problem:** Prior, ThemedReactContext's react instance methods did not work in bridgeless mode: ThemedReactContext wasn't initialized in bridgeless mode, so all those methods had undefined behaviour.

**Solution:** ThemedReactContext now implements all react instance methods, by just forwarding to the initialized ReactContext it decorates (which has an instance).

Changelog: [Android][Removed] Delete ReactContext.initializeWithInstance(). ReactContext now no longer contains legacy react instance methods. Please use BridgeReactInstance instead.

Reviewed By: javache

Differential Revision: D53145010

fbshipit-source-id: 2405bc24afb00864117d3c504fc9c4cbffd7203a
2024-03-28 14:31:51 -07:00
Ruslan Lesiutin ad9368068a fix[android]: fix bridgeless configuration to include DebuggingOverlay in react packages (#43661)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43661

# Changelog: [Internal]

1. Remove `BridgelessDebugReactPackage.java`, this was added in D43407534. Technically, its the same as `DebugCorePackage.java`.
2. `ReactInstance` to add `DebugCorePackage`, so `DebuggingOverlay` view manager will be included in the bridgeless build.
3. Fix `RNTesterApplication.kt` to NOT create `MyLegacyViewManager` for every possible viewManagerName, apart from `"RNTMyNativeView"`, return null instead.

Reviewed By: cortinico

Differential Revision: D55375350

fbshipit-source-id: 1d3cb6b5ad3c0248df1def9f37c8c49b308f4473
2024-03-28 11:06:17 -07:00
Rubén Norte 3da58585d0 Include native module for DOM APIs by default in all apps using the new architecture (#43653)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43653

Changelog: [internal]

This will allow us to clean up some code in `UIManager` (using methods in the native module instead) and prepare to use the DOM APIs in OSS behind a feature flag.

This doesn't enable the DOM APIs in OSS, only the native module.

Reviewed By: javache

Differential Revision: D55365252

fbshipit-source-id: 70ec0eb022df586ad554c5b8ce6915b8ceddef5f
2024-03-28 08:06:41 -07:00
Arushi Kesarwani 41a966458c DisabledDevSupportManager -> ReleaseDevSupportManager (#43667)
Summary:
allow-large-files

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

Renaming `DisabledDevSupportManager` -> `ReleaseDevSupportManager` to avoid confusion since this is only initialized in Release variant
https://github.com/facebook/react-native/blob/bb02049a6af2c83c3fa633a5eb098bae1135b4a4/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java#L181-L187

Changelog:
[Internal] Internal

Reviewed By: fkgozali, cortinico

Differential Revision: D55388403

fbshipit-source-id: 984b54f1666ad39301cb94d2b8c19b7504c997f6
2024-03-28 05:46:41 -07:00
Pieter De Baets 59a43e6d5d Unbreak oss build due to explicit API mode (#43660)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43660

Changelog: [Internal]

Reviewed By: cortinico, fabriziocucci

Differential Revision: D55375856

fbshipit-source-id: d1df4965549069979410d8b07bb2518264238c8c
2024-03-27 05:50:47 -07:00
Arushi Kesarwani b282e87729 React-Native-Restart in release (#43645)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43645

https://github.com/facebook/react-native/pull/43521 & https://github.com/facebook/react-native/pull/43588 aimed to fix `react-native-restart`, however in release `handleReloadJS()` is a no-op in [DisabledDevSupportManager](https://github.com/facebook/react-native/blob/ac714b1c3300d3a169bdcfec05d556e18a7b83ff/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java#L139) which is why this should not work. Fixing it by relying on `ReactHostImpl.reload()` instead for Bridgeless.

Adding implementation of `DisabledDevSupportManager.handleReloadJS()` won't work as it would mean introducing circular dependency `devsupport` -> `runtime`

Reviewed By: cortinico

Differential Revision: D55342296

fbshipit-source-id: ee6fba68586a2bdd1163522f75e6beb1b7736f6c
2024-03-26 19:54:50 -07:00
Alex Hunt bfb0319ce0 Register CatalystInstanceImpl with modern CDP backend (2/2) (#43251)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43251

Integrates the modern CDP backend with `CatalystInstanceImpl` (the React Native instance implementation) on Android.

This complete the modern CDP integration for Bridge.

Changelog: [Internal]

Reviewed By: motiz88

Differential Revision: D51458010

fbshipit-source-id: 6f73868da9d0d4cc5d086a4569c78444cb1b83ec
2024-03-26 17:52:52 -07:00
Evert Eti b2ca41eef5 Fix possible deadlock in dispatchViewUpdates (#43643)
Summary:
In https://github.com/th3rdwave/react-native-safe-area-context/issues/448 it was noticed that from 0.72 (https://github.com/facebook/react-native/commit/bc766ec7f8b18ddc0ff72a2fff5783eeeff24857 https://github.com/facebook/react-native/pull/35889) it was possible to get a deadlock in dispatchViewUpdates. ([More details](https://github.com/th3rdwave/react-native-safe-area-context/issues/448#issuecomment-1871155936))

This deadlock resulted in a laggy experience for all users using https://github.com/th3rdwave/react-native-safe-area-context/ on Android.

To avoid this problem, the author of the original fix [proposed](https://github.com/th3rdwave/react-native-safe-area-context/issues/448#issuecomment-1872121172) this solution which was tested by Discord and many other users.

It would be great to have this backported to 0.72 and 0.73 because of the large userbase using react-native-safe-area-context since it's recommended by expo and react-navigation.

## Changelog:

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

Pick one each for the category and type tags:

[ANDROID] [FIXED] - Fixed possible deadlock in dispatchViewUpdates

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

[ANDROID] [FIXED] - Fixed possible deadlock in dispatchViewUpdates

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

Test Plan:
The original memory leak remains fixed, and can be verified in https://github.com/feiyin0719/RNMemoryLeakAndroid.

To verify the deadlock is gone, every app using https://github.com/th3rdwave/react-native-safe-area-context will work smoothly and not log any excessive `Timed out waiting for layout`
(https://github.com/17Amir17/SafeAreaContext)

Reviewed By: arushikesarwani94

Differential Revision: D55339059

Pulled By: zeyap

fbshipit-source-id: c067997364fbec734510ce99b9994e89d044384a
2024-03-26 15:48:19 -07:00
Nicola Corti bb02049a6a Fix header import inside ReactInstanceManagerInspectorTarget.h (#43657)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43657

This include is not correct and is breaking the OSS build

Changelog:
[Internal] [Changed] - Fix header import inside ReactInstanceManagerInspectorTarget.h

Reviewed By: rshest

Differential Revision: D55368321

fbshipit-source-id: 0530257ad5c548476beb882174d73842775b3726
2024-03-26 12:37:49 -07:00
Ramanpreet Nara e69f6755c8 Make ReactContext and ReactApplicationContext classes abstract (#43625)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43625

Changelog: [Android][Breaking] Make ReactApplicationContext and ReactContext abstract. Please instantiate BridgeReactContext instead (bridge mode). Or BridgelessReactContext instead (bridgeless mode).

Reviewed By: arushikesarwani94

Differential Revision: D55218590

fbshipit-source-id: d507cc47c67cb5cd6c548844c08aa9ed8fb74796
2024-03-26 07:15:29 -07:00
Ramanpreet Nara 8eb1bd1170 Scripted: Codemod ReactApplicationContext creators to BridgeReactContext (#43626)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43626

The things that create ReactApplicationContext should instead create BridgeReactContext.

Long-term, ReactApplicationContext will be abstract. This diff pulls noise out from that eventual diff.

Changelog: [Internal]

Reviewed By: arushikesarwani94

Differential Revision: D55218591

fbshipit-source-id: d359c794f3da4a1ecb2fa8edbed5eeeb620b137b
2024-03-26 07:15:29 -07:00
Ramanpreet Nara a984169c7d Manual: Codemod initializeWithInstance() callers to BridgeReactContext (#43627)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43627

Eventaully, ReactApplicationContext.initailizeWithInstance() will be moved to BridgeReactContext.

Doing the migration up-front to remove noise from the eventual diff.

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D55218593

fbshipit-source-id: c542c44cf8b36b9dc2a01db2bf6173639fb8698a
2024-03-26 07:15:29 -07:00
Ramanpreet Nara 6386988de1 Introduce BridgeReactContext < ReactApplicationContext (#43624)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43624

Eventually, we will move all bridge methods to BridgeReactContext.

Long-term, ReactApplicationContext and ReactContext will become abstract. And these two contexts will only contain methods common to both modes.

Changelog: [Android][Added] Introduce BridgeReactContext

Reviewed By: cortinico

Differential Revision: D55218592

fbshipit-source-id: 731d4940d492a1ed3f855c9a181d2a6f9eeb9623
2024-03-26 07:15:29 -07:00
Alex Hunt fcddb16bff Register ReactInstanceManager with modern CDP backend (1/2) (#43250)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43250

Integrates the modern CDP backend with `ReactInstanceManager` on Android.

`ReactInstanceManager` is equivalent to the CDP page / `HostTarget` concept, therefore we register the `addPage`/`removePage` calls with this object's lifecycle.

Implementation notes:
- `ReactInstanceManagerInspectorTarget` is created to avoid converting `ReactInstanceManager` to JNI (impacting tests).
- Its constructor receives a `TargetDelegate` object, so that we avoid passing the entire `ReactInstanceManager` class through (avoids cyclic dependency from `com.facebook.react.bridge` to `com.facebook.react`).

Changelog:
[Internal] - Register `ReactInstanceManager` with modern CDP backend

Reviewed By: motiz88

Differential Revision: D51456960

fbshipit-source-id: 942255bb2487fdc581eb4fa0903c8e68106f8b35
2024-03-26 06:23:32 -07:00
Pieter De Baets 6f956af121 Make UIConstantsProviderManager a static method (#43615)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43615

This class is used for a one-time setup of bindings into the jsi::Runtime. The lambda will retain ownership of any java components required, and we can rely on the teardown of the JS runtime to clean up any dependencies.

Changelog: [Internal]

Reviewed By: dmytrorykun

Differential Revision: D55241233

fbshipit-source-id: f7541f28277307be9b3a5f4f780c7eca1a467c57
2024-03-26 05:46:08 -07:00
Pieter De Baets 10000936b3 Fix retain cycle in UIConstantsProviderManager (#43614)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43614

Storing a global_ref to `jThis` in a JNI hybrid object leads to a reference cycle which cannot be cleaned up by Java GC. The Java object will keep the C++ object alive and vice versa.

In this class, we didn't seem to need this reference anyway.

Changelog: [Internal]

Reviewed By: dmytrorykun

Differential Revision: D55241232

fbshipit-source-id: 933521ed1483c149f693988ca17f4c53565dbfe0
2024-03-26 05:46:08 -07:00
Pieter De Baets 8270e7b110 Make ComponentNameResolverManager a static method (#43612)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43612

This class is used for a one-time setup of bindings into the jsi::Runtime. The lambda will retain ownership of any java components required, and we can rely on the teardown of the JS runtime to clean up any dependencies.

Changelog: [Internal]

Reviewed By: dmytrorykun

Differential Revision: D55241234

fbshipit-source-id: ee80ca0f91ebe95f8c44874b27912b260f70b572
2024-03-26 05:46:08 -07:00
Tomislav Novak 00725fadff Fix use-after-free in AsyncEventBeat (#43618)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43618

Both common and Android implementations of AsyncEventBeat use weak_ptrs
to determine if the object is still valid before invoking the callback.
Move the write to `isBeatCallbackScheduled_` down so it's protected by
that same check.

Changelog: [Internal]

Reviewed By: javache, NickGerleman

Differential Revision: D55226529

fbshipit-source-id: 9e2a34369346d11dcea69d120dfa5935320f9ba1
2024-03-25 17:07:53 -07:00
Rubén Norte 152f5f4a47 Back out "Add onUserLeaveHint support to ReactActivityDelegate #43488" (#43642)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43642

Changelog: [internal]

This change broke some apps at Meta. Reverting until we figure out a safe way to land this.

Reviewed By: rshest

Differential Revision: D55324557

fbshipit-source-id: 684d3dc3780fc41e2e91f367d97fa5cd392e6638
2024-03-25 12:26:55 -07:00
Rubén Norte f446cf6464 Enable synchronous state update dispatching behind a flag (#43580)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43580

Changelog: [internal]

This introduces a new feature flag to commit state updates synchronously from the UI thread (generally) instead of dispatching them to the JS thread to be processed there. We can do this now because we introduced a UI consistency mechanism in D55024832 to JS would see a consistent revision during the execution of a specific task.

Reviewed By: sammy-SC

Differential Revision: D55083029

fbshipit-source-id: 8aa84ddaee383f098252fa679cfb07012ba29bf8
2024-03-25 09:50:21 -07:00
Rubén Norte 67d6d09bce Implement UI consistency in DOM methods (#43577)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43577

Changelog: [Internal]

This updates all the DOM APIs in React Native (defined in the `NativeDOM` native module) to make use of the UI consistency mechanism introduced in Fabric (if available, otherwise the behavior is the same we have now — we consume the latest version of the tree available).

As part of that work, this creates a new `DOMMethods` class that implements all methods using purely C++ APIs (not JSI), moves a lot of logic that was specific for this functionality from `UIManager` to `DOMMethods` and modifies `NativeDOM` to use this new class.

This should make it easier to add unit tests for `DOMMethods` in the future.

Reviewed By: NickGerleman

Differential Revision: D55077311

fbshipit-source-id: f96bf5f3a97236fd24dbd2315256de4ce979e151
2024-03-25 09:50:21 -07:00
Rubén Norte 332355e80f Implement UI consistency mechanism for JS thread (#43581)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43581

Changelog: [internal]

This implements a mechanism to ensure that JavaScript tasks have a consistent view of the state of the UI during their execution.

## Context

Fabric allows committing new revisions of the ShadowTree from any thread, but we don't make use of this capability and instead always commit them from the JS thread (e.g.: when we schedule Fabric state updates to update the offset of a list on scroll). This was done to make sure that JS work didn't see changes in the state of the tree at random points during its execution. E.g.:

```
useEffect(() => {
  const rect = ref.current.getBoundingClientRect();
  // do something
  const newRect = ref.current.getBoundingClientRect();
  // `rect` and `newRect` should always be the same
}, []);
```

This isn't used by Reanimated at the moment, which means JS can inadvertently see the result of animations in non-specific times during execution.

You can find additional context about this in the [RFC for DOM Traversal & Layout APIs in RN](https://github.com/react-native-community/discussions-and-proposals/blob/main/proposals/0607-dom-traversal-and-layout-apis.md#consistency-and-updates).

This works correctly at the moment, but we introduce a limitation in the execution model to prevent updating the tree synchronously from the main thread. One of the main problems this introduces is that computing intersections (for `IntersectionObserver`) relies on the information in the shadow tree, but this is updated asynchronously on scroll.

There are 2 potential solutions for that problem:
1) Send the timestamp of the scroll even with the state update to backdate the timestamps of the intersections. This could work but introduces more complexity and possibly accuracy problems due to batching those state updates with other changes (e.g.: what happens if we update the state and commit another tree in the same task? should we use the backdated timestamp or wait for mount?).
2) (**Preferred**/ this diff) Allow committing new revisions from any thread, but lock the JS thread into seeing a specific revision, which would only update/progress in specific moments when it's safe. Some of those moments would be:
    1) When we start a new JS task.
    2) When we commit a new tree from React (JS).

## Changes

This implements the solution outlined in 2), creating a few abstractions to handle what's the current tree that should be visible to JS and to lock/unlock it in specific moments.

More specifically:
* Creates `ShadowTreeRevisionProvider` as an abstract class for APIs consuming the visible revision of the ShadowTree (mainly DOM APIs and layout methods like `measure`, etc.).
* Creates `ShadowTreeRevisionConsistencyManager` as an abstract class to handle what trees are visible (with a `lockRevision` and `unlockRevision` to be called from `RuntimeScheduler` at the beginning and end of each JS task).
* Creates 2 different implementations of these abstractions:
  * One that preserves the current behavior (`LatestShadowTreeRevisionProvider`, which just returns the last committed revision at the time of the call).
  * One that locks revisions lazily (the first time they're accessed) (`LazyShadowTreeRevisionConsistencyManager`).

Reviewed By: sammy-SC

Differential Revision: D55024832

fbshipit-source-id: b59985bc83714ae7ec915baba72bf92b3d6fa140
2024-03-25 09:50:21 -07:00
Pieter De Baets ee3d5f510c Fix retain cycle in ComponentNameResolverManager (#43611)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43611

Storing a global_ref to `jThis` in a JNI hybrid object leads to a reference cycle which cannot be cleaned up by Java GC. The Java object will keep the C++ object alive and vice versa.

In this class, we didn't seem to need this reference anyway.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D55240490

fbshipit-source-id: 9ba6f5b4b958cb273ad1923332b7b29a75630aea
2024-03-25 08:57:07 -07:00
Pieter De Baets 12d22e5ff1 Avoid global_ref to javaPart in TurboModuleManager (#43613)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43613

Storing a global_ref to `jThis` in a JNI hybrid object leads to a reference cycle which cannot be cleaned up by Java GC. The Java object will keep the C++ object alive and vice versa.

We can replace the reference in this class by using the this pointer passed in when `installJSIBindings` is invoked.

Changelog: [Internal]

Reviewed By: rshest

Differential Revision: D55241235

fbshipit-source-id: 64883752a87f363a52a9f6661d6ddaa24a56fe62
2024-03-25 07:46:45 -07:00
Jeff Bahr 4c8e253d83 Migrate google java format from 1.7 -> 1.21.0 (#42754)
Summary:
X-link: https://github.com/facebookexternal/OculusManufacturing/pull/524

X-link: https://github.com/facebookexternal/fbpay/pull/3

X-link: https://github.com/facebook/screenshot-tests-for-android/pull/324

X-link: https://github.com/pytorch/executorch/pull/1771

X-link: https://github.com/facebook/igl/pull/68

X-link: https://github.com/facebook/mariana-trench/pull/153

X-link: https://github.com/facebook/fresco/pull/2757

X-link: https://github.com/facebook/litho/pull/974

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

X-link: https://github.com/facebook/hhvm/pull/9431

X-link: https://github.com/WhatsApp/eqwalizer/pull/52

X-link: https://github.com/facebookincubator/spectrum/pull/1858

X-link: https://github.com/fbsamples/metapay/pull/1

X-link: https://github.com/facebookincubator/fbjni/pull/95

X-link: https://github.com/facebookincubator/Battery-Metrics/pull/30

X-link: https://github.com/facebook/ktfmt/pull/440

X-link: https://github.com/facebook/flipper/pull/5456

X-link: https://github.com/facebook/hermes/pull/1290

X-link: https://github.com/facebook/TextLayoutBuilder/pull/35

X-link: https://github.com/facebook/SoLoader/pull/122

allow-large-files

This diff migrates google java format form 1.7 to 1.21.0. This update will allow for new language features from java 17 and 21. This diff also formats all necessary files.

 Changelog:
    [Internal][Changed] - Updated format from google-java-format 1.7 -> 1.21.0

Reviewed By: IanChilds

Differential Revision: D52786052

fbshipit-source-id: b675ae215084f340b93dfe628e329e696ca0616e
2024-03-23 16:07:04 -07:00
Nicola Corti c835f91457 Fix build from source for hermes-engine (#43609)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43609

When users are building from source for React Native they don't have an ndkVersion variable specified. So we want to fallback to the global NDK version we set for the whole build here.

Changelog:
[Android] [Fixed] - Fix build from source for hermes-engine

Reviewed By: dmytrorykun

Differential Revision: D55240603

fbshipit-source-id: 3c725a164b40e176548af8ada9fcb13d391ef017
2024-03-22 05:35:46 -07:00
Gabriel Donadel 15a5638c62 Implement multiple view manager lookup for the interop layer on Android (#43595)
Summary:
When running with the new architurece and using the renderer interop layer on Android, view managers don't work if their names start with `RCT`. This happens because the `RCT` prefix is automatically removed from the component name, and inside the internal `mViewManagers` we store view managers with the `RCT` prefix.

Using the `RCT` pattern as a prefix works fine with the old architecture and is actually used on the [Android Native UI Components](https://reactnative.dev/docs/next/native-components-android) tutorial in the docs, making me believe that this same patterns is used across many community libraries.

This diff adds a secondary lookup logic for view managers:

1. We look for the XXXViewManager.
2. If not found, we look for RCTXXXViewManager.

Quite similar to the iOS implementation introduced in  https://github.com/facebook/react-native/pull/38093

 ---

With this change we can also remove most of the entries from FabricNameComponentMapping (I can address this in a follow up PR)

https://github.com/facebook/react-native/blob/4e6eba7a2dedaa855af0bff5df3bec73a95f0fc4/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/FabricNameComponentMapping.java#L22-L45

## Changelog:

[ANDROID] [ADDED] - Implement multiple view manager lookup for the interop layer

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

Test Plan:
Tested installing a library such as [react-native-fbsdk-next](https://github.com/thebergamo/react-native-fbsdk-next) that names its view managers starting with `RCT`

<table>
<tr>
  <th>Before</th>
  <th>After</th>
</tr>
<tr>
<td>
<img width="519" alt="image" src="https://github.com/facebook/react-native/assets/11707729/123de1d6-f018-424b-b6ce-38221af9d83e">
</td>
<td><img width="519" alt="image" src="https://github.com/facebook/react-native/assets/11707729/0f35b369-e2e4-4bbf-b880-6471fbc05d38">
</td>
</tr>
</table>

Reviewed By: cortinico

Differential Revision: D55208396

Pulled By: arushikesarwani94

fbshipit-source-id: a1fb1f4cee8483cf91ebededd1d7c4ba7021f9d9
2024-03-21 18:22:21 -07:00
Nicola Corti 24a3dade29 Fix InteropUIBlockListener to support react-native-view-shot on Bridgeless (#43594)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43594

I've been migrating `react-native-view-shot` to Fabric by using the `InteropUiBlockListener`
and I've realized that the interop layer doesn't work well.

1. FabricUIManager needs to implement `UIBlockViewResolver` in order for the interop layer to work correctly.
2. We need to hook `addUIBlock` to the `didDispatchMountItems` callback otherwise the UIBlocks won't be executed at all.

Changelog:
[Android] [Fixed] - Fix InteropUIBlockListener to support react-native-view-shot on Bridgeless

Reviewed By: javache

Differential Revision: D55187939

fbshipit-source-id: d048b4b5eed77fa856fdfac17c0df5f23fd44844
2024-03-21 16:18:28 -07:00
Nick Gerleman 7d180d7127 Fix Android HorizontalScrollView fling when content length less than ScrollView length (#43563)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43563

Fixes https://github.com/facebook/react-native/issues/42874

## Sumary

D9405703 added some custom logic for Flings, to support FlatList scenarios where content is being added on the fly, during Fling animation. This works by allowing start Fling to not have bounds, then correcting/cancelling Fling when overscroll happens over a bound that would normally be allowed.

This has some math to try to determine max content length, and will clamp to this when scrolling over it. This logic is incorrect when content length is less than scrollview length, and we end up snapping to a negative offset.

This change adds clamping, so that we don't snap to negative position in horizontal scroll view. This clamping was already indirectly present on vertical scroll view. https://www.internalfb.com/code/fbsource/[b43cdf9b2fec71f5341ec8ff2d47e28a066f052e]/xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java?lines=609

## Test Plan

Above issue no longer reproes. Flinging while content is being added to horizontal FlatList still works correctly.

Changelog:
[Android][Fixed] - Fix Android HorizontalScrollView fling when content length less than ScrollView length

Reviewed By: javache

Differential Revision: D55108818

fbshipit-source-id: 7cf0065f9f92832cc2606d1c7534fc150407b9c9
2024-03-21 12:55:51 -07:00
Jakub Piasecki 623bbe6bd6 Fix prefab header paths for rrc_text and rrc_textinput (#43591)
Summary:
- `rrc_textinput` at the moment points to a wrong subdirectory and needlessly adds a prefix path
- `rrc_text` is missing headers for `attributedstring` which it depends on

## Changelog:

[ANDROID] [FIXED] - Fixed prefab header paths for `rrc_text` and `rrc_textinput`

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

Reviewed By: fkgozali

Differential Revision: D55199580

Pulled By: cortinico

fbshipit-source-id: 85126c00943f82e908a52e05587661597761852e
2024-03-21 11:37:13 -07:00
Arushi Kesarwani 62ebe557b8 Expose ReactDelegate for react-native-restart (#43588)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43588

Supported `reload()` in Bridgeless through ReactDelegate in https://github.com/facebook/react-native/pull/43521 in order to unblock react-native-restart

https://github.com/avishayil/react-native-restart/blob/134cabd5b3f355ffe551e5dd1be1dd46d870fe13/android/src/main/java/com/reactnativerestart/RestartModule.java#L54

which can access React Delegate through :
```
if(currentActivity instanceof ReactActivity) {
    ReactActivity reactActivity = (ReactActivity) currentActivity;
    ReactDelegate reactDelegate = reactActivity.getReactDelegate();
    reactDelegate.reload()
}
```

Changelog:
[Android][Added] Expose ReactDelegate in ReactActivity

Reviewed By: cortinico

Differential Revision: D55166962

fbshipit-source-id: 5d8dfd7ad61edbcb5233014800eb66a538842ca5
2024-03-21 09:40:32 -07:00
Joe Vilches 21b008ed40 Convert FilterHelper.java to Kotlin (#43535)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43535

tsia

Changelog: [Internal]

Reviewed By: tdn120

Differential Revision: D54914028

fbshipit-source-id: 78d3dd20a8e98b4d4a2335b5542e4879a4cf3e41
2024-03-20 10:43:09 -07:00
Wojciech Dróżdż 6450d08187 Add onUserLeaveHint support to ReactActivityDelegate #43488 (#43567)
Summary:
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.

This is a re-submission of https://github.com/facebook/react-native/pull/42741 and https://github.com/facebook/react-native/pull/43488 without problematic asserts, which were unnecessary (`onUserLeaveHint` is not critical to the lifecycle of the app), but were causing problems in some apps.

## Changelog:

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

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

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

Reviewed By: javache

Differential Revision: D55123632

Pulled By: cortinico

fbshipit-source-id: 144a1d84b691af9cf3c0cffad446e674b4b68927
2024-03-20 09:19:35 -07:00
Arushi Kesarwani d97741af60 Support reload in ReactDelegate (#43521)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43521

Changelog:
[Android] [Added] - Support reload() in ReactDelegate

Reviewed By: cortinico

Differential Revision: D54967602

fbshipit-source-id: adfa200cabcbecf9507775ac38f17c9d01b2671a
2024-03-19 13:32:21 -07:00
Samuel Susla 7b85e2608b delete SynchronousEventBeat (#43553)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43553

changelog: [internal]

SynchronousEventBeat is not used, let's remove it.

Reviewed By: rubennorte

Differential Revision: D54746748

fbshipit-source-id: c8e16706ec56f0d49b4b848e1eb0a5ca36331da3
2024-03-19 13:27:11 -07:00
Bruce Mitchener ebd170bec3 Fix typos.
Summary:
This fixes a variety of spelling mistakes in file names, identifiers, and comments.

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

Reviewed By: NickGerleman

Differential Revision: D54987359

Pulled By: yungsters

fbshipit-source-id: 6b7ca20f4855f5f654036672bc10f8b079288acd
2024-03-19 02:52:40 -07:00
Arushi Kesarwani 6dd0cc99f8 Refactor ReactDelegate to provide DevSupportManager (#43520)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43520

Refactor ReactDelegate to have a private `getDevSupportManager()` that can also be re-used  by `reload()`

This method conditionally provides the correct DevSupportManager in cases of Bridge & Bridgeless

Changelog:
[Internal] internal

Reviewed By: cortinico

Differential Revision: D54967130

fbshipit-source-id: 37d585de33a50b98d01803d3080c5693a8c494b9
2024-03-18 11:54:03 -07:00
Pieter De Baets 6014dce04c Revert D54630694: Fix duplication across and rncore and FBReactNativeComponentSpec
Differential Revision:
D54630694

Original commit changeset: 75cb961ded9f

Original Phabricator Diff: D54630694

fbshipit-source-id: 50832c934e5bcc1a92456d949995c05a33767a92
2024-03-18 10:38:35 -07:00
Pieter De Baets ef77087293 Fix duplication across and rncore and FBReactNativeComponentSpec (#43385)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43385

`rncore` and `FBReactNativeComponentSpec` contain the same symbols, which leads to conflicts when we try to merge them into a single shared library. Cleanup the duplication and standardize on `FBReactNativeComponentSpec` everywhere. I've left the Android OSS targets as is, to avoid breaking deps.

Changelog: [Internal]

Reviewed By: cortinico, dmytrorykun

Differential Revision: D54630694

fbshipit-source-id: 75cb961ded9fd75508755c0530e29409fef801cf
2024-03-18 07:30:33 -07:00
Rubén Norte a2e22404fb Remove feature flag to skip mount hook notifications (#43504)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43504

Changelog: [internal]

We identified the issue in the experiments already, so we can remove this flag.

Reviewed By: sammy-SC

Differential Revision: D54945099

fbshipit-source-id: 4d547569eb3bbfd011f5d6894d87bfa542cac07b
2024-03-18 06:15:52 -07:00