diff --git a/core/tests/coretests/src/android/graphics/FontListParserTest.java b/core/tests/coretests/src/android/graphics/FontListParserTest.java index 701e6194d4ee..479e52aab029 100644 --- a/core/tests/coretests/src/android/graphics/FontListParserTest.java +++ b/core/tests/coretests/src/android/graphics/FontListParserTest.java @@ -355,6 +355,27 @@ public final class FontListParserTest { assertThat(config.getAliases()).isEmpty(); } + @Test + public void ignore() throws Exception { + String xml = "" + + "" + + " " + + " test.ttf" + + " " + + " " + + " emoji_legacy.ttf" + + " " + + " " + + " emoji.ttf" + + " " + + ""; + FontConfig config = readFamilies(xml, true /* include non-existing font files */); + List families = config.getFontFamilies(); + assertThat(families.size()).isEqualTo(2); // legacy one should be ignored. + assertThat(families.get(1).getFontList().get(0).getFile().getName()) + .isEqualTo("emoji.ttf"); + } + private FontConfig readFamilies(String xml, boolean allowNonExisting) throws IOException, XmlPullParserException { ByteArrayInputStream buffer = new ByteArrayInputStream( diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml index e050e1784fac..84e949a18c52 100644 --- a/data/fonts/fonts.xml +++ b/data/fonts/fonts.xml @@ -1328,6 +1328,9 @@ postScriptName="NotoSerifCJKjp-Regular">NotoSerifCJK-Regular.ttc + + NotoColorEmojiLegacy.ttf + NotoColorEmoji.ttf diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java index 96b33259e739..4bb16c6b8186 100644 --- a/graphics/java/android/graphics/FontListParser.java +++ b/graphics/java/android/graphics/FontListParser.java @@ -218,6 +218,7 @@ public class FontListParser { final String name = parser.getAttributeValue(null, "name"); final String lang = parser.getAttributeValue("", "lang"); final String variant = parser.getAttributeValue(null, "variant"); + final String ignore = parser.getAttributeValue(null, "ignore"); final List fonts = new ArrayList<>(); while (keepReading(parser)) { if (parser.getEventType() != XmlPullParser.START_TAG) continue; @@ -240,7 +241,9 @@ public class FontListParser { intVariant = FontConfig.FontFamily.VARIANT_ELEGANT; } } - if (fonts.isEmpty()) { + + boolean skip = (ignore != null && (ignore.equals("true") || ignore.equals("1"))); + if (skip || fonts.isEmpty()) { return null; } return new FontConfig.FontFamily(fonts, name, LocaleList.forLanguageTags(lang), intVariant); diff --git a/tools/fonts/fontchain_linter.py b/tools/fonts/fontchain_linter.py index 2c2c91825162..0d9ea1b70680 100755 --- a/tools/fonts/fontchain_linter.py +++ b/tools/fonts/fontchain_linter.py @@ -243,6 +243,8 @@ def parse_fonts_xml(fonts_xml_path): name = family.get('name') variant = family.get('variant') langs = family.get('lang') + ignoreAttr = family.get('ignore') + if name: assert variant is None, ( 'No variant expected for LGC font %s.' % name) @@ -259,6 +261,11 @@ def parse_fonts_xml(fonts_xml_path): name = family.get('name') variant = family.get('variant') langs = family.get('lang') + ignoreAttr = family.get('ignore') + ignore = ignoreAttr == 'true' or ignoreAttr == '1' + + if ignore: + continue if langs: langs = langs.split()