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

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

Refactor Typeface construction logic

API refactoring:
- Replace Font.getWeight()/getSlant() with Font.getStyle().
- Change Typeface.CustomFallbackBuilder.setItalic() to setSlant()

Implementation refactoring:
- Add hidden builder API for asset manager with cookie. The cookie is
internal, so hide the API as well.
- Replace createFromResources with Typeface.Builder
- Reimplement Typeface.Builder with Typeface.CustomFallbackBuilder

Ground work for b/114479228
- Keep list of FontFamily in the Typeface.

Bug: 114479228
Test: atest CtsTestCases
Test: atest CtsGraphicsTestCases
Test: atest CtsWidgetTestCases
Change-Id: Ifaaa58ddea147644a93158aa075394c2f645617c
parent 6b82d83d
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -14679,8 +14679,7 @@ package android.graphics {
    ctor public Typeface.CustomFallbackBuilder(android.graphics.fonts.FontFamily);
    method public android.graphics.Typeface build();
    method public android.graphics.Typeface.CustomFallbackBuilder setFallback(java.lang.String);
    method public android.graphics.Typeface.CustomFallbackBuilder setItalic(boolean);
    method public android.graphics.Typeface.CustomFallbackBuilder setWeight(int);
    method public android.graphics.Typeface.CustomFallbackBuilder setStyle(android.graphics.fonts.FontStyle);
  }
  public class Xfermode {
@@ -15325,9 +15324,8 @@ package android.graphics.fonts {
    method public java.nio.ByteBuffer getBuffer();
    method public java.io.File getFile();
    method public android.os.LocaleList getLocaleList();
    method public int getSlant();
    method public android.graphics.fonts.FontStyle getStyle();
    method public int getTtcIndex();
    method public int getWeight();
  }
  public static class Font.Builder {
+5 −1
Original line number Diff line number Diff line
@@ -76,6 +76,10 @@ public class FontResourcesParser {

    // A class represents font element in xml file which points a file in resource.
    public static final class FontFileResourceEntry {
        public static final int RESOLVE_BY_FONT_TABLE = Typeface.RESOLVE_BY_FONT_TABLE;
        public static final int UPRIGHT = 0;
        public static final int ITALIC = 1;

        private final @NonNull String mFileName;
        private int mWeight;
        private int mItalic;
@@ -216,7 +220,7 @@ public class FontResourcesParser {
        int weight = array.getInt(R.styleable.FontFamilyFont_fontWeight,
                Typeface.RESOLVE_BY_FONT_TABLE);
        int italic = array.getInt(R.styleable.FontFamilyFont_fontStyle,
                Typeface.RESOLVE_BY_FONT_TABLE);
                FontFileResourceEntry.RESOLVE_BY_FONT_TABLE);
        String variationSettings = array.getString(
                R.styleable.FontFamilyFont_fontVariationSettings);
        int ttcIndex = array.getInt(R.styleable.FontFamilyFont_ttcIndex, 0);
+2 −1
Original line number Diff line number Diff line
@@ -944,7 +944,8 @@ public class ResourcesImpl {
                }
                return Typeface.createFromResources(familyEntry, mAssets, file);
            }
            return Typeface.createFromResources(mAssets, file, value.assetCookie);
            return new Typeface.Builder(mAssets, file, false /* isAsset */, value.assetCookie)
                    .build();
        } catch (XmlPullParserException e) {
            Log.e(TAG, "Failed to parse xml resource " + file, e);
        } catch (IOException e) {
+34 −10
Original line number Diff line number Diff line
@@ -15,8 +15,6 @@
 */
package android.provider;

import static java.lang.annotation.RetentionPolicy.SOURCE;

import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
@@ -25,22 +23,22 @@ import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ProviderInfo;
import android.content.pm.Signature;
import android.database.Cursor;
import android.graphics.Typeface;
import android.graphics.fonts.Font;
import android.graphics.fonts.FontFamily;
import android.graphics.fonts.FontStyle;
import android.graphics.fonts.FontVariationAxis;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.ResultReceiver;
import android.util.ArraySet;
import android.util.Log;
import android.util.LruCache;

@@ -49,7 +47,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -64,11 +61,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;

/**
 * Utility class to deal with Font ContentProviders.
@@ -636,7 +633,34 @@ public class FontsContract {
        if (uriBuffer.isEmpty()) {
            return null;
        }
        return new Typeface.Builder(fonts, uriBuffer).build();

        FontFamily.Builder familyBuilder = null;
        for (FontInfo fontInfo : fonts) {
            final ByteBuffer buffer = uriBuffer.get(fontInfo.getUri());
            if (buffer == null) {
                continue;
            }
            try {
                final Font font = new Font.Builder(buffer)
                        .setWeight(fontInfo.getWeight())
                        .setSlant(fontInfo.isItalic()
                                ? FontStyle.FONT_SLANT_ITALIC : FontStyle.FONT_SLANT_UPRIGHT)
                        .setTtcIndex(fontInfo.getTtcIndex())
                        .setFontVariationSettings(fontInfo.getAxes())
                        .build();
                if (familyBuilder == null) {
                    familyBuilder = new FontFamily.Builder(font);
                } else {
                    familyBuilder.addFont(font);
                }
            } catch (IOException e) {
                continue;
            }
        }
        if (familyBuilder == null) {
            return null;
        }
        return new Typeface.CustomFallbackBuilder(familyBuilder.build()).build();
    }

    /**
+133 −219

File changed.

Preview size limit exceeded, changes collapsed.

Loading