diff options
| -rw-r--r-- | core/java/android/provider/FontsContract.java | 25 | ||||
| -rw-r--r-- | graphics/java/android/graphics/Typeface.java | 30 | ||||
| -rw-r--r-- | graphics/java/android/graphics/fonts/Font.java | 4 |
3 files changed, 41 insertions, 18 deletions
diff --git a/core/java/android/provider/FontsContract.java b/core/java/android/provider/FontsContract.java index e931826d2455..281447419943 100644 --- a/core/java/android/provider/FontsContract.java +++ b/core/java/android/provider/FontsContract.java @@ -34,7 +34,6 @@ import android.graphics.fonts.FontFamily; import android.graphics.fonts.FontStyle; import android.graphics.fonts.FontVariationAxis; import android.net.Uri; -import android.os.Build.VERSION_CODES; import android.os.CancellationSignal; import android.os.Handler; import android.os.HandlerThread; @@ -642,25 +641,35 @@ public class FontsContract { continue; } try { - final Font font = new Font.Builder(buffer) + Font font = null; + try { + font = new Font.Builder(buffer) .setWeight(fontInfo.getWeight()) .setSlant(fontInfo.isItalic() ? FontStyle.FONT_SLANT_ITALIC : FontStyle.FONT_SLANT_UPRIGHT) .setTtcIndex(fontInfo.getTtcIndex()) .setFontVariationSettings(fontInfo.getAxes()) .build(); + } catch (IllegalArgumentException e) { + // The exception happens if the unsupported font is passed. We suppress this + // exception and just ignore this font here since there is no way of + // resolving this issue by users during inflating layout. + Log.w(TAG, "Ignoring font file since failed to create font object." + + " The font file is not supported on this platform."); + continue; + } if (familyBuilder == null) { familyBuilder = new FontFamily.Builder(font); } else { try { familyBuilder.addFont(font); } catch (IllegalArgumentException e) { - if (context.getApplicationInfo().targetSdkVersion <= VERSION_CODES.P) { - // Surpress the IllegalArgumentException for keeping the backward - // compatibility. - continue; - } - throw e; + // The exception happens if the same style font is added to the family. + // We suppress this exception and just ignore this font here since there is + // no way of resolving this issue by users during inflating layout. + Log.w(TAG, + "Ignoring font file since the same style font is already added."); + continue; } } } catch (IOException e) { diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 95187149b985..86f658b4a48e 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -33,12 +33,12 @@ import android.graphics.fonts.FontStyle; import android.graphics.fonts.FontVariationAxis; import android.graphics.fonts.SystemFonts; import android.os.Build; -import android.os.Build.VERSION_CODES; import android.os.ParcelFileDescriptor; import android.provider.FontRequest; import android.provider.FontsContract; import android.text.FontConfig; import android.util.Base64; +import android.util.Log; import android.util.LongSparseArray; import android.util.LruCache; import android.util.SparseArray; @@ -48,7 +48,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.Preconditions; import dalvik.annotation.optimization.CriticalNative; -import dalvik.system.VMRuntime; import libcore.util.NativeAllocationRegistry; @@ -262,18 +261,29 @@ public class Typeface { ? FontStyle.FONT_SLANT_ITALIC : FontStyle.FONT_SLANT_UPRIGHT); } + Font font = null; + try { + font = fontBuilder.build(); + } catch (IllegalArgumentException e) { + // The exception happens if the unsupported font is passed. We suppress this + // exception and just ignore this font here since there is no way of + // resolving this issue by users during inflating layout. + Log.w(TAG, "Ignoring font file since failed to create font object." + + " The font file is not supported on this platform."); + continue; + } if (familyBuilder == null) { - familyBuilder = new FontFamily.Builder(fontBuilder.build()); + familyBuilder = new FontFamily.Builder(font); } else { try { - familyBuilder.addFont(fontBuilder.build()); + familyBuilder.addFont(font); } catch (IllegalArgumentException e) { - if (VMRuntime.getRuntime().getTargetSdkVersion() <= VERSION_CODES.P) { - // Surpress the IllegalArgumentException for keeping the backward - // compatibility. - continue; - } - throw e; + // The exception happens if the same style is added to the family. + // We suppress this exception and just ignore this font here since there is + // no way of resolving this issue by users during inflating layout. + Log.w(TAG, + "Ignoring font file since the same style font is already added."); + continue; } } } diff --git a/graphics/java/android/graphics/fonts/Font.java b/graphics/java/android/graphics/fonts/Font.java index f715f43344d3..f92802f5b574 100644 --- a/graphics/java/android/graphics/fonts/Font.java +++ b/graphics/java/android/graphics/fonts/Font.java @@ -354,6 +354,10 @@ public final class Font { /** * Creates the font based on the configured values. + * + * If the font is not supported by the platform, this function will fail with + * {@link IllegalArgumentException}. + * * @return the Font object */ public @Nullable Font build() throws IOException { |