Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38009
This diff reduces dependency of BridgelessReactContext to package only, this way we are removing BridgelessReactContext out of the Stable API, and app developers won't be able to access it directly.
changelog: [internal] internal
Reviewed By: cortinico
Differential Revision: D46410796
fbshipit-source-id: e887faecdc62b3109bdc7c9616821338e7b66136
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/37981
This diff introduces a the test ReactHost.testReload() to verify that reloading of react host works as expected
changelog: [internal] internal
Reviewed By: cortinico
Differential Revision: D46813814
fbshipit-source-id: 59e23e2f296c81b7ca3decb81e1f53b5871bbff4
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/37980
In this diff I'm fixing the ReactHostTest.testPreload test that was broken due to concurrency issues between a task submited in bolts that interacted with the UIThread and RobolectricTestRunner blocking on the UI Thread.
I created an utility method to wait for completion of the task
see: https://robolectric.org/blog/2019/06/04/paused-looper/
changelog: [internal] internal
Reviewed By: fkgozali
Differential Revision: D46812085
fbshipit-source-id: 1a8f9de8ef22071e708280720d0384b1562dd56b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/37982
ReactHostTest was disabled as part of D44729814, I'm re-enabling it as they pass locally
changelog: [internal] internal
Reviewed By: cortinico
Differential Revision: D46806278
fbshipit-source-id: 7fa530b4ea5bcacb72253218eded6f9a96e4cdf9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38070
changelog:
[iOS][fix]: Correctly invalidate NSTextStorage when non layout related props change
Fixes: https://github.com/facebook/react-native/issues/37944
Problem:
NSTextStorage was not invalidated if non-layout props were changed. So for example 'color' dynamically changed, it wouldn't get invalidated and font of incorrect color would be rendered on screen.
Reviewed By: javache
Differential Revision: D47019250
fbshipit-source-id: bd5d8e6ee4493791dedbafc64a8b8df48a5681e4
Summary:
We had to disable the envinfo command on test_windows to get the CI back to green.
The reason why it started failing is because they released 7.9.0 which does not seem to have the executable on Windows, so `npx` fails to find what to run.
This fix restore the command in a way that it should display the envinfo using an older version of the package. I also added a task to come back to this periodically.
## Changelog:
[Internal] - Restore envinfo on windows
Pull Request resolved: https://github.com/facebook/react-native/pull/38062
Test Plan: - CircleCI: test_windows stays green
Reviewed By: cortinico
Differential Revision: D47016995
Pulled By: cipolleschi
fbshipit-source-id: 368367caed7ea49d7419475580a39f9406c54757
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38042
Follow-up cleanup from D34379950, now that fbjni has been upgraded. Also synced the internal and external build flags.
Changelog: [Internal]
Reviewed By: cortinico
Differential Revision: D46975010
fbshipit-source-id: 7d2fd215b68bcebbf259e23923fb3fec1ca09f8a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38063
I'm cleaning up the ReactApplication code a bit to use a property with custom setter
Moreover I'm also removing the JvmDefault annotation as that is unnecessary as we use
the `-Xjvm-default=all`, plus is deprecated and will be removed soon by Kotlin.
Changelog:
[Internal] [Changed] - Remove unnecessary JvmDefault
Reviewed By: javache
Differential Revision: D47016727
fbshipit-source-id: 8ab1325c6a9d1db2f8290fb89b766e3d93674b0d
Summary:
`testID` which is a valid prop for `<Text>` is also found in the types for `TextStyle`. This pull request removes said property from the styles.
## Changelog:
General Fixed - Remove testID from TextStyle types
Pull Request resolved: https://github.com/facebook/react-native/pull/38053
Test Plan:
```tsx
const styles = StyleSheet.create({
view: {
testID: 'should-error-in-typescript-but-does-not'
}
})
```
`TextStyle` is used to type the `StyleSheet` along with `ViewStyle` and `ImageStyle` which do not contain `testID`.
```tsx
const MyText = <Text testID="already-typed-fine">Hello</Text>
```
`testID` is used to identify components with the mentioned prop. This works for `Text` and will continue to do so, `TextProps` has `testID` added specifically. When using `getByTestId` in jest adding testID to the style already has no effect.
When adding `testID` to a style a warning will already be shown in development: Warning: Failed prop type: Invalid props.style key `testID` supplied to `Text`.
Reviewed By: javache
Differential Revision: D47006787
Pulled By: NickGerleman
fbshipit-source-id: 6993579ee9c173677594f8f3aea499ac8d8ab232
Summary:
Adding Expensify to the React Native incubating partners list
## 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] - Adding Expensify to the React Native incubating partners list
Pull Request resolved: https://github.com/facebook/react-native/pull/37497
Test Plan: N/A - Just documentation update
Reviewed By: TheSavior
Differential Revision: D47002327
Pulled By: rickhanlonii
fbshipit-source-id: 39adf1e519e32aaf911baacb78a5549109d4c0c0
Summary:
`test_windows` are failing in CI. This change should fix them for the time being while we investigate further
## Changelog:
[internal] - Fix test_windows removing `npx envinfo`
Pull Request resolved: https://github.com/facebook/react-native/pull/38050
Test Plan: circleci should be green
Reviewed By: mdvacca
Differential Revision: D46999794
Pulled By: cipolleschi
fbshipit-source-id: c6e4020ec530d95a5ce6c3b5e70f596b12d23f7e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38038
Changelog: [Internal]
Also un-deprecating the constructors of other Guarded runnables, as an extension of D46685374
Reviewed By: rshest
Differential Revision: D46971220
fbshipit-source-id: cf982f7efe9bcd1ddb7285aa35d836b7c57c4d24
Summary:
## Overview
This PR updates the ECOSYSTEM.md with more information for how to apply to be a partner, and includes an update to the joining process including a 3 month incubation period.
It also emphasizes that being a partner is a commitment of resources to improve React Native, and not a status symbol.
Changelog: internal
Pull Request resolved: https://github.com/facebook/react-native/pull/37689
Reviewed By: lunaleaps, cortinico
Differential Revision: D46941950
Pulled By: rickhanlonii
fbshipit-source-id: 254b0927d5e57a5169c52ea7ac5eaff1d064ab2b
Summary:
When a new version of `fbjni` is released, we can simplify `getName` and `getMessage` calls on throwables.
## Changelog:
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[ANDROID] [CHANGED] - Use new `getCanonicalName` and `getMessage` methods exposed by `fbjni`
Pull Request resolved: https://github.com/facebook/react-native/pull/37879
Test Plan: https://github.com/facebookincubator/fbjni/pull/78
Reviewed By: cortinico
Differential Revision: D46966561
Pulled By: javache
fbshipit-source-id: f30720a30146cf8fe5125336435a1512063c253d
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38029
# Changelog:
[Internal] -
A trivial fix - I was looking into some deeper issues with `Image.prefetch`, noticed that code docs were copypasted and incorrect.
Reviewed By: cipolleschi
Differential Revision: D46959350
fbshipit-source-id: 4e4196f9399d91402d9b206c20f2bbd0d1d0eb2a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/37863
This creates 2 examples for IntersectionObserver in RNTester:
* The first example is just a copy of the example provided by MDN in the documentation page for `IntersectionObserver` (https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API). This example is useful to show how React Native behaves the same way with the same code.
* The second example is a "stress test" for the API: a screen with 500 simultaneous node being observed at the same time with different observers. As we compute the intersections after scroll (after "mounting" the state update with the updated scroll position) in the main thread, this highlights a possible impact on scroll performance.
IntersectionObserver isn't yet enabled by default, so no need to add a changelog entry about this. We'll add one when the API becomes generally available.
Changelog: [Internal]
Reviewed By: rshest
Differential Revision: D45736845
fbshipit-source-id: 40b6bce39f90e04653504b1033a4edfaa65e93ca
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/37853
This adds a basic implementation of `IntersectionObserver`. This will not be available yet and is only compatible with the new React Native architecture. This shouldn't show up in the changelog until we're ready to enable this in some form.
Changelog: [Internal]
## Context
This implements a basic version of the `IntersectionObserver` API (as defined on the Web) for React Native.
The motivation for this is supporting several use cases that are not possible in React Native at the moment, most importantly:
* Tracking paint times for elements in the screen.
* Tracking precise visibility of elements in the screen outside the context of a `VirtualizedList` (with an even better precision and control).
## Implementation details
This API is implemented as a native module that registers a mount hook in Fabric. Whenever there's a mount (an update to the UI of the host platform) we check for intersections in the shadow tree. The shadow tree contains information about the representation of the UI in a given time (including scroll position), which we use as source of truth for this in a cross-platform fashion. We rely on the fact that scroll position is updated regularly in the shadow tree to provide an up-to-date view into the UI.
**This implementation is completely cross-platform.** The only platform-specific part is the report of mounts in mount hooks from the host platform to Fabric.
This API uses a centralized entity in JS and native to handle registration of observers and dispatch of notifications. The dispatch the notifications for all observers in the same callback so we can easily change the sequencing of events easily (for example, we can change this to use microtasks when they're available in RN).
## Known limitations
* Timestamps are generally accurate for paint (as we report mounts right after they happen in the host platform), but **state updates (like scroll) are reported with a slight delay**.
* In regular rendering, we first update the shadow tree and then mount it (paint), which is generally precise. In state updates, the UI is updated first and then the shadow tree is updated. In this case, we're not correctly reporting the timestamp of the scroll event (which we should be using) but the timestamp of when the update is processed. We'll fix this in a following diff.
* The IntersectionObserver API has a concept of initial notification. This is a mechanism to report the initial state of an observed target. If we start observing a target when it's added to the tree but before it's painted, this initial notification is supposed to provide initial paint time (which is important for performance measurements). This implements some logic to handle that correctly (we check if there is a pending transaction) but it's currently unreliable:
* React Native does not currently block paint on microtasks or layout effects, so setting up an observer in these stages could have race conditions with actual mount. If mount happens before the observation is started, the initial notification doesn't report initial time but observation time. If mount happens after, the initial notification should be fine (except in some cases on Android, see the next point).
* On Android, we have a push model to send mutations to the host platform, we means we consume transactions after commit, not immediately before mount. This breaks this logic and we need to figure out a solution in a following diff.
----
Reviewed By: sammy-SC, rshest
Differential Revision: D45278720
fbshipit-source-id: de350388c6325128f1cf73328779a9d3577a258a
Summary:
Follow up to:
- https://github.com/facebook/react-native/pull/37960
## Changelog:
[INTERNAL] - Update NativeAnimatedNodeTraversalTest to be more idiomatic
Pull Request resolved: https://github.com/facebook/react-native/pull/37970
Test Plan: Will run on CI
Reviewed By: javache, cipolleschi
Differential Revision: D46853581
Pulled By: cortinico
fbshipit-source-id: 73776493163413b045482344b7b1be0635f5aa25
Summary:
I faced an issue that on Android the whole UI would freeze when using minimumFontScale. This is caused by an int cast that turns the while loop into an endless loop.
Also the docs are not correct since they say it is an iOS only prop.
https://reactnative.dev/docs/text#minimumfontscale-ios
## Changelog:
[ANDROID] [FIXED] - UI freezing when using minimumFontScale
Pull Request resolved: https://github.com/facebook/react-native/pull/38016
Test Plan:
Run this sample app with and without this fix. https://github.com/g4rb4g3/androidMinimumFontScaleBug
Without the ui will freeze when hitting the + button, with the fix a Text component will be shown and no freeze will happen. 🙂
Reviewed By: cipolleschi
Differential Revision: D46931439
Pulled By: NickGerleman
fbshipit-source-id: 6985443b3424539b40bc0081fe742ab59105a2ae
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/38026
In this diff I'm moving the initialization of "rninstance" so as soon as the class is loaded
The goal is to ensure so is loaded earlier and prevent issues like T156403678
changelog: [internal] internal
Reviewed By: luluwu2032
Differential Revision: D46945464
fbshipit-source-id: f4d68574030ca3bda5d55fe3a9c1630a4879f3ab
Summary:
This would cause an UnsupportedOperationException in java and thus result in a white screen.
The root cause is that ```mDelegate.getReactPackages()``` returns a non-resizable list so we wrap it to a resizable list in this diff.
Created from CodeHub with https://fburl.com/edit-in-codehub
Reviewed By: cortinico, adanoff
Differential Revision: D46943066
fbshipit-source-id: 27fcb78610aea0c8cb98d6ead4d0e1603a767e6e