Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7b3e62f authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Introduce system font enumeration API

To be able to use font file in their apps, provides blob and path to the
font file and locale list as well.

Bug: 26116537
Test: atest CtsWidgetTestCases:EditTextTest
    CtsWidgetTestCases:TextViewFadingEdgeTest
    FrameworksCoreTests:TextViewFallbackLineSpacingTest
    FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest
    CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest
    CtsTextTestCases FrameworksCoreTests:android.text
    CtsWidgetTestCases:TextViewPrecomputedTextTest
    CtsGraphicsTestCases:android.graphics.font

Change-Id: I1ae1302c6906b808012e1e91b1e4ab393c887cb6
parent 900fa920
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -15212,6 +15212,9 @@ package android.graphics.fonts {
  public final class Font {
    method public android.graphics.fonts.FontVariationAxis[] getAxes();
    method public java.nio.ByteBuffer getBuffer();
    method public java.io.File getFile();
    method public android.os.LocaleList getLocaleList();
    method public int getTtcIndex();
    method public int getWeight();
    method public boolean isItalic();
@@ -15260,6 +15263,10 @@ package android.graphics.fonts {
    method public static java.lang.String toFontVariationSettings(android.graphics.fonts.FontVariationAxis[]);
  }
  public class SystemFonts {
    method public static java.util.Set<android.graphics.fonts.Font> getAvailableFonts();
  }
}
package android.graphics.pdf {
+5 −4
Original line number Diff line number Diff line
@@ -181,7 +181,8 @@ public final class FontConfig {
    public static final class Family {
        private final @NonNull String mName;
        private final @NonNull Font[] mFonts;
        private final @NonNull String[] mLanguages;
        // Comma separated BCP47 complient locale strings
        private final @NonNull String mLanguages;

        /** @hide */
        @Retention(SOURCE)
@@ -219,7 +220,7 @@ public final class FontConfig {
        // See frameworks/minikin/include/minikin/FontFamily.h
        private final @Variant int mVariant;

        public Family(@NonNull String name, @NonNull Font[] fonts, @NonNull String[] languages,
        public Family(@NonNull String name, @NonNull Font[] fonts, @NonNull String languages,
                @Variant int variant) {
            mName = name;
            mFonts = fonts;
@@ -244,9 +245,9 @@ public final class FontConfig {
        }

        /**
         * Returns the languages for this family. May be null.
         * Returns the comma separated BCP47 complient languages for this family. May be null.
         */
        public @Nullable String[] getLanguages() {
        public @NonNull String getLanguages() {
            return mLanguages;
        }

+7 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.fonts.Font;
import android.graphics.fonts.FontFamily;
import android.graphics.fonts.SystemFonts;
import android.support.test.InstrumentationRegistry;
@@ -43,6 +44,7 @@ import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.HashSet;
import java.util.Locale;

@SmallTest
@@ -110,13 +112,14 @@ public class TypefaceSystemFallbackTest {

    private static void buildSystemFallback(String xml,
            ArrayMap<String, Typeface> fontMap, ArrayMap<String, FontFamily[]> fallbackMap) {
        final HashSet<Font> availableFonts = new HashSet<>();
        try (FileOutputStream fos = new FileOutputStream(TEST_FONTS_XML)) {
            fos.write(xml.getBytes(Charset.forName("UTF-8")));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        final FontConfig.Alias[] aliases = SystemFonts.buildSystemFallback(TEST_FONTS_XML,
                TEST_FONT_DIR, fallbackMap);
                TEST_FONT_DIR, fallbackMap, availableFonts);
        Typeface.initSystemDefaultTypefaces(fontMap, fallbackMap, aliases);
    }

@@ -124,9 +127,10 @@ public class TypefaceSystemFallbackTest {
    public void testBuildSystemFallback() {
        final ArrayMap<String, Typeface> fontMap = new ArrayMap<>();
        final ArrayMap<String, FontFamily[]> fallbackMap = new ArrayMap<>();
        final HashSet<Font> availableFonts = new HashSet<>();

        final FontConfig.Alias[] aliases = SystemFonts.buildSystemFallback(SYSTEM_FONTS_XML,
                SYSTEM_FONT_DIR, fallbackMap);
                SYSTEM_FONT_DIR, fallbackMap, availableFonts);

        assertNotNull(aliases);
        assertFalse(fallbackMap.isEmpty());
@@ -487,7 +491,7 @@ public class TypefaceSystemFallbackTest {
                + "  <family lang='de'>"
                + "    <font weight='400' style='normal'>a3em.ttf</font>"
                + "  </family>"
                + "  <family lang='it fr'>"
                + "  <family lang='it,fr'>"
                + "    <font weight='400' style='normal'>b3em.ttf</font>"
                + "  </family>"
                + "</familyset>";
+4 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Typeface;
import android.graphics.fonts.Font;
import android.graphics.fonts.FontFamily;
import android.graphics.fonts.SystemFonts;
import android.support.test.InstrumentationRegistry;
@@ -32,6 +33,7 @@ import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.HashSet;

public class FontFallbackSetup implements AutoCloseable {
    private final String[] mTestFontFiles;
@@ -74,8 +76,9 @@ public class FontFallbackSetup implements AutoCloseable {
        }

        final ArrayMap<String, FontFamily[]> fallbackMap = new ArrayMap<>();
        final HashSet<Font> availableFonts = new HashSet<>();
        final FontConfig.Alias[] aliases = SystemFonts.buildSystemFallback(testFontsXml,
                mTestFontsDir, fallbackMap);
                mTestFontsDir, fallbackMap, availableFonts);
        Typeface.initSystemDefaultTypefaces(mFontMap, fallbackMap, aliases);
    }

+2 −2
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@
        <font weight="400" style="normal" fallbackFor="serif">NotoSerifArmenian-Regular.otf</font>
        <font weight="700" style="normal" fallbackFor="serif">NotoSerifArmenian-Bold.otf</font>
    </family>
    <family lang="und-Geor und-Geok">
    <family lang="und-Geor,und-Geok">
        <font weight="400" style="normal">NotoSansGeorgian-Regular.otf</font>
        <font weight="500" style="normal">NotoSansGeorgian-Medium.otf</font>
        <font weight="700" style="normal">NotoSansGeorgian-Bold.otf</font>
@@ -538,7 +538,7 @@
        <font weight="400" style="normal" index="2">NotoSansCJK-Regular.ttc</font>
        <font weight="400" style="normal" index="2" fallbackFor="serif">NotoSerifCJK-Regular.ttc</font>
    </family>
    <family lang="zh-Hant zh-Bopo">
    <family lang="zh-Hant,zh-Bopo">
        <font weight="400" style="normal" index="3">NotoSansCJK-Regular.ttc</font>
        <font weight="400" style="normal" index="3" fallbackFor="serif">NotoSerifCJK-Regular.ttc</font>
    </family>
Loading