Commit Graph

38536 Commits

Author SHA1 Message Date
Valentin Shergin 6ffc93d657 Fabric: Use ShadowNode::sameFamily instead of getTag() to check for same family
Summary:
We used to use `getTag` to check that some two nodes are clones of each other, not we have a dedicated method for that that exactly ensures that without reling  on a sideeffect (wich tag equality is).
That is just much less error-prone.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D18231006

fbshipit-source-id: 6b247ed0eaded1fed8fd7fa820e80cd58602110c
2019-10-31 09:38:39 -07:00
Eli White c5980a4b0f Move ReactNativeTypes-flowtest.js out of the Renderer folder
Summary:
The renderer folder gets replaced by react syncs but we don't want to lose this flow test. It would make sense to move this file into the React repo as it is trying to test `ReactNativeTypes.js` which lives there. However, the React repo is on Flow 0.72 which apparently doesn't catch this issue.

Changelog: [Internal]

(Note: this ignores all push blocking failures!)

Reviewed By: gaearon

Differential Revision: D18231354

fbshipit-source-id: 69f4617899c06118c74a8991f061e3bb3fdc88fb
2019-10-30 14:35:02 -07:00
Peter Argany 2a13f12106 Re-implement reload reason [7/n]
Summary:
This diff adds back RN reload reason, which was removed earlier in the stack. cc/Rick

For callsites which already had a reason, I kept the string exactly the same. For callsites which didn't have a reason, I made up something reasonable.

Changelog: [Internal][Fixed] Re-implemented bridge reload reason text.

Reviewed By: RSNara

Differential Revision: D18074478

fbshipit-source-id: 64a3cd7718674a7ba7228a80e34791ce9f153f9f
2019-10-30 12:23:25 -07:00
Peter Argany 5ca0df64a1 Deprecate RCTBridgeWillReloadNotification [3/n]
Summary:
`RCTBridgeWillReloadNotification` has one job: whenever bridge reloads - trigger a reload in `RCTSurfacePresenter`.

Diff 1/2 deprecated bridge reloading APIs, and replaced them with `RCTReloadCommand`. Use that in `RCTSurfacePresenter` instead .

Changelog: [iOS][Deprecate] Deprecate RCTBridgeWillReloadNotification

Reviewed By: shergin

Differential Revision: D17880926

fbshipit-source-id: 00adc4d56d11d40ab371d81bb17a05609c184769
2019-10-30 12:23:24 -07:00
Peter Argany d98cd7d3a1 Migrate bridge reload to RCTReloadCommand [2/n]
Summary:
Motivation described in diff 1/N.

This diff replaces calls to `[bridge reload]` with calls to `RCTReloadCommand`. This shouldn't have any change in behaviour since RCTBridge listens to RCTReloadCommand and calls `[bridge reload]` [here](https://fburl.com/diffusion/kemzkrei).

It will allow us to customize who listens and reacts to RN lifecycle.

Changelog: [Internal][Changed] - Migrated [bridge reload] calls to RCTReloadCommand

Reviewed By: shergin

Differential Revision: D17880909

fbshipit-source-id: 80b26c6badd4b216656fed6dd04554e9877f4bb7
2019-10-30 12:23:24 -07:00
Peter Argany ffe2306164 Deprecate bridge reload API [1/n]
Summary:
Testing the waters with an idea for unifying RN lifecycle with/without bridge.

### Motivation/Background

