Don't allow minFrame > maxFrame in LottieValueAnimator (#969)
diff --git a/lottie/src/main/java/com/airbnb/lottie/utils/LottieValueAnimator.java b/lottie/src/main/java/com/airbnb/lottie/utils/LottieValueAnimator.java
index 18b4863..d5378a7 100644
--- a/lottie/src/main/java/com/airbnb/lottie/utils/LottieValueAnimator.java
+++ b/lottie/src/main/java/com/airbnb/lottie/utils/LottieValueAnimator.java
@@ -163,6 +163,9 @@
}
public void setMinAndMaxFrames(int minFrame, int maxFrame) {
+ if (minFrame > maxFrame) {
+ throw new IllegalArgumentException(String.format("minFrame (%s) must be <= maxFrame (%s)", minFrame, maxFrame));
+ }
float compositionMinFrame = composition == null ? -Float.MAX_VALUE : composition.getStartFrame();
float compositionMaxFrame = composition == null ? Float.MAX_VALUE : composition.getEndFrame();
this.minFrame = MiscUtils.clamp(minFrame, compositionMinFrame, compositionMaxFrame);
diff --git a/lottie/src/test/java/com/airbnb/lottie/LottieValueAnimatorUnitTest.java b/lottie/src/test/java/com/airbnb/lottie/LottieValueAnimatorUnitTest.java
index 0ed3c86..03620c7 100644
--- a/lottie/src/test/java/com/airbnb/lottie/LottieValueAnimatorUnitTest.java
+++ b/lottie/src/test/java/com/airbnb/lottie/LottieValueAnimatorUnitTest.java
@@ -164,6 +164,23 @@
}
@Test
+ public void testSetFrameIntegrity() {
+ animator.setMinAndMaxFrames(200, 800);
+
+ // setFrame < minFrame should clamp to minFrame
+ animator.setFrame(100);
+ assertEquals(200, animator.getFrame());
+
+ animator.setFrame(900);
+ assertEquals(800, animator.getFrame());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testMinAndMaxFrameIntegrity() {
+ animator.setMinAndMaxFrames(800, 200);
+ }
+
+ @Test
public void testDefaultAnimator() {
testAnimator(new VerifyListener() {
@Override public void verify(InOrder inOrder) {