Parse fonts.xml when SystemFonts#getAvailableFonts is called

The fonts.xml is no longer parsed once we move to new model.
Thus, need to parse fonts.xml when SystemFonts#getAvailableFonts
is called.

Bug: 173752727
Test: atest NativeSystemFontTest
Change-Id: I628a2586f8450b942caf34ede5dc827e31fff0ef
This commit is contained in:
Seigo Nonaka
2020-12-03 20:02:16 -08:00
parent 0cd2dbd97b
commit 1aa57ec5c5

View File

@@ -88,31 +88,19 @@ public final class SystemFonts {
}
private static @NonNull Set<Font> collectAllFonts() {
Map<String, Typeface> map = Typeface.getSystemFontMap();
HashSet<NativeFont.Font> seenFonts = new HashSet<>();
HashSet<Font> result = new HashSet<>();
for (Typeface typeface : map.values()) {
List<NativeFont.Family> families = NativeFont.readTypeface(typeface);
for (NativeFont.Family family : families) {
for (NativeFont.Font font : family.getFonts()) {
if (seenFonts.contains(font)) {
continue;
}
seenFonts.add(font);
try {
result.add(new Font.Builder(font.getFile(), family.getLocale())
.setFontVariationSettings(font.getAxes())
.setTtcIndex(font.getIndex())
.setWeight(font.getStyle().getWeight())
.setSlant(font.getStyle().getSlant())
.build());
} catch (IOException e) {
Log.w(TAG, "Failed to load " + font.getFile(), e);
}
final FontCustomizationParser.Result oemCustomization =
readFontCustomization("/product/etc/fonts_customization.xml", "/product/fonts/");
Map<String, FontFamily[]> map = new ArrayMap<>();
buildSystemFallback("/system/etc/fonts.xml", "/system/fonts/", oemCustomization, map);
Set<Font> res = new HashSet<>();
for (FontFamily[] families : map.values()) {
for (FontFamily family : families) {
for (int i = 0; i < family.getSize(); ++i) {
res.add(family.getFont(i));
}
}
}
return result;
return res;
}
private static @Nullable ByteBuffer mmap(@NonNull String fullPath) {