19c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo/* 29c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Copyright (C) 2014 The Android Open Source Project 39c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * 49c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Licensed under the Apache License, Version 2.0 (the "License"); 59c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * you may not use this file except in compliance with the License. 69c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * You may obtain a copy of the License at 79c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * 89c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * http://www.apache.org/licenses/LICENSE-2.0 99c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * 109c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Unless required by applicable law or agreed to in writing, software 119c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * distributed under the License is distributed on an "AS IS" BASIS, 129c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * See the License for the specific language governing permissions and 149c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * limitations under the License. 159c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo */ 169c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 179c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seopackage android.media.tv; 189c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 199c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seoimport android.annotation.SystemApi; 209c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seoimport android.content.ContentResolver; 219c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seoimport android.content.pm.ApplicationInfo; 229c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seoimport android.net.Uri; 239c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seoimport android.os.Parcel; 249c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seoimport android.os.Parcelable; 259c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 269c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo/** 279c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * TvContentRatingSystemInfo class provides information about a specific TV content rating system 289c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * defined either by a system app or by a third-party app. 299c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * 309c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * @hide 319c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo */ 329c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo@SystemApi 339c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seopublic final class TvContentRatingSystemInfo implements Parcelable { 349c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo private final Uri mXmlUri; 359c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 369c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo private final ApplicationInfo mApplicationInfo; 379c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 389c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo /** 399c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Creates a TvContentRatingSystemInfo object with given resource ID and receiver info. 409c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * 419c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * @param xmlResourceId The ID of an XML resource whose root element is 429c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * <code> <rating-system-definitions></code> 439c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * @param applicationInfo Information about the application that provides the TV content rating 449c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * system definition. 459c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo */ 469c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public static final TvContentRatingSystemInfo createTvContentRatingSystemInfo(int xmlResourceId, 479c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo ApplicationInfo applicationInfo) { 489c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo Uri uri = new Uri.Builder() 499c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) 509c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo .authority(applicationInfo.packageName) 519c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo .appendPath(String.valueOf(xmlResourceId)) 529c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo .build(); 539c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo return new TvContentRatingSystemInfo(uri, applicationInfo); 549c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 559c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 569c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo private TvContentRatingSystemInfo(Uri xmlUri, ApplicationInfo applicationInfo) { 579c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo mXmlUri = xmlUri; 589c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo mApplicationInfo = applicationInfo; 599c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 609c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 619c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo /** 629c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Returns {@code true} if the TV content rating system is defined by a system app, 639c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * {@code false} otherwise. 649c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo */ 659c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public final boolean isSystemDefined() { 669c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo return (mApplicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; 679c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 689c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 699c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo /** 709c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Returns the URI to the XML resource that defines the TV content rating system. 719c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * 729c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * TODO: Remove. Instead, parse the XML resource and provide an interface to directly access 739c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * parsed information. 749c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo */ 759c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public final Uri getXmlUri() { 769c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo return mXmlUri; 779c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 789c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 799c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo /** 809c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * Used to make this class parcelable. 819c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * @hide 829c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo */ 839c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public static final Parcelable.Creator<TvContentRatingSystemInfo> CREATOR = 849c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo new Parcelable.Creator<TvContentRatingSystemInfo>() { 859c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo @Override 869c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public TvContentRatingSystemInfo createFromParcel(Parcel in) { 879c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo return new TvContentRatingSystemInfo(in); 889c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 899c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 909c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo @Override 919c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public TvContentRatingSystemInfo[] newArray(int size) { 929c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo return new TvContentRatingSystemInfo[size]; 939c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 949c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo }; 959c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 969c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo private TvContentRatingSystemInfo(Parcel in) { 979c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo mXmlUri = in.readParcelable(null); 989c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo mApplicationInfo = in.readParcelable(null); 999c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 1009c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 1019c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo @Override 1029c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public void writeToParcel(Parcel dest, int flags) { 1039c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo dest.writeParcelable(mXmlUri, flags); 1049c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo dest.writeParcelable(mApplicationInfo, flags); 1059c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 1069c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo 1079c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo @Override 1089c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo public int describeContents() { 1099c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo return 0; 1109c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo } 1119c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo} 112