Commit Graph
3315 Commits
Author SHA1 Message Date
David Biedenbach 310a6bcf4b Fix Issue 10718: Add iOS support for progressViewOffset (#30737)
Summary:
Fixes https://github.com/facebook/react-native/issues/10718, bringing `progressViewOffset` support to iOS.

Thanks to Taylor123 for the initial PR upon which this fix is based.

## Changelog

[iOS] [Fix] - `progressViewOffset` prop of `RefreshControl` and `VirtualizedList` now works on iOS

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

Test Plan:
Tested with quick-and-dirty sample app.

![progressViewOffset-iOS](https://user-images.githubusercontent.com/1563532/104526540-82fe1d80-55b7-11eb-9f99-e025bedf4874.gif)

## Documentation

The corresponding documentation update PR can be found [here](https://github.com/facebook/react-native-website/pull/2441).

Reviewed By: kacieb

Differential Revision: D26813977

Pulled By: sammy-SC

fbshipit-source-id: 45cc5a647d70e44a29c6391b7586cb41ca011bef
2021-03-11 10:27:25 -08:00
Samuel Susla 56e0309b78 Send onDismiss event when Modal is dismissed
Summary:
Changelog: [internal]

"onDismiss" event wasn't called in Fabric. This diff adds it.
Paper implementation of Modal uses `RCTEventEmitter` instead of callback to deliver the event. To align better with Paper, Fabric will follow this pattern.

Reviewed By: shergin

Differential Revision: D26911312

fbshipit-source-id: b0de619c5a02c3378d1f7ac3ce1b705bb5fb634d
2021-03-10 05:47:47 -08:00
Samuel Susla 311d2fb0c5 Disable swipe down gesture in Modal component
Summary:
Changelog: [internal]

Paper implementation prevents swipe to dismiss gesture in Modal.

https://www.internalfb.com/intern/diffusion/FBS/browse/master/xplat/js/react-native-github/React/Views/RCTModalHostViewController.m?commit=9d1f344633fb&lines=25-30

This diff implements the same in Fabric.

Reviewed By: ShikaSD

Differential Revision: D26910753

fbshipit-source-id: cb036ce0a9cd57c7d549a1a58eb941d8e64f2468
2021-03-09 11:55:30 -08:00
Valentin Shergin 913c958751 Fabric: Fixed a crash caused by calling [RCTFabricSurface start] off the main thread
Summary:
We need to register a root view component here synchronously because right after we start a surface, it can initiate an update that can query the root component.

This fixes an issue in Fabric Surface caused by a data race between registration of root component and concurrent call to `constraintLayout` on the main thread.
This how it happens:
1. We call `startSurface` on some background thread;
2. As a result `[RCTFabricSurface start]` schedules a lambda to the main thread that will register a root component.
3. Meanwhile some other code on the main thread changes the layout and requests the relayout of a surface.
4. Because the surface is already running, the `constraintLayout` method works as expected and schedules a mutation instruction that changes the size of the root component.
5. The mutation instruction is being delivered synchronously on the main thread and fails because the root component was not yet registered. Boom.

For now, it's not fully clear how to solve this problem properly. I suspect that the good solution would be to shift the responsibility of registering a root component to the MountingCoordinator side (so, we will have an explicit instruction prescribing creating and registering the root component). This will probably be a quite invasive change though.

For now, I think it's fine to make the block synchronous to avoid the race.

Reviewed By: mdvacca

Differential Revision: D26802418

fbshipit-source-id: d49484c90d1ac61ac595caf486562fc6f4843e2f
2021-03-04 09:31:23 -08:00
Samuel Susla 542c7cc357 Pass layoutDirection to surface handler
Summary:
Changelog: [internal]

During transition to SurfaceHandler, layoutDirection got lost. This diff adds it back.

Reviewed By: JoshuaGross

Differential Revision: D26775873

fbshipit-source-id: 9b638b4c2a41eb887312b968a2e113c5fcd7463d
2021-03-04 02:19:00 -08:00
Joshua Gross b08362ade5 Send unix timestamp for touch events instead of systemUptime
Summary:
We want to be able to instrument touch processing delays in JS, which does not have access to systemUptime; therefore we want a UNIX timestamp, which JS has access to and can compare to the touch time.

It only matters that there is relative consistency between multiple touch events in JS, which is still the case; so this should have no impact on product code.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D26705430

fbshipit-source-id: 2acd52ae5873a44edf1e0cb126a9a6c87203d8fa
2021-02-28 15:18:51 -08:00
Samuel Susla f7d006e60c Fix memory leak convertJSIFunctionToCallback
Summary:
changelog: [internal]

### When does leak happen?
Leak happens anytime a callback isn't executed inside native module, it will never get cleaned up.
Imagine a native module with method that takes onSuccess and onFail callbacks. Only one of them will be called at any time and the other one will leak.

### Why does it leak?
It leaks because when `CallbackWrapper` is created using `CallbackWrapper::createWeak`. Inside `CallbackWrapper::createWeak`, the newly created object is inserted into `LongLivedObjectCollection`. This object collection will keep it alive until `CallbackWrapper::destroy` is called, which isn't called in case closure isn't executed.

### Solution
Introduce class RCTBlockGuard which ties cleanup of resources to lifetime of the block.

Reviewed By: RSNara

Differential Revision: D26664173

fbshipit-source-id: 9348f7c39eb317cf1e8e5d59e77a378e5e04f3eb
2021-02-27 04:55:52 -08:00
Peter Argany c9600a310f Connect to RCTInspectorDevServerHelper in bridgeless mode
Summary: Changelog: [Internal]

Reviewed By: shergin

Differential Revision: D26623985

fbshipit-source-id: 98aff018adc0e9aca517d8faebd20fe98e9b708b
2021-02-26 17:41:46 -08:00
Valentin Shergin 013b39f32c Fabric: Using SurfaceHandler on iOS
Summary:
(This is the second version of the diff that includes additional checkes and syncronization around `start` and `stop` methods).

This diff migrates iOS renderer to using SurfaceHandler directly instead of calling Scheduler methods.

Major changes:
* RCTFabricSurface only stores a SurfaceHandler and platform-specific parts (such as a UIView instance and TouchHandler); all other pieces of state are stored in SurfaceHandler object.
* All the state changes initiated from RCTFabricSurface are performed via calling corresponding methods on SurfaceHandler (bypassing RCTSurfacePresenter, RCTScheduler, Scheduler, and UIManager).
* Every RCTSurfaceHandler is responsible for observing `UIContentSizeCategoryDidChangeNotification` and communicating the change down to SurfaceHandler. (Besides code simplifications it's more correct because on iOS the DPI actually depends on a particular UIScreen/UIWindow associated with UIView and *not* global for the whole app.)

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: ShikaSD

Differential Revision: D26614577

fbshipit-source-id: 428f4c4cc1ca46cd97be0413e9279e29a54807f6
2021-02-24 08:29:35 -08:00
Samuel Susla e5921f7f38 Fix horizontal scrolling in RTL scripts
Summary:
Changelog: [internal]

Fabric's scrollView now supports horizontal scroll view.

Reviewed By: JoshuaGross

Differential Revision: D26608231

fbshipit-source-id: 176a7802fa580247d12657e08780805daacd8357
2021-02-24 06:29:51 -08:00
Janic Duplessis e67811e7a6 Fix RefreshControl layout when removed from window (#31024)
Summary:
Since iOS 14 refresh control is sometimes visible when it shouldn't. It seems to happen when it is removed and added back to the window. This repros easily when using react-native-screens with react-navigation tabs. Inactive tabs are detached from the window to save resources.

Calling endRefreshing when refresh control is added to the window fixes the layout. It will also be called on first mount where it is not necessary, but should be a no-op and didn't cause any issues. I also decided to call it for all ios versions, although it is only needed on iOS 14+ to avoid forking behavior more.

## Changelog

[iOS] [Fixed] - Fix RefreshControl layout when removed from window

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

Test Plan:
Before:

https://user-images.githubusercontent.com/2677334/108666197-93ea5a80-74a4-11eb-839b-8a4916967bf8.mov

After:

https://user-images.githubusercontent.com/2677334/108666223-9ea4ef80-74a4-11eb-8489-4e5d257299c8.mov

Reviewed By: shergin

Differential Revision: D26590759

Pulled By: PeteTheHeat

fbshipit-source-id: b8c06068a24446b261cbeb88ff166289724031f1
2021-02-23 14:54:36 -08:00
Samuel Susla d20b5e1481 Check for nullptr to prevent crash
Summary:
Changelog: [internal]

Prevent crash when casting of state to `ImageShadowNode::ConcreteState` fails. This doesn't fix root cause of the problem but stops the app from crashing.

Reviewed By: JoshuaGross

Differential Revision: D26604807

fbshipit-source-id: 17a2ead56ac68e560070ed4defd364a9d1dfd1e8
2021-02-23 10:13:24 -08:00
Peter Argany 995e962af4 Fix fast refresh settings in RN Dev Menu
Summary:
Changelog: [Internal]

This moves enabling/disabling fast refresh off of `bridge.enqueueJSCall` in bridgeless mode.

Reviewed By: sammy-SC

Differential Revision: D26290378

fbshipit-source-id: ed8a3389b9812cedf7181971656dacd98ff7ecfd
2021-02-19 13:47:26 -08:00
Peter Argany 2548d424ce Make RCTDevSettings conform to RCTBundleHolderModule
Summary:
Changelog: [Internal]

This diff allows `RCTDevSettings` to access bundleURL directly instead of relying on the bridge.

Reviewed By: RSNara

Differential Revision: D26289592

fbshipit-source-id: e22e583e51323bfe66f6e424d9f47edf71b1ed9f
2021-02-19 13:47:26 -08:00
Peter Argany dd1ac9de24 Introducting RCTBundleHolderModule (name pending)
Summary:
Changelog: [Internal]

Problem:

The Bridge holds and exposes the bundle URL for native modules to inspect via `bridge.bundleURL`.

Solution:

This follows the same pattern we've been using for attaching objects to native modules: declare a protocol with the required object, attach that object during module init.

Differential Revision: D26289581

fbshipit-source-id: 35ae83912e392be84f55c8d056c8da15ba75060f
2021-02-19 13:47:25 -08:00
Peter Argany f0faa7843c Remove iOS10/tvOS10 support from remaining podfiles
Summary: Changelog: [iOS] Remove iOS10/tvOS10 support from remaining podfiles

Reviewed By: shergin

Differential Revision: D26410811

fbshipit-source-id: 9050346def5070338e709ff102a284a828821586
2021-02-19 13:47:25 -08:00
Valentin Shergin 0bb459b149 Back out "Fabric: Using SurfaceHandler on iOS"
Summary:
This is a backout of D24290778 (https://github.com/facebook/react-native/commit/33d6091cac5ed2f8cef06d4740c8b42fcd107271).
The original diff causes T85097896 and probably T85069775. For now I am going to unland this, and then I will re-land this after the cut with a fix.

Original commit changeset: 62b600c3f1b2
Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D26515027

fbshipit-source-id: 057663b092e6b1d74db83c40d656b2ae142bd622
2021-02-18 12:41:27 -08:00
Valentin Shergin 95116dbe6d Fabric: Correct implementation of RCTUITextContentTypeFromString for <TextInput contentType>
Summary:
Previous implementation was now correct because it assumed that all the constant values are aligned between RN and UIKit.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D26476566

fbshipit-source-id: 07bbe14d887d446bae34f448f5e62c3075fb0979
2021-02-17 09:53:37 -08:00
Peter Argany d9064703fe Fix CMD+R reloading in bridgeless mode
Summary: Changelog: [Internal]

Reviewed By: shergin

Differential Revision: D26412253

fbshipit-source-id: 6be41120f598bbac841a6b42fafe3bb47e3f8a46
2021-02-12 10:06:39 -08:00
Valentin Shergin 33d6091cac Fabric: Using SurfaceHandler on iOS
Summary:
This diff migrates iOS renderer to using SurfaceHandler directly instead of calling Scheduler methods.

Major changes:
* RCTFabricSurface only stores a SurfaceHandler and platform-specific parts (such as a UIView instance and TouchHandler); all other pieces of state are stored in SurfaceHandler object.
* All the state changes initiated from RCTFabricSurface are performed via calling corresponding methods on SurfaceHandler (bypassing RCTSurfacePresenter, RCTScheduler, Scheduler, and UIManager).
* Every RCTSurfaceHandler is responsible for observing `UIContentSizeCategoryDidChangeNotification` and communicating the change down to SurfaceHandler. (Besides code simplifications it's more correct because on iOS the DPI actually depends on a particular UIScreen/UIWindow associated with UIView and *not* global for the whole app.)

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D24290778

fbshipit-source-id: 62b600c3f1b2e66a7513481404af941ef8b78bec
2021-02-09 08:10:43 -08:00
Samuel Susla 5c202cafd6 Simplify content mode conversion
Summary:
Changelog: [internal]

To avoid typecasting, let's return `UIViewContentMode`. This way we get rid of a condition to check if contentMode is repeat.

Reviewed By: JoshuaGross

Differential Revision: D26252431

fbshipit-source-id: 94ef7af1a76f13c91b696d57ceecc2453bbc9d8d
2021-02-09 04:03:48 -08:00
Ramanpreet Nara d02211cbce Filter out TurboModules from extraModulesForBridge
Summary:
When the TurboModule system is enabled, all TM-compatible NativeModules should not go through the legacy system. We have this filtering elsewhere in the bridge, but not for eagerly initialized NativeModules with custom initializers (i.e: modules returned from extraModulesForBridge). This diff adds that filtering for modules returned from extraModulesForBridge.

NOTE: NativeModule initializers can still perform side-effects. So, it's still best to not create the TM-compatible NativeModule inside extraModulesForBridge. This diff just adds an additional layer of defense within the bridge.

Changelog: [Internal]

Differential Revision: D26264531

fbshipit-source-id: 26179d9094f67d6d6315a65cdb2dc614e5397bf3
2021-02-05 16:17:28 -08:00
Valentin Shergin fc24bb4af0 Fabric: Support for setIsJSResponder, all the native changes
Summary:
This is a Fabric-compliant implementation of `JSResponder` feature. To make it work e2e we also need to update FabricRenderer in React repository. But before we can do this, we need to ship the native changes.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D24630027

fbshipit-source-id: 70c30e1250b554d83862956b536714704093072f
2021-02-04 13:16:29 -08:00
Peter Argany 6774358a1a Basic bridgeless support for RCTDevMenu
Summary:
Changelog: [Internal]

This removes a couple dependencies on bridge in dev menu native module. So far reloading works, will get inspector and other options working in follow ups.

Reviewed By: sammy-SC

Differential Revision: D26240391

fbshipit-source-id: 7c9d585f4efa6cc9db995ef8a33865831bc8d526
2021-02-04 12:34:48 -08:00
Peter Argany ac63d57e5e Cleanup - remove isLiveReloadAvailable
Summary:
Live reload was removed as a user facing feature in 2019 in favour of fast refresh. The native code was left in case "automation" relied on it. I'm quite sure no automation is using this dev feature. Remember, the dev feature made it so that hitting save in a text editor auto reloaded in metro.

Cleanup the native implementation.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D26239628

fbshipit-source-id: 7f61c7204727bb2d739600a459f69c72842265c5
2021-02-04 12:34:48 -08:00
Peter Argany 5d4c3b8556 Cleanup - remove isDebuggingRemotely failsafe
Summary:
IIUC `isDebuggingRemotely` will never be set when `isDeviceDebuggingAvailable` is true. This was just a failsafe so that noone was trapped in an intermediate state.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D26239570

fbshipit-source-id: 8db6b022a0ea581216a1fa97b9d41f5ab6160562
2021-02-04 12:34:48 -08:00
Samuel Susla 33b600236a Simplify ModalHostView plugin setup
Summary:
Changelog: [internal]

Provide a default plugin function that provides core `RCTModalHostViewComponentView`. This makes for easier setup for standalone app migration.

Reviewed By: JoshuaGross, shergin

Differential Revision: D26150091

fbshipit-source-id: d39723b99c590d1a33fb7b628f809aa12b2f7589
2021-02-04 03:46:00 -08:00
Samuel Susla 76a1db4b20 Fix Jest e2e by exposing accessibilityLabel in RCTParagraphComponentView
Summary: Changelog: [internal]

Reviewed By: shergin

Differential Revision: D26225118

fbshipit-source-id: 28e7292663ba8faf5d11f04da754dbec33efee90
2021-02-03 12:22:07 -08:00
Peter Argany 001dbf2068 Refactor notification subscriptions in RCTDevLoadingView
Summary:
In bridegless mode, `setBridge` is never called on native modules. This diff refactors out some setup logic into the module's init method.

Changelog: [Internal]

Reviewed By: RSNara

Differential Revision: D26211620

fbshipit-source-id: 7a9910198852dea5ac679762aa93dfea6fc47d70
2021-02-03 11:53:57 -08:00
Janic Duplessis 12fccdeea3 Make codegen more reliable on iOS (#30792)
Summary:
This addesses a few issues I noticed while migrating my app to the new build-time codegen on iOS.

1. I noticed random failures because of codegen on iOS. This is mostly due to the fact the codegen output files are not specified in the xcode script. The only reason it works relatively fine currently is because the codegen output is inside the input files directory. This has the side effect of causing files to be regenerated every build, then causes all core modules to be recompiled which adds up a significant amount of time to rebuilds. To fix this I added the generated files to the script phase output and moved the FBReactNativeSpec dir outside of the codegen source (Libraries). I moved it to the React directory as this seemed to make sense and is where a lot of iOS files are as well as the core modules. Note this might require internal changes. This removes the circular dependency between our build phase input and output so consecutive builds can be cached properly.

2. Add `set -o pipefail` to the xcode script, this helped propagate errors properly to xcode because of the `| tee` pipe so it fails at the script phase and not later with a header not found error. Also add `2>&1` to pipe stderr to stdout so errors are also captured in the log file.

3. Add the `-l` flag to the bash invocation to help finding the yarn binary. With my setup yarn is added to the system PATH in my user .profile. Adding this file will cause bash to source the user environment which xcode scripts does not by default. I think this will help with most setups.

4. If yarn is not found the `command -v yarn` would make the script exit without any output because of the -e flag. I made a change to ignore the return code and check later if YARN_BINARY is set and have an explicit error message if not.

## Changelog

[iOS] [Fixed] - Make codegen more reliable on iOS

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

Test Plan:
Tested various project states to make sure the build always succeeds in RN tester:

- Simulate fresh clone, remove all ignored files, install pods, build
- Build, delete FBReactNativeSpec generated files, build again
- Build, build again, make sure FBReactNativeSpec is cached and not rebuilt
- Make the script fail and check that xcode shows the script error logs properly

![image](https://user-images.githubusercontent.com/2677334/105891571-c8badd00-5fde-11eb-839c-259d8e448523.png)

Note: Did not test fabric

Reviewed By: fkgozali

Differential Revision: D26104213

Pulled By: hramos

fbshipit-source-id: e18d9a0b9ada7c0c2e608d29ffe88087f04605b4
2021-02-01 14:39:25 -08:00
Valentin Shergin 1ee87e1f97 Fabric: Simplifying the integration among RCTSurfacePresenter, RCTMountingManager, and RCTFabricSurface
Summary:
Changes:
* RCTMountingManager got two dedicated methods that designate some external view as a Surface viewport;
* The wiring between views now happens right in `start` and `stop` methods (because there is no reason to do it later); now it's symmetrical and straightforward;
* A couple of Surface legacy statuses were removed; they are not used and do not convey useful information anyway.
Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D26095434

fbshipit-source-id: 37828e093a40a1ad22ad78f110c18a8f27781ba7
2021-02-01 11:41:16 -08:00
Peter Argany 7186c4de4f Only show DevMenu on shake if RCTView is visible
Summary: Changelog: [iOS] Only show Dev Menu on shake if RN view is visible

Reviewed By: fkgozali

Differential Revision: D26138659

fbshipit-source-id: e2db287728675c7ead5fcbf569ed591638e2187e
2021-01-28 19:11:12 -08:00
Valentin Shergin a8fbe7269f Fabric: Setting mountingOverrideDelegate for MountingCoordinator directly
Summary:
Before this change, `mountingOverrideDelegate` was proxied via `Scheduler::startSurface` and `ShadowTree::ShadowTree` constructor down to `MountingCordinator`. Now we set it on the `MountingCoordinator` directly.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D26049076

fbshipit-source-id: 7f1ecf2c8b6f264a7e59d19881464fe529c53d30
2021-01-26 14:58:22 -08:00
Valentin Shergin 75a678ddb2 Fabric: RCTParagraphComponentView now respects the accessible property
Summary:
In RN, a <Text> node can be marked "not-accessible" by specifying `accessible=false`. This diff implements this for Fabric.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D24386225

fbshipit-source-id: 576f4cbe1916e90034f8c9f06f19cea1992e7abd
2021-01-25 21:11:44 -08:00
Valentin Shergin 92da2c1779 Fabric: Fixed <ScrollView> jumps during overscroll gesture
Summary:
Normally, UIScrollView adjust `contentOffset` inside `setContentSize` to prevent over-scroll. In most cases, it works fine but in a case when the ScrollView is in the middle of user interaction the over-scroll is perfectly acceptable. So, to work around this issue we disable `setContentOffset` when we update `contentSize` and the gesture interaction is in progress.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D26001133

fbshipit-source-id: 19b67289b2c142facd4f516a740180c87f90bc2d
2021-01-22 08:53:45 -08:00
Samuel Susla 768ecc2906 Implement ScrollView.indicatorStyle
Summary: Changelog: [internal]

Differential Revision: D25996218

fbshipit-source-id: 38b521b0ac52635a2c6341450592e6dd27be00f4
2021-01-21 09:59:40 -08:00
Samuel Susla fa728b27e6 Implement ScrollView.scrollIndicatorInsets
Summary: Changelog: [internal]

Reviewed By: shergin

Differential Revision: D25996025

fbshipit-source-id: 3528914af278dcbe522e247660b8afc19628eb6e
2021-01-21 09:59:40 -08:00
Samuel Susla 8695980e1e Add experiment to clean up resources when the app is backgrounded
Summary:
Changelog: [internal]

Setup an experiment to measure impact of releasing resources when the app enters background.

Reviewed By: JoshuaGross, shergin

Differential Revision: D25952690

fbshipit-source-id: acfaa4a1689cc03c6020fdee62d3594859c9da3d
2021-01-20 10:08:13 -08:00
Alan Kenyon 80a10953f9 VoiceOver reads Tab elements as "Tab Description" (#30689)
Summary:
On iOS, VoiceOver reads Tab accessibility role elements as "tab description" rather than "tab". See issue https://github.com/facebook/react-native/issues/30589 and https://github.com/facebook/react-native/issues/30610

Looking at the file history the bug appears to have been introduced in https://github.com/facebook/react-native/issues/27995

## Changelog

[iOS] [Fixed] - Tab Accessibility Role had incorrect localization string

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

Test Plan: Tested with voice over using the RNTester app

Reviewed By: PeteTheHeat

Differential Revision: D25926488

Pulled By: mdvacca

fbshipit-source-id: 525878e5c2a6b10e841708db78469617db487a8b
2021-01-15 11:09:01 -08:00
Ramanpreet Nara a156ee9b73 Delete JS TurboModule Codegen Gating
Summary: Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D25915171

fbshipit-source-id: b59e21f834a7172055e180eddb9bf15737a6cf0f
2021-01-14 19:14:23 -08:00
Andres Suarez 0f4f917663 Apply clang-format update fixes
Reviewed By: igorsugak

Differential Revision: D25861683

fbshipit-source-id: 616afca13ae64c76421053ce49286035e0687e36
2021-01-09 22:11:00 -08:00
Joshua Gross e3a05c9e3e iOS implementation of sendAccessibilityEvent
Summary:
This is the iOS native implementation of sendAccessibilityEvent for Fabric.

Changelog: [Internal]

Reviewed By: shergin

Differential Revision: D25857401

fbshipit-source-id: e57d2e7fd45052bcf05cee7d0cb6c55ee974f358
2021-01-08 18:10:59 -08:00
Mike a4526bcc3f fix: incorrect ScrollView offset on update (#30647)
Summary:
This pull request is to fix https://github.com/facebook/react-native/issues/30258.

After an investigation, I found out the scroll offset of the list seems to be calculated incorrectly due to a workaround in the source code.

Instead of fixing the `calculateOffsetForContentSize`, I chose to remove it, the reason why I do so is because this workaround is for fixing the offset when `contentSize` is set manually, but according to the source code, there is no interface for a react-native user to set the `contentSize` of ScrollView, it is just set to `GCSizeZero` and will never be changed ([ref](https://github.com/facebook/react-native/pull/30647/files#diff-cf6f991f585ebf4cfdd555fe474e1f9ce40c2e4f823fc3f42b549414639c8c30L304)).

Also I changed the function name from `updateContentOffsetIfNeeded` to  `updateContentSizeIfNeeded` according what the function is actually doing.

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://github.com/facebook/react-native/wiki/Changelog
-->

[iOS] [Fixed] - Incorrect ScrollView offset on update

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

Test Plan:
1. Create a fresh new project named `testapp` using npx create-react-native-app
2. Apply example code to `testapp` from https://snack.expo.io/lokomass/flatlist
3. Run `testapp` on iOS emulator and reproduce the bug
4. Make changes to files in `testapp/node_modules/react-native/`
5. Rebuild `testapp` and run on iOS emulator again, the bug is no more exist
6. Apply changes from step 4 to react-native, make a pull request.

#### Screenshots

Before: The scroll offset is incorrect after children of FlatList has changed

https://user-images.githubusercontent.com/48589760/103155130-b54a0580-47d7-11eb-97af-bdfd3e728714.mov

After: No more incorrect scroll offset if children of FlatList has changed

https://user-images.githubusercontent.com/48589760/103155091-6ef4a680-47d7-11eb-89fa-6f708bfef1c9.mov

Reviewed By: sammy-SC

Differential Revision: D25732958

Pulled By: shergin

fbshipit-source-id: dac6eff15ac3bbfec502452ac14b3d49fee76c29
2021-01-05 11:06:30 -08:00
Samuel Susla a9bc3853f0 Cancel touches if surface touch handler can be prevented | second try
Summary:
Changelog: [internal]

Previous implementation, (D25684453 (https://github.com/facebook/react-native/commit/eba31d285847ef70cf22ce83fe013efa95416e3c)) which was backed out, had a bug that caused assert to fail. It was restarting internal state `RCTSurfaceTouchHandler` and lead to inconsistency.
This is because touch event is a state machine and before "moved" is called, touch event had to "began". With internal state being restarted, that wasn't the case.

In the previous implementation the internal state was incorrectly restarted because I thought touches would not longer receive touch events after declaring that UIGestureRecogniser shouldn't be recognised simultaneously.

In this diff I take a different approach. Instead of restarting the internal state, the recogniser is first disabled and then enabled again. This cancels any ongoing touches instead of manual cleanup.

### Other approaches

In the UIViewController, we could listen to `viewWillDisappear` message and cancel any ongoing touches on the surface. This would work as well (it would prevent Pressable components from being highlighted during interactive view controller dismissal) however we would need to expose existence of `RCTTouchHandler` to the view controller. This approach is also discouraged in D15734129 (https://github.com/facebook/react-native/commit/36307d87e1974aff1abac598da2fd11c4e8e23c1).

Reviewed By: shergin

Differential Revision: D25685536

fbshipit-source-id: ad226c82e73f841c1ebd9b92738847cc5cdc21d1
2020-12-27 03:26:03 -08:00
Ramanpreet Nara fb34fba01c Use native_module_spec_name to name codegen targets
Summary:
## Description
Suppose this was the codegen declaration before:

```
rn_library(
  name = "FooModule",
  native_module_spec_name = "FBReactNativeSpec",
  codegen_modules = True,
  # ...
)
```

Previously, this would generate the following BUCK targets:
- generated_objcpp_modules-FooModuleApple
- generated_java_modules-FooModuleAndroid
- generated_java_modules-FooModule-jniAndroid

## Changes
We will now generate:
- FBReactNativeSpecApple
- FBReactNativeSpecAndroid
- FBReactNativeSpec-jniAndroid

This matches the naming scheme of the old codegen.

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D25680224

fbshipit-source-id: 617ac18fd915f3277f6bd98072d147f20fb193e5
2020-12-24 00:50:01 -08:00
Valentin Shergin f379b1e583 Fabric: Shipping updateStateWithAutorepeat as the only way to update a state
Summary:
This replaces the internal core implementation of `setState` with the new `updateStateWithAutorepeat` which is now the only option.
In short, `updateStateWithAutorepeat` works as `setState` with the following features:
* The state update might be performed several times until it succeeds.
* The callback is being called on every retry with actual previous data provided (can be different on every call).
* In case of a static value is provided (simple case, not lambda, the only case on Android for now), the same *new*/provided value will be used for all state updates. In this case, the state update cannot fail.
* If a callback is provided, the update operation can be canceled via returning `nullptr` from the callback.

This diff removes all mentions of the previous state update approach from the core; some other leftovers will be removed separatly.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D25695600

fbshipit-source-id: 14b3d4bad7ee69e024a9b0b9fc018f7d58bf060c
2020-12-23 21:49:44 -08:00
Valentin Shergin e7c41ec5fb Back out "Use ConcreteStateTeller in RCTInputAccessoryComponentView"
Summary:
Original commit changeset: a3324b5df6e6
ConcreteStateTeller is being replaced with a new built-in state autorepeat mechanism.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D25687697

fbshipit-source-id: 849bb8b6c244b17a49b5fe140346d90a9a7e52ff
2020-12-23 10:09:25 -08:00
Valentin Shergin 6675b61404 Back out "Use ConcreteStateTeller in RCTLegacyViewManagerInteropComponentView"
Summary:
Original commit changeset: 4c0d7b249175

ConcreteStateTeller is being replaced with a new built-in state autorepeat mechanism.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D25687698

fbshipit-source-id: b7eac808db1acdc7ef3297313ac352162bdccd5b
2020-12-23 10:09:25 -08:00
Valentin Shergin a0beb3a437 Back out "Use ConcreteStateTeller in RCTModalHostViewComponentView"
Summary:
Original commit changeset: b82301e5db48

ConcreteStateTeller is being replaced with a new built-in state autorepeat mechanism.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D25687694

fbshipit-source-id: 17a737d394cb7f460b239be421466981bc46f995
2020-12-23 10:09:24 -08:00
Valentin Shergin b426cbccb4 Back out "Use ConcreteStateTeller in RCTTextInputComponentView"
Summary:
Original commit changeset: 2b82e2d43cc6
ConcreteStateTeller is being replaced with a new built-in state autorepeat mechanism.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D25687699

fbshipit-source-id: d318155509b00064e29fc32efe893151a9723fd5
2020-12-23 10:09:24 -08:00