Add guard around getXmlFileParser() call

Prevents the need to update the LayoutLib API level.

Bug: http://b.android.com/202942
Change-Id: I507239148ab8d6d45406624dba569c8b7197f979
This commit is contained in:
Deepanshu Gupta
2016-03-21 14:07:20 -07:00
parent 8c536f91f1
commit cd6e47e445
2 changed files with 15 additions and 3 deletions

View File

@@ -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<Boolean> FLAG_KEY_RECYCLER_VIEW_SUPPORT =
new Key<Boolean>("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<String> FLAG_KEY_APPLICATION_PACKAGE =
new Key<String>("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<Boolean> FLAG_KEY_XML_FILE_PARSER_SUPPORT =
new Key<Boolean>("xmlFileParser", Boolean.class);
// Disallow instances.
private RenderParamsFlags() {}

View File

@@ -25,6 +25,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.ninepatch.NinePatch;
import com.android.ninepatch.NinePatchChunk;
import com.android.resources.Density;
@@ -142,8 +143,13 @@ public final class ResourceHelper {
return null;
}
XmlPullParser parser = null;
// first check if the value is a file (xml most likely)
XmlPullParser parser = context.getLayoutlibCallback().getXmlFileParser(value);
Boolean psiParserSupport = context.getLayoutlibCallback().getFlag(
RenderParamsFlags.FLAG_KEY_XML_FILE_PARSER_SUPPORT);
if (psiParserSupport != null && psiParserSupport) {
parser = context.getLayoutlibCallback().getXmlFileParser(value);
}
if (parser == null) {
File f = new File(value);
if (f.isFile()) {