RN bridge is being reloaded from [several different places](https://fburl.com/codesearch/ae3zeatt). When this happens, the bridge does a bunch of things:
1. Post `RCTBridgeWillReloadNotification` (RCTSurfacePresenter listens to this and reloads)
2. Invalidate batched bridge, which does:
    a. invalidate display link
    b. post `RCTBridgeWillInvalidateModules/RCTBridgeDidInvalidateModules` (TurboModuleManager listens to this and reloads modules)
    c. clear js thread state
    d. clear some local caches
3. Set up (reload bundle and batched bridge)

In a bridgeless world, there isn't one thing which owns all these peices of infra, and can reload them.

### Plan

Use `RCTReloadCommand` to handle reloads. This light class previously only handled CMD+R. The new workflow looks like this:
1. Anything which cares about reloads can register itself as a listener. (RCTBridge, RCTSurfacePresenter, TurboModuleManager...)
2. Anything that previously called `bridge reload` now calls `RCTTriggerReloadCommandListeners`.
3. Delete old notifications

### Alternate Plan

Use yet another NSNotification. I like `RCTReloadCommand` better.

### Unknowns

Looks like we log the reason for bridge reloading [here](https://fburl.com/diffusion/lc9jj8la), do we want to save this behaviour? Does anyone look at why bridge is being reloaded cc/Rick? If so, I can add back that functionality to `RCTReloadCommand`.

It should be possible to customize the order/priority of what gets reloaded first. There may be some racy behaviour that I haven't thought about yet.

Changelog: [iOS][Deprecated] Deprecate [bridge reload] API - prefer RCTReloadCommand

Reviewed By: shergin

Differential Revision: D17869635

fbshipit-source-id: 81f39eaa2c3ce08ea1bc6f2193684c2630d81a2d
2019-10-30 12:23:24 -07:00
Andrew Monshizadeh 35b8b06db9 Fix unrecognized selector for iOS 9
Summary:
Refresh control is only available in iOS 10+

> https://developer.apple.com/documentation/uikit/uiscrollview/2127691-refreshcontrol?language=objc

changelog: Fix crash in RCTPullToRefreshViewComponentView on iOS 10

Reviewed By: sammy-SC

Differential Revision: D18201528

fbshipit-source-id: 0dd3dad7cabe08589a597039c1dae44da868e1e5
2019-10-30 11:23:58 -07:00
Mike Grabowski 2c7a907b08 Update integration snapshots (#27059)
Summary:
This commit https://github.com/facebook/react-native/commit/a397d330a4cf7e08095faa0e751e38d5106ed5c7 changes colors in the RNTester slightly and makes snapshots to fail.

I have re-generated them and made sure it was just the background color (and few other minor gray shades) that were different.

I haven't spotted any other visual changes.
Pull Request resolved: https://github.com/facebook/react-native/pull/27059

Differential Revision: D18223898

Pulled By: cpojer

fbshipit-source-id: ccc269bba0023233bc27254bd1a6bc0fb09a390a
2019-10-30 11:04:53 -07:00
Adam Foxman fe9cba74fa Expose [RCTBundleURLProvider isPackagerRunning] publicly (#27012)
Summary:
The private API isPackagerRunning is useful. Rather than duplicating it, I am exposing it here so that I can make use of it in future PRs, and so others can do the same.

## Changelog

[iOS] [Changed] - Expose the isPackagerRunning methods on RCTBundleURLProvider
Pull Request resolved: https://github.com/facebook/react-native/pull/27012

Test Plan: This change doesn't impact any runtime code, though it does impact build. I used a vanilla test app (react-native init) and built it using xcode as well as react-native run-ios.

Differential Revision: D18174316

Pulled By: cpojer

fbshipit-source-id: 523d134882303f68a1f69521e31f29d7dbfb666c
2019-10-30 08:36:45 -07:00
dr2009 af8ea06bb4 Add WebSocket to eslint globals (#27044)
Summary:
WebSocket is giving an error by eslint. ('WebSocket is not defined').

[websocket-support](https://facebook.github.io/react-native/docs/network#websocket-support)

## Changelog
[General] [Fixed] - Add WebSocket to eslint globals
Pull Request resolved: https://github.com/facebook/react-native/pull/27044

Test Plan: Run eslint on a react native project using WebSocket. Eslint verification should pass.

Differential Revision: D18223891

Pulled By: cpojer

fbshipit-source-id: c4adfde07078133930aa0ed80be5615d128f4148
2019-10-30 08:32:52 -07:00
Ramanpreet Nara cb1171b37a Update iOS Simulator OS version to 12.4
Summary:
It looks like Sandcastle is now using version iOS v12.4 for the iOS simulator. This is causing `test-react-native-oss-ios-legocastle.sh` to fail. See [this build failure](https://our.intern.facebook.com/intern/sandcastle/job/31525197549441452/).

```
Failure Found: react-native-oss-ios - Test: Run RNTesterPods Integration Tests
stdout:
User defaults from command line:
    IDETestRunOnlyIdentifiers = (
    RNTesterUnitTests
)
    IDETestRunSkipIdentifiers = (
    "RNTesterIntegrationTests/RNTesterSnapshotTests",
    "RNTesterIntegrationTests/RNTesterIntegrationTests/testWebSocketTest"
)
Build settings from command line:
    RN_BUNDLE_PREFIX = react-native-github/
    SDKROOT = iphonesimulator12.4
stderr:
xcodebuild: error: Unable to find a destination matching the provided destination specifier:
		{ platform:iOS Simulator, OS:12.2, name:iPhone 6s }
	The requested device could not be found because no available devices matched the request.
	Available destinations for the "RNTester" scheme:
		{ platform:iOS Simulator, id:5E437CA6-5FB6-4AB3-BF7B-F04B2BEACE3A, OS:12.4, name:iPad (5th generation) }
		{ platform:iOS Simulator, id:054F7E3D-F1BC-48BF-8C0E-FD047CD8145D, OS:12.4, name:iPad (6th generation) }
		{ platform:iOS Simulator, id:FF1DE07E-6DB8-43DB-AF89-A788054639EB, OS:12.4, name:iPad Air }
		{ platform:iOS Simulator, id:257E7F9D-436C-4D3F-934F-AF87C3FD9C57, OS:12.4, name:iPad Air (3rd generation) }
		{ platform:iOS Simulator, id:8CA6B68A-A191-406A-B75C-6EA61762E503, OS:12.4, name:iPad Air 2 }
		{ platform:iOS Simulator, id:2250ACFE-B7C9-47F8-AB9D-76BCAD2EA623, OS:12.4, name:iPad Pro (9.7-inch) }
		{ platform:iOS Simulator, id:89BA7B06-DA47-4EB3-8154-282BC9606884, OS:12.4, name:iPad Pro (10.5-inch) }
		{ platform:iOS Simulator, id:5AFD752C-7994-4343-8936-3045D4EA4098, OS:12.4, name:iPad Pro (11-inch) }
		{ platform:iOS Simulator, id:BE6D8220-5E32-47DB-9403-91F4649851EA, OS:12.4, name:iPad Pro (12.9-inch) }
		{ platform:iOS Simulator, id:820B2496-B679-4EE9-950B-826BF129817E, OS:12.4, name:iPad Pro (12.9-inch) (2nd generation) }
		{ platform:iOS Simulator, id:0F257958-76B4-43B8-BA9D-C7E2C1137D19, OS:12.4, name:iPad Pro (12.9-inch) (3rd generation) }
		{ platform:iOS Simulator, id:CAF47FC7-A1A8-4503-958E-F6A3094650C4, OS:12.4, name:iPad mini (5th generation) }
		{ platform:iOS Simulator, id:855BEDAC-6E5F-4638-85B3-B52A538CCB44, OS:12.4, name:iPad mini 2 }
		{ platform:iOS Simulator, id:C0060E26-DBC0-4904-B60A-825FA610BA12, OS:12.4, name:iPad mini 3 }
		{ platform:iOS Simulator, id:5A56D7DD-14A7-4E1F-B672-969C67D0BC5D, OS:12.4, name:iPad mini 4 }
		{ platform:iOS Simulator, id:17E11CDB-62CD-4CFA-827C-9499233845AF, OS:12.4, name:iPhone 5s }
		{ platform:iOS Simulator, id:9D0E91A4-B302-4262-A4B8-700D77187739, OS:12.4, name:iPhone 6 }
		{ platform:iOS Simulator, id:3A02CF93-4216-4294-BCA4-8D373DEA773F, OS:12.4, name:iPhone 6 Plus }
		{ platform:iOS Simulator, id:8B07790E-16E6-4469-9523-4AD7A7C89683, OS:12.4, name:iPhone 6s }
		{ platform:iOS Simulator, id:097F6248-9244-487C-B0E3-D4BA1878B2A6, OS:12.4, name:iPhone 6s Plus }
		{ platform:iOS Simulator, id:450708A9-08E0-48A4-8581-B0B13AE5B705, OS:12.4, name:iPhone 7 }
		{ platform:iOS Simulator, id:C6A991EC-6A3A-4E9F-91F5-701F72594E00, OS:12.4, name:iPhone 7 Plus }
		{ platform:iOS Simulator, id:5F40F20C-88F4-4C00-A793-916CE9F6AB36, OS:12.4, name:iPhone 8 }
		{ platform:iOS Simulator, id:464700B3-E305-4A89-9FEC-462FC157FBF2, OS:12.4, name:iPhone 8 Plus }
		{ platform:iOS Simulator, id:66C1DB35-A629-4F2F-A312-FF589E0CEF7F, OS:12.4, name:iPhone SE }
		{ platform:iOS Simulator, id:71121451-3E76-465F-9DDC-26B935A7828B, OS:12.4, name:iPhone X }
		{ platform:iOS Simulator, id:1E0BE5F8-2075-4E19-A9F1-A307E0EF4808, OS:12.4, name:iPhone Xs }
		{ platform:iOS Simulator, id:646D550E-770B-4D00-84B1-BF711C978E80, OS:12.4, name:iPhone Xs Max }
		{ platform:iOS Simulator, id:B0511543-649C-43E8-9782-17C559C19E65, OS:12.4, name:iPhone Xʀ }
	Ineligible destinations for the "RNTester" scheme:
		{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
		{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }
```

This diff updates the version to 12.4, as suggested by the above logs.

build-break
overriding_review_checks_triggers_an_audit_and_retroactive_review

Differential Revision: D18218399

fbshipit-source-id: 6625f94f249721396ef82641f628f399ebfd5302
2019-10-29 18:10:58 -07:00
Joshua Gross 426868b6c2 Add enable_nullify_catalyst_instance_on_destroy MC and gate setting mCatalystInstance to null in ReactContext
Summary:
Mostly for easing open-source migration and not making a backwards-incompatible change (yet), we'll set this to false by default. Every app can opt-in to this if wanted but it's not necessary. This change is part of experiments surrounding more-aggressive teardown for Fabric and Bridgeless mode.

Changelog: [Internal] - This has the effect of (by default) disabling the previous diff which caused ReactContext teardown to always set mCatalystInstance to null. Now that is opt-in behavior and off by default, so it's not longer a breaking change.

Reviewed By: mdvacca

Differential Revision: D18207302

fbshipit-source-id: 7acfc894415e966f652c7049849eef79c440a135
2019-10-29 16:21:12 -07:00
Christoph Nakazawa 55e974d9fa Revert D18173919: fix(eslint-config): Clashes with prettier
Differential Revision:
D18173919

Original commit changeset: b333469652b4

fbshipit-source-id: 819d484101be132ae3f2d3bf8e3ba008a9d91d83
2019-10-29 13:18:49 -07:00
Maurus Cuelenaere c2c4b43dfe Add Android support for fontVariant prop (#27006)
Summary:
Android was missing support for the `fontVariant` prop in TextViews, this PR adds that.

## Changelog

[Android] [Added] - Add Android support for fontVariant prop
Pull Request resolved: https://github.com/facebook/react-native/pull/27006

Test Plan:
Since I can't get RNTester to work locally (it crashes when loading `libyoga.so` on `No implementation found for long com.facebook.yoga.YogaNative.jni_YGConfigNew()`), I'll post some screenshots below of our app showing the difference.

We are using a slightly different [version](https://github.com/getdelta/react-native/commit/10cafcaa0798e5dbe8b56d461885fa84c6953739) of this commit, since we're still on 0.60, but the gist remains the same when rebased on master.

Before:
![Screenshot_20191025-130325__01](https://user-images.githubusercontent.com/1682432/67566586-7b3f2880-f728-11e9-85c0-57667d645153.jpg)

After:
![Screenshot_20191025-130444__01](https://user-images.githubusercontent.com/1682432/67566599-842ffa00-f728-11e9-988a-1b12ee393b83.jpg)

Differential Revision: D18179642

Pulled By: mdvacca

fbshipit-source-id: 03a050aa76e7bafa0343354dfa778cf74af5abd2
2019-10-29 00:29:20 -07:00
Marco Munizaga 6ebd3b046e Cap selection indices when text changes (#26680)
Summary:
This PR https://github.com/facebook/react-native/pull/22723 cached selections, so if you had a cached selection indicies, but updated the text to be an empty string, then this would crash.

As reported in https://github.com/facebook/react-native/issues/25265 and other issues of `setSpan(4 ... 4) ends beyond length`

## Changelog

[Android] [fixed] - Crash in TextInput
Pull Request resolved: https://github.com/facebook/react-native/pull/26680

Test Plan:
```
input.setNativeProps({ text: "xxx", selection: {"begin": 0, "end": 3}});
input.setNativeProps({ text: ""});
```

Differential Revision: D18189703

Pulled By: cpojer

fbshipit-source-id: 67d9615a863fd22598be8d6d4553dec5ac8837ed
2019-10-28 22:38:53 -07:00
Joshua Gross 0bea6a9b19 Work around ancient race condition in ReactInstanceManager
Summary:
See T55861104. In rare cases if `removeReactInstanceEventListener` is called right after (like, a small number of CPU instructions later, on a different thread) we allocate the `listeners` array with a certain size, then we could have one or more `null` listeners in the array, which is what we've been seeing in prod, at very low volumes, for several years. Without solving the root of the race condition we can just add a null check here.

Maybe it's also possible that if `addReactInstanceEventListener` is called on another thread in a racey way, that the size will be incremented on the array before we can access the additional member. That seems crazy, but maybe.

While this has been firing for multiple years it seems like a more recent change caused a regression. This diff doesn't address that and only resolves the crash.

Changelog: [Internal]

Reviewed By: ejanzer

Differential Revision: D18192801

fbshipit-source-id: c1000cfcdf6f251b03061d1386eabb9f0617a7d3
2019-10-28 19:28:01 -07:00
Oleksandr Melnykov bcec1281c7 Use commands instead of setNativeProps for AndroidSwitch
Summary:
Fabric doesn't support setNativeProps, so we are using view commands instead.

Changelog: [Internal]

Reviewed By: JoshuaGross, TheSavior

Differential Revision: D17736672

fbshipit-source-id: bb0eee9330c01751829172bbc03bfd12b1e24cad
2019-10-28 17:47:03 -07:00
Victor Fernandez 7468a6c903 Fix Share dialog not resolving promise when dismissed on iOS (#26842)
Summary:
On iOS the promised returned by `Share.share(content, options)` isn't resolved if the user dismisses the dialog by either pressing "Cancel" or pressing outside the shared dialog. This PR fixes this issue.

This fixes https://github.com/facebook/react-native/issues/26809.

## Changelog

[iOS] [Fixed] - Fix promised returned by `Share.share(content, options)` not resolving if share dialog dismissed
Pull Request resolved: https://github.com/facebook/react-native/pull/26842

Test Plan:
1. on iOS, open a share dialog with:

```typescript
const onShare = async () => {
  const result = await Share.share({ message: 'example message' });
}
```

2. Dismiss the opened share dialog and the returned promised should resolve.

Differential Revision: D18189755

Pulled By: cpojer

fbshipit-source-id: 1269932e9549026afefdaa8478ff7d33bbaeb86f
2019-10-28 16:24:16 -07:00
Andrew Bastin 018b7485eb Updated Jitpack URL in android template to fix gradle errors (#26660)
Summary:
Running `react-native run-android` fails for me with the error saying connection timed out for fetching a library from jitpack. This seems to be a well known issue mentioned around. The issue is resolved by updating the url from `https://jitpack.io` to `https://www.jitpack.io` .

## Changelog

[Android] [Fixed] - Updated template/android/build.gradle with a modified jitpack URL
Pull Request resolved: https://github.com/facebook/react-native/pull/26660

Test Plan:
1. Create a new react-native app with `react-native init <app-name>`
2. Run `react-native run-android`
3. App runs without modifications!

Differential Revision: D18189653

Pulled By: cpojer

fbshipit-source-id: 3c73bb9b7108755bd82444149c997a927965f3e9
2019-10-28 16:10:55 -07:00
Nat Mote 5c9c35dd2b Enable abstract locations for 50% of users in xplat/js
Summary:
Now that types-first is out in xplat, we can turn abstract locations on for improved recheck optimizations.

This was rolled out in www before we had the rollouts feature. This is a chance to get better data on how abstract locations actually performs.

Changelog: [Internal] Update Flow options to improve recheck speed

Reviewed By: panagosg7

Differential Revision: D18145269

fbshipit-source-id: 33941251288884ded4b0d8c9fe7df8225d3429f6
2019-10-28 13:24:11 -07:00
Nat Mote b01fdcb9d5 Enable direct dependent skipping in xplat/js
Summary:
This has been [proven in www](https://fb.workplace.com/groups/floweng/permalink/2900038803378049/). Now that xplat is on types-first, we can turn this on.

Changelog: [Internal] Update Flow options to improve recheck speed

Reviewed By: panagosg7

Differential Revision: D18144757

fbshipit-source-id: b67660206c70d7ea81057195f365b03a7198bd07
2019-10-28 13:24:10 -07:00
Andrey Akinshin b1455e84fa Fix link to SUPPORT in README.md (#27015)
Summary:
Fixed broken link in README.md to the SUPPORT.md file
Pull Request resolved: https://github.com/facebook/react-native/pull/27015

Differential Revision: D18174155

Pulled By: cpojer

fbshipit-source-id: 676752b818e879a3f2751faba82afcceba6f1752
2019-10-28 13:24:10 -07:00
Kyle Roach e4b62bb139 fix(eslint-config): Clashes with prettier (#26847)
Summary:
Currently, react-native-community config package extends from prettier/recommended which comes with default settings from prettier. However there are still some eslint rules in the config that either clash or duplicate the settings from prettier.

This results in eslint fixing the formatting and then prettier undoing it. This PR removes the style specific rules from eslint and place them in the prettier section.
## Changelog

[General] [Fixed] - Remove style rules from eslint config for prettier options
Pull Request resolved: https://github.com/facebook/react-native/pull/26847

Test Plan:
I created a repo for you to test with https://github.com/iRoachie/eslint-bug-replicate. You can see that running `yarn lint --fix` will never fix the issue. Eslint will complain about double quotes and subsequently after fixing it will complain about single quotes.

Here's a gif of the behaviour (vscode eslint plugin `"eslint.autoFixOnSave": true`):

![Kapture 2019-10-13 at 23 34 15](https://user-images.githubusercontent.com/5962998/66728290-ff80da00-ee11-11e9-8993-4d1b679c270b.gif)

Differential Revision: D18173919

Pulled By: cpojer

fbshipit-source-id: b333469652b4c8e72287718af94378505e9b7d59
2019-10-28 13:17:09 -07:00
Dratwas 2f8328dbb0 Remove max depth parameter while measuring layout of shadow view (#26986)
Summary:
Searching for the ancestor view while measuring a shadow view layout relative to the ancestor is limited to `30`. I couldn't find the reason nor commit where it was introduced (because I have no access to internal facebook commits).
I think we should keep looking for an ancestor view until the shadow view has the superview property.

## Changelog

[iOS] [Fixed] - Remove maximum searching depth while measuring layout.
Pull Request resolved: https://github.com/facebook/react-native/pull/26986

Test Plan:
- Tested if RNTester works as expected.
- Tested in app with a lot of nested flatlists where sometimes I was facing this redbox because of the max depth limit.
<img width="297" alt="Screenshot 2019-10-24 at 14 40 11" src="https://user-images.githubusercontent.com/16336501/67486474-6309d380-f66c-11e9-9eab-15e8fb8372a5.png">

Differential Revision: D18175568

Pulled By: shergin

fbshipit-source-id: cd59a18032d10bc6dd5707981e69813810f65b5a
2019-10-28 13:17:09 -07:00
Scott Wolchok 6c177d8332 Fix data race with gCurrentGenerationCount
Summary:
Yoga layout can be invoked on multiple threads, and gCurrentGenerationCount is a shared global without synchronization.

Changelog: [General] [Fixed] - Fix an internal thread safety issue in Yoga

Reviewed By: SidharthGuglani

Differential Revision: D18092734

fbshipit-source-id: 85753d139549b4e5507f97a56d589fb6854557fa
2019-10-28 12:45:16 -07:00
david dfb4f4af68 issue #18943 - SectionSeparatorComponent and ItemSeparatorComponent s… (#26933)
Summary:
SectionSeparatorComponent and ItemSeparatorComponent should displays in the correct place with an inverted list

This PR fix issue https://github.com/facebook/react-native/issues/18943
Currently, when using SectionSeparatorComponent and ItemSeparatorComponent with an inverted SectionList, the separators will display at the wrong place.
Please see issue https://github.com/facebook/react-native/issues/18943 for more information.

## Changelog
[General] [Fixed] - Fix separators displays in wrong places with the inverted list
Pull Request resolved: https://github.com/facebook/react-native/pull/26933

Test Plan:
before this fix, the following code will result in following screenshots:
```
import React from 'react';
import { StyleSheet, Text, SectionList, SafeAreaView } from 'react-native';

export default function App() {
  return (
    <SafeAreaView style={styles.container}>
      <SectionList
        style={{ width: '100%' }}
        sections={[
          {
            data: ['item 1', 'item 2', 'item 3', 'item 4', 'item 5', 'item 6', 'item 7']
          }
        ]}
        renderItem={({ item }) => <Text style={{ fontSize: 18, backgroundColor: 'greenyellow', width: '100%' }}>{item}</Text>}
        inverted
        SectionSeparatorComponent={() => <Text style={{ fontSize: 28, backgroundColor: 'fuchsia', width: '100%' }}>section separator</Text>}
        ItemSeparatorComponent={() => <Text style={{ fontSize: 12, backgroundColor: 'gold', width: '100%' }}>item separator</Text>}
        renderSectionHeader={()=><Text style={{ fontSize: 38, backgroundColor: 'lightpink', width: '100%' }}>section header</Text>}
        renderSectionFooter={()=><Text style={{ fontSize: 38, backgroundColor: 'lightpink', width: '100%' }}>section footer</Text>}
      />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});
```
<img width="413" alt="螢幕快照 2019-10-21 下午12 23 36" src="https://user-images.githubusercontent.com/1477985/67176763-030df580-f3fe-11e9-938f-38939339bf5c.png">

after this fix, the separators will display in the right place
<img width="414" alt="螢幕快照 2019-10-21 下午12 23 51" src="https://user-images.githubusercontent.com/1477985/67176795-2042c400-f3fe-11e9-96f3-a8ea1cfb28a2.png">

Differential Revision: D18174225

Pulled By: cpojer

fbshipit-source-id: 30901e68f38326c69715514a09a7a5130a2332a0
2019-10-28 12:14:38 -07:00
Yoga Setiawan d7c222a6a7 Update Broken Link #devcjog25 (#27025)
Summary:
Update broken link  https://github.com/facebook/react-native/blob/master/react-native-cli/CONTRIBUTING.md to https://github.com/facebook/react-native/blob/master/CONTRIBUTING.md
## Changelog
Pull Request resolved: https://github.com/facebook/react-native/pull/27025

Differential Revision: D18173631

Pulled By: cpojer

fbshipit-source-id: c3634c43c4de7e39e56ec31ef17b9f31db517128
2019-10-28 12:11:45 -07:00
Janic Duplessis e1395ec53a Use new provider api for images in RNTester (#26990)
Summary:
Local assets do not work in release mode since they rely on `RCTLocalAssetImageLoader`. Since converting image native modules to turbo modules the old loading method no longer works. This uses the new api in RNTester.

## Changelog

[Internal] [Fixed] - Use new provider api for images in RNTester
Pull Request resolved: https://github.com/facebook/react-native/pull/26990

Test Plan: Tested that local images work in RNTester images example in release mode

Differential Revision: D18174117

Pulled By: cpojer

fbshipit-source-id: 71f1dc597742c6d41c57ad20a1221e85dc63ba2f
2019-10-28 11:37:27 -07:00
Rick Hanlon 8cfa379503 LogBox - Update header to cycle around to begining
Summary:
This diff updates the header pagination logic so that it circles around to the beginning/end when reaching either end of the log list in the LogBox inspector.

It also changes the header message for a single log from "Logs" to "Log 1 of 1"

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18091621

fbshipit-source-id: 4d7e5e2cb0eb1a1ed09ca8ad318e6715d674648f
2019-10-28 10:10:55 -07:00
Rick Hanlon 3c525d5b17 LogBox - Display errors for notifications and inspector
Summary:
This diff adds and displays errors in LogBox. We will now toast both warnings and errors, open errors for inspection, and allow paginating through errors and warnings.

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18091519

fbshipit-source-id: c155969dc505de5cfb0e95bb5a8221b9f8cfe4f7
2019-10-28 10:10:55 -07:00
Rick Hanlon c5aa26da41 Add log level to support errors
Summary:
This diff adds a level to LogBox logs so that we can store and display errors in later diffs

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18091101

fbshipit-source-id: 21661d28a7945bdcb56702e2a03ab3612c11fe35
2019-10-28 10:10:54 -07:00
Samuel Susla 4c4948b6e8 Fix unrecognised selector crash on iOS 9
Summary:
Refresh control is only available in iOS 10+

> https://developer.apple.com/documentation/uikit/uiscrollview/2127691-refreshcontrol?language=objc

changelog: Fix crash in `RCTPullToRefreshViewComponentView` on iOS 10

Reviewed By: cpojer

Differential Revision: D18161020

fbshipit-source-id: c789433f132e68fc71c875e1da79bfe4fd799a44
2019-10-28 00:07:19 -07:00
Joshua Gross aa27645cf0 Guard against UIManagerHelper.getUIManager returning null
Summary:
Because the `mCatalystInstance` of the ReactContext can be null during teardown, there are technicaly cases where `UIManagerHelper.getUIManager` can return null. In those cases we check for a CatalystInstance and raise a SoftException, and return null. We must then guard in every case where we call `getUIManager` to prevent NullPointerExceptions.

See T56103679.

Currently crashes are coming from `PropsAnimatedNode.restoreDefaultValues` calling `UIManagerModule.synchronouslyUpdateViewOnUIThread` on teardown/at the end of an animation as RN is being torn down.

This can happen in both Paper and Fabric.

In dev this will still crash because the SoftException will trigger a crash. It will be a noop with logged warnings in production builds.

Changelog: [Internal]

Reviewed By: yungsters

Differential Revision: D18165576

fbshipit-source-id: 7059e04ca339208dd64a0a08a375b565cb8cda02
2019-10-27 23:13:33 -07:00
Adam Ernst bdaab3c2e5 Run depslint on fb_plugin_apple_library rules
Summary: Changelog: [Internal]

Differential Revision: D18152380

fbshipit-source-id: f33f6cb2f6baeba0719a91c5189357be33a38f59
2019-10-26 13:47:15 -07:00
Joshua Gross b55146f776 Check that CatalystInstance is active for non-NativeModule callsites of ReactContext.getJSModule
Summary:
In previous diffs I migrated many (all?) NativeModules in FB and open-source to check for `hasActiveCatalystInstance` before calling `getJSModule`. We log SoftExceptions in those cases to find more potential race condition and lifecycle bugs without crashing.

In this diff, I migrate all the non-NativeModule callsites that I could find.

Previous diffs: see D18032458, D18035359, D18032788, D18092136, D18092137, D18112989, D18134400

Changelog: [Internal]

Reviewed By: mdvacca, mmmulani

Differential Revision: D18134694

fbshipit-source-id: 4729abfb84280b634463b1cd9b4dd808f310b6e7
2019-10-25 16:16:00 -07:00
Joshua Gross 9446277fc1 Simplify API of getReactApplicationContextIfActiveOrWarn
Summary:
Simplify the API of `getReactApplicationContextIfActiveOrWarn`. We don't need to pass so much information into this method to collect good SoftExceptions.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D18134400

fbshipit-source-id: 0a250ab0252a44121f3339a31506a0a6c4c7cd35
2019-10-25 16:16:00 -07:00
David Vacca a1a56fe4e5 Add NonNull annotation to FabricUIManager API
Summary:
This diff annotates FabricUIManager class with NonNull annotations, this will help analysis of nullability plus improving integration with Kotlin clients

Changelog: Add NonNull annotation to FabricUIManager API

Reviewed By: JoshuaGross

Differential Revision: D18010917

fbshipit-source-id: 760ba04b78693cb184172c0fe613c7f808a49031
2019-10-25 15:11:53 -07:00
David Vacca a8ce2dcf89 Refactor logging of Fabric React Markers when running on the UI Thread
Summary:
This diff refactors the execution of the logging of Fabric React markers to be executed after the MountItems are executed on the UI Thred
Changelog: Improve logging of Fabric react markers

Reviewed By: JoshuaGross

Differential Revision: D18010920

fbshipit-source-id: e36306102d190119a89c16e660b855acab1528fe
2019-10-25 15:11:52 -07:00
David Vacca c5321e8514 Refactor the cancellation of DispatchUIFrameCallback
Summary:
This diff refactors the stopping of DispatchUIFrameCallback on FabricUIManager to make it thread safe

Changelog: Refactor the cancellation of dispatching of Mounting operations for Fabric

Reviewed By: JoshuaGross

Differential Revision: D18010922

fbshipit-source-id: 305bc65576698cb785a2a2308cbd03db4a9a97e4
2019-10-25 15:11:52 -07:00
David Vacca 619e27e9a1 Annotate core classes of Fabric with NonNull and Nullable annotations
Summary:
This diff annotates core classes of Fabric with NonNull and Nullable annotations, this will help analysis of nullability plus improving integration with Kotlin clients

Changelog: Add NonNull annotation to Fabric core classes

Reviewed By: shergin

Differential Revision: D18010918

fbshipit-source-id: 40fe68470b97cdf740f52dfeb9130465aab5e6df
2019-10-25 15:11:51 -07:00
David Vacca a58fcbff0b Add NonNull annotation to Fabric Event classes
Summary:
This diff annotates Fabric MountingManager and Events classes with NonNull annotations, this will help analysis of nullability plus improving integration with Kotlin clients

Changelog: Add NonNull annotation to Fabric Event classes

Reviewed By: shergin

Differential Revision: D18010923

fbshipit-source-id: fb9d5683bbd51fa25dda9b2023f9c411c3ff541d
2019-10-25 15:11:50 -07:00
David Vacca 27d71fc725 Make sure MountItems use @NonNull annotation
Summary:
This diff annotates MountItems classes with NonNull annotations, this will help analysis of nullability plus improving integration with Kotlin clients
Changelog: Add NonNull annotation to Fabric MountItems

Reviewed By: JoshuaGross

Differential Revision: D18010921

fbshipit-source-id: 4c2bded87f7af1ddb941b2a49e390e51984890c0
2019-10-25 15:11:50 -07:00
Dulmandakh fa0155d0ea fix specs buck (#26996)
Summary:
This PR fixes specs Buck, thus Android CI.

## Changelog

[Android] [Changed] - fix specs Buck, thus Android CI
Pull Request resolved: https://github.com/facebook/react-native/pull/26996

Test Plan: Android CI is green

Differential Revision: D18139049

Pulled By: RSNara

fbshipit-source-id: 5ade3f3ff7834cb172f03ec99c58136e949aff62
2019-10-25 10:22:06 -07:00
David Vacca ed905027cd Add support for Text.textBreakStrategy prop into RN Android for Fabric
Summary:
This diff extends the rendering on Text on Android to support textBreakStrategy prop.

Changelog: Add support for Text.textBreakStrategy prop into RN Android for Fabric

Reviewed By: JoshuaGross

Differential Revision: D18101403

fbshipit-source-id: c7f0b1cdc0de05172f0978d4dd3493620dcd941a
2019-10-24 19:55:15 -07:00
David Vacca 81d6357be1 Add textBreakStrategy as part of ParagraphAttributes object
Summary:
This diff exposes textBreakStrategy as part of ParagraphAttributes. This is necessary to support the textBreakStrategy prop into Text for Android

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D18101404

fbshipit-source-id: e7b665cefe48cf8c764f73a1c51eede16245d1ec
2019-10-24 19:55:15 -07:00
David Vacca 13db6cb731 Expose ParagraphAttributes into ParagraphState
Summary:
This diff extends ParagraphState to expose not only the AttributedString associated to Text components, but also ParagraphAttributes that describes the visual high level props of the Paragraph

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D18101407

fbshipit-source-id: 5f5d5ca35cc03e4bf983fd24654be9506d1901a1
2019-10-24 19:55:14 -07:00
Valentin Shergin 34816f4d47 Fabric: Suspending all Fabric screens on bridge invalidation
Summary:
Previously, Fabric (RCTSurfacePresenter) was unaware of the bridge being valid or not. That caused the strange situations where the bridge might be already dead is still running.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D18050888

fbshipit-source-id: 34e3ec4b6991034410a40c041cfdcca36be8d743
2019-10-24 17:45:41 -07:00
Valentin Shergin 7a20964e9d Introducing RCTBridgeWillBeInvalidatedNotification
Summary:
This diff introduces a new broadcasting event for Bridge that communicates that the bridge is being invalidated. This notification can be used by interested parties as a signal to start tearing down all bridge-dependant processes.

The biggest difference between the new event and `RCTBridgeWillInvalidateModulesNotification` is that the latter is being called asynchronously on the JavaScript thread, whereas the new one is being called on whatever thread caused the Bridge invalidation (deallocation) *synchronously*. In most cases that happens on the main thread that allows destroying strictly-main-threaded infra (mostly UI) synchronously and avoids races.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D18050889

fbshipit-source-id: 9364c820ea2b0358edf45f0e2b3e16a13d730a9c
2019-10-24 17:45:40 -07:00
Valentin Shergin b3cb27ee9f Fabric: Removing sync block dispatching from RCTRuntimeExecutorFromBridge
Summary:
The purpose of RCTRuntimeExecutorFromBridge is to create/implement RuntimeExecutor using some JS queue implemented as part of the Bridge. This diff changes the implementation of this method, specifically:
Removing dispatching a sync block. This causes a deadlock with TM sometimes and should not be generally required.
The implementation does not retain the Bridge anymore.

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D17960236

fbshipit-source-id: 0ddea561a6884f066e483d6b0f41ddd1621df73c
2019-10-24 17:45:40 -07:00
Valentin Shergin 32b30074d3 Fabric: Introducing RCTSurfacePresenterBridgeAdapter
Summary:
Yes, this is a pretty big diff; because of the high interconnectedness of the things, I failed to split it apart.

This change does:
Introduces a new class RCTSurfacePresenterBridgeAdapter which decouples all Bridge-related functionality from RCTSurfacePresenter.
The new class allows "replacing" one instance of the bridge with another for a single RCTSurfacePresenter.

This change allows implementing unloading a bridge (e.g. during memory pressure warning) and suspending all RN surfaces with the future possibility of reloading a bridge and resuming surfaces.

Changelog: [Internal]

Reviewed By: PeteTheHeat

Differential Revision: D17960239

fbshipit-source-id: 7ae556ed91030f4c5ab187689ce6bd161fabde93
2019-10-24 17:45:40 -07:00