From 13d2e2e10b5f010b4ab53ff9d26e53d32f225e72 Mon Sep 17 00:00:00 2001 From: Deepanshu Gupta Date: Mon, 21 Mar 2016 08:53:13 -0700 Subject: [PATCH] Add guard around getXmlFileParser() call Prevents the need to update the LayoutLib API level. Bug: http://b.android.com/202942 Change-Id: I507239148ab8d6d45406624dba569c8b7197f979 --- .../src/android/content/res/BridgeTypedArray.java | 10 ++++++++-- .../layoutlib/bridge/android/RenderParamsFlags.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java index db4c6dc68b77f..d2c21cb216b5f 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java @@ -26,6 +26,7 @@ import com.android.internal.util.XmlUtils; import com.android.layoutlib.bridge.Bridge; import com.android.layoutlib.bridge.android.BridgeContext; import com.android.layoutlib.bridge.android.BridgeXmlBlockParser; +import com.android.layoutlib.bridge.android.RenderParamsFlags; import com.android.layoutlib.bridge.impl.ParserFactory; import com.android.layoutlib.bridge.impl.ResourceHelper; import com.android.resources.ResourceType; @@ -329,8 +330,13 @@ public final class BridgeTypedArray extends TypedArray { try { - // Get the state list file content from callback to parse PSI file - XmlPullParser parser = mContext.getLayoutlibCallback().getXmlFileParser(value); + XmlPullParser parser = null; + Boolean psiParserSupport = mContext.getLayoutlibCallback().getFlag( + RenderParamsFlags.FLAG_KEY_XML_FILE_PARSER_SUPPORT); + if (psiParserSupport != null && psiParserSupport) { + // Get the state list file content from callback to parse PSI file + parser = mContext.getLayoutlibCallback().getXmlFileParser(value); + } if (parser == null) { // If used with a version of Android Studio that does not implement getXmlFileParser // fall back to reading the file from disk diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java index b98f96f27c916..bd17a2fe6ca2d 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java @@ -16,6 +16,7 @@ package com.android.layoutlib.bridge.android; +import com.android.ide.common.rendering.api.LayoutlibCallback; import com.android.ide.common.rendering.api.RenderParams; import com.android.ide.common.rendering.api.SessionParams.Key; @@ -42,11 +43,16 @@ public final class RenderParamsFlags { public static final Key FLAG_KEY_RECYCLER_VIEW_SUPPORT = new Key("recyclerViewSupport", Boolean.class); /** - * The application package name. Used via - * {@link com.android.ide.common.rendering.api.LayoutlibCallback#getFlag(Key)} + * The application package name. Used via {@link LayoutlibCallback#getFlag(Key)} */ public static final Key FLAG_KEY_APPLICATION_PACKAGE = new Key("applicationPackage", String.class); + /** + * To tell LayoutLib that IDE supports providing XML Parser for a file (useful for getting in + * memory contents of the file). Used via {@link LayoutlibCallback#getFlag(Key)} + */ + public static final Key FLAG_KEY_XML_FILE_PARSER_SUPPORT = + new Key("xmlFileParser", Boolean.class); // Disallow instances. private RenderParamsFlags() {}