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> &lt;rating-system-definitions&gt;</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