From 9810b4f05ecbb81bfe5ba067435590888675f80c Mon Sep 17 00:00:00 2001 From: Gabriel Peal Date: Wed, 3 Jan 2018 12:42:38 -0800 Subject: [PATCH] More fixes --- LottieSample/libs/happo.aar | Bin 45075 -> 45167 bytes .../airbnb/lottie/LottieSnapshotProvider.java | 2 ++ .../java/com/airbnb/lottie/LottieTest.java | 2 ++ LottieSample/src/main/assets/Arrow.json | 1 - LottieSample/src/main/assets/Gradient.json | 1 - LottieSample/src/main/assets/Shapes.json | 1 - LottieSample/src/main/assets/Square.json | 1 - .../src/main/res/layout/fragment_list.xml | 2 +- .../com/airbnb/lottie/animation/Keyframe.java | 6 +++--- .../animation/keyframe/PathKeyframe.java | 14 +++++--------- .../animatable/AnimatableTextProperties.java | 9 +++++---- .../java/com/airbnb/lottie/KeyPathTest.java | 12 +++++------- 12 files changed, 23 insertions(+), 28 deletions(-) delete mode 100644 LottieSample/src/main/assets/Arrow.json delete mode 100644 LottieSample/src/main/assets/Gradient.json delete mode 100644 LottieSample/src/main/assets/Shapes.json delete mode 100644 LottieSample/src/main/assets/Square.json diff --git a/LottieSample/libs/happo.aar b/LottieSample/libs/happo.aar index d07533211f8e769e806beaa7c785a79f2426dddf..43a9f0a2e680b40435ffb286c6d5636b800079ed 100644 GIT binary patch delta 13440 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 LNbP?D2+02cZeI>p delta 13373 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 b 4 * Resources.getSystem().getDisplayMetrics().widthPixels || composition.getBounds().height() > 4 * Resources.getSystem().getDisplayMetrics().heightPixels) { @@ -114,6 +115,7 @@ private void drawComposition(LottieComposition composition, String name) { } }); view.setComposition(composition); + Log.d("Happo", "Snapshotting " + name); for (float progress : PROGRESS) { view.setProgress(progress); recordSnapshot(view, 1080, "android", name, Integer.toString((int) (progress * 100))); diff --git a/LottieSample/src/androidTest/java/com/airbnb/lottie/LottieTest.java b/LottieSample/src/androidTest/java/com/airbnb/lottie/LottieTest.java index 8da9b4a318..c642ac6b71 100644 --- a/LottieSample/src/androidTest/java/com/airbnb/lottie/LottieTest.java +++ b/LottieSample/src/androidTest/java/com/airbnb/lottie/LottieTest.java @@ -7,6 +7,7 @@ import android.support.test.rule.GrantPermissionRule; import android.support.test.runner.AndroidJUnit4; import android.text.TextUtils; +import android.util.Log; import com.airbnb.happo.HappoRunner; import com.airbnb.lottie.samples.MainActivity; @@ -41,6 +42,7 @@ public class LottieTest { String branch = TextUtils.isEmpty(com.airbnb.lottie.samples.BuildConfig.TRAVIS_GIT_BRANCH) ? com.airbnb.lottie.samples.BuildConfig.GIT_BRANCH : com.airbnb.lottie.samples.BuildConfig.TRAVIS_GIT_BRANCH; + Log.d("Happo", "Happo S3 " + com.airbnb.lottie.samples.BuildConfig.S3AccessKey); HappoRunner.runTests( mainActivityRule.getActivity(), new LottieSnapshotProvider(mainActivityRule.getActivity()), diff --git a/LottieSample/src/main/assets/Arrow.json b/LottieSample/src/main/assets/Arrow.json deleted file mode 100644 index 10ace9d84f..0000000000 --- a/LottieSample/src/main/assets/Arrow.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"4.11.1","fr":30,"ip":0,"op":180,"w":400,"h":300,"nm":"HamburgerArrow","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Rotator","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[200.5,149.375,0],"ix":2},"a":{"a":0,"k":[60,60,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"A2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[60,60.625,0],"ix":2},"a":{"a":0,"k":[0.5,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-34,0],[35,0]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.403921574354,0.160784319043,0.698039233685,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":180,"st":0,"bm":0}]} \ No newline at end of file diff --git a/LottieSample/src/main/assets/Gradient.json b/LottieSample/src/main/assets/Gradient.json deleted file mode 100644 index 4d51611c62..0000000000 --- a/LottieSample/src/main/assets/Gradient.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"4.11.1","fr":29.9700012207031,"ip":0,"op":61.0000024845809,"w":300,"h":300,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[173.406,173.406],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":0,"k":18,"ix":10},"g":{"p":2,"k":{"a":0,"k":[0,1,1,1,1,0,0,0],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":0,"k":42,"ix":10},"g":{"p":2,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[0,1,1,1,1,0,0,0],"e":[0,1,1,1,1,0,0,0]},{"t":60.0000024438501}],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 2","mn":"ADBE Vector Graphic - G-Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[8.703,-3.297],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61.0000024845809,"st":0,"bm":0}]} \ No newline at end of file diff --git a/LottieSample/src/main/assets/Shapes.json b/LottieSample/src/main/assets/Shapes.json deleted file mode 100644 index 4549a33134..0000000000 --- a/LottieSample/src/main/assets/Shapes.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"4.11.1","fr":29.9700012207031,"ip":0,"op":61.0000024845809,"w":150,"h":250,"nm":"Shapes","ddd":0,"assets":[{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[195,25,0],"e":[304,25,0],"to":[18.1666660308838,0,0],"ti":[-18.1666660308838,0,0]},{"t":60.0000024438501}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32.832,32.832],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":20,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-174.584,2.416],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61.0000024845809,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Circle 1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,180,0],"ix":2},"a":{"a":0,"k":[75,25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":150,"h":50,"ip":0,"op":61.0000024845809,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Circle 2","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,226,0],"ix":2},"a":{"a":0,"k":[75,25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":150,"h":50,"ip":0,"op":61.0000024845809,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,82,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[25.836,25.836],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"rp","c":{"a":0,"k":2,"ix":1},"o":{"a":0,"k":0,"ix":2},"m":1,"ix":3,"tr":{"ty":"tr","p":{"a":0,"k":[30,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":4},"so":{"a":0,"k":100,"ix":5},"eo":{"a":0,"k":100,"ix":6},"nm":"Transform"},"nm":"Repeater 1","mn":"ADBE Vector Filter - Repeater","hd":false},{"ty":"tr","p":{"a":0,"k":[-15.082,-0.082],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Repeater Shape","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[38.172,38.172],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-46.414,-42.414],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":11,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":28.99,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35,43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Star","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":2,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"or":{"a":0,"k":25.324,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-42,47],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Polygon","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[42.203,42.203],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[40.602,-43.398],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61.0000024845809,"st":0,"bm":0}]} \ No newline at end of file diff --git a/LottieSample/src/main/assets/Square.json b/LottieSample/src/main/assets/Square.json deleted file mode 100644 index 42c310c120..0000000000 --- a/LottieSample/src/main/assets/Square.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"4.11.1","fr":29.9700012207031,"ip":0,"op":61.0000024845809,"w":50,"h":50,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[25,25,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[16.189,16.189],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.928262987324,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":61.0000024845809,"st":0,"bm":0}]} \ No newline at end of file diff --git a/LottieSample/src/main/res/layout/fragment_list.xml b/LottieSample/src/main/res/layout/fragment_list.xml index 3d34d5330a..0a181c4e15 100644 --- a/LottieSample/src/main/res/layout/fragment_list.xml +++ b/LottieSample/src/main/res/layout/fragment_list.xml @@ -16,7 +16,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - app:lottie_fileName="Camera.json" + app:lottie_fileName="Logo/LogoSmall.json" app:lottie_loop="true" /> diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/Keyframe.java b/lottie/src/main/java/com/airbnb/lottie/animation/Keyframe.java index 0869623182..6b1eb11802 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/Keyframe.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/Keyframe.java @@ -61,8 +61,8 @@ public static void setEndFrames(List> keyframes) { // Used by PathKeyframe but it has to be parsed by KeyFrame because we use a JsonReader to // deserialzie the data so we have to parse everything in order - protected PointF pathCp1 = null; - protected PointF pathCp2 = null; + public PointF pathCp1 = null; + public PointF pathCp2 = null; public Keyframe(@SuppressWarnings("NullableProblems") LottieComposition composition, @@ -228,7 +228,7 @@ private static Keyframe parseKeyframe(LottieComposition composition, Json endValue = startValue; // TODO: create a HoldInterpolator so progress changes don't invalidate. interpolator = LINEAR_INTERPOLATOR; - } else if (cp1 != null) { + } else if (cp1 != null && cp2 != null) { cp1.x = MiscUtils.clamp(cp1.x, -scale, scale); cp1.y = MiscUtils.clamp(cp1.y, -MAX_CP_VALUE, MAX_CP_VALUE); cp2.x = MiscUtils.clamp(cp2.x, -scale, scale); diff --git a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframe.java b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframe.java index 01bf5f34af..0c72ff3965 100644 --- a/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframe.java +++ b/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/PathKeyframe.java @@ -5,7 +5,6 @@ import android.support.annotation.Nullable; import android.util.JsonReader; import android.util.JsonToken; -import android.view.animation.Interpolator; import com.airbnb.lottie.LottieComposition; import com.airbnb.lottie.animation.Keyframe; @@ -17,10 +16,9 @@ public class PathKeyframe extends Keyframe { @Nullable private Path path; - private PathKeyframe(LottieComposition composition, @Nullable PointF startValue, - @Nullable PointF endValue, @Nullable Interpolator interpolator, - float startFrame, @Nullable Float endFrame) { - super(composition, startValue, endValue, interpolator, startFrame, endFrame); + private PathKeyframe(LottieComposition composition, Keyframe keyframe) { + super(composition, keyframe.startValue, keyframe.endValue, keyframe.interpolator, + keyframe.startFrame, keyframe.endFrame); // This must use equals(float, float) because PointF didn't have an equals(PathF) method // until KitKat... @@ -28,7 +26,7 @@ private PathKeyframe(LottieComposition composition, @Nullable PointF startValue, startValue.equals(endValue.x, endValue.y); //noinspection ConstantConditions if (endValue != null && !equals) { - path = Utils.createPath(startValue, endValue, pathCp1, pathCp2); + path = Utils.createPath(startValue, endValue, keyframe.pathCp1, keyframe.pathCp2); } } @@ -42,9 +40,7 @@ public static PathKeyframe newInstance(JsonReader reader, LottieComposition comp Keyframe keyframe = Keyframe.Factory.newInstance( reader, composition, Utils.dpScale(), valueFactory, animated); - - return new PathKeyframe(composition, keyframe.startValue, - keyframe.endValue, keyframe.interpolator, keyframe.startFrame, keyframe.endFrame); + return new PathKeyframe(composition, keyframe); } } diff --git a/lottie/src/main/java/com/airbnb/lottie/model/animatable/AnimatableTextProperties.java b/lottie/src/main/java/com/airbnb/lottie/model/animatable/AnimatableTextProperties.java index 9d9aa42050..baca43ab39 100644 --- a/lottie/src/main/java/com/airbnb/lottie/model/animatable/AnimatableTextProperties.java +++ b/lottie/src/main/java/com/airbnb/lottie/model/animatable/AnimatableTextProperties.java @@ -36,10 +36,10 @@ public static AnimatableTextProperties newInstance( while (reader.hasNext()) { switch (reader.nextName()) { case "a": - anim = parseAnimatableTextProperties(reader, composition); - break; - default: - reader.skipValue(); + anim = parseAnimatableTextProperties(reader, composition); + break; + default: + reader.skipValue(); } } reader.endObject(); @@ -75,6 +75,7 @@ private static AnimatableTextProperties parseAnimatableTextProperties( reader.skipValue(); } } + reader.endObject(); return new AnimatableTextProperties(color, stroke, strokeWidth, tracking); } diff --git a/lottie/src/test/java/com/airbnb/lottie/KeyPathTest.java b/lottie/src/test/java/com/airbnb/lottie/KeyPathTest.java index a026a4fda7..d474fdca20 100644 --- a/lottie/src/test/java/com/airbnb/lottie/KeyPathTest.java +++ b/lottie/src/test/java/com/airbnb/lottie/KeyPathTest.java @@ -1,17 +1,16 @@ package com.airbnb.lottie; -import android.app.Application; +import android.util.JsonReader; import com.airbnb.lottie.model.KeyPath; -import org.json.JSONException; -import org.json.JSONObject; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; +import java.io.IOException; +import java.io.StringReader; import java.util.List; import static junit.framework.Assert.assertEquals; @@ -32,13 +31,12 @@ public class KeyPathTest { @Before public void setupDrawable() { - Application context = RuntimeEnvironment.application; lottieDrawable = new LottieDrawable(); try { LottieComposition composition = LottieComposition.Factory - .fromJsonSync(new (Fixtures.SQUARES)); + .fromJsonSync(new JsonReader(new StringReader(Fixtures.SQUARES))); lottieDrawable.setComposition(composition); - } catch (JSONException e) { + } catch (IOException e) { throw new IllegalStateException(e); } }