1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/* 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2008 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License. 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License. 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.layoutlib.bridge.android; 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ILayoutPullParser; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.ParserFactory; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParser; 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParserException; 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.XmlResourceParser; 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.AttributeSet; 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.BridgeXmlPullAttributes; 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.IOException; 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.InputStream; 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.Reader; 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/** 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * {@link BridgeXmlBlockParser} reimplements most of android.xml.XmlBlock.Parser. 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * It delegates to both an instance of {@link XmlPullParser} and an instance of 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * XmlPullAttributes (for the {@link AttributeSet} part). 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic class BridgeXmlBlockParser implements XmlResourceParser { 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final XmlPullParser mParser; 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final BridgeXmlPullAttributes mAttrib; 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final BridgeContext mContext; 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final boolean mPlatformFile; 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private boolean mStarted = false; 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private int mEventType = START_DOCUMENT; 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private boolean mPopped = true; // default to true in case it's not pushed. 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Builds a {@link BridgeXmlBlockParser}. 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param parser The XmlPullParser to get the content from. 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param context the Context. 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param platformFile Indicates whether the the file is a platform file or not. 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public BridgeXmlBlockParser(XmlPullParser parser, BridgeContext context, boolean platformFile) { 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ParserFactory.LOG_PARSER) { 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski System.out.println("CRTE " + parser.toString()); 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mParser = parser; 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mContext = context; 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mPlatformFile = platformFile; 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mAttrib = new BridgeXmlPullAttributes(parser, context, mPlatformFile); 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mContext != null) { 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mContext.pushParser(this); 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mPopped = false; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public XmlPullParser getParser() { 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser; 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean isPlatformFile() { 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mPlatformFile; 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Object getViewCookie() { 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mParser instanceof ILayoutPullParser) { 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ((ILayoutPullParser)mParser).getViewCookie(); 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void ensurePopped() { 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mContext != null && mPopped == false) { 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mContext.popParser(); 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mPopped = true; 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ------- XmlResourceParser implementation 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setFeature(String name, boolean state) 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throws XmlPullParserException { 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (FEATURE_PROCESS_NAMESPACES.equals(name) && state) { 102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (FEATURE_REPORT_NAMESPACE_ATTRIBUTES.equals(name) && state) { 105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException("Unsupported feature: " + name); 108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean getFeature(String name) { 112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (FEATURE_PROCESS_NAMESPACES.equals(name)) { 113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (FEATURE_REPORT_NAMESPACE_ATTRIBUTES.equals(name)) { 116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setProperty(String name, Object value) throws XmlPullParserException { 123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException("setProperty() not supported"); 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Object getProperty(String name) { 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setInput(Reader in) throws XmlPullParserException { 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mParser.setInput(in); 134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setInput(InputStream inputStream, String inputEncoding) 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throws XmlPullParserException { 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mParser.setInput(inputStream, inputEncoding); 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void defineEntityReplacementText(String entityName, 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String replacementText) throws XmlPullParserException { 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException( 146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "defineEntityReplacementText() not supported"); 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getNamespacePrefix(int pos) throws XmlPullParserException { 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException("getNamespacePrefix() not supported"); 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getInputEncoding() { 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getNamespace(String prefix) { 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new RuntimeException("getNamespace() not supported"); 162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getNamespaceCount(int depth) throws XmlPullParserException { 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException("getNamespaceCount() not supported"); 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getPositionDescription() { 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "Binary XML file line #" + getLineNumber(); 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getNamespaceUri(int pos) throws XmlPullParserException { 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException("getNamespaceUri() not supported"); 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getColumnNumber() { 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return -1; 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getDepth() { 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getDepth(); 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getText() { 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getText(); 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getLineNumber() { 196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getLineNumber(); 197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getEventType() { 201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mEventType; 202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean isWhitespace() throws XmlPullParserException { 206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Original comment: whitespace was stripped by aapt. 207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.isWhitespace(); 208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getPrefix() { 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new RuntimeException("getPrefix not supported"); 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public char[] getTextCharacters(int[] holderForStartAndLength) { 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String txt = getText(); 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski char[] chars = null; 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (txt != null) { 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski holderForStartAndLength[0] = 0; 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski holderForStartAndLength[1] = txt.length(); 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski chars = new char[txt.length()]; 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski txt.getChars(0, txt.length(), chars, 0); 224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return chars; 226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getNamespace() { 230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getNamespace(); 231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getName() { 235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getName(); 236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getAttributeNamespace(int index) { 240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getAttributeNamespace(index); 241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getAttributeName(int index) { 245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getAttributeName(index); 246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getAttributePrefix(int index) { 250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new RuntimeException("getAttributePrefix not supported"); 251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean isEmptyElementTag() { 255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // XXX Need to detect this. 256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeCount() { 261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getAttributeCount(); 262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getAttributeValue(int index) { 266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getAttributeValue(index); 267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getAttributeType(int index) { 271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "CDATA"; 272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean isAttributeDefault(int index) { 276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int nextToken() throws XmlPullParserException, IOException { 281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return next(); 282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getAttributeValue(String namespace, String name) { 286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParser.getAttributeValue(namespace, name); 287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int next() throws XmlPullParserException, IOException { 291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (!mStarted) { 292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mStarted = true; 293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ParserFactory.LOG_PARSER) { 295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski System.out.println("STRT " + mParser.toString()); 296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return START_DOCUMENT; 299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int ev = mParser.next(); 302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ParserFactory.LOG_PARSER) { 304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski System.out.println("NEXT " + mParser.toString() + " " + 305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski eventTypeToString(mEventType) + " -> " + eventTypeToString(ev)); 306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ev == END_TAG && mParser.getDepth() == 1) { 309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // done with parser remove it from the context stack. 310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ensurePopped(); 311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ParserFactory.LOG_PARSER) { 313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski System.out.println(""); 314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mEventType = ev; 318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ev; 319282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public static String eventTypeToString(int eventType) { 322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski switch (eventType) { 323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case START_DOCUMENT: 324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "START_DOC"; 325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case END_DOCUMENT: 326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "END_DOC"; 327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case START_TAG: 328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "START_TAG"; 329282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case END_TAG: 330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "END_TAG"; 331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case TEXT: 332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "TEXT"; 333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case CDSECT: 334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "CDSECT"; 335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case ENTITY_REF: 336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "ENTITY_REF"; 337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case IGNORABLE_WHITESPACE: 338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "IGNORABLE_WHITESPACE"; 339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case PROCESSING_INSTRUCTION: 340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "PROCESSING_INSTRUCTION"; 341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case COMMENT: 342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "COMMENT"; 343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski case DOCDECL: 344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "DOCDECL"; 345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 346282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "????"; 348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void require(int type, String namespace, String name) 352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throws XmlPullParserException { 353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (type != getEventType() 354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski || (namespace != null && !namespace.equals(getNamespace())) 355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski || (name != null && !name.equals(getName()))) 356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException("expected " + TYPES[type] 357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski + getPositionDescription()); 358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String nextText() throws XmlPullParserException, IOException { 362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (getEventType() != START_TAG) { 363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException(getPositionDescription() 364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski + ": parser must be on START_TAG to read next text", this, 365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski null); 366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int eventType = next(); 368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (eventType == TEXT) { 369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String result = getText(); 370282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski eventType = next(); 371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (eventType != END_TAG) { 372282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException( 373282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski getPositionDescription() 374282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski + ": event TEXT it must be immediately followed by END_TAG", 375282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski this, null); 376282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 377282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return result; 378282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (eventType == END_TAG) { 379282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ""; 380282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 381282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException(getPositionDescription() 382282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski + ": parser must be on START_TAG or TEXT to read text", 383282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski this, null); 384282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 385282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 386282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 387282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 388282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int nextTag() throws XmlPullParserException, IOException { 389282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int eventType = next(); 390282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (eventType == TEXT && isWhitespace()) { // skip whitespace 391282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski eventType = next(); 392282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 393282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (eventType != START_TAG && eventType != END_TAG) { 394282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new XmlPullParserException(getPositionDescription() 395282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski + ": expected start or end tag", this, null); 396282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 397282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return eventType; 398282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 399282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 400282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // AttributeSet implementation 401282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 402282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 403282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 404282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void close() { 405282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 406282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 407282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 408282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 409282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean getAttributeBooleanValue(int index, boolean defaultValue) { 410282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeBooleanValue(index, defaultValue); 411282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 412282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 413282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 414282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean getAttributeBooleanValue(String namespace, String attribute, 415282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean defaultValue) { 416282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeBooleanValue(namespace, attribute, defaultValue); 417282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 418282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 419282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 420282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public float getAttributeFloatValue(int index, float defaultValue) { 421282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeFloatValue(index, defaultValue); 422282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 423282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 424282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 425282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public float getAttributeFloatValue(String namespace, String attribute, float defaultValue) { 426282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeFloatValue(namespace, attribute, defaultValue); 427282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 428282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 429282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 430282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeIntValue(int index, int defaultValue) { 431282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeIntValue(index, defaultValue); 432282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 433282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 434282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 435282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeIntValue(String namespace, String attribute, int defaultValue) { 436282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeIntValue(namespace, attribute, defaultValue); 437282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 438282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 439282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 440282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeListValue(int index, String[] options, int defaultValue) { 441282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeListValue(index, options, defaultValue); 442282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 443282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 444282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 445282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeListValue(String namespace, String attribute, 446282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String[] options, int defaultValue) { 447282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeListValue(namespace, attribute, options, defaultValue); 448282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 449282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 450282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 451282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeNameResource(int index) { 452282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeNameResource(index); 453282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 454282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 455282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 456282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeResourceValue(int index, int defaultValue) { 457282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeResourceValue(index, defaultValue); 458282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 459282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 460282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 461282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) { 462282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeResourceValue(namespace, attribute, defaultValue); 463282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 464282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 465282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 466282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeUnsignedIntValue(int index, int defaultValue) { 467282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeUnsignedIntValue(index, defaultValue); 468282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 469282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 470282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 471282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getAttributeUnsignedIntValue(String namespace, String attribute, int defaultValue) { 472282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getAttributeUnsignedIntValue(namespace, attribute, defaultValue); 473282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 474282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 475282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 476282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getClassAttribute() { 477282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getClassAttribute(); 478282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 479282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 480282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 481282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getIdAttribute() { 482282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getIdAttribute(); 483282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 484282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 485282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 486282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getIdAttributeResourceValue(int defaultValue) { 487282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getIdAttributeResourceValue(defaultValue); 488282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 489282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 490282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 491282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getStyleAttribute() { 492282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mAttrib.getStyleAttribute(); 493282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 494282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 495