Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46965
Converting this class as close to 1:1 as possible.
Changelog: [Internal]
Reviewed By: NickGerleman, rshest
Differential Revision: D64124890
fbshipit-source-id: 2034ed8ecb877bb267a953b183b77daaf883a80a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46964
Graceful degradation is better than outright crashing. When rendering images that exceed Android's memory limits, React Native applications will fatally crash. This change intervenes by swallowing the exception that Android raises and forwards it to the `onError` handler. As a result, no image will be rendered instead of fatally crashing.
Fresco already intervenes by default. It will raise a `PoolSizeViolationException` if the bitmap size exceeds memory limits set by the OS and applies a 2048 pixel maximum dimension to JPEG images, but it's still possible for these configuration limits to be removed and for images to fall just short of Fresco's memory limit. The exception is raised when we attempt to draw the bitmap, not when the bitmap is allocated in memory, so we must handle the exception here and not in Fresco.
## Changelog
[Android][Fixed] - Apps will no longer fatally crash when trying to draw large images
Reviewed By: tdn120
Differential Revision: D64144596
fbshipit-source-id: 32b69ad4ecef0564c2cad7a287a31b56688f38b8
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46981
changelog: [internal]
stateUpdate with closure syntax has to be used in order to not override contentSize stored inside of C++ state.
Reviewed By: jessebwr
Differential Revision: D64242221
fbshipit-source-id: 32d55ccc03e32922f2746293ccb6c0941ca67d92
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46961
Changelog: [Internal]
Runtime Shadow Node Reference Syncing causes asserts when updating the shadow tree without passing through the JS-thread. This diff disables the feature by default to avoid the asserts encountered on RN Windows.
Reviewed By: sammy-SC
Differential Revision: D64188839
fbshipit-source-id: eb65206662d842f8150f1771c86dc8d190cbc3aa
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46955
This is a major bump of Kotlin. It comes with no breaking changes for the Kotlin API, but there are several new warnigns that I had to fix.
Most importantly several `override` methods that are overriding Deprecated API, also need to be deprecated as well in Kotlin.
Changelog:
[Android] [Changed] - Bump Kotlin 1.9.x to 2.0.x
Reviewed By: tdn120
Differential Revision: D64179842
fbshipit-source-id: 295ab2636ce9f9bb04e9d8c7ed27d9f8a1a64338
Summary:
This change move E2E tests to larger mac machines to see if we can reduce the flakyness.
Most of the time the flakyness is due to slowness in connecting to the simulator or slowness in Metro to provide the bundle to RNTester when we run the tests in Debug.
More power should speed-up those processes.
E2E tests took < 30 min in this diff
on Main, they took > 120 min
## Changelog:
[Internal] - Move the E2E tests to bigger machines
Pull Request resolved: https://github.com/facebook/react-native/pull/46960
Test Plan: GHA
Reviewed By: blakef
Differential Revision: D64237659
Pulled By: cipolleschi
fbshipit-source-id: c2458413c8de70c07fae8f2b5f202371c6293815
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46958
This will make it easier to link against custom C++ TM which will most likely live inside ./shared or
some other paths outside of ./android.
CMake will have access to `PROJECT_ROOT_DIR` which points to ./android (the folder where the settings.gradle file exists).
Changelog:
[Internal] [Changed] - RNGP - Pass PROJECT_ROOT_DIR to CMake
Reviewed By: cipolleschi
Differential Revision: D64183641
fbshipit-source-id: 347256c04f10e92cf5a13e9c70db16aa29bcb741
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46936
Let's enable box-shadow everywhere! This should be safe, now that we assume any background mutating methods in BaseViewManager go through BackgroundStyleApplicator. `boxShadow` is also already in `BaseViewConfig` instead of configs for each native component (bc we were already planning to make this change).
Changelog:
[Android][Added] - Add boxShadow support to BaseViewManager
Reviewed By: mdvacca
Differential Revision: D64140841
fbshipit-source-id: e937a4bcaa4506fd25d0916633313083c7e49333
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46934
BaseViewManagerDelegate is a handcrafted second source of truth, used specifically for codegen.
The organization here has some problems, but this diff adds the props currently missing from it, so that these work correctly in generated view managers.
Changelog:
[Android][Fixed] - Add missing BaseViewManager props to BaseViewManagerDelegate
Reviewed By: mdvacca
Differential Revision: D64137615
fbshipit-source-id: 4ff85f2524e5472f3b768e212fd5f2d4d9a36e17
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46932
In the old error handling pipeline, when the app [assigns an object to error[ExceptionsManager.decoratedExtraDataKey]](https://fburl.com/code/9t9u8rgv)
```
const error = new Error('Some error happened');
// Annotates the error with some custom extra data.
error[ExceptionsManager.decoratedExtraDataKey] = {foo: 'bar'};
ExceptionsManager.handleException(error, true);
```
That object [gets forwarded as extraData](https://fburl.com/code/gy7v173u) to ExceptionsManager.
This diff implements that functionality within the c++ earlyjs pipeline.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D63927091
fbshipit-source-id: ac88bf3e545714aa42531e8e1365e2eba32a7c2b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46935
Now, whenever the earlyjs c++ pipeline handles an error, it'll invoke callbacks registered via javascript.
## The API
```
if (global.RN$registerExceptionListener != null) {
global.RN$registerExceptionListener(
(error: ExtendedExceptionData & {preventDefault: () => mixed}) => {
error.preventDefault();
// show logbox
},
);
}
```
## The Future API
We want something more aligned with the HTML spec:
```
addEventListener('error', (event) => {
event.preventDefault();
// show logbox
});
```
## Fatals vs soft errors
The earlyjs pipeline covers just main bundle execution for now.
So, it displays logbox only if there was a soft error. If there was a fatal error, it'll just continue to display redbox as usual.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D63769385
fbshipit-source-id: 9c01e1cfe0ec80842af2e5bcfbf0adfb040dbcf3
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46895
For the js error handling pipeline, the javascript data structure looks like [this](https://www.internalfb.com/code/fbsource/[6181b57f4ba3619f58056bcec65382650d6ff59a]/xplat/js/react-native-github/packages/react-native/src/private/specs/modules/NativeExceptionsManager.js?lines=17-35):
```
export type StackFrame = {|
column: ?number,
file: ?string,
lineNumber: ?number,
methodName: string,
collapse?: boolean,
|};
export type ExceptionData = {
message: string,
originalMessage: ?string,
name: ?string,
componentStack: ?string,
stack: Array<StackFrame>,
id: number,
isFatal: boolean,
// flowlint-next-line unclear-type:off
extraData?: Object,
...
};
```
So, I made the c++ data structure look similar
```
struct ParsedError {
struct StackFrame {
std::optional<std::string> file;
std::string methodName;
std::optional<int> lineNumber;
std::optional<int> column;
};
std::string message;
std::optional<std::string> originalMessage;
std::optional<std::string> name;
std::optional<std::string> componentStack;
std::vector<StackFrame> stack;
int id;
bool isFatal;
jsi::Object extraData;
};
```
Notes:
* [parseErrorStack](https://fburl.com/code/e27q9gkc) doesn't actually generate a collapse property on the error object. So, I omitted it from the c++.
* ExceptionsManager [always provides an extraData field](https://fburl.com/code/2bvcsxac). So, I made it required.
* In C++, I just stored extraData as a jsi::Object. I wanted the freedom to store arbitrary key/value pairs. But, I also didn't want to use folly::dynamic.
Changelog: [Internal]
Reviewed By: alanleedev
Differential Revision: D63929580
fbshipit-source-id: 51d8fcc79c9383789d456cfe4527cdd3f579395f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46872
This can now be flow typed as a union because the codegen supports it.
Changelog: [Internal]
Reviewed By: yungsters
Differential Revision: D63681874
fbshipit-source-id: 97783df5ae71292dd10602dee0bea39743e62234
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46959
This method was deprecated in: b8893c7003
since React Native 0.72.
I verified that no-one is using it in OSS so I'm removing it.
This is necessary as I'll need to refactor the BridgelessDevSupportManager a bit.
Changelog:
[Android] [Breaking] - Remove Deprecated DefaultDevSupportManagerFactory.create()
Reviewed By: javache
Differential Revision: D64184635
fbshipit-source-id: a4081b2189d2e22cd9b2067f982a6ffd4f8b054e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46956
isHighlighted/isPressable/selection color are the same as the native default, there's no need to send these in our props payload needlessly.
Changelog: [Internal]
Reviewed By: rshest
Differential Revision: D64179256
fbshipit-source-id: 22e62c8d440d3bd219a79f445e49739c24fa5d52
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46898
Replaces *many* `Text` component usages with `RNTesterText`: a thin wrapper around `Text` that applies color based on the color scheme chosen by the user. It makes text legible for dark mode across 41 different example files. This changes intentionally do not touch a few larger component sites that expand beyond RNTester, like `Animated` and `NewAppScreen`
Changelog: [Internal]
Reviewed By: rshest
Differential Revision: D64053464
fbshipit-source-id: 9516fef2afe1b364eb38e85e3a2dbb5c434e44db
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46949
# Changelog:
[Internal] -
This adds an (optional) event start time field into RawEvent, so that it can be threaded by the platform-specific code to tell where is the earliest point of the event start (depending on the platform).
For example, on Android platform it can be the point of time when the original MotionEvent was received.
Reviewed By: rubennorte
Differential Revision: D64175467
fbshipit-source-id: 535c95c695713dbbed74c554bceb70fa5e511d6a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46929
Got this error on Marketplace Home when I tried on the iOS 18 simulator:
```
Cannot read property 'stack' of null
if (rejection.stack && ...
```
This indicated `rejection` was null.
Fixed by adding an extra null check there.
Changelog:
[iOS][Fixed] Fixed crash on promise rejection handler in iOS 18.
Differential Revision: D64116020
fbshipit-source-id: 4198748b47d27c6def9957ff475ee780962d3baa
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46933
Some small tweaks to either resolve or better log clipping-related crashes in ReactViewGroup
Changelog: [Internal]
Reviewed By: sammy-SC
Differential Revision: D63914809
fbshipit-source-id: cf8bfd260c6affb85b8e1ac13447ae9f01d19135
Summary:
On Android, when `ReactEditText` is attached to window, `setTextIsSelectable` moves the caret to the beginning, so we need to restore the selection.
This is similar to what we did in https://github.com/facebook/react-native/pull/17851.
Fixes https://github.com/facebook/react-native/issues/46943
## Changelog:
[ANDROID] [FIXED] - Fix TextInput caret moving to the beginning when attached to window
Pull Request resolved: https://github.com/facebook/react-native/pull/46948
Test Plan:
Code to reproduce in RNTester:
```TSX
import type {RNTesterModuleExample} from '../../types/RNTesterTypes';
import {TextInput} from 'react-native';
import {useEffect, useRef} from 'react';
function Playground() {
const input = useRef(null);
useEffect(() => { setTimeout(() => input.current?.focus(), 1000); }, []);
return <TextInput ref={input} value='1.00' selection={{start: 4, end: 4}} />;
}
export default ({
title: 'Playground',
name: 'playground',
render: (): React.Node => <Playground />,
}: RNTesterModuleExample);
```
Before | After
-- | --
 | 
Reviewed By: cortinico
Differential Revision: D64175774
Pulled By: rshest
fbshipit-source-id: ef9fdbecca582c8075bcdfd2d9b810b04d87e3d9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46931
Prepare for deletion of this deprecated type that contain support for string ref in the next flow release.
Changelog: [Internal]
Reviewed By: rshest
Differential Revision: D64127228
fbshipit-source-id: 9d3a1c0e6303efb35a540349fdc8e42b7b70be8b
Summary:
This PR follows up with the deprecation introduced here: https://github.com/facebook/react-native/pull/46228
The idea is to have new architecture depend on one flag, namely `newArchEnabled`. It exposes additional initializers for RCTRootViewFactory.
## Changelog:
[IOS] [CHANGED] - Use `newArchEnabled` flag in RCTAppDelegate and RCTRootViewFactory
Pull Request resolved: https://github.com/facebook/react-native/pull/46652
Test Plan: CI Green
Reviewed By: javache
Differential Revision: D64173015
Pulled By: cipolleschi
fbshipit-source-id: 49474baf5415a2527e481a5d68ec94ae874185e6
Summary:
There is a numerical issue that causes vertical scroll view to be considered as the horizontal one and leads to problems described [here](https://github.com/facebook/react-native/issues/46592). The problem is no longer visible after checking if the scroll view is horizontal with float equality.
~~I am not sure if it also happens on Android, so I am leaving it as a draft for now.~~
Fixes https://github.com/facebook/react-native/issues/46592
## Changelog:
[IOS] [FIXED] - check if scroll view is horizontal with float equality.
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[IOS] [FIXED] - fixed scroll view
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
Pull Request resolved: https://github.com/facebook/react-native/pull/46836
Test Plan: Tested on the repro provided in the above issue.
Reviewed By: rshest
Differential Revision: D64114476
Pulled By: cortinico
fbshipit-source-id: a5048e1403c4bb675d32928937d6411cfb12fd51