diff options
author | Seigo Nonaka <nona@google.com> | 2021-07-12 18:37:27 -0700 |
---|---|---|
committer | Seigo Nonaka <nona@google.com> | 2021-08-26 06:21:18 +0000 |
commit | 4ed687a48f6d9b3b20989ec1290c163db8265925 (patch) | |
tree | e9eab2108af5e88332d6f37403ce4059d6511f46 /graphics | |
parent | 8b5f287dcb8cf6a3195e0da301381c51b74f109c (diff) |
Filter Alias which points non-existing font family name
The FontFamily will be removed if none of font files exist on the
device.
Bug: 192479819
Test: atest FontListParserTest
Change-Id: I36f6476fe37bc04ec8737936747385c63908d651
(cherry picked from commit 691cfe8818513e576300cdb963a65341984659c4)
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/java/android/graphics/FontListParser.java | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java index 93a336e7a408..96b33259e739 100644 --- a/graphics/java/android/graphics/FontListParser.java +++ b/graphics/java/android/graphics/FontListParser.java @@ -25,6 +25,7 @@ import android.graphics.fonts.FontVariationAxis; import android.os.Build; import android.os.LocaleList; import android.text.FontConfig; +import android.util.ArraySet; import android.util.Xml; import org.xmlpull.v1.XmlPullParser; @@ -37,6 +38,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.regex.Pattern; /** @@ -120,7 +122,23 @@ public class FontListParser { } } - private static FontConfig readFamilies( + /** + * Parses the familyset tag in font.xml + * @param parser a XML pull parser + * @param fontDir A system font directory, e.g. "/system/fonts" + * @param customization A OEM font customization + * @param updatableFontMap A map of updated font files + * @param lastModifiedDate A date that the system font is updated. + * @param configVersion A version of system font config. + * @param allowNonExistingFile true if allowing non-existing font files during parsing fonts.xml + * @return result of fonts.xml + * + * @throws XmlPullParserException + * @throws IOException + * + * @hide + */ + public static FontConfig readFamilies( @NonNull XmlPullParser parser, @NonNull String fontDir, @NonNull FontCustomizationParser.Result customization, @@ -159,7 +177,24 @@ public class FontListParser { } families.addAll(oemNamedFamilies.values()); - return new FontConfig(families, aliases, lastModifiedDate, configVersion); + + // Filters aliases that point to non-existing families. + Set<String> namedFamilies = new ArraySet<>(); + for (int i = 0; i < families.size(); ++i) { + String name = families.get(i).getName(); + if (name != null) { + namedFamilies.add(name); + } + } + List<FontConfig.Alias> filtered = new ArrayList<>(); + for (int i = 0; i < aliases.size(); ++i) { + FontConfig.Alias alias = aliases.get(i); + if (namedFamilies.contains(alias.getOriginal())) { + filtered.add(alias); + } + } + + return new FontConfig(families, filtered, lastModifiedDate, configVersion); } private static boolean keepReading(XmlPullParser parser) |