[Sample App] Added the ability to load a file from assets
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d5e770d..07a4d86 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 2.6.0
+### Features and Improvements
+* [Sample App] Added the ability to load a file from assets.
+
 # 2.5.7
 * Reapply min/max frame once composition is loaded (#827).
 * Fixed a bug that would ignore setting minFrame to 0 before the composition was set (#820).
@@ -23,7 +27,7 @@
 
 
 # 2.5.2
-# Features and Improvements
+### Features and Improvements
 * Totally new sample app!
     * Rebuilt from the ground up.
     * Lottiefiles integration
diff --git a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt
index fe2eed5..d91cd0d 100644
--- a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt
+++ b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt
@@ -41,6 +41,8 @@
             fetchAnimationByUrl(url)
         } else if (args.fileUri != null) {
             fetchAnimationByFileUri(args.fileUri)
+        } else if (args.asset != null) {
+            fetchAnimationByAsset(args.asset)
         }
     }
 
@@ -158,12 +160,22 @@
             return
         }
 
-        LottieComposition.Factory.fromInputStream(fis, {
+        LottieComposition.Factory.fromInputStream(fis) {
             if (it == null) {
                 error.value = IllegalArgumentException("Er")
             } else {
                 composition.value = CompositionData(it)
             }
-        })
+        }
+    }
+
+    private fun fetchAnimationByAsset(asset: String) {
+        LottieComposition.Factory.fromAssetFileName(getApplication(), asset) {
+            if (it == null) {
+                error.value = IllegalArgumentException("Error loading asset " + asset)
+            } else {
+                composition.value = CompositionData(it)
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt
index 605592d..7fa7aae 100644
--- a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt
+++ b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt
@@ -11,6 +11,7 @@
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.ArrayAdapter
 import android.widget.EditText
 import android.widget.Toast
 import com.airbnb.lottie.samples.model.CompositionArgs
@@ -57,6 +58,22 @@
                     .setNegativeButton(R.string.preview_cancel) { dialog, _ -> dialog.dismiss() }
                     .show()
         }
+
+        assets.setOnClickListener {
+            val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.select_dialog_item).apply {
+                requireContext().assets.list("").forEach {
+                    if (it.endsWith(".json")) {
+                        add(it)
+                    }
+                }
+            }
+            AlertDialog.Builder(context)
+                    .setAdapter(adapter) { _, which ->
+                        val args = CompositionArgs(asset = adapter.getItem(which))
+                        startActivity(PlayerActivity.intent(requireContext(), args))
+                    }
+                    .show()
+        }
     }
 
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
diff --git a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt
index 8cc8ebb..0e0fdf8 100644
--- a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt
+++ b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/model/CompositionArgs.kt
@@ -11,5 +11,6 @@
         val assetName: String? = null,
         val url: String? = null,
         val fileUri: Uri? = null,
+        val asset: String? = null,
         val animationData: AnimationData? = null
 ) : Parcelable
\ No newline at end of file
diff --git a/LottieSample/src/main/res/drawable/ic_storage.xml b/LottieSample/src/main/res/drawable/ic_storage.xml
new file mode 100644
index 0000000..53c595c
--- /dev/null
+++ b/LottieSample/src/main/res/drawable/ic_storage.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M2,20h20v-4L2,16v4zM4,17h2v2L4,19v-2zM2,4v4h20L22,4L2,4zM6,7L4,7L4,5h2v2zM2,14h20v-4L2,10v4zM4,11h2v2L4,13v-2z"/>
+</vector>
diff --git a/LottieSample/src/main/res/layout/fragment_preview.xml b/LottieSample/src/main/res/layout/fragment_preview.xml
index b27f841..5d5506a 100644
--- a/LottieSample/src/main/res/layout/fragment_preview.xml
+++ b/LottieSample/src/main/res/layout/fragment_preview.xml
@@ -33,5 +33,12 @@
             android:layout_height="wrap_content"
             app:titleText="@string/preview_url"
             app:icon="@drawable/ic_network"/>
+
+        <com.airbnb.lottie.samples.PreviewItemView
+            android:id="@+id/assets"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:titleText="@string/preview_assets"
+            app:icon="@drawable/ic_storage"/>
     </LinearLayout>
 </android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/LottieSample/src/main/res/values/strings.xml b/LottieSample/src/main/res/values/strings.xml
index 5233a7c..8b6c7a3 100644
--- a/LottieSample/src/main/res/values/strings.xml
+++ b/LottieSample/src/main/res/values/strings.xml
@@ -33,6 +33,7 @@
 
     <string name="preview_title">Preview</string>
     <string name="preview_qr">Scan a QR code</string>
+    <string name="preview_assets">Load from assets</string>
     <string name="preview_file">Open a file</string>
     <string name="preview_url">Enter a URL to a json or zip file</string>
     <string name="preview_load">Load</string>