Commit Graph

3307 Commits

Author SHA1 Message Date
Tim Wang
88dbb4558c Use class canonical name for PARTIAL_WAKE_LOCK tag (#24673)
Summary:
When acquiring the `PARTIAL_WAKE_LOCK`, Android requires a tag to identify the source, normally the class name. This tag will show on dumpsys call and Google Play developer console.

`getSimpleName` will work fine as long as not enable ProGuard, in my case, it transformed the class name to just `"c"`, and I take my half day to find where the `c` comes from.

`getCanonicalName` will add the package path, which is more friendly for developers.

Later we can even let the developer choose the tag name, but this will require API break changes.

[Android] [Changed] - Use class canonical name for PARTIAL_WAKE_LOCK tag
Pull Request resolved: https://github.com/facebook/react-native/pull/24673

Differential Revision: D15164306

Pulled By: cpojer

fbshipit-source-id: fd65f9e5250c180b0053940b17877fe36af5d48b
2019-05-01 02:53:54 -07:00
David Vacca
b3a07685f2 Add debug information in Mounting Manager
Summary: Easy diff that adds debug information in Mounting Manager

Reviewed By: JoshuaGross

Differential Revision: D15076577

fbshipit-source-id: 183c87c929ea7a99f0667956c33012d7dfdb246e
2019-04-30 15:05:02 -07:00
David Vacca
abbeac9bb3 Refactor mapping of ComponentNames in FabricUIManager
Summary: The map of sComponentNames ONLY contains the names of components that are different between JS and Android. This diff adds a method to unify the way we use this map.

Reviewed By: shergin

Differential Revision: D15076549

fbshipit-source-id: 9df750dca305e55cb44037bc63f3ebb6476c8b81
2019-04-30 15:05:02 -07:00
David Vacca
532afbde6e Add support for Modal in Android
Summary: This diff implements Modal for Android in Fabric

Reviewed By: JoshuaGross

Differential Revision: D15069863

fbshipit-source-id: 4171c9590a4a7a1f4f80cf9b08ea9a9e94b9097a
2019-04-30 15:05:01 -07:00
Michał Pierzchała
49d26eb0c4 cleanup RedBox message and stack output (#24662)
Summary:
Cleanup RedBox messages and stack traces. This PR consists of 2 changes (I'm good with splitting them up if you'd like):

- [general] filter out some of the internal callsites from the symbolicated stack (I thought about using monospace font for title with code frame, but it looks weird)
- [ios][android] strip ANSI characters (coming from colored Babel code frame) from the error message

I think it's ok to strip it inside native handlers so we can still have a colorful code frame in the terminal output.

**JS Code frame:**

|before|after|
|--|--|
|<img width="400" alt="Screenshot 2019-04-30 at 12 32 05" src="https://user-images.githubusercontent.com/5106466/56956590-ef678d80-6b44-11e9-9019-6801f050ab0d.png">|<img width="400" alt="Screenshot 2019-04-30 at 12 52 43" src="https://user-images.githubusercontent.com/5106466/56957302-f42d4100-6b46-11e9-869b-ea9c7ce5b90f.png">|

|before|after|
|--|--|
|![image](https://user-images.githubusercontent.com/5106466/56959472-c8618980-6b4d-11e9-84be-6261d8375f4a.png)|![image](https://user-images.githubusercontent.com/5106466/56959463-bc75c780-6b4d-11e9-9d8b-25ffe46c87cf.png)|

**Filtered stack traces:**

|before|after|
|--|--|
|<img width="50%" alt="Screenshot 2019-04-30 at 12 27 21" src="https://user-images.githubusercontent.com/5106466/56956641-0908d500-6b45-11e9-8cdc-8c2a34a071e5.png"><img width="50%" alt="Screenshot 2019-04-30 at 12 27 28" src="https://user-images.githubusercontent.com/5106466/56956642-0908d500-6b45-11e9-921c-fabfb8515cc0.png">|<img width="100%" alt="Screenshot 2019-04-30 at 12 26 55" src="https://user-images.githubusercontent.com/5106466/56956650-0efeb600-6b45-11e9-9f5f-f10dd69580d1.png">|

There's still a lot of places that are hard to read, but I think this is a good start towards more readable errors.

cc cpojer

[General][Changed] - Cleanup RedBox message and stack output
Pull Request resolved: https://github.com/facebook/react-native/pull/24662

Differential Revision: D15147571

Pulled By: cpojer

fbshipit-source-id: 1de4e521af988fa7fc709b6accd0ddd984388e72
2019-04-30 07:35:14 -07:00
David Vacca
61d2f1e6be Display wrong view hierarchy in Test exceptions
Summary: Trivial diff that adds extra logging information on Exceptions that are thrown by the FabricViewTest

Reviewed By: shergin

Differential Revision: D14817899

fbshipit-source-id: 32e1d1fcd1292715dfcf2750d3f14c668927c8b8
2019-04-30 01:48:25 -07:00
David Vacca
f98880b1a3 - Fix mounting of views when a re-order happen caused by changes in viewflattening
Summary:
This diff fixes a bug that is reproducible when a view is reordered in a different level of hierarchy in the react tree.
Even if this is not supported by react, this can still happen because of viewFlattening.

Reviewed By: shergin

Differential Revision: D14817452

fbshipit-source-id: 13425b0e6a280affe681e80b4a6daa17ee56251a
2019-04-30 01:48:25 -07:00
David Vacca
81d0f9a690 Ensure proper Synchronization on ReactChoreographer
Summary: This diff refactors the way we synchronize in ReactChoreographer using a lock object

Reviewed By: ejanzer

Differential Revision: D14913056

fbshipit-source-id: e86c4395d5d3c3fd5b7330b72c14920b536f74ce
2019-04-29 18:12:01 -07:00
Emiel Mols
6f6696fa63 ReactAndroid: JS errors during bundle load were reported as UnknownCppException (#24648)
Summary:
This fixes a regression on Android introduced by f3e5cce where JS errors thrown during bundle load were lost (shown only as UnknownCppException). It is especially tough to debug (custom) bundling errors without seeing the javascript error.

Root cause hypothesis: since switching to clang, `JSError`s thrown in ReactCommon's `JSCRuntime::checkException` were never matched as `std::exception` in ReactAndroid's `convertCppExceptionToJavaException` due to these missing flags.

I'm a bit shy on low-level details concerning how C++ rtti works exactly around catching exceptions thrown in other libraries. All I can say that with this change, a `bundle.android.js` that only contains `throw new Error("wtf");` now nicely outputs a message and stack trace in the logcat. Before (and since DanielZlotin's switch to clang) it just outputted:

```
2019-04-29 12:17:59.365 1162-1306/com.rntest E/unknown:ReactNative: Exception in native call
    com.facebook.jni.UnknownCppException: Unknown
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
        at android.os.Looper.loop(Looper.java:214)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232)
        at java.lang.Thread.run(Thread.java:764)
```

[Android] [Fixed] - JS errors during bundle load were reported as UnknownCppException.
Pull Request resolved: https://github.com/facebook/react-native/pull/24648

Differential Revision: D15123525

Pulled By: mdvacca

fbshipit-source-id: 74b5ce9ebae38d172446b6e31739d795c601947b
2019-04-29 09:51:15 -07:00
Guilherme Iscaro
20b09e4c45 The ART '<Surface>' becomes invisible in Android (#22624)
Summary:
Hello Everyone, this series of commits helps to fix problems related to ART on Android. The main problem in here is that the ART components would disappear if the user turns off the screen and then turn it on again.  It's important to note that this behaviour only occurs after Android N (7.1 or higher).
Pull Request resolved: https://github.com/facebook/react-native/pull/22624

Differential Revision: D15122573

Pulled By: cpojer

fbshipit-source-id: e7fb8b9280b4c52562e3d0c1a89759d4d31cd53d
2019-04-29 09:30:56 -07:00
Janic Duplessis
9fba85569c Fix crash when borderXColor is null on Android (#24640)
Summary:
On android when borderXColor is null it causes the app to crash with:

```
04-28 17:44:18.021 20114 20213 E unknown:ReactNative: com.facebook.react.bridge.NoSuchKeyException: borderBottomColor
04-28 17:44:18.021 20114 20213 E unknown:ReactNative: 	at com.facebook.react.bridge.ReadableNativeMap.getValue(ReadableNativeMap.java:111)
04-28 17:44:18.021 20114 20213 E unknown:ReactNative: 	at com.facebook.react.bridge.ReadableNativeMap.getValue(ReadableNativeMap.java:115)
04-28 17:44:18.021 20114 20213 E unknown:ReactNative: 	at com.facebook.react.bridge.ReadableNativeMap.getInt(ReadableNativeMap.java:158)
04-28 17:44:18.021 20114 20213 E unknown:ReactNative: 	at com.facebook.react.uimanager.ViewProps.isLayoutOnly(ViewProps.java:246)
04-28 17:44:18.021 20114 20213 E unknown:ReactNative: 	at com.facebook.react.uimanager.NativeViewHierarchyOptimizer.isLayoutOnlyAndCollapsable(NativeViewHierarchyOptimizer.java:482)
```

Basically it is missing a `isNull` check on the props map before trying to access the value.

Fixes #22727

[Android] [Fixed] - Fix a crash when borderXColor is null
Pull Request resolved: https://github.com/facebook/react-native/pull/24640

Differential Revision: D15120182

Pulled By: cpojer

fbshipit-source-id: bc41da572f04d8abf733b5a4e94a74a0f40acda1
2019-04-29 03:31:03 -07:00
Dulmandakh
bb6f316c87 Gradle KTS (#24631)
Summary:
Convert root Gradle script to Kotlin DSL, and cleanup. Currently, there is not much benefit or advantage over Groovy scripts, except IDE support and it'll cache compiled KTS scripts on first run.

[Android] [Changed] - Convert root Gradle script to Kotlin DSL, and cleanup.
Pull Request resolved: https://github.com/facebook/react-native/pull/24631

Differential Revision: D15120190

Pulled By: cpojer

fbshipit-source-id: 86691db5c7746e71bb243ebc263c1a3075ee9a9e
2019-04-29 02:41:05 -07:00
Dulmandakh
30348f7899 bump android gradle plugin to 3.4.0 (#24463)
Summary:
This PR bumps Android Gradle Plugin to 3.4.0, which enables R8 shrinker by default and improves build performance significantly.

Disabled R8 for ReactAndroid because it'll strip out AndroidX and other libraries bundled in ReactAndroid.

[Android] [Changed] - bump Android Gradle plugin to 3.4.0
Pull Request resolved: https://github.com/facebook/react-native/pull/24463

Differential Revision: D15107117

Pulled By: hramos

fbshipit-source-id: 35a03dc9955e889c9399faeaf9a862e0fc044fc4
2019-04-27 09:43:19 -07:00
Kevin Gozali
4b4c8d4d02 android: renamed strings.xml to strings_unlocalized.xml
Summary: 9079beda9b wasn't enough to blacklist the strings.xml files from FB infra. So this is a better workaround. According to https://developer.android.com/guide/topics/resources/string-resource the .xml file names doesn't really matter, so this shouldn't break the ability to get the string resource in code, like `R.strings.foo`.

Reviewed By: yungsters

Differential Revision: D15103303

fbshipit-source-id: 6d5174a8dc9598930670d35434e1494f9eaea059
2019-04-26 15:34:09 -07:00
Dulmandakh
243070afe2 DialogModule supports only FragmentActivity (#23365)
Summary:
Now RN has only ReactActivity which extends AppCompatActivity, subclass of FragmentActivity, therefore no need to check if activity is FragmentActivity or not. This PR changes DialogModule to work only with FragmentActivity.

Also DialogFragment from Android is deprecated in API 28, and recommends to use DialogFragment from Support Library. Excerpt from DialogFragment documentation.

> **This class was deprecated in API level 28.**
> Use the Support Library DialogFragment for consistent behavior across all devices and access to Lifecycle.

**BREAKING CHANGE**: Brown field apps must extend FragmentActivity or its subclasses.

[Android] [Changed] - DialogModule supports only FragmentActivity
Pull Request resolved: https://github.com/facebook/react-native/pull/23365

Differential Revision: D14021986

Pulled By: cpojer

fbshipit-source-id: b0ede60ef19cec48111a12701659a8bc1f66c331
2019-04-26 02:46:24 -07:00
Build Service
b46eda78a9 translation auto-update for i18n/fb4a.config.json on master
fbshipit-source-id: eaad91325c24d3e763910c46f95aa279fffea3a0
2019-04-25 22:41:19 -07:00
Build Service
de29553818 translation auto-update for i18n/expresswifi.config.json on master
fbshipit-source-id: 88df8402fa6a64d18f6b73f357effbac23e0b6e4
2019-04-25 22:41:19 -07:00
Build Service
8eac1b3a4e translation auto-update for i18n/creatorapp.config.json on master
fbshipit-source-id: 71a74ed00df788b08533767924af7b772b327d4d
2019-04-25 22:41:18 -07:00
Build Service
86c2706d85 translation auto-update for i18n/bishop.config.json on master
fbshipit-source-id: 6ac2bf6d98f5af1e4ab0f99988224f92b9817ef2
2019-04-25 22:41:18 -07:00
Build Service
4585e3bd8e translation auto-update for i18n/analyticsapp.config.json on master
fbshipit-source-id: 7e418e80bdebe43a4c003a13629eaef3f1f97fab
2019-04-25 22:41:18 -07:00
Build Service
0db8226392 translation auto-update for i18n/adsmanager.config.json on master
fbshipit-source-id: b7f3a877004704368bb3e0e54dae2e7e50d3649c
2019-04-25 22:41:18 -07:00
Kevin Gozali
9079beda9b OSS: Marked strings.xml as non-translatable and removed irrelevant translations
Summary: These strings shouldn't be translated by FB system because each app has its own set of languages and/or translation outputs. We're keeping just values/strings.xml in the repo.

Reviewed By: cpojer

Differential Revision: D15087192

fbshipit-source-id: c4b6112f6dd010d317060ac6640b34e4b725c695
2019-04-25 16:29:23 -07:00
Kevin Gozali
eb40b09bfd Back out "[react-native][PR] add support for native/downloadable fonts"
Summary: Original commit changeset: 67ba3148fb4b

Reviewed By: cpojer

Differential Revision: D15071309

fbshipit-source-id: 8ea6b40ae7cedd8aec1463373ccd219212fce0f5
2019-04-25 11:15:08 -07:00
Build Service
5592744825 translation auto-update for i18n/pages-manager.config.json on master
fbshipit-source-id: 0ddad3606613fe285bf10116d697096c7ab9779c
2019-04-25 10:59:50 -07:00
Build Service
27d2506dc7 translation auto-update for i18n/onavo-spaceship.config.json on master
fbshipit-source-id: 872f5a198325f4bb9c64d1af565738c293127c1d
2019-04-25 10:59:50 -07:00
Build Service
7a786ab1f0 translation auto-update for i18n/instagram.config.json on master
fbshipit-source-id: b349b15e647805ff824c97a4e9f650d52da73c22
2019-04-25 10:59:49 -07:00
Build Service
b56e183f9e translation auto-update for i18n/instagram-igtv.config.json on master
fbshipit-source-id: 05869242c5d4df4bfff5556b234213508f1bc839
2019-04-25 10:59:49 -07:00
Build Service
8ddd37c56d translation auto-update for i18n/fb4a.config.json on master
fbshipit-source-id: 19ed7b34aff5385594696e66d925d40c766f9c00
2019-04-25 10:59:49 -07:00
Build Service
79bde6a48a translation auto-update for i18n/expresswifi.config.json on master
fbshipit-source-id: 302ee057295da87390d8606e0be81177d2c7ab29
2019-04-25 10:59:48 -07:00
Build Service
86462bfc84 translation auto-update for i18n/creatorapp.config.json on master
fbshipit-source-id: e003d25cc264e405700dae029ab07a56c4b7c508
2019-04-25 10:59:48 -07:00
Build Service
5628ac6447 translation auto-update for i18n/bishop.config.json on master
fbshipit-source-id: e83ff7061c7a6106cc4174b1512f9ae928a708b3
2019-04-25 10:59:48 -07:00
Build Service
28c18fcef5 translation auto-update for i18n/analyticsapp.config.json on master
fbshipit-source-id: 545d7d3d211996f2e600d92cddeac96c3c976378
2019-04-25 10:59:48 -07:00
Build Service
ef4c9867d8 translation auto-update for i18n/adsmanager.config.json on master
fbshipit-source-id: 7f0c41e577c55458961e863c33ecd0f01a41b633
2019-04-25 10:59:47 -07:00
Marc Mulcahy
1aeac1c625 Additional Accessibility Roles and States (#24095)
Summary:
Assistive technologies use the accessibility role of a component to tell the disabled user what the component is, and provide hints about how to use it. Many important roles do not have analog AccessibilityTraits on iOS. This PR adds many critical roles, such as editabletext, checkbox, menu, and switch to name a few.

Accessibility states are used to convey the current state of a component. This PR adds several critical states such as checked, unchecked, on and off.

[general] [change] - Adds critical accessibility roles and states.
Pull Request resolved: https://github.com/facebook/react-native/pull/24095

Differential Revision: D15079245

Pulled By: cpojer

fbshipit-source-id: 941b30eb8f5d565597e5ea3a04687d9809cbe372
2019-04-25 06:13:07 -07:00
Thorben Primke
954f715b25 Adds Logic To Catch MissingWebViewPackageException (#24533)
Summary:
We are seeing crash reports that the webview is missing. In this case
it should fail gracefully so that a missing webview does not block
from using an app built with React Native.

The contains could also be changed to check for "webview" in general
to catch all webview related exception. It's currently checking on
for the specific string that I'm seeing in our app's crashreporting tool.

<img width="1507" alt="Screen Shot 2019-04-19 at 11 26 19 AM" src="https://user-images.githubusercontent.com/741767/56438307-5e1c2f80-6297-11e9-970b-a5095d18e9d7.png">

<img width="935" alt="Screen Shot 2019-04-19 at 11 32 58 AM" src="https://user-images.githubusercontent.com/741767/56438213-fa920200-6296-11e9-8008-5eb344eca8a8.png">

[Android] [Fixed] - The ReactCookieJarContainer/ForwardingCookieHandler now handles the missing WebView  gracefully.
Pull Request resolved: https://github.com/facebook/react-native/pull/24533

Differential Revision: D15062824

Pulled By: cpojer

fbshipit-source-id: 80805a47494f0d924b7ee029ce8ca0504eaeee57
2019-04-24 06:58:15 -07:00
Christoph Nakazawa
8d3e16831a Revert "improve RTL (#24069)" (#24580)
Summary:
This reverts commit b3c74967ca.

Fixes #24267

[Android] [Fixed] - Invalid text alignment for RTL fonts.
Pull Request resolved: https://github.com/facebook/react-native/pull/24580

Differential Revision: D15061667

Pulled By: cpojer

fbshipit-source-id: 6d02c9e938f1f8630ba691f57bdf79fd57db3bb2
2019-04-24 03:45:41 -07:00
David Aurelio
54af7fc645 YGStyle: wrap all fields into accessors
Summary:
@public

In order to encapsulate property access on `YGStyle`, as a first measure we wrap all fields with accessors.

This will e.g. enable dynamic property storage and instrumentation in the future.

All accessors have a `const` version that allows direct access via `const&`. For mutation, bit fields are wrapped with a custom reference object.

This style allows for the least amount of changes in client code. Property access simply needs appended parens, eg `style.direction` becomes `style.direction`.

Reviewed By: shergin

Differential Revision: D14999096

fbshipit-source-id: fbf29f7ddab520513d4618f5e70094c4f6330b30
2019-04-23 08:12:35 -07:00
Pavel Rotek
67be81968e Fix smooth scrolling on old devices (SDK >=16) (#24545)
Summary:
React Native Environment Info:
    System:
      OS: Linux 4.15 Ubuntu 18.04.1 LTS (Bionic Beaver)
      CPU: (4) x64 Intel(R) Core(TM) i5-7300U CPU @ 2.60GHz
      Memory: 1.12 GB / 15.55 GB
      Shell: 4.4.19 - /bin/bash
    Binaries:
      Node: 8.10.0 - /usr/bin/node
      Yarn: 1.13.0 - /usr/local/bin/yarn
      npm: 3.5.2 - /usr/bin/npm
    SDKs:
      Android SDK:
        API Levels: 16, 19, 22, 23, 24, 25, 26, 27, 28
        Build Tools: 23.0.1, 23.0.3, 25.0.0, 25.0.2, 25.0.3, 26.0.1, 26.0.3, 27.0.3, 28.0.2, 28.0.3
        System Images: android-16 | Google APIs Intel x86 Atom, android-19 | Google APIs Intel x86 Atom, android-24 | Google Play Intel x86 Atom, android-27 | Google APIs Intel x86 Atom, android-28 | Intel x86 Atom_64, android-28 | Google APIs Intel x86 Atom, android-28 | Google Play Intel x86 Atom
    npmPackages:
      react: 16.8.6 => 16.8.6
      react-native: git+https://github.com/facebook/react-native.git#v0.59.5 => 0.59.5
    npmGlobalPackages:
      react-native-cli: 2.0.1
      react-native-git-upgrade: 0.2.7

The workaround implemented in https://github.com/facebook/react-native/pull/21117 tries to fix
https://issuetracker.google.com/issues/112385925 scroll direction (according to the latest comments, the scroll direction problem has been reverted in security patches so not sure if the workaround is still valid).

But... proposed solution in fling method is using signum which leads to zero computedVelocityY in case of zero mOnScrollDispatchHelper.getYFlingVelocity() on old devices(Samsung s4 mini) even when real velocityY is non zero

```
final int correctedVelocityY = (int)(Math.abs(velocityY) * Math.signum(mOnScrollDispatchHelper.getYFlingVelocity()));
```

Proposed solution is to take signum from original velocityY in case of zero
```
float signum = Math.signum(mOnScrollDispatchHelper.getYFlingVelocity());
if (signum == 0) {
  signum = Math.signum(velocityY);
}
final int correctedVelocityY = (int)(Math.abs(velocityY) * signum);
```

The symptoms are the same as described in issue https://github.com/facebook/react-native/issues/22925, but proposed workaround doesn't work.

[Android][fixed] - Fix smooth scrolling on old devices (SDK >=16)
Pull Request resolved: https://github.com/facebook/react-native/pull/24545

Differential Revision: D15044834

Pulled By: cpojer

fbshipit-source-id: 3f523eb1a438df774e22387aecded433b9031ab9
2019-04-23 03:45:17 -07:00
Kudo Chien
040502b5d9 Fix jsc-android not found if building from source (#24547)
Summary:
If an app [builds from RN source](https://facebook.github.io/react-native/docs/building-from-source), there was an error for jsc-android not found.
It is a side effect of my previous [JSC as node dependency change](8e375850de)
For building from RN source case, the jsc-android is located at `/path/to/app/node_modules/jsc-android`.
Original gradle task will try to find it at `/path/to/app/node_modules/react-native/ReactAndroid/../node_modules/jsc-android`, as ReactAndroid project path was being override inside node_modules.
The change fixes the building from source case.

N/A
This change does not need to publish into changelog, as it is a master branch building fix.
Pull Request resolved: https://github.com/facebook/react-native/pull/24547

Differential Revision: D15044703

Pulled By: cpojer

fbshipit-source-id: a7d824b1a14064d46c4a2ec9ea28255179174c83
2019-04-23 02:27:44 -07:00
Dulmandakh
ebed815fb5 fix CI instrumentation tests (#24561)
Summary:
It seems that **react_native_dep("android_res/com/facebook/catalyst/appcompat:appcompat")** is no longer used. fixes https://github.com/facebook/react-native/issues/24537

[Android] [Changed] - fix CI instrumentation tests
Pull Request resolved: https://github.com/facebook/react-native/pull/24561

Differential Revision: D15043343

Pulled By: hramos

fbshipit-source-id: 8dd657758e57c6c384850bf2d6c26535e1fdc42b
2019-04-22 23:20:14 -07:00
Will Holen
7442437d07 Remove unnecessary shared library dependency from libreactnativejni
Summary:
libreactnativejni does not need to link against libjsc directly:
that library is only needed by libjscexecutor.

Reviewed By: mhorowitz

Differential Revision: D15017942

fbshipit-source-id: fb545c9127221dab28434321fe9c116fe72f7507
2019-04-22 12:14:35 -07:00
Valentin Shergin
af0daaf583 Fabric: Introducing MountingTransaction
Summary:
`MountingTransaction` encapsulates all artifacts of `ShadowTree` commit, particularly list of mutations and meta-data.
We will rely on this heavily in the coming diffs.

Reviewed By: JoshuaGross

Differential Revision: D15021795

fbshipit-source-id: 811da7afd7b929a34a81aa66566193d46bbc34f8
2019-04-20 10:53:16 -07:00
Emily Janzer
f81d77c102 Change ViewManager.measure() to use Context instead of ReactContext
Summary: It seems like ReactContext isn't actually needed in measure functions. Changing the signature of ViewManager.measure() to take a Context instead.

Reviewed By: lunaleaps

Differential Revision: D14940330

fbshipit-source-id: b29987fd1d7f9c191a5f26138151082ca61cb351
2019-04-18 10:10:38 -07:00
Estevão Lucas
e76a7df5b5 - Add DevSetting native module (making it cross-platform) (#24441)
Summary:
React Native has a `NativeModule` to manipulate programmatically the dev menu options (live reload, hot reload, remote debugging, etc), called [`DevSettings`](https://github.com/facebook/react-native/blob/master/React/Modules/RCTDevSettings.mm#L120). However this module is only available for iOS.

This PR brings the same `DevSettings` for Android, making it a cross-platform NativeModule.

Motivation: Right now if your app needs to programmatically reload RN, one option is to install [`react-native-restart`](https://www.npmjs.com/package/react-native-restart). It's a tiny dependency, but it's annoying to have to install it, while the code to do so is inside RN codebase. According to NPM, react-native-restart has ~12k weekly downloads, shows it's a recurring feature for many apps (my case).

Thus making `NativeModules.DevSettings` is a small increment in the codebase, just exposing the dev menu methods, to improve the Development Experience

[Android] [Added] - Add DevSetting native module (making it cross-platform)

With expection of `setIsShakeToShowDevMenuEnabled`, the following methods will be available for both platforms:
* reload
* setHotLoadingEnabled
* setIsDebuggingRemotely
* setIsShakeToShowDevMenuEnabled
* setLiveReloadEnabled
* setProfilingEnabled
* toggleElementInspector
Pull Request resolved: https://github.com/facebook/react-native/pull/24441

Differential Revision: D14932751

Pulled By: cpojer

fbshipit-source-id: 465e6a89c3beb5fd1ea22e80ea02e9438f596a09
2019-04-17 11:00:17 -07:00
Sam Mathias Weggersen
01bcde3ed8 Keyboard accessibility improvements (#24359)
Summary:
In order to meet our accessibility requirements we need to have full support for keyboard navigation. The Touchable components works with press/tap with a finger, but doesn't respond to 'enter' when using a keyboard. Navigation works fine. This PR adds an onClick listener to touchable views that have the onPress prop defined.

[Android] [Added] - Add View.OnClickListener to Touchable components when onPress is defined
Pull Request resolved: https://github.com/facebook/react-native/pull/24359

Differential Revision: D14971230

Pulled By: cpojer

fbshipit-source-id: ca5559ca1308ee6c338532a00dcea4d00fa57f42
2019-04-17 09:55:24 -07:00
Rick Ratmansky
44fe9904ac Removing more unused libraries from the repo
Summary: This is removing packages and libraries from the repo.  Any modified buck files simply change the redirect targets to something more appropriate (no logic actually changed)

Differential Revision: D14950721

fbshipit-source-id: 6c14f827b76ca1dbaf83dcb983930f362c6a27d4
2019-04-16 11:32:43 -07:00
Valentin Shergin
184cfd5594 Fabric: Bunch of small changes in ContextContainer
Summary:
So, changes:
* Correctness checks only in debug mode (codesize win?);
* `registerInstance` marked as const (because it's thread safe);
* ContextContainer::Shared also enforces constness;
* Using faster better::map;
* Using shared/RW mutex instead of regular one;
* SharedContextContainer got removed.

Reviewed By: sahrens

Differential Revision: D14920284

fbshipit-source-id: f0f8d970e7fae79a1abe3bc32827db9fd2d17e13
2019-04-16 07:35:07 -07:00
David Aurelio
cdf3343dd0 Code formatting: allow short inline methods on one line
Summary:
@public

This allows short methods defined in class declarations to occupy a single line.
The change makes class declarations more readable.

Reviewed By: SidharthGuglani

Differential Revision: D14950012

fbshipit-source-id: 1321949475184181c6cceb86613f730e430763e2
2019-04-16 07:14:12 -07:00
Taylor123
faaa92bb04 disable momentum scrolling for horizontal ScrollView (#24045)
Summary:
Would like feedback from the community as this may not be the best solution for all

I would like to restrict (or paginate) the fling of a horizontal ScrollView when `snapToInterval` is set. This is not currently possible with `pagingEnabled`, since the pagination works only when items are the entire width of the ScrollView.

This implementation simply restricts the predicted `targetOffset` found from the `x` velocity and replaces it with the offset when the pan gesture ended.

To get pagination working, I may paginate based on the interval by calculating the offset delta from the beginning of the gesture to current offset and restricting the scrolling behavior to the `snapToInterval`. If this is preferred, I can update this PR or make a new one, but wanted to start a discussion since it seems like there are many in the community that would like this feature  #21302 .

[General] [Added] - add prop `disableIntervalMomentum` to disable the predictive scrolling behavior of horizontal ScrollViews
Pull Request resolved: https://github.com/facebook/react-native/pull/24045

Differential Revision: D14939754

Pulled By: sahrens

fbshipit-source-id: 26be19c47dfb8eed4d7e6035df53a77451e23081
2019-04-15 14:40:44 -07:00
Alston Lin
e28b6f314a Fixed bug with Android's CameraRoll module where saveToPhotos crashed devices on a very small subset of devices
Summary:
For a small subset of Android devices, the following line of code caused the device to crash

```
output.transferFrom(input, 0, Long.MAX_VALUE);
```

According to the [Java docs](https://docs.oracle.com/javase/1.5.0/docs/api/java/nio/channels/FileChannel.html), this is what the function does.

> Transfers bytes into this channel's file from the given readable byte channel.
An attempt is made to read up to count bytes from the source channel and write them to this channel's file starting at the given position. An invocation of this method may or may not transfer all of the requested bytes; whether or not it does so depends upon the natures and states of the channels. Fewer than the requested number of bytes will be transferred if the source channel has fewer than count bytes remaining, or if the source channel is non-blocking and has fewer than count bytes immediately available in its input buffer.

Hence, using `Long.MAX_VALUE` seemed to be the standard way to transfer all bytes from one channel to the other.

However, it appeared that for some reason on a subset of old Android devices, the device tries to allocate `count` bytes of memory before transferring the bytes. Obviously, this caused a crash because no device has that much memory. This was fixed transferring bytes using a 1MB buffer.

Differential Revision: D14921778

fbshipit-source-id: 7fa46e10c656e23ae7d5679c72b278188f09ad0a
2019-04-15 12:38:30 -07:00