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() {} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java index 494b3d2492f90..a21de56066cb2 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java @@ -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()) {