Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55103
This diff decouples AnimationBackend from Animated. Now the backend is intialized in the Scheduler, from where it's passed to UIManager. Animation frontends (such as Animated) can then obtain a reference to the backend, and use it to schedule animation frame updates.
# Changelog
[General] [Changed] - Moved AnimationBackend initiailzation to `Scheduler`
[General] [Added] - `AnimationChoreographer` interface with an implementation for fantom tests
Reviewed By: zeyap
Differential Revision: D89663251
fbshipit-source-id: 428a83d78ef92a89095989fe3121c578cf8d3983
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55056
Refactors InspectorPackagerConnectionTest.cpp to extract the test fixtures into a separate header file. This allows us to split `InspectorPackagerConnectionTest.cpp` into multiple files as we add more test cases, which is particularly helpful for LLMs writing tests.
Changelog: [Internal]
Reviewed By: robhogan
Differential Revision: D90174645
fbshipit-source-id: aa2c2a706391060660adb13a915b57bcea539e2d
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55233
X-link: https://github.com/facebook/metro/pull/1640
Re-sync Flow Babel types with the latest version from npm to unbreak no-lockfile CI.
Metro only: Also `yarn-deduplicate` other deps
Changelog: [Internal]
Reviewed By: vzaidman
Differential Revision: D90986684
fbshipit-source-id: 332acd66c2ca1b3396388b383f1c940b19b899ce
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55232
Changelog: [Internal]
As suggested by cipolleschi, this is a more stable solution given that the workflow has been consistently failing for the past couple of RCs.
Reviewed By: cipolleschi
Differential Revision: D90992194
fbshipit-source-id: 7586a4bf141a875b2d780d1a359e79fc42c9ffda
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55224
Changelog: [Internal]
D90772188 changed the behavior of views with `pointerEvents="box-only"` to prevent them from being collapsed/flattened. This is intentional because when `important_for_interaction` is applied on a view with `pointerEvents='box-only'`, the view must remain in the hierarchy to correctly signal to the gaze system that its children are not important for interaction.
The test expected the old behavior where `<View pointerEvents="box-only" />` would be collapsed and render `null`. After the C++ change, views with `pointerEvents="box-only"` now always form a stacking context and are not collapsed.
Updated the test to expect the new behavior where `pointerEvents="box-only"` causes views to unflatten, consistent with how `pointerEvents="none"` behaves.
Reviewed By: rubennorte
Differential Revision: D90984297
fbshipit-source-id: 799e4e26b29126386f4fd8183e2ce0b5cb719f9f
Summary:
This is a fix for a regression in https://github.com/facebook/react-native/issues/54948 found by Kudo. Passing an absolute path for `react_native_path` was non-functional before and the change was meant to fix this.
This however used `Pathname.pwd.join(path)` since I assumed that'd be the intention for a relative path. However, my assumption was that `pod install` would only ever be run in the installation root and hence be equivalent to `Pod::Config.instance.installation_root` most of the time.
This broke: `pod install --project-directory ios` (and the likes), since I wasn't aware of the `--project-directory` argument before.
To fix this, we should construct the absolute path and join from `Pod::Config.instance.installation_root` as well.
**Note to self:** Needs a pick into `0.84.0` due to being a regression (will file a pick request after this is merged)
## Changelog:
[IOS] [FIXED] Regression from https://github.com/facebook/react-native/issues/54948 preventing `pod install --project-directory` from working properly
Pull Request resolved: https://github.com/facebook/react-native/pull/55204
Test Plan: - Run `pod install` in `rn-tester` to validate
Reviewed By: vzaidman
Differential Revision: D90870064
Pulled By: cipolleschi
fbshipit-source-id: 4a7bc0320afda29373791f206b31e57ae48b0b8c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55186
This is an AI-assisted change to align the Flow definitions for the `child_process` module with the Node.js docs as at v24.
**New v18+ Features:**
1. **AbortSignal Support** (v18.0.0) - Process cancellation
- Added `signal?: AbortSignal` option to all async functions (exec, execFile, fork, spawn)
- Enables cancellation of child processes using `AbortController`
- Example: `const controller = new AbortController(); spawn('cmd', [], {signal: controller.signal}); controller.abort();`
- https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback
2. **Enhanced Process Properties** (v20.x)
- `spawnargs: Array<string>` - Full command-line arguments used to launch the process
- `spawnfile: string` - Executable file name of the child process
- `signalCode: string | null` - Signal that terminated the child process
- https://nodejs.org/api/child_process.html#subprocessspawnargs
**ChildProcess Class Updates:**
3. **Improved Property Types**
- `stdio` is now a properly typed tuple array with readonly modifier
- `channel` changed from `Object` to `mixed` for better type safety
4. **Enhanced Method Signatures**
- `kill(signal?: string | number): boolean` - Now returns boolean and accepts numeric signals
- `send()` overloads properly typed with `child_process$Serializable` messages
- `send()` accepts `keepOpen` option: `Readonly<{keepOpen?: boolean}>`
- https://nodejs.org/api/child_process.html#subprocesskillsignal
**Option Type Improvements:**
6. **Modern Readonly Syntax** - All input options use `Readonly<{...}>`
- `execOpts`, `execFileOpts`, `forkOpts`, `spawnOpts`, `spawnSyncOpts`, etc.
- Allows passing readonly types safely
7. **Enhanced Environment Variables**
- Changed `env?: Object` to `env?: {[key: string]: string | void}`
- More precise typing for environment variable dictionaries
8. **New Fork Options** (IPC enhancements)
- `serialization?: 'json' | 'advanced'` - IPC serialization format
- `killSignal` and `timeout` options added to fork
- https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options
9. **Enhanced Spawn Options**
- Added `killSignal`, `timeout`, `serialization` to `spawnOpts`
- Better consistency across all spawn functions
**Return Type Fixes:**
10. **spawnRet/spawnSyncRet** - Made fields properly nullable:
- `status: number | null` - null if process never exited
- `signal: string | null` - null if not terminated by signal
- `error: Error | void` - void if no error occurred
- Removed spread operator for exact types
**Helper Types:**
11. **`child_process$Serializable`** - Union type for IPC messages:
- `string | number | boolean | bigint | {...} | Array<mixed>`
- Used in send() method signatures
12. **`child_process$SendHandle`** - Type for handle passing:
- `net$Server | net$Socket`
- Used for passing server/socket handles to child processes
**References:**
- Node.js child_process module docs: https://nodejs.org/api/child_process.html
- AbortSignal integration: https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback
Changelog: [Internal]
---
> Generated by [Confucius Code Assist (CCA)](https://www.internalfb.com/wiki/Confucius/Analect/Shared_Analects/Confucius_Code_Assist_(CCA)/)
[Confucius Session](https://www.internalfb.com/confucius?host=devvm45708.cln0.facebook.com&port=8086&tab=Chat&session_id=1a3aa26e-e5a9-11f0-8d47-71a4a90f0494&entry_name=Code+Assist), [Trace](https://www.internalfb.com/confucius?session_id=1a3aa26e-e5a9-11f0-8d47-71a4a90f0494&tab=Trace)
Reviewed By: vzaidman
Differential Revision: D89944331
fbshipit-source-id: 744ae04051c2214d97269c48c115060f5f30fb1f
Summary:
During an upgrade of ReactNative and switching to new arch, we noticed that Android is ignoring *some* fontVariants. Specifically `stylistic-{num}`. Digging further I noticed that there are `stylistic-{num}` mappings added to `fromRawValue` (in `packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h`), but are not included for `toMapBuffer`
## 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] - fontVariants `stylistic-{num}` not being propagated correctly
Pull Request resolved: https://github.com/facebook/react-native/pull/55183
Test Plan:
- Added a new free font (FiraCode) that has stylistic features.
- Added Text examples for Android showing with and without stylistic features
Before and after in order:
<img width="1080" height="2400" alt="Before" src="https://github.com/user-attachments/assets/3d21a992-f36a-4ffe-a1b2-8da40b3ee399" />
<img width="1080" height="2400" alt="After" src="https://github.com/user-attachments/assets/f4ee208a-3f98-42d9-b8c2-5b122d2db383" />
Reviewed By: cortinico
Differential Revision: D90830140
Pulled By: philIip
fbshipit-source-id: 42dbb98641274c0d4c01c501662b2ae59e21927d
Summary:
This PR adds a new Android-specific boolean property `scrollsChildToFocus` to the ScrollView component.
When a focusable element inside a ScrollView receives focus (e.g., a TextInput is tapped), Android's default behavior is to automatically scroll the ScrollView to bring that element into view. While this is often desirable, there are cases where developers need more control over scroll behavior - for example, when implementing custom scroll-to-focus animations, when using virtualized lists that manage their own scroll positions, or when focus changes should not disturb the current scroll position.
Setting `scrollsChildToFocus={false}` disables this automatic scrolling behavior, giving developers full control over scroll positioning when focus changes.
**Related issues:**
- https://github.com/facebook/react-native/issues/33419
- https://github.com/LegendApp/legend-list/issues/377
## Changelog:
[ANDROID] [ADDED] - Add `scrollsChildToFocus` prop to ScrollView to control automatic scrolling when a child receives focus
Pull Request resolved: https://github.com/facebook/react-native/pull/55143
Test Plan:
1. Run the RN Tester app on Android
2. Navigate to ScrollView examples
3. Find the new "scrollsChildToFocus" example in the Android-specific section
4. With `scrollsChildToFocus: true` (default):
- Tap on a TextInput that is partially visible
- Observe that the ScrollView automatically scrolls to bring the TextInput into view
5. Toggle `scrollsChildToFocus` to `false`:
- Tap on a TextInput that is partially visible
- Observe that the ScrollView does NOT automatically scroll - the focus changes but scroll position remains unchanged
This property affects both vertical (`<ScrollView />`) and horizontal (`<ScrollView horizontal={true} />`) scroll views.
Reviewed By: javache
Differential Revision: D90831796
Pulled By: philIip
fbshipit-source-id: 31193b45127bbac4b984452e2b56211a46616c8b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55196
SurfaceTouch and SurfacePointer handlers use a lot of unsupported UIKit APIs. Instead of granuarly wrapping the UIKit usage, this minimally removes the handlers from AppleTV all-together, as they no-op anyways (there is no click-through support on simulator.)
Changelog: [Internal]
Reviewed By: Abbondanzo
Differential Revision: D90704270
fbshipit-source-id: 83d0c2f6f0efec3f9a46d5bcfc4a83f6765574cd
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55192
Making `ReactSwipeRefreshLayout` open so one can subclass with a custom implementation
Changelog: [Internal]
Reviewed By: joevilches
Differential Revision: D90789479
fbshipit-source-id: 6b8d7212140170a73e71a1eb529d8d3fffc098e3
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55209
## Changelog:
[Android] [Changed] - Log error when unsupported type is passed to interpolation outputRange
Add error logging when unsupported value types (like PlatformColor) are passed to interpolation outputRange. This prevents a ClassCastException crash by detecting non-Number types and logging an error instead.
Reviewed By: javache
Differential Revision: D90863942
fbshipit-source-id: d6a3b2dbde859ae86a1bc4a5dfcc33a9ee369dd1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55189
If nested scrolling is not enabled by default for ScrollView that define a `RefreshControl`, the wrapping Android view `ReactSwipeRefreshLayout` will swallow and discard non-touch scroll actions, like joystick movements. This change updates the default to be true, a more-sane default, which aligns with the existing touch actions that are always allowed. This does not impact touch-based behavior at all.
Changelog: [Android][Changed] Updated the `nestedScrollEnabled` prop to default to true if the ScrollView defines a `refreshControl`
Reviewed By: javache
Differential Revision: D90778643
fbshipit-source-id: 37693e80fc7c8b3461dc3d5cad51690e0ff77a77
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55185
Changelog: [Internal]
This change ensures that views with `pointerEvents` set to `'box-only'` are not collapsed, preserving the parent-children relationship in the view hierarchy.
This is necessary because when `important_for_interaction` is applied on a view with `pointerEvents='box-only'`, the view must remain in the hierarchy to correctly signal to the gaze system that its children are not important for interaction. Without this fix, the view could be collapsed during flattening, breaking the propagation of the `important_for_interaction` property to descendant views.
Reviewed By: javache
Differential Revision: D90772188
fbshipit-source-id: 6a6a408845ebd1f86e420f5309160e7a6b3a9715
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55194
Reverts https://github.com/facebook/react-native/pull/55097
Original Phabricator Diff: D90209679
Reverting this behavior and feature flag as the experiment that used it is no longer needed
Changelog: [Internal]
Reviewed By: cortinico
Differential Revision: D90791564
fbshipit-source-id: 362399c435a0c5addba5734e333bc2c1747f7293
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55202
Changelog: [Internal]
After changing Hermes V1 to be the default engine, Fantom tests started failing. This was due to a combination of changes, one of them being the change of default value for `HERMES_ENABLE_DEBUGGER`. In case of legacy Hermes it was enabled by default, while for Hermes V1 it's disabled by default.
Fantom didn't explicitly set this flag, but the debug build of RN (which Fantom performs) requires it to be enabled. This diff explicitly sets this flag to true for Fantom builds.
Reviewed By: cipolleschi, cortinico
Differential Revision: D90849881
fbshipit-source-id: 17f8393872eacef26f927f50aaf364644d9b94d7
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55157
Changelog: [Internal]
At the moment, Fantom doesn't propagate the Hermes V1 opt-in to the React Native build, which causes the code that should be gated by compile-time flags to be compiled. Since Hermes V1 differs in some cases, the headers there are missing.
This diff adds the opt-in propagation, so the code can be correctly compiled out.
Reviewed By: cortinico
Differential Revision: D90674696
fbshipit-source-id: d2adb131af4588e745c023703a893d0ecaaaee01
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55033
This has been fully rolled out now, the feature flag can be removed.
Changelog: [Internal]
Reviewed By: cortinico
Differential Revision: D90106435
fbshipit-source-id: 0ddb5b93cc33f6fa3099ca14a3961f2b8a6344e6
Summary:
Issue: https://github.com/facebook/react-native/issues/55104
## Changelog:
[GENERAL] [CHANGED] - `cancelAnimationFrame`, `clearImmediate`, `clearTimeout` and `clearInterval` do nothing If there is no callback associated the given handle
Pull Request resolved: https://github.com/facebook/react-native/pull/55126
Test Plan:
The next code should not throw any errors (runtime and TS)
```tsx
const id1 = requestAnimationFrame(()=> {});
cancelAnimationFrame(id1);
cancelAnimationFrame(id1); // clear twice the same id
cancelAnimationFrame(-1);
cancelAnimationFrame(null);
cancelAnimationFrame(undefined);
const id2 = setImmediate(()=> {});
clearImmediate(id2);
clearImmediate(id2); // clear twice the same id
clearImmediate(-1);
clearImmediate(null);
clearImmediate(undefined);
const id3 = setTimeout(()=> {}, 1000);
clearTimeout(id3);
clearTimeout(id3); // clear twice the same id
clearTimeout(-1);
clearTimeout(null);
clearTimeout(undefined);
const id4 = setInterval(()=> {}, 1000);
clearInterval(id4);
clearInterval(id4); // clear twice the same id
clearInterval(-1);
clearInterval(null);
clearInterval(undefined);
```
Reviewed By: cortinico
Differential Revision: D90615301
Pulled By: philIip
fbshipit-source-id: e5102a137bac6492d0f89bb02ef11eeca9977a9b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55193
React no longer emits the "Warning: " prefix from error messages, so we no longer need special handling for error messages with this prefix.
If third party call sites are depending on `console.error('Warning: …')` being treated as a warning, they should be migrated to use `console.warn('…')`.
Changelog:
[General][Changed] - Logs created by `console.error` that begin with "Warning: " will no longer be treated as warnings. These call sites should migrate to using `console.warn` instead.
Reviewed By: javache, robhogan
Differential Revision: D90795590
fbshipit-source-id: 1b51ab63fd02cead4da33c64040c88aac50abbfb
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55190
Makes `EventEmitter` (and the related `IEventEmitter` interface type) available as part of React Native's Public API.
This allows product logic using React Native to also leverage the same abstraction. Currently, code outside of React Native that wants to use `EventEmitter` must resort to deep imports (which is discouraged).
Changelog:
[General][Added] - Added `EventEmitter` to `react-native` exports.
Reviewed By: huntie
Differential Revision: D90786781
fbshipit-source-id: ad06124c96fcba35b8b5fc8170bfb15c17884a0a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55181
Changelog: [Internal]
This change makes `ImportantForInteractionHelper` internal to avoid exposing it as part of the public API. The class is moved from `com.facebook.react.uimanager` to `com.facebook.react.views.view` package since it's only used by `ReactViewGroup` and `ReactViewManager` within that package.
This reduces the public API surface of ReactAndroid and keeps implementation details private.
Reviewed By: cortinico
Differential Revision: D90767295
fbshipit-source-id: 0c763f20330c516c0647c92c8bd53320865a1f63
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55180
Changelog: [internal]
Fantom tests are currently failing because the binary is failing to compile because `AnimatedPropsBuilder` isn't defined in `NativeAnimatedNodesManager`. This fixes that.
Reviewed By: zeyap
Differential Revision: D90762526
fbshipit-source-id: bd4d24b872fa554b08af9c8ea6b1b65a505d525a
Summary:
We released Hermes V1 250829098.0.6 and this change aligns React Native to that version
## Changelog:
[General][Changed] - Make React Native consume 250829098.0.6
Pull Request resolved: https://github.com/facebook/react-native/pull/55164
Test Plan: GHA
Reviewed By: cipolleschi
Differential Revision: D90710397
Pulled By: philIip
fbshipit-source-id: 4502301c2f25165d5cd4d4294f8da0c60d48ba73
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55168
Changelog: [Internal]
This diff introduces `ImportantForInteractionHelper`, a helper class that manages the `important_for_interaction` view tag. This tag determines how a view participates in interaction handling based on its `pointerEvents` value.
The helper provides a mapping from `PointerEvents` to `important_for_interaction` values:
- `AUTO` → `YES` (0x1)
- `NONE` → `NO | EXCLUDE_DESCENDANTS` (0x2 | 0x8)
- `BOX_ONLY` → `YES | EXCLUDE_DESCENDANTS` (0x1 | 0x8)
- `BOX_NONE` → `NO` (0x2)
This allows interaction detection systems to understand which views should participate in interaction handling based on their pointer events configuration, which is useful for features like Gaze-based interaction in accessibility and UI harvesting.
See design doc: https://docs.google.com/document/d/15Fi47zOHQh--KFWLUxQAUmBENgnZ0ZkYsKyOshPzBAo/edit?tab=t.0#heading=h.61xuoxksjdrp
Changes:
- Added `ImportantForInteractionHelper.kt` with constants and `setImportantForInteraction()` method
- Added `important_for_interaction` tag ID to `ids.xml`
- Updated `ReactViewManager.setPointerEvents()` to set the tag when pointer events change
- Updated `ReactViewGroup.initView()` to set the default tag value based on initial `PointerEvents.AUTO`
- Updated `BaseViewManager.prepareToRecycleView()` to clear the tag when recycling views
Reviewed By: javache, mdvacca
Differential Revision: D90386675
fbshipit-source-id: f0dab0111f2f5d14d5cb17769578804e2ddcbfe9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55114
Our official [docs](https://reactnative.dev/docs/set-up-your-environment#node--watchman) require:
> Node 20.19.4 or newer
Currently, our `package.json#engines` fields express this as `"node": ">= 20.19.4"`
This is a bit imprecise because of Node's overlapping release lines - e.g. v24.0.0 is actually older than v20.19.4 (2025-07-15), and the whole v21 line was already EOL before v20.19.4.
The release *date* is relevant because Node.js frequently backports the most important updates - notably, `require(esm)` is already stable in Node 20.19 but is not unflagged in v22 until v22.12.
This makes the `package.json#engines` requirement truer to the documented requirement, dropping some old minors and EOL majors that prevent us using features included in v20.19.
Notably, `require(esm)` is stable and unflagged on all versions supported from this diff.
- v21 and v23 are EOL, so are dropped.
- v22.13 pre-dates 20.19.4 and is the first to have unflagged silent `require(esm)`
- v24.3.0 pre-dates 20.19.4 and is the first to unflag TS-stripping
- Support v25 and newer.
Changelog:
[General][Breaking] Drop support for EOL Node.js lines and old minors.
Reviewed By: cortinico, huntie
Differential Revision: D90467358
fbshipit-source-id: a5fdfb1b93a9d6cffe78eb6811ff7420ab906f44
Summary:
> [!NOTE]
> This is a bit of a speculative fix that's based on trying to get a bare project with `react-native-macos` to link directly against it in an isolated installation, which makes passing `path` set to `require.resolve('react-native-macos/package.json')` more convenient than constructing a relative path first.
The `path` argument in `react_native_pods.rb` is not resolved but instead later joined using `File.join(relative_path_from_current, path)`. This doesn't actually resolve the path, meaning, if `path` is absolute it's appended to this first relative path.
Instead, we should use `Pathname#join` and join the path to the pathname, guaranteeing it to be absolute, then construct relative paths (for the prefix) using `relative_path_from` against the installation root.
If we don't do this, the absolute path gets treated as a relative path (e.g. `./Users`), which leads to errors such as:
> [!] Invalid Podfile file: Couldn't find the React Native package.json file at ./Users/phil/git/expo/expo-pnpm/packages/expo/package.json.
Since absolute paths are unambiguous the change should be safe.
## Changelog:
[IOS][Fixed] - Allow absolute react-native paths to be passed to `use_react_native!` in project podfiles
Pull Request resolved: https://github.com/facebook/react-native/pull/54948
Test Plan:
This can be replicated by replacing `path` in the `use_react_native` call with an absolute resolution and running `pod install` after, for example:
```rb
use_react_native!(
:path => File.dirname(`node --print "require.resolve('react-native/package.json')"`),
:hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/..",
)
```
Usually, the `path` argument gets resolved from the react-native-config via `config[:reactNativePath]`. However, this makes the implicit assumption that `use_native_modules!` has already converted this to a relative path.
Reviewed By: cortinico, vzaidman
Differential Revision: D90261384
Pulled By: cipolleschi
fbshipit-source-id: fb7482a2f5adb8452a1c300d7a26b22129e4171a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55135
Resolves a rare native iOS ImageResponseObserverCoordinator crash that would result from a use-after-free in the observer.
## Changelog:
[iOS] [Fixed] - Resolves a rare race-condition that can trigger in RCTImageComponentView.
## Original Error
EXC_BAD_ACCESS / KERN_INVALID_ADDRESS in ImageResponseObserverCoordinator::nativeImageResponseProgress
Reviewed By: fkgozali, javache
Differential Revision: D90552795
fbshipit-source-id: 30f62b151664161c408667d27c7bb6b69ee2bd67
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/55097
This change adds support for joystick and scrollwheel input devices to trigger pull-to-refresh in SwipeRefreshLayout.
Previously, `ACTION_SCROLL` events from non-touch input devices (joysticks, scrollwheels, etc.) were not being forwarded to child views wrapped in a SwipeRefreshLayout. This prevented child ScrollViews from receiving these events and handling pull-to-refresh gestures via nested scrolling.
The fix overrides `dispatchGenericMotionEvent` in ReactSwipeRefreshLayout to explicitly forward `ACTION_SCROLL` events to the first child view before falling back to the default behavior. This allows child views to process the scroll events and communicate with the SwipeRefreshLayout parent through the standard nested scrolling APIs.
Changelog: [Internal]
Reviewed By: mdvacca, javache
Differential Revision: D90209679
fbshipit-source-id: 48ce2f961b8bfe548f3b29f073ab99b1da19915d