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:
Родитель
0e50373b60
Коммит
d4e7c8a055
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче