[Sample] Fixed a few bugs in the sample app (#1674)

Fixes #1671
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieImageAsset.java b/lottie/src/main/java/com/airbnb/lottie/LottieImageAsset.java
index 2c8f1d0..dc0961c 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieImageAsset.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieImageAsset.java
@@ -58,4 +58,11 @@
   public void setBitmap(@Nullable Bitmap bitmap) {
     this.bitmap = bitmap;
   }
+
+  /**
+   * Returns whether this asset has an embedded Bitmap or whether the fileName is a base64 encoded bitmap.
+   */
+  public boolean hasBitmap() {
+    return bitmap != null || (fileName.startsWith("data:") && fileName.indexOf("base64,") > 0);
+  }
 }
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
index 944382d..d0036f4 100644
--- a/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
+++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
@@ -429,6 +429,11 @@
     private fun onCompositionLoaded(composition: LottieComposition?) {
         composition ?: return
 
+        // If the composition is missing any images, return the original image or null.
+        if (composition.images.any { (_, asset) -> !asset.hasBitmap() }) {
+            binding.animationView.setImageAssetDelegate { it.bitmap }
+        }
+
         binding.animationView.setComposition(composition)
         binding.controlBar.hardwareAccelerationToggle.isActivated = binding.animationView.layerType == View.LAYER_TYPE_HARDWARE
         binding.animationView.setPerformanceTrackingEnabled(true)
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt
index 8192d95..c34dbc0 100644
--- a/sample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt
+++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt
@@ -3,6 +3,7 @@
 import android.annotation.SuppressLint
 import android.net.Uri
 import android.os.Parcelable
+import kotlinx.android.parcel.IgnoredOnParcel
 import kotlinx.android.parcel.Parcelize
 
 @SuppressLint("ParcelCreator")
@@ -14,4 +15,7 @@
         val asset: String? = null,
         val animationData: AnimationData? = null,
         val animationDataV2: AnimationDataV2? = null
-) : Parcelable
\ No newline at end of file
+) : Parcelable {
+        @IgnoredOnParcel
+        val isJson = (url ?: animationData?.lottieLink ?: animationDataV2?.file)?.endsWith("json") == true
+}
\ No newline at end of file
diff --git a/sample/src/main/res/layout/bullseye_activity.xml b/sample/src/main/res/layout/bullseye_activity.xml
index fb3d062..331b01b 100644
--- a/sample/src/main/res/layout/bullseye_activity.xml
+++ b/sample/src/main/res/layout/bullseye_activity.xml
@@ -9,7 +9,7 @@
         android:id="@+id/animationView"
         android:layout_width="256dp"
         android:layout_height="256dp"
-        app:lottie_url="https://raw.githubusercontent.com/airbnb/lottie-android/master/LottieSample/src/main/res/raw/bullseye.json"
+        app:lottie_rawRes="@raw/bullseye"
         app:lottie_autoPlay="true"
         app:lottie_loop="true"
         android:layout_gravity="center"/>