diff options
| author | Seigo Nonaka <nona@google.com> | 2018-11-05 21:09:23 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-11-05 21:09:23 +0000 |
| commit | 0a2786cc5d16f330142c235f1a8b7cb05c3262fb (patch) | |
| tree | 024cca2e3a3261f9bcba8b536af137d4ec67a13f /core/java | |
| parent | f2c351abb478c958a0e11aa6748e6099e4ec20b2 (diff) | |
| parent | ee4b6d85dcc11bba2aaeea4811ba490c4c7e7028 (diff) | |
Merge "Refactor Typeface construction logic"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/content/res/FontResourcesParser.java | 6 | ||||
| -rw-r--r-- | core/java/android/content/res/ResourcesImpl.java | 3 | ||||
| -rw-r--r-- | core/java/android/provider/FontsContract.java | 44 |
3 files changed, 41 insertions, 12 deletions
diff --git a/core/java/android/content/res/FontResourcesParser.java b/core/java/android/content/res/FontResourcesParser.java index 6a4aae66c848..14eb11ab8863 100644 --- a/core/java/android/content/res/FontResourcesParser.java +++ b/core/java/android/content/res/FontResourcesParser.java @@ -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); diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java index dfa30a22597e..1d1eaf3e4286 100644 --- a/core/java/android/content/res/ResourcesImpl.java +++ b/core/java/android/content/res/ResourcesImpl.java @@ -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) { diff --git a/core/java/android/provider/FontsContract.java b/core/java/android/provider/FontsContract.java index a1d1c5736116..76607e9d42d2 100644 --- a/core/java/android/provider/FontsContract.java +++ b/core/java/android/provider/FontsContract.java @@ -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(); } /** |
