summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2018-11-05 21:09:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-11-05 21:09:23 +0000
commit0a2786cc5d16f330142c235f1a8b7cb05c3262fb (patch)
tree024cca2e3a3261f9bcba8b536af137d4ec67a13f /core/java
parentf2c351abb478c958a0e11aa6748e6099e4ec20b2 (diff)
parentee4b6d85dcc11bba2aaeea4811ba490c4c7e7028 (diff)
Merge "Refactor Typeface construction logic"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/res/FontResourcesParser.java6
-rw-r--r--core/java/android/content/res/ResourcesImpl.java3
-rw-r--r--core/java/android/provider/FontsContract.java44
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();
}
/**