Allow setting a default font file extension (#2166)

diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index 6d6cd45..037b6f9 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -179,6 +179,10 @@
       setClipToCompositionBounds(ta.getBoolean(R.styleable.LottieAnimationView_lottie_clipToCompositionBounds, true));
     }
 
+    if (ta.hasValue(R.styleable.LottieAnimationView_lottie_defaultFontFileExtension)) {
+      setDefaultFontFileExtension(ta.getString(R.styleable.LottieAnimationView_lottie_defaultFontFileExtension));
+    }
+
     setImageAssetsFolder(ta.getString(R.styleable.LottieAnimationView_lottie_imageAssetsFolder));
     setProgress(ta.getFloat(R.styleable.LottieAnimationView_lottie_progress, 0));
     enableMergePathsForKitKatAndAbove(ta.getBoolean(
@@ -898,6 +902,21 @@
   }
 
   /**
+   * By default, Lottie will look in src/assets/fonts/FONT_NAME.ttf
+   * where FONT_NAME is the fFamily specified in your Lottie file.
+   * If your fonts have a different extension, you can override the
+   * default here.
+   *
+   * Alternatively, you can use {@link #setFontAssetDelegate(FontAssetDelegate)}
+   * for more control.
+   *
+   * @see #setFontAssetDelegate(FontAssetDelegate)
+   */
+  public void setDefaultFontFileExtension(String extension) {
+    lottieDrawable.setDefaultFontFileExtension(extension);
+  }
+
+  /**
    * Use this to manually set fonts.
    */
   public void setFontAssetDelegate(FontAssetDelegate assetDelegate) {
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index ac5d92b..003fe44 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -106,6 +106,12 @@
   private ImageAssetDelegate imageAssetDelegate;
   @Nullable
   private FontAssetManager fontAssetManager;
+  /**
+   * Will be set if manually overridden by {@link #setDefaultFontFileExtension(String)}.
+   * This must be stored as a field in case it is set before the font asset delegate
+   * has been created.
+   */
+  @Nullable String defaultFontFileExtension;
   @Nullable
   FontAssetDelegate fontAssetDelegate;
   @Nullable
@@ -1262,11 +1268,34 @@
 
     if (fontAssetManager == null) {
       fontAssetManager = new FontAssetManager(getCallback(), fontAssetDelegate);
+      String defaultExtension = this.defaultFontFileExtension;
+      if (defaultExtension != null) {
+        fontAssetManager.setDefaultFontFileExtension(defaultFontFileExtension);
+      }
     }
 
     return fontAssetManager;
   }
 
+  /**
+   * By default, Lottie will look in src/assets/fonts/FONT_NAME.ttf
+   * where FONT_NAME is the fFamily specified in your Lottie file.
+   * If your fonts have a different extension, you can override the
+   * default here.
+   *
+   * Alternatively, you can use {@link #setFontAssetDelegate(FontAssetDelegate)}
+   * for more control.
+   *
+   * @see #setFontAssetDelegate(FontAssetDelegate)
+   */
+  public void setDefaultFontFileExtension(String extension) {
+    defaultFontFileExtension = extension;
+    FontAssetManager fam = getFontAssetManager();
+    if (fam != null) {
+      fam.setDefaultFontFileExtension(extension);
+    }
+  }
+
   @Nullable
   private Context getContext() {
     Callback callback = getCallback();
diff --git a/lottie/src/main/res/values/attrs.xml b/lottie/src/main/res/values/attrs.xml
index 024c323..9fa016e 100644
--- a/lottie/src/main/res/values/attrs.xml
+++ b/lottie/src/main/res/values/attrs.xml
@@ -22,6 +22,8 @@
         <attr name="lottie_cacheComposition" format="boolean" />
         <attr name="lottie_ignoreDisabledSystemAnimations" format="boolean" />
         <attr name="lottie_clipToCompositionBounds" format="boolean" />
+        <!-- The default file extension that Lottie will use when finding fonts in assets/fonts/fontFamily.* -->
+        <attr name="lottie_defaultFontFileExtension" format="string" />
         <!-- These values must be kept in sync with the RenderMode enum -->
         <attr name="lottie_renderMode" format="enum">
             <enum name="automatic" value="0" />