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

Commit 5fff20ca authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clean up public FontConfig APIs"

parents 4b7c5f75 ac873c9f
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -40890,11 +40890,10 @@ package android.text {
  }
  public final class FontConfig implements android.os.Parcelable {
    ctor public FontConfig();
    ctor public FontConfig(android.text.FontConfig);
    ctor public FontConfig(android.text.FontConfig.Family[], android.text.FontConfig.Alias[]);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Alias> getAliases();
    method public java.util.List<android.text.FontConfig.Family> getFamilies();
    method public android.text.FontConfig.Alias[] getAliases();
    method public android.text.FontConfig.Family[] getFamilies();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
  }
@@ -40919,22 +40918,22 @@ package android.text {
  }
  public static final class FontConfig.Family implements android.os.Parcelable {
    ctor public FontConfig.Family(java.lang.String, java.util.List<android.text.FontConfig.Font>, java.lang.String, java.lang.String);
    ctor public FontConfig.Family(android.text.FontConfig.Family);
    ctor public FontConfig.Family(java.lang.String, android.text.FontConfig.Font[], java.lang.String, int);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Font> getFonts();
    method public android.text.FontConfig.Font[] getFonts();
    method public java.lang.String getLanguage();
    method public java.lang.String getName();
    method public java.lang.String getVariant();
    method public int getVariant();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.text.FontConfig.Family> CREATOR;
    field public static final int VARIANT_COMPACT = 1; // 0x1
    field public static final int VARIANT_DEFAULT = 0; // 0x0
    field public static final int VARIANT_ELEGANT = 2; // 0x2
  }
  public static final class FontConfig.Font implements android.os.Parcelable {
    ctor public FontConfig.Font(java.lang.String, int, java.util.List<android.text.FontConfig.Axis>, int, boolean);
    ctor public FontConfig.Font(android.text.FontConfig.Font);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Axis> getAxes();
    method public android.text.FontConfig.Axis[] getAxes();
    method public android.os.ParcelFileDescriptor getFd();
    method public java.lang.String getFontName();
    method public int getTtcIndex();
+10 −11
Original line number Diff line number Diff line
@@ -44355,11 +44355,10 @@ package android.text {
  }
  public final class FontConfig implements android.os.Parcelable {
    ctor public FontConfig();
    ctor public FontConfig(android.text.FontConfig);
    ctor public FontConfig(android.text.FontConfig.Family[], android.text.FontConfig.Alias[]);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Alias> getAliases();
    method public java.util.List<android.text.FontConfig.Family> getFamilies();
    method public android.text.FontConfig.Alias[] getAliases();
    method public android.text.FontConfig.Family[] getFamilies();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
  }
@@ -44384,22 +44383,22 @@ package android.text {
  }
  public static final class FontConfig.Family implements android.os.Parcelable {
    ctor public FontConfig.Family(java.lang.String, java.util.List<android.text.FontConfig.Font>, java.lang.String, java.lang.String);
    ctor public FontConfig.Family(android.text.FontConfig.Family);
    ctor public FontConfig.Family(java.lang.String, android.text.FontConfig.Font[], java.lang.String, int);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Font> getFonts();
    method public android.text.FontConfig.Font[] getFonts();
    method public java.lang.String getLanguage();
    method public java.lang.String getName();
    method public java.lang.String getVariant();
    method public int getVariant();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.text.FontConfig.Family> CREATOR;
    field public static final int VARIANT_COMPACT = 1; // 0x1
    field public static final int VARIANT_DEFAULT = 0; // 0x0
    field public static final int VARIANT_ELEGANT = 2; // 0x2
  }
  public static final class FontConfig.Font implements android.os.Parcelable {
    ctor public FontConfig.Font(java.lang.String, int, java.util.List<android.text.FontConfig.Axis>, int, boolean);
    ctor public FontConfig.Font(android.text.FontConfig.Font);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Axis> getAxes();
    method public android.text.FontConfig.Axis[] getAxes();
    method public android.os.ParcelFileDescriptor getFd();
    method public java.lang.String getFontName();
    method public int getTtcIndex();
+10 −11
Original line number Diff line number Diff line
@@ -41083,11 +41083,10 @@ package android.text {
  }
  public final class FontConfig implements android.os.Parcelable {
    ctor public FontConfig();
    ctor public FontConfig(android.text.FontConfig);
    ctor public FontConfig(android.text.FontConfig.Family[], android.text.FontConfig.Alias[]);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Alias> getAliases();
    method public java.util.List<android.text.FontConfig.Family> getFamilies();
    method public android.text.FontConfig.Alias[] getAliases();
    method public android.text.FontConfig.Family[] getFamilies();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
  }
@@ -41112,22 +41111,22 @@ package android.text {
  }
  public static final class FontConfig.Family implements android.os.Parcelable {
    ctor public FontConfig.Family(java.lang.String, java.util.List<android.text.FontConfig.Font>, java.lang.String, java.lang.String);
    ctor public FontConfig.Family(android.text.FontConfig.Family);
    ctor public FontConfig.Family(java.lang.String, android.text.FontConfig.Font[], java.lang.String, int);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Font> getFonts();
    method public android.text.FontConfig.Font[] getFonts();
    method public java.lang.String getLanguage();
    method public java.lang.String getName();
    method public java.lang.String getVariant();
    method public int getVariant();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.text.FontConfig.Family> CREATOR;
    field public static final int VARIANT_COMPACT = 1; // 0x1
    field public static final int VARIANT_DEFAULT = 0; // 0x0
    field public static final int VARIANT_ELEGANT = 2; // 0x2
  }
  public static final class FontConfig.Font implements android.os.Parcelable {
    ctor public FontConfig.Font(java.lang.String, int, java.util.List<android.text.FontConfig.Axis>, int, boolean);
    ctor public FontConfig.Font(android.text.FontConfig.Font);
    method public int describeContents();
    method public java.util.List<android.text.FontConfig.Axis> getAxes();
    method public android.text.FontConfig.Axis[] getAxes();
    method public android.os.ParcelFileDescriptor getFd();
    method public java.lang.String getFontName();
    method public int getTtcIndex();
+93 −14
Original line number Diff line number Diff line
@@ -16,7 +16,8 @@
package android.content.res;

import com.android.internal.R;
import android.text.FontConfig;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Xml;

@@ -35,7 +36,81 @@ public class FontResourcesParser {
    private static final int NORMAL_WEIGHT = 400;
    private static final int ITALIC = 1;

    public static FontConfig parse(XmlPullParser parser, Resources resources)
    // A class represents single entry of font-family in xml file.
    public interface FamilyResourceEntry {}

    // A class represents font provider based font-family element in xml file.
    public static final class ProviderResourceEntry implements FamilyResourceEntry {
        private final @NonNull String mProviderAuthority;
        private final @NonNull String mProviderPackage;
        private final @NonNull String mQuery;

        public ProviderResourceEntry(@NonNull String authority, @NonNull String pkg,
                @NonNull String query) {
            mProviderAuthority = authority;
            mProviderPackage = pkg;
            mQuery = query;
        }

        public @NonNull String getAuthority() {
            return mProviderAuthority;
        }

        public @NonNull String getPackage() {
            return mProviderPackage;
        }

        public @NonNull String getQuery() {
            return mQuery;
        }
    }

    // A class represents font element in xml file which points a file in resource.
    public static final class FontFileResourceEntry {
        private final @NonNull String mFileName;
        private int mWeight;
        private boolean mItalic;
        private int mResourceId;

        public FontFileResourceEntry(@NonNull String fileName, int weight, boolean italic,
                int resourceId) {
            mFileName = fileName;
            mWeight = weight;
            mItalic = italic;
            mResourceId = resourceId;
        }

        public @NonNull String getFileName() {
            return mFileName;
        }

        public int getWeight() {
            return mWeight;
        }

        public boolean isItalic() {
            return mItalic;
        }

        public int getResourceId() {
            return mResourceId;
        }
    }

    // A class represents file based font-family element in xml file.
    public static final class FontFamilyFilesResourceEntry implements FamilyResourceEntry {
        private final @NonNull FontFileResourceEntry[] mEntries;

        public FontFamilyFilesResourceEntry(@NonNull FontFileResourceEntry[] entries) {
            mEntries = entries;
        }

        public @NonNull FontFileResourceEntry[] getEntries() {
            return mEntries;
        }
    }

    public static @Nullable FamilyResourceEntry parse(XmlPullParser parser, Resources resources)
            throws XmlPullParserException, IOException {
        int type;
        while ((type=parser.next()) != XmlPullParser.START_TAG
@@ -49,21 +124,21 @@ public class FontResourcesParser {
        return readFamilies(parser, resources);
    }

    private static FontConfig readFamilies(XmlPullParser parser, Resources resources)
            throws XmlPullParserException, IOException {
        FontConfig config = new FontConfig();
    private static @Nullable FamilyResourceEntry readFamilies(XmlPullParser parser,
            Resources resources) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, null, "font-family");
        String tag = parser.getName();
        FamilyResourceEntry result = null;
        if (tag.equals("font-family")) {
            config.getFamilies().add(readFamily(parser, resources));
            return readFamily(parser, resources);
        } else {
            skip(parser);
            return null;
        }
        return config;
    }

    private static FontConfig.Family readFamily(XmlPullParser parser, Resources resources)
            throws XmlPullParserException, IOException {
    private static @Nullable FamilyResourceEntry readFamily(XmlPullParser parser,
            Resources resources) throws XmlPullParserException, IOException {
        AttributeSet attrs = Xml.asAttributeSet(parser);
        TypedArray array = resources.obtainAttributes(attrs, R.styleable.FontFamily);
        String authority = array.getString(R.styleable.FontFamily_fontProviderAuthority);
@@ -74,9 +149,9 @@ public class FontResourcesParser {
            while (parser.next() != XmlPullParser.END_TAG) {
                skip(parser);
            }
            return new FontConfig.Family(authority, providerPackage, query);
            return new ProviderResourceEntry(authority, providerPackage, query);
        }
        List<FontConfig.Font> fonts = new ArrayList<>();
        List<FontFileResourceEntry> fonts = new ArrayList<>();
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
            String tag = parser.getName();
@@ -86,10 +161,14 @@ public class FontResourcesParser {
                skip(parser);
            }
        }
        return new FontConfig.Family(null, fonts, null, null);
        if (fonts.isEmpty()) {
            return null;
        }
        return new FontFamilyFilesResourceEntry(fonts.toArray(
                new FontFileResourceEntry[fonts.size()]));
    }

    private static FontConfig.Font readFont(XmlPullParser parser, Resources resources)
    private static FontFileResourceEntry readFont(XmlPullParser parser, Resources resources)
            throws XmlPullParserException, IOException {
        AttributeSet attrs = Xml.asAttributeSet(parser);
        TypedArray array = resources.obtainAttributes(attrs, R.styleable.FontFamilyFont);
@@ -101,7 +180,7 @@ public class FontResourcesParser {
        while (parser.next() != XmlPullParser.END_TAG) {
            skip(parser);
        }
        return new FontConfig.Font(filename, 0, null, weight, isItalic, resourceId);
        return new FontFileResourceEntry(filename, weight, isItalic, resourceId);
    }

    private static void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+20 −12
Original line number Diff line number Diff line
@@ -769,8 +769,13 @@ public class ResourcesImpl {
            if (file.endsWith("xml")) {
                final XmlResourceParser rp = loadXmlResourceParser(
                        file, id, value.assetCookie, "font");
                final FontConfig config = FontResourcesParser.parse(rp, wrapper);
                return Typeface.createFromResources(config, mAssets, file);
                final FontResourcesParser.FamilyResourceEntry familyEntry =
                        FontResourcesParser.parse(rp, wrapper);
                if (familyEntry == null) {
                    Log.e(TAG, "Failed to find font-family tag");
                    return null;
                }
                return Typeface.createFromResources(familyEntry, mAssets, file);
            }
            return Typeface.createFromResources(mAssets, file, value.assetCookie);
        } catch (XmlPullParserException e) {
@@ -796,20 +801,23 @@ public class ResourcesImpl {

        Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, file);
        try {
            // TODO: Stop re-ussing font-family xml tag structure and use ResourceArray instead.
            final XmlResourceParser rp = loadXmlResourceParser(
                    file, id, value.assetCookie, "font");
            final FontConfig config = FontResourcesParser.parse(rp, wrapper);
            final List<FontConfig.Family> families = config.getFamilies();
            if (families == null || families.isEmpty()) {
            final FontResourcesParser.FamilyResourceEntry familyEntry =
                    FontResourcesParser.parse(rp, wrapper);
            if (familyEntry == null) {
                Log.e(TAG, "failed to find font-family tag");
                return;
            }
            for (int j = 0; j < families.size(); j++) {
                final FontConfig.Family family = families.get(j);
                final List<FontConfig.Font> fonts = family.getFonts();
                for (int i = 0; i < fonts.size(); i++) {
                    int resourceId = fonts.get(i).getResourceId();
                    wrapper.getFont(resourceId);
            if (familyEntry instanceof FontResourcesParser.ProviderResourceEntry) {
                throw new IllegalArgumentException("Provider based fonts can not be used.");
            }
            final FontResourcesParser.FontFamilyFilesResourceEntry filesEntry =
                    (FontResourcesParser.FontFamilyFilesResourceEntry) familyEntry;
            for (FontResourcesParser.FontFileResourceEntry fileEntry : filesEntry.getEntries()) {
                int resourceId = fileEntry.getResourceId();
                wrapper.getFont(resourceId);
            }
        } catch (XmlPullParserException e) {
            Log.e(TAG, "Failed to parse xml resource " + file, e);
Loading