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()