summaryrefslogtreecommitdiff
path: root/graphics/java
diff options
context:
space:
mode:
author Seigo Nonaka <nona@google.com> 2019-03-11 15:18:12 -0700
committer Seigo Nonaka <nona@google.com> 2019-03-12 12:13:14 -0700
commit96e93959fb8cb27db1829b28113558cc8136c858 (patch)
tree5ee3f38cc6485eb67fe5a2d59b3e112840e3a689 /graphics/java
parent36ad7638dc4066ec8d563ff9c7fd94fa8291a931 (diff)
Always suppress font error during resource loading
I suppressed the font error during resource loading only if the targetSdkVersion is API 28 or before, but it turned out that this makes developers hard to use font resources since: - We don't give a list of supported font files and OEM may extend/shrink the font support. - There is no way to resolve this error during layout inflation. So, now always supress the IllegalArgumentException during building Typeface in resource loading. Bug: 127714175 Test: atest CtsTextTestCases Test: atest CtsGraphicsTestCases Test: atest FontsContractTest Test: atest CtsWidgetTestCases Change-Id: I08b9f27aaf25ff491fa36d0a4befb3c6e64abfcf
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/Typeface.java30
-rw-r--r--graphics/java/android/graphics/fonts/Font.java4
2 files changed, 24 insertions, 10 deletions
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 {