From a0a51b6fb629c06c763b73cfe24c6c4d540d54eb Mon Sep 17 00:00:00 2001 From: Diego Perez Date: Tue, 12 Apr 2016 15:34:26 +0100 Subject: [PATCH] Fix broken delegates for FontFamily and PathParser The theme editor is throwing an exception with the last embedded layoutlib because a missing method. Added also another missing method in FontFamily. Change-Id: I710ba7618df6444a3185b581cdc5dc8400f7c604 --- .../android/graphics/FontFamily_Delegate.java | 28 ++++++++++++------- .../src/android/util/PathParser_Delegate.java | 5 ++-- .../tools/layoutlib/create/CreateInfo.java | 1 + 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java index 7412bc269c28b..50efc7f7db861 100644 --- a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java @@ -245,6 +245,13 @@ public class FontFamily_Delegate { return sFontLocation; } + // ---- delegate methods ---- + @LayoutlibDelegate + /*package*/ static boolean addFont(FontFamily thisFontFamily, String path, int ttcIndex) { + final FontFamily_Delegate delegate = getDelegate(thisFontFamily.mNativePtr); + return delegate != null && delegate.addFont(path, ttcIndex); + } + // ---- native methods ---- @LayoutlibDelegate @@ -270,16 +277,8 @@ public class FontFamily_Delegate { } @LayoutlibDelegate - /*package*/ static boolean nAddFont(long nativeFamily, final String path, int ttcIndex) { - // FIXME: support ttc fonts. Hack JRE?? - final FontFamily_Delegate delegate = getDelegate(nativeFamily); - if (delegate != null) { - if (sFontLocation == null) { - delegate.mPostInitRunnables.add(() -> delegate.addFont(path)); - return true; - } - return delegate.addFont(path); - } + /*package*/ static boolean nAddFont(long nativeFamily, ByteBuffer font, int ttcIndex) { + assert false : "The only client of this method has been overriden."; return false; } @@ -390,6 +389,15 @@ public class FontFamily_Delegate { mPostInitRunnables = null; } + private boolean addFont(final String path, int ttcIndex) { + // FIXME: support ttc fonts. Hack JRE?? + if (sFontLocation == null) { + mPostInitRunnables.add(() -> addFont(path)); + return true; + } + return addFont(path); + } + private boolean addFont(@NonNull String path) { return addFont(path, DEFAULT_FONT_WEIGHT, path.endsWith(FONT_SUFFIX_ITALIC)); } diff --git a/tools/layoutlib/bridge/src/android/util/PathParser_Delegate.java b/tools/layoutlib/bridge/src/android/util/PathParser_Delegate.java index 6c34c70b76090..6d3bb4ca91151 100644 --- a/tools/layoutlib/bridge/src/android/util/PathParser_Delegate.java +++ b/tools/layoutlib/bridge/src/android/util/PathParser_Delegate.java @@ -64,15 +64,14 @@ public class PathParser_Delegate { } @LayoutlibDelegate - /*package*/ static boolean nParseStringForPath(long pathPtr, @NonNull String pathString, int + /*package*/ static void nParseStringForPath(long pathPtr, @NonNull String pathString, int stringLength) { Path_Delegate path_delegate = Path_Delegate.getDelegate(pathPtr); if (path_delegate == null) { - return false; + return; } assert pathString.length() == stringLength; PathDataNode.nodesToPath(createNodesFromPathData(pathString), path_delegate); - return true; } @LayoutlibDelegate diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 483bddc218596..061bed7b7740c 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -192,6 +192,7 @@ public final class CreateInfo implements ICreateInfo { "android.graphics.BitmapFactory#setDensityFromOptions", "android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT#useLastSeenTarget", "android.graphics.drawable.GradientDrawable#buildRing", + "android.graphics.FontFamily#addFont", "android.graphics.Typeface#getSystemFontConfigLocation", "android.graphics.Typeface#makeFamilyFromParsed", "android.os.Handler#sendMessageAtTime",