Loading tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java +9 −6 Original line number Diff line number Diff line Loading @@ -294,7 +294,8 @@ public final class BridgeTypedArray extends TypedArray { return null; } String value = mResourceData[index].getValue(); ResourceValue resValue = mResourceData[index]; String value = resValue.getValue(); if (value == null) { return null; Loading @@ -308,11 +309,13 @@ public final class BridgeTypedArray extends TypedArray { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); ColorStateList colorStateList = ColorStateList.createFromXml( mContext.getResources(), // FIXME: we need to know if this resource is platform or not new BridgeXmlBlockParser(parser, mContext, false)); return colorStateList; BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, mContext, resValue.isFramework()); try { return ColorStateList.createFromXml(mContext.getResources(), blockParser); } finally { blockParser.ensurePopped(); } } catch (XmlPullParserException e) { Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Failed to configure parser for " + value, e, null /*data*/); Loading tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java +12 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ public class BridgeXmlBlockParser implements XmlResourceParser { private boolean mStarted = false; private int mEventType = START_DOCUMENT; private boolean mPopped = true; // default to true in case it's not pushed. /** * Builds a {@link BridgeXmlBlockParser}. * @param parser The XmlPullParser to get the content from. Loading @@ -59,6 +61,7 @@ public class BridgeXmlBlockParser implements XmlResourceParser { if (mContext != null) { mContext.pushParser(this); mPopped = false; } } Loading @@ -82,6 +85,13 @@ public class BridgeXmlBlockParser implements XmlResourceParser { return null; } public void ensurePopped() { if (mContext != null && mPopped == false) { mContext.popParser(); mPopped = true; } } // ------- XmlResourceParser implementation public void setFeature(String name, boolean state) Loading Loading @@ -249,9 +259,9 @@ public class BridgeXmlBlockParser implements XmlResourceParser { } int ev = mParser.next(); if (ev == END_TAG && mParser.getDepth() == 1 && mContext != null) { if (ev == END_TAG && mParser.getDepth() == 1) { // done with parser remove it from the context stack. mContext.popParser(); ensurePopped(); } mEventType = ev; return ev; Loading tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java +6 −2 Original line number Diff line number Diff line Loading @@ -76,9 +76,13 @@ abstract class CustomBar extends LinearLayout { "UTF8"); BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( parser, (BridgeContext) context, false); parser, (BridgeContext) context, false /*platformFile*/); try { inflater.inflate(bridgeParser, this, true); } finally { bridgeParser.ensurePopped(); } } private InputStream getIcon(String iconName, Density[] densityInOut, String[] pathOut, Loading tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +5 −4 Original line number Diff line number Diff line Loading @@ -182,8 +182,8 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { context.setBridgeInflater(mInflater); mInflater.setFactory2(context); mBlockParser = new BridgeXmlBlockParser(params.getLayoutDescription(), context, false /* platformResourceFlag */); mBlockParser = new BridgeXmlBlockParser( params.getLayoutDescription(), context, false /* platformResourceFlag */); return SUCCESS.createResult(); } Loading Loading @@ -562,13 +562,14 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { BridgeContext context = getContext(); // create a block parser for the XML BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(childXml, context, false /* platformResourceFlag */); BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( childXml, context, false /* platformResourceFlag */); // inflate the child without adding it to the root since we want to control where it'll // get added. We do pass the parentView however to ensure that the layoutParams will // be created correctly. final View child = mInflater.inflate(blockParser, parentView, false /*attachToRoot*/); blockParser.ensurePopped(); invalidateRenderingSize(); Loading tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java +14 −7 Original line number Diff line number Diff line Loading @@ -126,8 +126,13 @@ public final class ResourceHelper { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); return ColorStateList.createFromXml(context.getResources(), new BridgeXmlBlockParser(parser, context, resValue.isFramework())); BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, context, resValue.isFramework()); try { return ColorStateList.createFromXml(context.getResources(), blockParser); } finally { blockParser.ensurePopped(); } } catch (XmlPullParserException e) { Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Failed to configure parser for " + value, e, null /*data*/); Loading Loading @@ -164,8 +169,6 @@ public final class ResourceHelper { * @param context the current context */ public static Drawable getDrawable(ResourceValue value, BridgeContext context) { Drawable d = null; String stringValue = value.getValue(); if (RenderResources.REFERENCE_NULL.equals(stringValue)) { return null; Loading Loading @@ -205,9 +208,13 @@ public final class ResourceHelper { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); d = Drawable.createFromXml(context.getResources(), new BridgeXmlBlockParser(parser, context, value.isFramework())); return d; BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, context, value.isFramework()); try { return Drawable.createFromXml(context.getResources(), blockParser); } finally { blockParser.ensurePopped(); } } catch (Exception e) { // this is an error and not warning since the file existence is checked before // attempting to parse it. Loading Loading
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java +9 −6 Original line number Diff line number Diff line Loading @@ -294,7 +294,8 @@ public final class BridgeTypedArray extends TypedArray { return null; } String value = mResourceData[index].getValue(); ResourceValue resValue = mResourceData[index]; String value = resValue.getValue(); if (value == null) { return null; Loading @@ -308,11 +309,13 @@ public final class BridgeTypedArray extends TypedArray { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); ColorStateList colorStateList = ColorStateList.createFromXml( mContext.getResources(), // FIXME: we need to know if this resource is platform or not new BridgeXmlBlockParser(parser, mContext, false)); return colorStateList; BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, mContext, resValue.isFramework()); try { return ColorStateList.createFromXml(mContext.getResources(), blockParser); } finally { blockParser.ensurePopped(); } } catch (XmlPullParserException e) { Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Failed to configure parser for " + value, e, null /*data*/); Loading
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java +12 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ public class BridgeXmlBlockParser implements XmlResourceParser { private boolean mStarted = false; private int mEventType = START_DOCUMENT; private boolean mPopped = true; // default to true in case it's not pushed. /** * Builds a {@link BridgeXmlBlockParser}. * @param parser The XmlPullParser to get the content from. Loading @@ -59,6 +61,7 @@ public class BridgeXmlBlockParser implements XmlResourceParser { if (mContext != null) { mContext.pushParser(this); mPopped = false; } } Loading @@ -82,6 +85,13 @@ public class BridgeXmlBlockParser implements XmlResourceParser { return null; } public void ensurePopped() { if (mContext != null && mPopped == false) { mContext.popParser(); mPopped = true; } } // ------- XmlResourceParser implementation public void setFeature(String name, boolean state) Loading Loading @@ -249,9 +259,9 @@ public class BridgeXmlBlockParser implements XmlResourceParser { } int ev = mParser.next(); if (ev == END_TAG && mParser.getDepth() == 1 && mContext != null) { if (ev == END_TAG && mParser.getDepth() == 1) { // done with parser remove it from the context stack. mContext.popParser(); ensurePopped(); } mEventType = ev; return ev; Loading
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java +6 −2 Original line number Diff line number Diff line Loading @@ -76,9 +76,13 @@ abstract class CustomBar extends LinearLayout { "UTF8"); BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( parser, (BridgeContext) context, false); parser, (BridgeContext) context, false /*platformFile*/); try { inflater.inflate(bridgeParser, this, true); } finally { bridgeParser.ensurePopped(); } } private InputStream getIcon(String iconName, Density[] densityInOut, String[] pathOut, Loading
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +5 −4 Original line number Diff line number Diff line Loading @@ -182,8 +182,8 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { context.setBridgeInflater(mInflater); mInflater.setFactory2(context); mBlockParser = new BridgeXmlBlockParser(params.getLayoutDescription(), context, false /* platformResourceFlag */); mBlockParser = new BridgeXmlBlockParser( params.getLayoutDescription(), context, false /* platformResourceFlag */); return SUCCESS.createResult(); } Loading Loading @@ -562,13 +562,14 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { BridgeContext context = getContext(); // create a block parser for the XML BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(childXml, context, false /* platformResourceFlag */); BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( childXml, context, false /* platformResourceFlag */); // inflate the child without adding it to the root since we want to control where it'll // get added. We do pass the parentView however to ensure that the layoutParams will // be created correctly. final View child = mInflater.inflate(blockParser, parentView, false /*attachToRoot*/); blockParser.ensurePopped(); invalidateRenderingSize(); Loading
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java +14 −7 Original line number Diff line number Diff line Loading @@ -126,8 +126,13 @@ public final class ResourceHelper { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); return ColorStateList.createFromXml(context.getResources(), new BridgeXmlBlockParser(parser, context, resValue.isFramework())); BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, context, resValue.isFramework()); try { return ColorStateList.createFromXml(context.getResources(), blockParser); } finally { blockParser.ensurePopped(); } } catch (XmlPullParserException e) { Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Failed to configure parser for " + value, e, null /*data*/); Loading Loading @@ -164,8 +169,6 @@ public final class ResourceHelper { * @param context the current context */ public static Drawable getDrawable(ResourceValue value, BridgeContext context) { Drawable d = null; String stringValue = value.getValue(); if (RenderResources.REFERENCE_NULL.equals(stringValue)) { return null; Loading Loading @@ -205,9 +208,13 @@ public final class ResourceHelper { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new FileReader(f)); d = Drawable.createFromXml(context.getResources(), new BridgeXmlBlockParser(parser, context, value.isFramework())); return d; BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, context, value.isFramework()); try { return Drawable.createFromXml(context.getResources(), blockParser); } finally { blockParser.ensurePopped(); } } catch (Exception e) { // this is an error and not warning since the file existence is checked before // attempting to parse it. Loading