diff options
Diffstat (limited to 'src/com/android/tv/parental/ContentRatingsParser.java')
-rw-r--r-- | src/com/android/tv/parental/ContentRatingsParser.java | 169 |
1 files changed, 108 insertions, 61 deletions
diff --git a/src/com/android/tv/parental/ContentRatingsParser.java b/src/com/android/tv/parental/ContentRatingsParser.java index d9f62473..14df88ea 100644 --- a/src/com/android/tv/parental/ContentRatingsParser.java +++ b/src/com/android/tv/parental/ContentRatingsParser.java @@ -24,18 +24,16 @@ import android.content.res.XmlResourceParser; import android.media.tv.TvContentRatingSystemInfo; import android.net.Uri; import android.util.Log; - import com.android.tv.parental.ContentRatingSystem.Order; import com.android.tv.parental.ContentRatingSystem.Rating; import com.android.tv.parental.ContentRatingSystem.SubRating; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - import java.io.IOException; import java.util.ArrayList; import java.util.List; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +/** Parses Content Ratings */ public class ContentRatingsParser { private static final String TAG = "ContentRatingsParser"; private static final boolean DEBUG = false; @@ -74,8 +72,8 @@ public class ContentRatingsParser { try { String packageName = uri.getAuthority(); int resId = (int) ContentUris.parseId(uri); - try (XmlResourceParser parser = mContext.getPackageManager() - .getXml(packageName, resId, null)) { + try (XmlResourceParser parser = + mContext.getPackageManager().getXml(packageName, resId, null)) { if (parser == null) { throw new IllegalArgumentException("Cannot get XML with URI " + uri); } @@ -90,8 +88,8 @@ public class ContentRatingsParser { return ratingSystems; } - private List<ContentRatingSystem> parse(XmlResourceParser parser, String domain, - boolean isCustom) + private List<ContentRatingSystem> parse( + XmlResourceParser parser, String domain, boolean isCustom) throws XmlPullParserException, IOException { try { mResources = mContext.getPackageManager().getResourcesForApplication(domain); @@ -112,7 +110,9 @@ public class ContentRatingsParser { int eventType = parser.getEventType(); assertEquals(eventType, XmlPullParser.START_TAG, "Malformed XML: Not a valid XML file"); - assertEquals(parser.getName(), TAG_RATING_SYSTEM_DEFINITIONS, + assertEquals( + parser.getName(), + TAG_RATING_SYSTEM_DEFINITIONS, "Malformed XML: Should start with tag " + TAG_RATING_SYSTEM_DEFINITIONS); boolean hasVersionAttr = false; @@ -124,8 +124,10 @@ public class ContentRatingsParser { } } if (!hasVersionAttr) { - throw new XmlPullParserException("Malformed XML: Should contains a version attribute" - + " in " + TAG_RATING_SYSTEM_DEFINITIONS); + throw new XmlPullParserException( + "Malformed XML: Should contains a version attribute" + + " in " + + TAG_RATING_SYSTEM_DEFINITIONS); } List<ContentRatingSystem> ratingSystems = new ArrayList<>(); @@ -135,25 +137,29 @@ public class ContentRatingsParser { if (TAG_RATING_SYSTEM_DEFINITION.equals(parser.getName())) { ratingSystems.add(parseRatingSystemDefinition(parser, domain, isCustom)); } else { - checkVersion("Malformed XML: Should contains " + - TAG_RATING_SYSTEM_DEFINITION); + checkVersion( + "Malformed XML: Should contains " + TAG_RATING_SYSTEM_DEFINITION); } break; case XmlPullParser.END_TAG: if (TAG_RATING_SYSTEM_DEFINITIONS.equals(parser.getName())) { eventType = parser.next(); - assertEquals(eventType, XmlPullParser.END_DOCUMENT, - "Malformed XML: Should end with tag " + - TAG_RATING_SYSTEM_DEFINITIONS); + assertEquals( + eventType, + XmlPullParser.END_DOCUMENT, + "Malformed XML: Should end with tag " + + TAG_RATING_SYSTEM_DEFINITIONS); return ratingSystems; } else { - checkVersion("Malformed XML: Should end with tag " + - TAG_RATING_SYSTEM_DEFINITIONS); + checkVersion( + "Malformed XML: Should end with tag " + + TAG_RATING_SYSTEM_DEFINITIONS); } } } - throw new XmlPullParserException(TAG_RATING_SYSTEM_DEFINITIONS + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_RATING_SYSTEM_DEFINITIONS + + " section is incomplete or section ending tag is missing"); } private static void assertEquals(int a, int b, String msg) throws XmlPullParserException { @@ -174,8 +180,9 @@ public class ContentRatingsParser { } } - private ContentRatingSystem parseRatingSystemDefinition(XmlResourceParser parser, String domain, - boolean isCustom) throws XmlPullParserException, IOException { + private ContentRatingSystem parseRatingSystemDefinition( + XmlResourceParser parser, String domain, boolean isCustom) + throws XmlPullParserException, IOException { ContentRatingSystem.Builder builder = new ContentRatingSystem.Builder(mContext); builder.setDomain(domain); @@ -198,13 +205,17 @@ public class ContentRatingsParser { mResources.getString(parser.getAttributeResourceValue(i, 0))); break; default: - checkVersion("Malformed XML: Unknown attribute " + attr + " in " + - TAG_RATING_SYSTEM_DEFINITION); + checkVersion( + "Malformed XML: Unknown attribute " + + attr + + " in " + + TAG_RATING_SYSTEM_DEFINITION); } } while (parser.next() != XmlPullParser.END_DOCUMENT) { - switch (parser.getEventType()) { + int eventType = parser.getEventType(); + switch (eventType) { case XmlPullParser.START_TAG: String tag = parser.getName(); switch (tag) { @@ -218,8 +229,11 @@ public class ContentRatingsParser { builder.addOrderBuilder(parseOrder(parser)); break; default: - checkVersion("Malformed XML: Unknown tag " + tag + " in " + - TAG_RATING_SYSTEM_DEFINITION); + checkVersion( + "Malformed XML: Unknown tag " + + tag + + " in " + + TAG_RATING_SYSTEM_DEFINITION); } break; case XmlPullParser.END_TAG: @@ -227,13 +241,21 @@ public class ContentRatingsParser { builder.setIsCustom(isCustom); return builder.build(); } else { - checkVersion("Malformed XML: Tag mismatch for " + - TAG_RATING_SYSTEM_DEFINITION); + checkVersion( + "Malformed XML: Tag mismatch for " + TAG_RATING_SYSTEM_DEFINITION); } + break; + default: + checkVersion( + "Malformed XML: Unknown event type " + + eventType + + " in " + + TAG_RATING_SYSTEM_DEFINITION); } } - throw new XmlPullParserException(TAG_RATING_SYSTEM_DEFINITION + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_RATING_SYSTEM_DEFINITION + + " section is incomplete or section ending tag is missing"); } private Rating.Builder parseRatingDefinition(XmlResourceParser parser) @@ -265,14 +287,19 @@ public class ContentRatingsParser { } if (contentAgeHint < 0) { - throw new XmlPullParserException("Malformed XML: " + ATTR_CONTENT_AGE_HINT + - " should be a non-negative number"); + throw new XmlPullParserException( + "Malformed XML: " + + ATTR_CONTENT_AGE_HINT + + " should be a non-negative number"); } builder.setContentAgeHint(contentAgeHint); break; default: - checkVersion("Malformed XML: Unknown attribute " + attr + " in " + - TAG_RATING_DEFINITION); + checkVersion( + "Malformed XML: Unknown attribute " + + attr + + " in " + + TAG_RATING_DEFINITION); } } @@ -282,8 +309,11 @@ public class ContentRatingsParser { if (TAG_SUB_RATING.equals(parser.getName())) { builder = parseSubRating(parser, builder); } else { - checkVersion(("Malformed XML: Only " + TAG_SUB_RATING + " is allowed in " + - TAG_RATING_DEFINITION)); + checkVersion( + ("Malformed XML: Only " + + TAG_SUB_RATING + + " is allowed in " + + TAG_RATING_DEFINITION)); } break; case XmlPullParser.END_TAG: @@ -294,8 +324,8 @@ public class ContentRatingsParser { } } } - throw new XmlPullParserException(TAG_RATING_DEFINITION + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_RATING_DEFINITION + " section is incomplete or section ending tag is missing"); } private SubRating.Builder parseSubRatingDefinition(XmlResourceParser parser) @@ -320,8 +350,11 @@ public class ContentRatingsParser { mResources.getDrawable(parser.getAttributeResourceValue(i, 0), null)); break; default: - checkVersion("Malformed XML: Unknown attribute " + attr + " in " + - TAG_SUB_RATING_DEFINITION); + checkVersion( + "Malformed XML: Unknown attribute " + + attr + + " in " + + TAG_SUB_RATING_DEFINITION); } } @@ -331,23 +364,26 @@ public class ContentRatingsParser { if (TAG_SUB_RATING_DEFINITION.equals(parser.getName())) { return builder; } else { - checkVersion("Malformed XML: " + TAG_SUB_RATING_DEFINITION + - " isn't closed"); + checkVersion( + "Malformed XML: " + TAG_SUB_RATING_DEFINITION + " isn't closed"); } break; default: checkVersion("Malformed XML: " + TAG_SUB_RATING_DEFINITION + " has child"); } } - throw new XmlPullParserException(TAG_SUB_RATING_DEFINITION + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_SUB_RATING_DEFINITION + + " section is incomplete or section ending tag is missing"); } private Order.Builder parseOrder(XmlResourceParser parser) throws XmlPullParserException, IOException { Order.Builder builder = new Order.Builder(); - assertEquals(parser.getAttributeCount(), 0, + assertEquals( + parser.getAttributeCount(), + 0, "Malformed XML: Attribute isn't allowed in " + TAG_RATING_ORDER); while (parser.next() != XmlPullParser.END_DOCUMENT) { @@ -355,19 +391,24 @@ public class ContentRatingsParser { case XmlPullParser.START_TAG: if (TAG_RATING.equals(parser.getName())) { builder = parseRating(parser, builder); - } else { - checkVersion("Malformed XML: Only " + TAG_RATING + " is allowed in " + - TAG_RATING_ORDER); + } else { + checkVersion( + "Malformed XML: Only " + + TAG_RATING + + " is allowed in " + + TAG_RATING_ORDER); } break; case XmlPullParser.END_TAG: - assertEquals(parser.getName(), TAG_RATING_ORDER, + assertEquals( + parser.getName(), + TAG_RATING_ORDER, "Malformed XML: Tag mismatch for " + TAG_RATING_ORDER); return builder; } } - throw new XmlPullParserException(TAG_RATING_ORDER + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_RATING_ORDER + " section is incomplete or section ending tag is missing"); } private Order.Builder parseRating(XmlResourceParser parser, Order.Builder builder) @@ -379,8 +420,11 @@ public class ContentRatingsParser { builder.addRatingName(parser.getAttributeValue(i)); break; default: - checkVersion("Malformed XML: " + TAG_RATING_ORDER + " should only contain " - + ATTR_NAME); + checkVersion( + "Malformed XML: " + + TAG_RATING_ORDER + + " should only contain " + + ATTR_NAME); } } @@ -393,8 +437,8 @@ public class ContentRatingsParser { } } } - throw new XmlPullParserException(TAG_RATING + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_RATING + " section is incomplete or section ending tag is missing"); } private Rating.Builder parseSubRating(XmlResourceParser parser, Rating.Builder builder) @@ -406,8 +450,11 @@ public class ContentRatingsParser { builder.addSubRatingName(parser.getAttributeValue(i)); break; default: - checkVersion("Malformed XML: " + TAG_SUB_RATING + " should only contain " + - ATTR_NAME); + checkVersion( + "Malformed XML: " + + TAG_SUB_RATING + + " should only contain " + + ATTR_NAME); } } @@ -420,8 +467,8 @@ public class ContentRatingsParser { } } } - throw new XmlPullParserException(TAG_SUB_RATING + - " section is incomplete or section ending tag is missing"); + throw new XmlPullParserException( + TAG_SUB_RATING + " section is incomplete or section ending tag is missing"); } // Title might be a resource id or a string value. Try loading as an id first, then use the |