1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/*
2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project
3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License");
5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License.
6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at
7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *      http://www.apache.org/licenses/LICENSE-2.0
9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software
11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS,
12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and
14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License.
15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage android.support.v7.mms;
18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.ContentValues;
20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport org.xmlpull.v1.XmlPullParser;
22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport org.xmlpull.v1.XmlPullParserException;
23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.IOException;
25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/**
27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Parser for built-in XML resource file for APN list
28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddclass ApnsXmlParser extends MmsXmlResourceParser {
30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    interface ApnProcessor {
31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        void process(ContentValues apnValues);
32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private static final String TAG_APNS = "apns";
35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private static final String TAG_APN = "apn";
36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private final ApnProcessor mApnProcessor;
38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private final ContentValues mValues = new ContentValues();
40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    ApnsXmlParser(final XmlPullParser parser, final ApnProcessor apnProcessor) {
42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        super(parser);
43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        mApnProcessor = apnProcessor;
44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    // Parse one APN
47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected void parseRecord() throws IOException, XmlPullParserException {
49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (TAG_APN.equals(mInputParser.getName())) {
50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            mValues.clear();
51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            // Collect all the attributes
52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                final String key = mInputParser.getAttributeName(i);
54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                if (key != null) {
55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                    mValues.put(key, mInputParser.getAttributeValue(i));
56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                }
57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            }
58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            // We are done parsing one APN, call the handler
59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            if (mApnProcessor != null) {
60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd                mApnProcessor.process(mValues);
61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            }
62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        // We are at the end tag
64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (mInputParser.next() != XmlPullParser.END_TAG) {
65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            throw new XmlPullParserException("Expecting end tag @" + xmlParserDebugContext());
66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected String getRootTag() {
71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return TAG_APNS;
72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd}
74