diff --git a/RNTester/android/app/src/main/res/font/srisakdi.xml b/RNTester/android/app/src/main/res/font/srisakdi.xml deleted file mode 100644 index c38d8f34a0e..00000000000 --- a/RNTester/android/app/src/main/res/font/srisakdi.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/RNTester/android/app/src/main/res/font/srisakdi_bold.ttf b/RNTester/android/app/src/main/res/font/srisakdi_bold.ttf deleted file mode 100755 index 01a5bcb5d30..00000000000 Binary files a/RNTester/android/app/src/main/res/font/srisakdi_bold.ttf and /dev/null differ diff --git a/RNTester/android/app/src/main/res/font/srisakdi_regular.ttf b/RNTester/android/app/src/main/res/font/srisakdi_regular.ttf deleted file mode 100755 index 4db47aaad38..00000000000 Binary files a/RNTester/android/app/src/main/res/font/srisakdi_regular.ttf and /dev/null differ diff --git a/RNTester/js/TextExample.android.js b/RNTester/js/TextExample.android.js index 3101fabf7a1..a29fc01cb88 100644 --- a/RNTester/js/TextExample.android.js +++ b/RNTester/js/TextExample.android.js @@ -182,14 +182,6 @@ class TextExample extends React.Component<{}> { NotoSerif Italic (Missing Font file) - Srisakdi Regular - - Srisakdi Bold - diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java index f24fb72a36d..7b5f33cc32b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java @@ -7,10 +7,8 @@ package com.facebook.react.views.text; -import javax.annotation.Nonnull; import javax.annotation.Nullable; -import android.content.Context; import android.content.res.AssetManager; import android.graphics.Paint; import android.graphics.Typeface; @@ -31,30 +29,31 @@ public class CustomStyleSpan extends MetricAffectingSpan implements ReactSpan { * Fonts are retrieved and cached using the {@link ReactFontManager} */ + private final AssetManager mAssetManager; + private final int mStyle; private final int mWeight; private final @Nullable String mFontFamily; - private final Context mContext; public CustomStyleSpan( int fontStyle, int fontWeight, @Nullable String fontFamily, - @Nonnull Context context) { + AssetManager assetManager) { mStyle = fontStyle; mWeight = fontWeight; mFontFamily = fontFamily; - mContext = context; + mAssetManager = assetManager; } @Override public void updateDrawState(TextPaint ds) { - apply(ds, mStyle, mWeight, mFontFamily, mContext); + apply(ds, mStyle, mWeight, mFontFamily, mAssetManager); } @Override - public void updateMeasureState(@Nonnull TextPaint paint) { - apply(paint, mStyle, mWeight, mFontFamily, mContext); + public void updateMeasureState(TextPaint paint) { + apply(paint, mStyle, mWeight, mFontFamily, mAssetManager); } /** @@ -83,7 +82,7 @@ public class CustomStyleSpan extends MetricAffectingSpan implements ReactSpan { int style, int weight, @Nullable String family, - Context context) { + AssetManager assetManager) { int oldStyle; Typeface typeface = paint.getTypeface(); if (typeface == null) { @@ -104,7 +103,7 @@ public class CustomStyleSpan extends MetricAffectingSpan implements ReactSpan { } if (family != null) { - typeface = ReactFontManager.getInstance().getTypeface(family, want, context); + typeface = ReactFontManager.getInstance().getTypeface(family, want, assetManager); } else if (typeface != null) { // TODO(t9055065): Fix custom fonts getting applied to text children with different style typeface = Typeface.create(typeface, want); @@ -117,4 +116,5 @@ public class CustomStyleSpan extends MetricAffectingSpan implements ReactSpan { } paint.setSubpixelText(true); } + } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java index ba3cb0c50ac..b935576c529 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java @@ -188,7 +188,7 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode { textShadowNode.mFontStyle, textShadowNode.mFontWeight, textShadowNode.mFontFamily, - textShadowNode.getThemedContext()))); + textShadowNode.getThemedContext().getAssets()))); } if (textShadowNode.mIsUnderlineTextDecorationSet) { ops.add(new SetSpanOperation(start, end, new ReactUnderlineSpan())); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java index ae680e0d882..41faa061a91 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java @@ -12,14 +12,10 @@ import javax.annotation.Nullable; import java.util.HashMap; import java.util.Map; -import android.content.Context; import android.content.res.AssetManager; import android.graphics.Typeface; import android.util.SparseArray; -import androidx.core.content.res.ResourcesCompat; - - /** * Class responsible to load and cache Typeface objects. It will first try to load typefaces inside * the assets/fonts folder and if it doesn't find the right Typeface in that folder will fall back @@ -41,11 +37,9 @@ public class ReactFontManager { private static ReactFontManager sReactFontManagerInstance; private Map mFontCache; - private Map mTypeCache; private ReactFontManager() { mFontCache = new HashMap<>(); - mTypeCache = new HashMap<>(); } public static ReactFontManager getInstance() { @@ -55,7 +49,8 @@ public class ReactFontManager { return sReactFontManagerInstance; } - private @Nullable Typeface getTypeface( + public + @Nullable Typeface getTypeface( String fontFamilyName, int style, AssetManager assetManager) { @@ -76,33 +71,6 @@ public class ReactFontManager { return typeface; } - public @Nullable Typeface getTypeface( - String fontFamilyName, - int style, - Context context) { - Typeface font = mTypeCache.get(fontFamilyName); - - if (font != null) { - return Typeface.create( - font, - style - ); - } - - int fontId = context.getResources().getIdentifier(fontFamilyName, "font", context.getPackageName()); - if (fontId != 0) { - font = ResourcesCompat.getFont(context, fontId); - if (font != null) { - mTypeCache.put(fontFamilyName, font); - return Typeface.create( - font, - style - ); - } - } - return getTypeface(fontFamilyName, style, context.getAssets()); - } - /** * Add additional font family, or replace the exist one in the font memory cache. * @param style diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index e5344931068..2faecc18cff 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -96,7 +96,7 @@ public class TextLayoutManager { textAttributes.mFontStyle, textAttributes.mFontWeight, textAttributes.mFontFamily, - context))); + context.getAssets()))); } if (textAttributes.mIsUnderlineTextDecorationSet) { ops.add(new SetSpanOperation(start, end, new ReactUnderlineSpan())); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 43de84c019c..f20132ba0b0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -220,7 +220,7 @@ public class ReactTextInputManager extends BaseViewManager