From d7dc1ba49d71e87139e6fcffb12eeeb1e713390f Mon Sep 17 00:00:00 2001 From: Jhen-Jie Hong Date: Thu, 2 Nov 2023 18:06:30 +0800 Subject: [PATCH] feat(android): support font assets (#1128) --- .../LottieAnimationViewPropertyManager.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/core/android/src/main/java/com/airbnb/android/react/lottie/LottieAnimationViewPropertyManager.kt b/packages/core/android/src/main/java/com/airbnb/android/react/lottie/LottieAnimationViewPropertyManager.kt index 654e64c9..a3e33334 100644 --- a/packages/core/android/src/main/java/com/airbnb/android/react/lottie/LottieAnimationViewPropertyManager.kt +++ b/packages/core/android/src/main/java/com/airbnb/android/react/lottie/LottieAnimationViewPropertyManager.kt @@ -1,6 +1,7 @@ package com.airbnb.android.react.lottie import android.graphics.ColorFilter +import android.graphics.Typeface import android.net.Uri import android.util.Log import android.widget.ImageView @@ -10,6 +11,7 @@ import com.airbnb.lottie.LottieProperty import com.airbnb.lottie.RenderMode import com.airbnb.lottie.SimpleColorFilter import com.airbnb.lottie.TextDelegate +import com.airbnb.lottie.FontAssetDelegate import com.airbnb.lottie.model.KeyPath import com.airbnb.lottie.value.LottieValueCallback import com.facebook.react.BuildConfig @@ -17,6 +19,8 @@ import com.facebook.react.bridge.ColorPropConverter import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.ReadableType +import com.facebook.react.views.text.ReactFontManager +import com.facebook.react.views.text.TextAttributeProps.UNSET import com.facebook.react.util.RNLog import java.lang.ref.WeakReference import java.util.regex.Pattern @@ -60,6 +64,29 @@ class LottieAnimationViewPropertyManager(view: LottieAnimationView) { init { viewWeakReference = WeakReference(view) + + view.setFontAssetDelegate(object : FontAssetDelegate() { + override fun fetchFont(fontFamily: String): Typeface { + val typeface = ReactFontManager.getInstance() + .getTypeface(fontFamily, UNSET, UNSET, view.context.assets) + return typeface?: Typeface.defaultFromStyle(400) + } + + override fun fetchFont(fontFamily: String, fontStyle: String, fontName: String): Typeface { + val weight = when (fontStyle) { + "Thin" -> 100 + "Light" -> 200 + "Normal", "Regular" -> 400 + "Medium" -> 500 + "Bold" -> 700 + "Black" -> 900 + else -> UNSET + } + val typeface = ReactFontManager.getInstance() + .getTypeface(fontName, UNSET, weight, view.context.assets) + return typeface?: Typeface.defaultFromStyle(400) + } + }) } /**