diff --git a/Android.bp b/Android.bp index a5da97bfc2492..3c47d1bb3cbbd 100644 --- a/Android.bp +++ b/Android.bp @@ -1635,6 +1635,5 @@ filegroup { "core/java/com/android/internal/util/State.java", "core/java/com/android/internal/util/StateMachine.java", "core/java/com/android/internal/util/UserIcons.java", - "core/java/com/android/internal/util/XmlUtils.java", ], } diff --git a/telephony/java/com/android/internal/telephony/Sms7BitEncodingTranslator.java b/telephony/java/com/android/internal/telephony/Sms7BitEncodingTranslator.java index 2cdf2f63e02f9..dcea9bb72c015 100644 --- a/telephony/java/com/android/internal/telephony/Sms7BitEncodingTranslator.java +++ b/telephony/java/com/android/internal/telephony/Sms7BitEncodingTranslator.java @@ -23,7 +23,7 @@ import android.telephony.Rlog; import android.util.SparseIntArray; import com.android.internal.telephony.cdma.sms.UserData; -import com.android.internal.util.XmlUtils; +import com.android.internal.telephony.util.XmlUtils; import dalvik.annotation.compat.UnsupportedAppUsage; diff --git a/telephony/java/com/android/internal/telephony/util/XmlUtils.java b/telephony/java/com/android/internal/telephony/util/XmlUtils.java new file mode 100644 index 0000000000000..72c5d3a8e31bd --- /dev/null +++ b/telephony/java/com/android/internal/telephony/util/XmlUtils.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.telephony.util; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; + +/** Utility methods for XML operations. */ +public final class XmlUtils { + private XmlUtils() {} + + /** + * Moves parser to the first start tag, and expects the tag name being {@code firstElementName}. + */ + public static void beginDocument(XmlPullParser parser, String firstElementName) + throws XmlPullParserException, IOException { + int type; + while ((type = parser.next()) != parser.START_TAG && type != parser.END_DOCUMENT) { + // no-op + } + + if (type != parser.START_TAG) { + throw new XmlPullParserException("No start tag found"); + } + + if (!parser.getName().equals(firstElementName)) { + throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() + + ", expected " + firstElementName); + } + } + + /** + * Moves parser to the next start tag. + */ + public static void nextElement(XmlPullParser parser) + throws XmlPullParserException, IOException { + int type; + while ((type = parser.next()) != parser.START_TAG && type != parser.END_DOCUMENT) { + // no-op + } + } + + /** + * Moves parser to the next start tag within the {@code outerDepth}. + */ + public static boolean nextElementWithin(XmlPullParser parser, int outerDepth) + throws IOException, XmlPullParserException { + for (;;) { + int type = parser.next(); + if (type == XmlPullParser.END_DOCUMENT + || (type == XmlPullParser.END_TAG && parser.getDepth() == outerDepth)) { + return false; + } + if (type == XmlPullParser.START_TAG && parser.getDepth() == outerDepth + 1) { + return true; + } + } + } +}