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