Properly validate layout animation config

Summary:
The type key for a layout animation config must be supplied otherwise the app crashes (on Android). I added a isRequired check in JS as well as an explicit exception in java otherwise it crashed at a very hard to debug place. The crash happens when passing null to `Animation.setInterpolator` so this makes sure it never happens.

**Test plan (required)**

Tested that the error is caught properly in JS when passing an invalid animation config like

```
LayoutAnimation.configureNext({
  duration: 250,
   update: { type: undefined }, // or LayoutAnimation.Types.easeInEastOut in my case haha :)
});
```

Also tested the java exception.
Closes https://github.com/facebook/react-native/pull/7958

Differential Revision: D3401760

Pulled By: nicklockwood

fbshipit-source-id: 83c019d863c2b2294405b60e87297c562add0f49
This commit is contained in:
Janic Duplessis 2016-06-07 16:22:56 -07:00 коммит произвёл Facebook Github Bot 5
Родитель 0e50373b60
Коммит d4e7c8a055
2 изменённых файлов: 5 добавлений и 3 удалений

Просмотреть файл

@ -40,7 +40,7 @@ var animChecker = createStrictShapeTypeChecker({
initialVelocity: PropTypes.number, initialVelocity: PropTypes.number,
type: PropTypes.oneOf( type: PropTypes.oneOf(
Object.keys(Types) Object.keys(Types)
), ).isRequired,
property: PropTypes.oneOf( // Only applies to create/delete property: PropTypes.oneOf( // Only applies to create/delete
Object.keys(Properties) Object.keys(Properties)
), ),

Просмотреть файл

@ -61,8 +61,10 @@ import com.facebook.react.uimanager.IllegalViewOperationException;
AnimatedPropertyType.fromString(data.getString("property")) : null; AnimatedPropertyType.fromString(data.getString("property")) : null;
mDurationMs = data.hasKey("duration") ? data.getInt("duration") : globalDuration; mDurationMs = data.hasKey("duration") ? data.getInt("duration") : globalDuration;
mDelayMs = data.hasKey("delay") ? data.getInt("delay") : 0; mDelayMs = data.hasKey("delay") ? data.getInt("delay") : 0;
mInterpolator = data.hasKey("type") ? if (!data.hasKey("type")) {
getInterpolator(InterpolatorType.fromString(data.getString("type"))) : null; throw new IllegalArgumentException("Missing interpolation type.");
}
mInterpolator = getInterpolator(InterpolatorType.fromString(data.getString("type")));
if (!isValid()) { if (!isValid()) {
throw new IllegalViewOperationException("Invalid layout animation : " + data); throw new IllegalViewOperationException("Invalid layout animation : " + data);