Enable xml preview in Android Studio. (#1572)
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index bfa8999..e2a0ef2 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -39,6 +39,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.Callable;
import static com.airbnb.lottie.RenderMode.HARDWARE;
@@ -138,33 +139,31 @@
private void init(@Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.LottieAnimationView, defStyleAttr, 0);
- if (!isInEditMode()) {
- cacheComposition = ta.getBoolean(R.styleable.LottieAnimationView_lottie_cacheComposition, true);
- boolean hasRawRes = ta.hasValue(R.styleable.LottieAnimationView_lottie_rawRes);
- boolean hasFileName = ta.hasValue(R.styleable.LottieAnimationView_lottie_fileName);
- boolean hasUrl = ta.hasValue(R.styleable.LottieAnimationView_lottie_url);
- if (hasRawRes && hasFileName) {
- throw new IllegalArgumentException("lottie_rawRes and lottie_fileName cannot be used at " +
- "the same time. Please use only one at once.");
- } else if (hasRawRes) {
- int rawResId = ta.getResourceId(R.styleable.LottieAnimationView_lottie_rawRes, 0);
- if (rawResId != 0) {
- setAnimation(rawResId);
- }
- } else if (hasFileName) {
- String fileName = ta.getString(R.styleable.LottieAnimationView_lottie_fileName);
- if (fileName != null) {
- setAnimation(fileName);
- }
- } else if (hasUrl) {
- String url = ta.getString(R.styleable.LottieAnimationView_lottie_url);
- if (url != null) {
- setAnimationFromUrl(url);
- }
+ cacheComposition = ta.getBoolean(R.styleable.LottieAnimationView_lottie_cacheComposition, true);
+ boolean hasRawRes = ta.hasValue(R.styleable.LottieAnimationView_lottie_rawRes);
+ boolean hasFileName = ta.hasValue(R.styleable.LottieAnimationView_lottie_fileName);
+ boolean hasUrl = ta.hasValue(R.styleable.LottieAnimationView_lottie_url);
+ if (hasRawRes && hasFileName) {
+ throw new IllegalArgumentException("lottie_rawRes and lottie_fileName cannot be used at " +
+ "the same time. Please use only one at once.");
+ } else if (hasRawRes) {
+ int rawResId = ta.getResourceId(R.styleable.LottieAnimationView_lottie_rawRes, 0);
+ if (rawResId != 0) {
+ setAnimation(rawResId);
}
-
- setFallbackResource(ta.getResourceId(R.styleable.LottieAnimationView_lottie_fallbackRes, 0));
+ } else if (hasFileName) {
+ String fileName = ta.getString(R.styleable.LottieAnimationView_lottie_fileName);
+ if (fileName != null) {
+ setAnimation(fileName);
+ }
+ } else if (hasUrl) {
+ String url = ta.getString(R.styleable.LottieAnimationView_lottie_url);
+ if (url != null) {
+ setAnimationFromUrl(url);
+ }
}
+
+ setFallbackResource(ta.getResourceId(R.styleable.LottieAnimationView_lottie_fallbackRes, 0));
if (ta.getBoolean(R.styleable.LottieAnimationView_lottie_autoPlay, false)) {
wasAnimatingWhenDetached = true;
autoPlay = true;
@@ -318,7 +317,7 @@
@Override protected void onAttachedToWindow() {
super.onAttachedToWindow();
- if (autoPlay || wasAnimatingWhenDetached) {
+ if (!isInEditMode() &&( autoPlay || wasAnimatingWhenDetached)) {
playAnimation();
// Autoplay from xml should only apply once.
autoPlay = false;
@@ -376,17 +375,42 @@
public void setAnimation(@RawRes final int rawRes) {
this.animationResId = rawRes;
animationName = null;
- LottieTask<LottieComposition> task = cacheComposition ?
- LottieCompositionFactory.fromRawRes(getContext(), rawRes) : LottieCompositionFactory.fromRawRes(getContext(), rawRes, null);
- setCompositionTask(task);
+ setCompositionTask(fromRawRes(rawRes));
+ }
+
+
+ private LottieTask<LottieComposition> fromRawRes(@RawRes final int rawRes) {
+ if (isInEditMode()) {
+ return new LottieTask<>(new Callable<LottieResult<LottieComposition>>() {
+ @Override public LottieResult<LottieComposition> call() throws Exception {
+ return cacheComposition
+ ? LottieCompositionFactory.fromRawResSync(getContext(), rawRes) : LottieCompositionFactory.fromRawResSync(getContext(), rawRes, null);
+ }
+ }, true);
+ } else {
+ return cacheComposition ?
+ LottieCompositionFactory.fromRawRes(getContext(), rawRes) : LottieCompositionFactory.fromRawRes(getContext(), rawRes, null);
+ }
}
public void setAnimation(final String assetName) {
this.animationName = assetName;
animationResId = 0;
- LottieTask<LottieComposition> task = cacheComposition ?
- LottieCompositionFactory.fromAsset(getContext(), assetName) : LottieCompositionFactory.fromAsset(getContext(), assetName, null);
- setCompositionTask(task);
+ setCompositionTask(fromAssets(assetName));
+ }
+
+ private LottieTask<LottieComposition> fromAssets(final String assetName) {
+ if (isInEditMode()) {
+ return new LottieTask<>(new Callable<LottieResult<LottieComposition>>() {
+ @Override public LottieResult<LottieComposition> call() throws Exception {
+ return cacheComposition ?
+ LottieCompositionFactory.fromAssetSync(getContext(), assetName) : LottieCompositionFactory.fromAssetSync(getContext(), assetName, null);
+ }
+ }, true);
+ } else {
+ return cacheComposition ?
+ LottieCompositionFactory.fromAsset(getContext(), assetName) : LottieCompositionFactory.fromAsset(getContext(), assetName, null);
+ }
}
/**
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index 1969ec6..a457e1e 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -386,7 +386,11 @@
@MainThread
@Override
public void start() {
- playAnimation();
+ // Don't auto play when in edit mode.
+ Callback callback = getCallback();
+ if (callback instanceof View && !((View) callback).isInEditMode()) {
+ playAnimation();
+ }
}
@MainThread
diff --git a/lottie/src/main/java/com/airbnb/lottie/parser/moshi/JsonUtf8Reader.java b/lottie/src/main/java/com/airbnb/lottie/parser/moshi/JsonUtf8Reader.java
index e39da1b..ab19c8f 100644
--- a/lottie/src/main/java/com/airbnb/lottie/parser/moshi/JsonUtf8Reader.java
+++ b/lottie/src/main/java/com/airbnb/lottie/parser/moshi/JsonUtf8Reader.java
@@ -95,7 +95,8 @@
throw new NullPointerException("source == null");
}
this.source = source;
- this.buffer = source.getBuffer();
+ // Don't use source.getBuffer(). Because android studio use old version okio instead of your own okio.
+ this.buffer = source.buffer();
pushScope(JsonScope.EMPTY_DOCUMENT);
}