19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetpackage com.android.layoutlib.bridge.android;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919a021038f2f4683dddef651543d7298f5bd7218Xavier Ducrohet
2019a021038f2f4683dddef651543d7298f5bd7218Xavier Ducrohetimport com.android.ide.common.rendering.api.ILayoutPullParser;
2104ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohetimport com.android.layoutlib.bridge.impl.ParserFactory;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.XmlResourceParser;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
287f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohetimport android.util.BridgeXmlPullAttributes;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.Reader;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link BridgeXmlBlockParser} reimplements most of android.xml.XmlBlock.Parser.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It delegates to both an instance of {@link XmlPullParser} and an instance of
377f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * XmlPullAttributes (for the {@link AttributeSet} part).
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class BridgeXmlBlockParser implements XmlResourceParser {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4101811aa86279af1b341a4fff344d66c0ebdd63daXavier Ducrohet    private final XmlPullParser mParser;
427f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    private final BridgeXmlPullAttributes mAttrib;
4301811aa86279af1b341a4fff344d66c0ebdd63daXavier Ducrohet    private final BridgeContext mContext;
4401811aa86279af1b341a4fff344d66c0ebdd63daXavier Ducrohet    private final boolean mPlatformFile;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mStarted = false;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mEventType = START_DOCUMENT;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4902d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet    private boolean mPopped = true; // default to true in case it's not pushed.
5002d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Builds a {@link BridgeXmlBlockParser}.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param parser The XmlPullParser to get the content from.
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context the Context.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param platformFile Indicates whether the the file is a platform file or not.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BridgeXmlBlockParser(XmlPullParser parser, BridgeContext context, boolean platformFile) {
5804ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        if (ParserFactory.LOG_PARSER) {
5904ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            System.out.println("CRTE " + parser.toString());
6004ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        }
6104ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mParser = parser;
6355acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet        mContext = context;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPlatformFile = platformFile;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAttrib = new BridgeXmlPullAttributes(parser, context, mPlatformFile);
6655acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet
679223b6737c56619c02125ce988bb21fc4fde264bXavier Ducrohet        if (mContext != null) {
689223b6737c56619c02125ce988bb21fc4fde264bXavier Ducrohet            mContext.pushParser(this);
6902d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet            mPopped = false;
709223b6737c56619c02125ce988bb21fc4fde264bXavier Ducrohet        }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7255acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet
7304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet    public XmlPullParser getParser() {
7404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        return mParser;
7504ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet    }
7604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isPlatformFile() {
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPlatformFile;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8119a021038f2f4683dddef651543d7298f5bd7218Xavier Ducrohet    public Object getViewCookie() {
8219a021038f2f4683dddef651543d7298f5bd7218Xavier Ducrohet        if (mParser instanceof ILayoutPullParser) {
8319a021038f2f4683dddef651543d7298f5bd7218Xavier Ducrohet            return ((ILayoutPullParser)mParser).getViewCookie();
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8855acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet
8902d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet    public void ensurePopped() {
9002d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet        if (mContext != null && mPopped == false) {
9102d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet            mContext.popParser();
9202d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet            mPopped = true;
9302d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet        }
9402d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet    }
9502d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ------- XmlResourceParser implementation
9755acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet
9846d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setFeature(String name, boolean state)
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws XmlPullParserException {
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (FEATURE_PROCESS_NAMESPACES.equals(name) && state) {
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (FEATURE_REPORT_NAMESPACE_ATTRIBUTES.equals(name) && state) {
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new XmlPullParserException("Unsupported feature: " + name);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getFeature(String name) {
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (FEATURE_PROCESS_NAMESPACES.equals(name)) {
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (FEATURE_REPORT_NAMESPACE_ATTRIBUTES.equals(name)) {
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12146d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setProperty(String name, Object value) throws XmlPullParserException {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new XmlPullParserException("setProperty() not supported");
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12646d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Object getProperty(String name) {
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13146d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setInput(Reader in) throws XmlPullParserException {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mParser.setInput(in);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13646d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setInput(InputStream inputStream, String inputEncoding)
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws XmlPullParserException {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mParser.setInput(inputStream, inputEncoding);
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14246d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void defineEntityReplacementText(String entityName,
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String replacementText) throws XmlPullParserException {
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new XmlPullParserException(
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "defineEntityReplacementText() not supported");
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getNamespacePrefix(int pos) throws XmlPullParserException {
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new XmlPullParserException("getNamespacePrefix() not supported");
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getInputEncoding() {
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getNamespace(String prefix) {
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new RuntimeException("getNamespace() not supported");
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getNamespaceCount(int depth) throws XmlPullParserException {
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new XmlPullParserException("getNamespaceCount() not supported");
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getPositionDescription() {
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "Binary XML file line #" + getLineNumber();
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getNamespaceUri(int pos) throws XmlPullParserException {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new XmlPullParserException("getNamespaceUri() not supported");
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getColumnNumber() {
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getDepth() {
18655acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet        return mParser.getDepth();
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getText() {
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getText();
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getLineNumber() {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getLineNumber();
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getEventType() {
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mEventType;
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isWhitespace() throws XmlPullParserException {
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Original comment: whitespace was stripped by aapt.
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.isWhitespace();
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getPrefix() {
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new RuntimeException("getPrefix not supported");
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public char[] getTextCharacters(int[] holderForStartAndLength) {
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String txt = getText();
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char[] chars = null;
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (txt != null) {
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            holderForStartAndLength[0] = 0;
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            holderForStartAndLength[1] = txt.length();
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            chars = new char[txt.length()];
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            txt.getChars(0, txt.length(), chars, 0);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return chars;
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22846d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getNamespace() {
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getNamespace();
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23346d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getName() {
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getName();
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23846d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAttributeNamespace(int index) {
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getAttributeNamespace(index);
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24346d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAttributeName(int index) {
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getAttributeName(index);
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24846d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAttributePrefix(int index) {
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new RuntimeException("getAttributePrefix not supported");
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25346d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isEmptyElementTag() {
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // XXX Need to detect this.
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeCount() {
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getAttributeCount();
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAttributeValue(int index) {
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getAttributeValue(index);
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAttributeType(int index) {
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "CDATA";
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
27446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isAttributeDefault(int index) {
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
27946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int nextToken() throws XmlPullParserException, IOException {
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return next();
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getAttributeValue(String namespace, String name) {
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mParser.getAttributeValue(namespace, name);
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int next() throws XmlPullParserException, IOException {
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!mStarted) {
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mStarted = true;
29304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
29404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            if (ParserFactory.LOG_PARSER) {
29504ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                System.out.println("STRT " + mParser.toString());
29604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            }
29704ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return START_DOCUMENT;
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
30004ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int ev = mParser.next();
30255acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet
30304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        if (ParserFactory.LOG_PARSER) {
30404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            System.out.println("NEXT " + mParser.toString() + " " +
30504ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                    eventTypeToString(mEventType) + " -> " + eventTypeToString(ev));
30604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        }
30704ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
30802d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet        if (ev == END_TAG && mParser.getDepth() == 1) {
30955acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet            // done with parser remove it from the context stack.
31002d2b5a4031c80bfe1012ce2f4f7b3695762abd9Xavier Ducrohet            ensurePopped();
31104ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
31204ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            if (ParserFactory.LOG_PARSER) {
31304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                System.out.println("");
31404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            }
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
31604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mEventType = ev;
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ev;
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32104ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet    public static String eventTypeToString(int eventType) {
32204ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        switch (eventType) {
32304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case START_DOCUMENT:
32404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "START_DOC";
32504ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case END_DOCUMENT:
32604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "END_DOC";
32704ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case START_TAG:
32804ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "START_TAG";
32904ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case END_TAG:
33004ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "END_TAG";
33104ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case TEXT:
33204ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "TEXT";
33304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case CDSECT:
33404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "CDSECT";
33504ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case ENTITY_REF:
33604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "ENTITY_REF";
33704ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case IGNORABLE_WHITESPACE:
33804ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "IGNORABLE_WHITESPACE";
33904ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case PROCESSING_INSTRUCTION:
34004ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "PROCESSING_INSTRUCTION";
34104ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case COMMENT:
34204ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "COMMENT";
34304ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet            case DOCDECL:
34404ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet                return "DOCDECL";
34504ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        }
34604ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
34704ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet        return "????";
34804ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet    }
34904ce81113107d2bfa0b8248b13145b4cf24cb943Xavier Ducrohet
35046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void require(int type, String namespace, String name)
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws XmlPullParserException {
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (type != getEventType()
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || (namespace != null && !namespace.equals(getNamespace()))
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || (name != null && !name.equals(getName())))
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new XmlPullParserException("expected " + TYPES[type]
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + getPositionDescription());
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String nextText() throws XmlPullParserException, IOException {
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (getEventType() != START_TAG) {
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new XmlPullParserException(getPositionDescription()
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + ": parser must be on START_TAG to read next text", this,
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    null);
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int eventType = next();
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (eventType == TEXT) {
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String result = getText();
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            eventType = next();
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (eventType != END_TAG) {
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new XmlPullParserException(
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        getPositionDescription()
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                + ": event TEXT it must be immediately followed by END_TAG",
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        this, null);
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return result;
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (eventType == END_TAG) {
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return "";
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new XmlPullParserException(getPositionDescription()
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + ": parser must be on START_TAG or TEXT to read text",
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    this, null);
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
38746d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int nextTag() throws XmlPullParserException, IOException {
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int eventType = next();
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (eventType == TEXT && isWhitespace()) { // skip whitespace
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            eventType = next();
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (eventType != START_TAG && eventType != END_TAG) {
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new XmlPullParserException(getPositionDescription()
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    + ": expected start or end tag", this, null);
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return eventType;
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // AttributeSet implementation
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
40255acd60be3c027c224a74290df7bedc1a80c669fXavier Ducrohet
40346d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void close() {
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
40846d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getAttributeBooleanValue(int index, boolean defaultValue) {
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeBooleanValue(index, defaultValue);
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
41346d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean getAttributeBooleanValue(String namespace, String attribute,
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            boolean defaultValue) {
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeBooleanValue(namespace, attribute, defaultValue);
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
41946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public float getAttributeFloatValue(int index, float defaultValue) {
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeFloatValue(index, defaultValue);
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
42446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public float getAttributeFloatValue(String namespace, String attribute, float defaultValue) {
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeFloatValue(namespace, attribute, defaultValue);
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
42946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeIntValue(int index, int defaultValue) {
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeIntValue(index, defaultValue);
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
43446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeIntValue(String namespace, String attribute, int defaultValue) {
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeIntValue(namespace, attribute, defaultValue);
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
43946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeListValue(int index, String[] options, int defaultValue) {
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeListValue(index, options, defaultValue);
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
44446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeListValue(String namespace, String attribute,
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String[] options, int defaultValue) {
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeListValue(namespace, attribute, options, defaultValue);
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
45046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeNameResource(int index) {
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeNameResource(index);
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
45546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeResourceValue(int index, int defaultValue) {
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeResourceValue(index, defaultValue);
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
46046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeResourceValue(String namespace, String attribute, int defaultValue) {
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeResourceValue(namespace, attribute, defaultValue);
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
46546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeUnsignedIntValue(int index, int defaultValue) {
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeUnsignedIntValue(index, defaultValue);
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
47046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAttributeUnsignedIntValue(String namespace, String attribute, int defaultValue) {
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getAttributeUnsignedIntValue(namespace, attribute, defaultValue);
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
47546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getClassAttribute() {
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getClassAttribute();
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
48046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getIdAttribute() {
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getIdAttribute();
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
48546d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getIdAttributeResourceValue(int defaultValue) {
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getIdAttributeResourceValue(defaultValue);
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
49046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet    @Override
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getStyleAttribute() {
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAttrib.getStyleAttribute();
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
495