1e16873467cda89d905027458e2664c759465d463Sungsoo Lim/*
2e16873467cda89d905027458e2664c759465d463Sungsoo Lim * Copyright (C) 2014 The Android Open Source Project
3e16873467cda89d905027458e2664c759465d463Sungsoo Lim *
4e16873467cda89d905027458e2664c759465d463Sungsoo Lim * Licensed under the Apache License, Version 2.0 (the "License");
5e16873467cda89d905027458e2664c759465d463Sungsoo Lim * you may not use this file except in compliance with the License.
6e16873467cda89d905027458e2664c759465d463Sungsoo Lim * You may obtain a copy of the License at
7e16873467cda89d905027458e2664c759465d463Sungsoo Lim *
8e16873467cda89d905027458e2664c759465d463Sungsoo Lim *      http://www.apache.org/licenses/LICENSE-2.0
9e16873467cda89d905027458e2664c759465d463Sungsoo Lim *
10e16873467cda89d905027458e2664c759465d463Sungsoo Lim * Unless required by applicable law or agreed to in writing, software
11e16873467cda89d905027458e2664c759465d463Sungsoo Lim * distributed under the License is distributed on an "AS IS" BASIS,
12e16873467cda89d905027458e2664c759465d463Sungsoo Lim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e16873467cda89d905027458e2664c759465d463Sungsoo Lim * See the License for the specific language governing permissions and
14e16873467cda89d905027458e2664c759465d463Sungsoo Lim * limitations under the License.
15e16873467cda89d905027458e2664c759465d463Sungsoo Lim */
16e16873467cda89d905027458e2664c759465d463Sungsoo Lim
17e16873467cda89d905027458e2664c759465d463Sungsoo Limpackage android.media.tv;
18e16873467cda89d905027458e2664c759465d463Sungsoo Lim
196057102dbb746593a7d59cf377c969b62e38c664Jae Seoimport android.annotation.SystemApi;
20e16873467cda89d905027458e2664c759465d463Sungsoo Limimport android.text.TextUtils;
21e16873467cda89d905027458e2664c759465d463Sungsoo Lim
22e16873467cda89d905027458e2664c759465d463Sungsoo Limimport java.util.Arrays;
236057102dbb746593a7d59cf377c969b62e38c664Jae Seoimport java.util.Collections;
24e16873467cda89d905027458e2664c759465d463Sungsoo Limimport java.util.List;
251681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Limimport java.util.Objects;
26e16873467cda89d905027458e2664c759465d463Sungsoo Lim
27e16873467cda89d905027458e2664c759465d463Sungsoo Lim/**
28ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * A class representing a TV content rating. When a TV input service inserts the content rating
29ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * information on a program into the database, this class can be used to generate the formatted
30ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * string for
31ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * {@link TvContract.Programs#COLUMN_CONTENT_RATING TvContract.Programs.COLUMN_CONTENT_RATING}.
32ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * To create a {@code TvContentRating} object, use the
33ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * {@link #createRating TvContentRating.createRating} method with valid rating system string
34ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * constants.
35ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <p>
369c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * It is possible for an application to define its own content rating system by supplying a content
379c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * rating system definition XML resource (see example below) and declaring a broadcast receiver that
389c165d6e9a2f085fbdc87b9221f2d52d851b2652Jae Seo * filters {@link TvInputManager#ACTION_QUERY_CONTENT_RATING_SYSTEMS} in its manifest.
39ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * </p>
40fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo * <h3> Example: Rating system definition for the TV Parental Guidelines</h3>
41ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * The following XML example shows how the TV Parental Guidelines in the United States can be
42ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * defined:
435c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim * <p><pre class="prettyprint">
44fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo * {@literal
4514355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo * <rating-system-definitions xmlns:android="http://schemas.android.com/apk/res/android"
4614355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *     android:versionCode="1">
4714355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *     <rating-system-definition android:name="US_TV"
480a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *         android:country="US"
490a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *         android:description="@string/description_us_tv">
5014355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <sub-rating-definition android:name="US_TV_D"
5114355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="D"
520a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_d" />
5314355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <sub-rating-definition android:name="US_TV_L"
5414355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="L"
550a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_l" />
5614355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <sub-rating-definition android:name="US_TV_S"
5714355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="S"
580a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_s" />
5914355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <sub-rating-definition android:name="US_TV_V"
6014355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="V"
610a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_v" />
6214355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <sub-rating-definition android:name="US_TV_FV"
6314355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="FV"
640a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_fv" />
65fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo *
6614355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-definition android:name="US_TV_Y"
6714355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="TV-Y"
680a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_y"
690a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:icon="@drawable/icon_us_tv_y"
700a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:contentAgeHint="0" />
7114355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-definition android:name="US_TV_Y7"
7214355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="TV-Y7"
730a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_y7"
740a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:icon="@drawable/icon_us_tv_y7"
750a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:contentAgeHint="7">
7614355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_FV" />
77fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo *         </rating-definition>
7814355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-definition android:name="US_TV_G"
7914355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="TV-G"
800a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_g"
810a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:icon="@drawable/icon_us_tv_g"
820a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:contentAgeHint="0" />
8314355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-definition android:name="US_TV_PG"
8414355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="TV-PG"
850a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_pg"
860a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:icon="@drawable/icon_us_tv_pg"
870a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:contentAgeHint="14">
8814355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_D" />
8914355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_L" />
9014355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_S" />
9114355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_V" />
92fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo *         </rating-definition>
9314355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-definition android:name="US_TV_14"
9414355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="TV-14"
950a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_14"
960a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:icon="@drawable/icon_us_tv_14"
970a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:contentAgeHint="14">
9814355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_D" />
9914355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_L" />
10014355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_S" />
10114355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_V" />
102fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo *         </rating-definition>
10314355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-definition android:name="US_TV_MA"
10414355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             android:title="TV-MA"
1050a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:description="@string/description_us_tv_ma"
1060a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:icon="@drawable/icon_us_tv_ma"
1070a514c0a87fe3f3a7a8ed973f68c2fc23d242bafJae Seo *             android:contentAgeHint="17">
10814355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_L" />
10914355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_S" />
11014355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <sub-rating android:name="US_TV_V" />
111fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo *         </rating-definition>
11214355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-order>
11314355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <rating android:name="US_TV_Y" />
11414355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <rating android:name="US_TV_Y7" />
11514355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         </rating-order>
11614355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         <rating-order>
11714355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <rating android:name="US_TV_G" />
11814355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <rating android:name="US_TV_PG" />
11914355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <rating android:name="US_TV_14" />
12014355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *             <rating android:name="US_TV_MA" />
12114355950d5ce42b8043cfb96d192f1c76b93d496Jae Seo *         </rating-order>
122fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo *     </rating-system-definition>
123fc27d6db089d25ab752c0445016fd07760c345f8Jae Seo * </rating-system-definitions>}</pre></p>
1245c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *
1255c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim * <h3>System defined rating strings</h3>
126ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * The following strings are defined by the system to provide a standard way to create
127ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * {@code TvContentRating} objects.
128ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <p>For example, to create an object that represents TV-PG rating with suggestive dialogue and
129ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * coarse language from the TV Parental Guidelines in the United States, one can use the following
130ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * code snippet:
131ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * </p>
132ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <pre>
133b417c9d0e2819e1108b2c3e8dd7c8ea8eae57e6fJae Seo * TvContentRating rating = TvContentRating.createRating(
134ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         "com.android.tv",
135ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         "US_TV",
136ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         "US_TV_PG",
137ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         "US_TV_D", "US_TV_L");
138ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * </pre>
139ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <h4>System defined string for domains</h4>
140ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <table>
141ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *     <tr>
142ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <th>Constant Value</th>
14351374011a85e7f5860766c4f56cd73ff39e77528Andrew Jeon *         <th>Description</th>
144ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *     </tr>
145ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *     <tr>
146ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <td>com.android.tv</td>
1475c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *         <td>Used for creating system defined content ratings</td>
1485c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
1495c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim * </table>
15098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *
151ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <h4>System defined strings for rating systems</h4>
152ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <table>
1535c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
154ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <th>Constant Value</th>
15551374011a85e7f5860766c4f56cd73ff39e77528Andrew Jeon *         <th>Description</th>
1565c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
15798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
158e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *         <td>AR_TV</td>
1591d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>TV content rating system for Argentina</td>
16098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
1611fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
162e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *         <td>AU_TV</td>
1631d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>TV content rating system for Australia</td>
1641fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
16598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
166e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *         <td>BR_TV</td>
1671d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>TV content rating system for Brazil</td>
16898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
16998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
170d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB</td>
171d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB content rating system</td>
17298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
17398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
174d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB</td>
175d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB content rating system for Spain</td>
17698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
17798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
178d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB</td>
179d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB content rating system for France</td>
18098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
18198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
182d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB</td>
183d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB content rating system</td>
184fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     </tr>
185fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     <tr>
1865c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *         <td>KR_TV</td>
1871d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>TV content rating system for South Korea</td>
1885c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
18998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
1903652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV</td>
1911d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>TV content rating system for Singapore</td>
19298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
19398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
1941d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV</td>
195ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <td>TV content rating system for the United States</td>
196e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     </tr>
1975c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim * </table>
1985c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *
199ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <h4>System defined strings for ratings</h4>
200ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <table>
2015c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
202ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <th>Rating System</th>
203ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <th>Constant Value</th>
20451374011a85e7f5860766c4f56cd73ff39e77528Andrew Jeon *         <th>Description</th>
2055c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
20698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
2071d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td valign="top" rowspan="4">AR_TV</td>
208d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AR_TV_ATP</td>
20998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Suitable for all audiences. Programs may contain mild violence, language and mature
2101d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         situations</td>
21198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
21298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
213d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AR_TV_SAM_13</td>
21498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Suitable for ages 13 and up. Programs may contain mild to moderate language and mild
2151d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         violence and sexual references</td>
21698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
21798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
218d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AR_TV_SAM_16</td>
21998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Suitable for ages 16 and up. Programs may contain more intensive violence and coarse
2201d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         language, partial nudity and moderate sexual references</td>
22198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
22298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
223d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AR_TV_SAM_18</td>
22498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Suitable for mature audiences only. Programs contain strong violence, coarse language
2251d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         and explicit sexual references</td>
22698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
2271fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
228d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td valign="top" rowspan="8">AU_TV</td>
229d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AU_TV_P</td>
230d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for younger children aged between 2 and 11 years</td>
231d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *     </tr>
232d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *     <tr>
233d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AU_TV_C</td>
234d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for older children aged between 5 and 14 years</td>
2351fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
2361fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
2371fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *         <td>AU_TV_G</td>
238d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for all ages</td>
2391fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
2401fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
2411fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *         <td>AU_TV_PG</td>
242d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Parental guidance is recommended for young viewers under 15</td>
2431fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
2441fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
2451fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *         <td>AU_TV_M</td>
246d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for mature audiences aged 15 years and over</td>
2471fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
2481fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
249d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AU_TV_MA</td>
250d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Not suitable for children and teens under 15, due to sexual descriptions, course
251d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         language, adult themes or drug use</td>
2521fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
2531fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     <tr>
254d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AU_TV_AV</td>
255d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Not suitable for children and teens under 15. This category is used specifically for
256d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         violent programs</td>
25798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
25898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
259d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>AU_TV_R</td>
260d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Not for children under 18. Content may include graphic violence, sexual situations,
261d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         coarse language and explicit drug use</td>
2621fd38bd99610d7dc2a9c335ae2af4089fe1006a1Sungsoo Lim *     </tr>
263b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     <tr>
2641d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td valign="top" rowspan="6">BR_TV</td>
265b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *         <td>BR_TV_L</td>
26698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Content is suitable for all audiences</td>
267b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     </tr>
268b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     <tr>
269b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *         <td>BR_TV_10</td>
27098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Content suitable for viewers over the age of 10</td>
271b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     </tr>
272b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     <tr>
273b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *         <td>BR_TV_12</td>
27498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Content suitable for viewers over the age of 12</td>
275b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     </tr>
276b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     <tr>
277b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *         <td>BR_TV_14</td>
27898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Content suitable for viewers over the age of 14</td>
279b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     </tr>
280b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     <tr>
281b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *         <td>BR_TV_16</td>
28298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Content suitable for viewers over the age of 16</td>
283b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     </tr>
284b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     <tr>
285b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *         <td>BR_TV_18</td>
28698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Content suitable for viewers over the age of 18</td>
28798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
28898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
289d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td valign="top" rowspan="15">DVB</td>
290d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_4</td>
291d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 4 and over</td>
29298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
29398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
294d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_5</td>
295d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 5 and over</td>
29698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
29798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
298d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_6</td>
299d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 6 and over</td>
30098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
30198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
302d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_7</td>
303d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 7 and over</td>
30498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
30598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
306d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_8</td>
307d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 8 and over</td>
308b4bbfbcef3dec8f0de13a6ee474858f3a3cd535dSungsoo Lim *     </tr>
30998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
310d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_9</td>
311d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 9 and over</td>
31298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
31398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
314d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_10</td>
315d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 10 and over</td>
31698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
31798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
318d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_11</td>
319d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 11 and over</td>
32098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
32198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
322d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_12</td>
323d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 12 and over</td>
32498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
32598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
326d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_13</td>
327d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 13 and over</td>
32898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
32998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
330d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_14</td>
331d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 14 and over</td>
33298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
33398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
334d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_15</td>
335d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 15 and over</td>
33698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
33798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
338d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_16</td>
339d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 16 and over</td>
34098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
34198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
342d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_17</td>
343d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 17 and over</td>
34498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
34598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
346d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>DVB_18</td>
347d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 18 and over</td>
34898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
3496b444eed2cbc6b124c9cfabb47fd924d7a55aa99Sungsoo Lim *     <tr>
350d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td valign="top" rowspan="18">ES_DVB</td>
351d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_ALL</td>
35298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Recommended for all ages</td>
353b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     </tr>
354b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     <tr>
355d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_C</td>
356d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for children</td>
357b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     </tr>
358b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     <tr>
359d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_X</td>
360d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for adults</td>
361b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     </tr>
362b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     <tr>
363d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_4</td>
364d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 4 and over</td>
36598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
36698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
367d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_5</td>
368d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 5 and over</td>
36998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
37098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
371d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_6</td>
372d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 6 and over</td>
37398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
37498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
375d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_7</td>
376d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 7 and over</td>
37798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
37898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
379d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_8</td>
380d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 8 and over</td>
38198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
38298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
383d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_9</td>
384d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 9 and over</td>
385b1caf4d8178be53b432399747b5114275c200e43Dongwon Kang *     </tr>
3864acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     <tr>
387d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_10</td>
388d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 10 and over</td>
3894acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     </tr>
3904acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     <tr>
391d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_11</td>
392d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 11 and over</td>
3934acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     </tr>
3944acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     <tr>
395d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_12</td>
396d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 12 and over</td>
3974acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     </tr>
3984acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     <tr>
399d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_13</td>
400d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 13 and over</td>
4014acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     </tr>
4024acc7c3f4e1d63e702b9a4782b01e4a4ef152e71Sungsoo Lim *     <tr>
403d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_14</td>
404d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 14 and over</td>
40598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
40698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
407d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_15</td>
408d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 15 and over</td>
40998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
41098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
411d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_16</td>
412d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 16 and over</td>
41398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
41498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
415d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_17</td>
416d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 17 and over</td>
41798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
41898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
419d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ES_DVB_18</td>
420d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 18 and over</td>
42198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
42298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
423d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td valign="top" rowspan="16">FR_DVB</td>
424d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_U</td>
425d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for all ages</td>
42698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
42798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
428d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_4</td>
429d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 4 and over</td>
43098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
43198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
432d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_5</td>
433d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 5 and over</td>
43498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
43598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
436d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_6</td>
437d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 6 and over</td>
43898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
43998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
440d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_7</td>
441d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 7 and over</td>
44298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
44398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
444d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_8</td>
445d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 8 and over</td>
44698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
44798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
448d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_9</td>
449d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 9 and over</td>
45098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
45198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
452d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_10</td>
453d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 10 and over</td>
45498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
45598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
456d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_11</td>
457d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 11 and over</td>
45898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
45998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
460d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_12</td>
461d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 12 and over</td>
462e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     </tr>
463e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     <tr>
464d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_13</td>
465d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 13 and over</td>
46698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
46798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
468d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_14</td>
469d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 14 and over</td>
47098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
47198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
472d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_15</td>
473d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 15 and over</td>
47498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
47598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
476d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_16</td>
477d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 16 and over</td>
47898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
47998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
480d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_17</td>
481d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 17 and over</td>
48298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
48398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
484d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>FR_DVB_18</td>
485d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 18 and over</td>
48698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
48798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
488d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td valign="top" rowspan="17">ISDB</td>
489d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_4</td>
490d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 4 and over</td>
49198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
49298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
493d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_5</td>
494d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 5 and over</td>
49598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
49698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
497d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_6</td>
498d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 6 and over</td>
49998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
50098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
501d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_7</td>
502d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 7 and over</td>
50398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
50498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
505d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_8</td>
506d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 8 and over</td>
50798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
50898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
509d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_9</td>
510d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 9 and over</td>
511e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     </tr>
512e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     <tr>
513d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_10</td>
514d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 10 and over</td>
51598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
51698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
517d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_11</td>
518d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 11 and over</td>
51998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
52098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
521d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_12</td>
522d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 12 and over</td>
52398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
52498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
525d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_13</td>
526d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 13 and over</td>
52798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
52898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
529d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_14</td>
530d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 14 and over</td>
53198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
53298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
533d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_15</td>
534d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 15 and over</td>
53598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
53698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
537d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_16</td>
538d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 16 and over</td>
53998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
54098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
541d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_17</td>
542d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 17 and over</td>
543fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     </tr>
544fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     <tr>
545d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_18</td>
546d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 18 and over</td>
547fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     </tr>
548fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     <tr>
549d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_19</td>
550d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 19 and over</td>
551fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     </tr>
552fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     <tr>
553d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>ISDB_20</td>
554d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Recommended for ages 20 and over</td>
555fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     </tr>
556fe5998b5add1e96eafd5583528bfc8d9874a4123Jae Seo *     <tr>
5571d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td valign="top" rowspan="5">KR_TV</td>
558b2835e2700a200b368a8247739648601d79e2b06Jae Seo *         <td>KR_TV_ALL</td>
55998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Appropriate for all ages</td>
56098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
56198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
56298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>KR_TV_7</td>
56398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>May contain material inappropriate for children younger than 7, and parental
5641d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         discretion should be used</td>
56598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
56698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
567e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *         <td>KR_TV_12</td>
56898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>May deemed inappropriate for those younger than 12, and parental discretion should be
5691d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         used</td>
570e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     </tr>
571e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     <tr>
572e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *         <td>KR_TV_15</td>
57398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>May be inappropriate for children under 15, and that parental discretion should be
5741d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         used</td>
575e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     </tr>
576e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *     <tr>
577e6dca2cfa4eecd3a45792703b722fc3ef86e8744Sungsoo Lim *         <td>KR_TV_19</td>
57898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>For adults only</td>
57998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
58098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
5813652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td valign="top" rowspan="6">SG_TV</td>
5823652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV_G</td>
5833652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>Suitable for all ages</td>
5843652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *     </tr>
5853652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *     <tr>
5863652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV_PG</td>
5873652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>Suitable for all but parents should guide their young</td>
5883652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *     </tr>
5893652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *     <tr>
5903652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV_PG13</td>
5913652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>Suitable for persons aged 13 and above but parental guidance is advised for children
5923652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         below 13</td>
59398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
59498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
5953652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV_NC16</td>
5963652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>Suitable for persons aged 16 and above</td>
59798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
59898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
5993652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV_M18</td>
6003652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>Suitable for persons aged 18 and above</td>
60198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
60298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
6033652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>SG_TV_R21</td>
6043652e1d8b879fd8e96e8f4e09cefea3c05aa4857Jae Seo *         <td>Suitable for adults aged 21 and above</td>
60598ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
60698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
6071d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td valign="top" rowspan="6">US_TV</td>
6081d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_Y</td>
60998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>This program is designed to be appropriate for all children</td>
6105c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6115c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6121d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_Y7</td>
61398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>This program is designed for children age 7 and above</td>
6145c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6155c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6161d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_G</td>
61798ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>Most parents would find this program suitable for all ages</td>
6185c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6195c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6201d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_PG</td>
62198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>This program contains material that parents may find unsuitable for younger children
62298ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         </td>
6235c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6245c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6251d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_14</td>
62698ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>This program contains some material that many parents would find unsuitable for
6271d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         children under 14 years of age</td>
6285c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6295c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6301d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_MA</td>
63198ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *         <td>This program is specifically designed to be viewed by adults and therefore may be
6321d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         unsuitable for children under 17</td>
63398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
6345c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim * </table>
6355c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *
636ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <h4>System defined strings for sub-ratings</h4>
637ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo * <table>
6385c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
639ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <th>Rating System</th>
640ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo *         <th>Constant Value</th>
64151374011a85e7f5860766c4f56cd73ff39e77528Andrew Jeon *         <th>Description</th>
6425c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6433596a9645eae5636706d6d76b3d0e321c3d5c11fSungsoo Lim *     <tr>
644d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td valign="top" rowspan="3">BR_TV</td>
645d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>BR_TV_D</td>
646d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Drugs<br/>Applicable to BR_TV_L, BR_TV_10, BR_TV_12, BR_TV_14, BR_TV_16, and BR_TV_18
647d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         </td>
64898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
64998ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
650d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>BR_TV_S</td>
651d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Sex<br/>Applicable to BR_TV_L, BR_TV_10, BR_TV_12, BR_TV_14, BR_TV_16, and BR_TV_18
652d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         </td>
65398ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
65498ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     <tr>
655d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>BR_TV_V</td>
656d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Violence<br/>Applicable to BR_TV_L, BR_TV_10, BR_TV_12, BR_TV_14, BR_TV_16, and
657d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         BR_TV_18</td>
65898ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
6595c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6601d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td valign="top" rowspan="5">US_TV</td>
6611d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_D</td>
662d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Suggestive dialogue (Usually means talks about sex)<br/>Applicable to US_TV_PG, and
663d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         US_TV_14</td>
6645c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6655c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6661d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_L</td>
667d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Coarse language<br/>Applicable to US_TV_PG, US_TV_14, and US_TV_MA</td>
6685c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6695c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6701d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_S</td>
671d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Sexual content<br/>Applicable to US_TV_PG, US_TV_14, and US_TV_MA</td>
6725c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6735c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6741d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_V</td>
675d3f17921bde06c0bd164f0abf0e99dafc7c0c569Sungsoo Lim *         <td>Violence<br/>Applicable to US_TV_PG, US_TV_14, and US_TV_MA</td>
6765c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     </tr>
6775c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim *     <tr>
6781d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>US_TV_FV</td>
6791d1164012740a486b3074b50d8d2a9c452dbfeccSungsoo Lim *         <td>Fantasy violence (Children's programming only)<br/>Applicable to US_TV_Y7</td>
68098ea5fa8e4a99433da0c32273674af189c65f14bSungsoo Lim *     </tr>
6815c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim * </table>
682e16873467cda89d905027458e2664c759465d463Sungsoo Lim */
6836057102dbb746593a7d59cf377c969b62e38c664Jae Seopublic final class TvContentRating {
6845c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    // TODO: Consider to use other DELIMITER. In some countries such as India may use this delimiter
6855c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    // in the main ratings.
6865c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    private static final String DELIMITER = "/";
687e16873467cda89d905027458e2664c759465d463Sungsoo Lim
6885c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    private final String mDomain;
6895c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    private final String mRatingSystem;
6905c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    private final String mRating;
6915c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    private final String[] mSubRatings;
6921681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    private final int mHashCode;
693e16873467cda89d905027458e2664c759465d463Sungsoo Lim
694e16873467cda89d905027458e2664c759465d463Sungsoo Lim    /**
695ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Creates a {@code TvContentRating} object with predefined content rating strings.
6965c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim     *
697ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param domain The domain string. For example, "com.android.tv".
698ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param ratingSystem The rating system string. For example, "US_TV".
699ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param rating The content rating string. For example, "US_TV_PG".
700ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param subRatings The sub-rating strings. For example, "US_TV_D" and "US_TV_L".
701ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @return A {@code TvContentRating} object.
702ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @throws IllegalArgumentException If {@code domain}, {@code ratingSystem} or {@code rating} is
703ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     *             {@code null}.
704e16873467cda89d905027458e2664c759465d463Sungsoo Lim     */
705732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim    public static TvContentRating createRating(String domain, String ratingSystem,
706732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim            String rating, String... subRatings) {
7075c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        if (TextUtils.isEmpty(domain)) {
7085c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim            throw new IllegalArgumentException("domain cannot be empty");
7095c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        }
710d22e37acac3a83199423692671e2b20050088426Jaewan Kim        if (TextUtils.isEmpty(ratingSystem)) {
711d22e37acac3a83199423692671e2b20050088426Jaewan Kim            throw new IllegalArgumentException("ratingSystem cannot be empty");
712d22e37acac3a83199423692671e2b20050088426Jaewan Kim        }
7135c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        if (TextUtils.isEmpty(rating)) {
7145c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim            throw new IllegalArgumentException("rating cannot be empty");
7155c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        }
716732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim        return new TvContentRating(domain, ratingSystem, rating, subRatings);
717e16873467cda89d905027458e2664c759465d463Sungsoo Lim    }
718e16873467cda89d905027458e2664c759465d463Sungsoo Lim
719e16873467cda89d905027458e2664c759465d463Sungsoo Lim    /**
720ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Recovers a {@code TvContentRating} object from the string that was previously created from
7215c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim     * {@link #flattenToString}.
722e16873467cda89d905027458e2664c759465d463Sungsoo Lim     *
723ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param ratingString The string returned by {@link #flattenToString}.
724ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @return the {@code TvContentRating} object containing the domain, rating system, rating and
725ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     *         sub-ratings information encoded in {@code ratingString}.
7265c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim     * @see #flattenToString
727e16873467cda89d905027458e2664c759465d463Sungsoo Lim     */
7285c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    public static TvContentRating unflattenFromString(String ratingString) {
7295c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        if (TextUtils.isEmpty(ratingString)) {
7305c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim            throw new IllegalArgumentException("ratingString cannot be empty");
7315c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        }
7325c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        String[] strs = ratingString.split(DELIMITER);
733732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim        if (strs.length < 3) {
7345c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim            throw new IllegalArgumentException("Invalid rating string: " + ratingString);
7355c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        }
736732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim        if (strs.length > 3) {
737732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim            String[] subRatings = new String[strs.length - 3];
738732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim            System.arraycopy(strs, 3, subRatings, 0, subRatings.length);
739732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim            return new TvContentRating(strs[0], strs[1], strs[2], subRatings);
7405c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        }
741732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim        return new TvContentRating(strs[0], strs[1], strs[2], null);
742e16873467cda89d905027458e2664c759465d463Sungsoo Lim    }
743e16873467cda89d905027458e2664c759465d463Sungsoo Lim
744e16873467cda89d905027458e2664c759465d463Sungsoo Lim    /**
745e16873467cda89d905027458e2664c759465d463Sungsoo Lim     * Constructs a TvContentRating object from a given rating and sub-rating constants.
746e16873467cda89d905027458e2664c759465d463Sungsoo Lim     *
747ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param domain The string for domain of the content rating system such as "com.android.tv".
748ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param ratingSystem The rating system string such as "US_TV".
749ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param rating The content rating string such as "US_TV_PG".
750ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @param subRatings The sub-rating strings such as "US_TV_D" and "US_TV_L".
751e16873467cda89d905027458e2664c759465d463Sungsoo Lim     */
752732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim    private TvContentRating(
753732be11cefc439ea47a6c9cced6ab240aa5f1ea9Sungsoo Lim            String domain, String ratingSystem, String rating, String[] subRatings) {
7545c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        mDomain = domain;
7555c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        mRatingSystem = ratingSystem;
7566057102dbb746593a7d59cf377c969b62e38c664Jae Seo        mRating = rating;
7571681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        if (subRatings == null || subRatings.length == 0) {
7581681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            mSubRatings = null;
7591681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        } else {
7601681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            Arrays.sort(subRatings);
7611681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            mSubRatings = subRatings;
7621681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        }
763a9a29a29e55380ebd30175a75b285b16201002b6Sungsoo Lim        mHashCode = 31 * Objects.hash(mDomain, mRating) + Arrays.hashCode(mSubRatings);
764e16873467cda89d905027458e2664c759465d463Sungsoo Lim    }
765e16873467cda89d905027458e2664c759465d463Sungsoo Lim
766e16873467cda89d905027458e2664c759465d463Sungsoo Lim    /**
767ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Returns the domain of this {@code TvContentRating} object.
7685c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim     */
7695c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    public String getDomain() {
7705c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        return mDomain;
7715c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    }
7725c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim
7735c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    /**
774ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Returns the rating system of this {@code TvContentRating} object.
7755c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim     */
7765c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    public String getRatingSystem() {
7775c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        return mRatingSystem;
7785c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    }
7795c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim
7805c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim    /**
781ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Returns the main rating of this {@code TvContentRating} object.
7826057102dbb746593a7d59cf377c969b62e38c664Jae Seo     */
7836057102dbb746593a7d59cf377c969b62e38c664Jae Seo    public String getMainRating() {
7846057102dbb746593a7d59cf377c969b62e38c664Jae Seo        return mRating;
7856057102dbb746593a7d59cf377c969b62e38c664Jae Seo    }
7866057102dbb746593a7d59cf377c969b62e38c664Jae Seo
7876057102dbb746593a7d59cf377c969b62e38c664Jae Seo    /**
788ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Returns the unmodifiable sub-rating string {@link List} of this {@code TvContentRating}
789ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * object.
7906057102dbb746593a7d59cf377c969b62e38c664Jae Seo     */
7916057102dbb746593a7d59cf377c969b62e38c664Jae Seo    public List<String> getSubRatings() {
7926057102dbb746593a7d59cf377c969b62e38c664Jae Seo        if (mSubRatings == null) {
7936057102dbb746593a7d59cf377c969b62e38c664Jae Seo            return null;
7946057102dbb746593a7d59cf377c969b62e38c664Jae Seo        }
7956057102dbb746593a7d59cf377c969b62e38c664Jae Seo        return Collections.unmodifiableList(Arrays.asList(mSubRatings));
7966057102dbb746593a7d59cf377c969b62e38c664Jae Seo    }
7976057102dbb746593a7d59cf377c969b62e38c664Jae Seo
7986057102dbb746593a7d59cf377c969b62e38c664Jae Seo    /**
799ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Returns a string that unambiguously describes the rating information contained in a
800ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * {@code TvContentRating} object. One can later recover the object from this string through
801ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * {@link #unflattenFromString}.
8026057102dbb746593a7d59cf377c969b62e38c664Jae Seo     *
803ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * @return a string containing the rating information, which can later be stored in the
804ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     *         database.
8056057102dbb746593a7d59cf377c969b62e38c664Jae Seo     * @see #unflattenFromString
8066057102dbb746593a7d59cf377c969b62e38c664Jae Seo     */
8076057102dbb746593a7d59cf377c969b62e38c664Jae Seo    public String flattenToString() {
8085c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        StringBuilder builder = new StringBuilder();
8095c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        builder.append(mDomain);
8105c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        builder.append(DELIMITER);
8115c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        builder.append(mRatingSystem);
8125c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        builder.append(DELIMITER);
8135c5b83fcd58d21c9ab7ac986bf84f604ec5bb4b5Sungsoo Lim        builder.append(mRating);
8146057102dbb746593a7d59cf377c969b62e38c664Jae Seo        if (mSubRatings != null) {
8156057102dbb746593a7d59cf377c969b62e38c664Jae Seo            for (String subRating : mSubRatings) {
8166057102dbb746593a7d59cf377c969b62e38c664Jae Seo                builder.append(DELIMITER);
8176057102dbb746593a7d59cf377c969b62e38c664Jae Seo                builder.append(subRating);
8186057102dbb746593a7d59cf377c969b62e38c664Jae Seo            }
8196057102dbb746593a7d59cf377c969b62e38c664Jae Seo        }
8206057102dbb746593a7d59cf377c969b62e38c664Jae Seo        return builder.toString();
8216057102dbb746593a7d59cf377c969b62e38c664Jae Seo    }
8226057102dbb746593a7d59cf377c969b62e38c664Jae Seo
8236057102dbb746593a7d59cf377c969b62e38c664Jae Seo    /**
824ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * Returns {@code true} if this rating has the same main rating as the specified rating and when
825ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * this rating's sub-ratings contain the other's.
8266057102dbb746593a7d59cf377c969b62e38c664Jae Seo     * <p>
827ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * For example, a {@code TvContentRating} object that represents TV-PG with S(Sexual content)
828ceb51abc74129f5c736ba5aa0400c45f1c4752acJae Seo     * and V(Violence) contains TV-PG, TV-PG/S, TV-PG/V and itself.
8296057102dbb746593a7d59cf377c969b62e38c664Jae Seo     * </p>
8306057102dbb746593a7d59cf377c969b62e38c664Jae Seo     *
8316057102dbb746593a7d59cf377c969b62e38c664Jae Seo     * @param rating The {@link TvContentRating} to check.
8326057102dbb746593a7d59cf377c969b62e38c664Jae Seo     * @return {@code true} if this object contains {@code rating}, {@code false} otherwise.
8336057102dbb746593a7d59cf377c969b62e38c664Jae Seo     * @hide
834e16873467cda89d905027458e2664c759465d463Sungsoo Lim     */
8356057102dbb746593a7d59cf377c969b62e38c664Jae Seo    @SystemApi
8366057102dbb746593a7d59cf377c969b62e38c664Jae Seo    public final boolean contains(TvContentRating rating) {
8376057102dbb746593a7d59cf377c969b62e38c664Jae Seo        if (rating == null) {
8386057102dbb746593a7d59cf377c969b62e38c664Jae Seo            throw new IllegalArgumentException("rating cannot be null");
8396057102dbb746593a7d59cf377c969b62e38c664Jae Seo        }
8406057102dbb746593a7d59cf377c969b62e38c664Jae Seo        if (!rating.getMainRating().equals(mRating)) {
8416057102dbb746593a7d59cf377c969b62e38c664Jae Seo            return false;
8426057102dbb746593a7d59cf377c969b62e38c664Jae Seo        }
843d22e37acac3a83199423692671e2b20050088426Jaewan Kim        if (!rating.getDomain().equals(mDomain) ||
844d22e37acac3a83199423692671e2b20050088426Jaewan Kim                !rating.getRatingSystem().equals(mRatingSystem) ||
845d22e37acac3a83199423692671e2b20050088426Jaewan Kim                !rating.getMainRating().equals(mRating)) {
846d22e37acac3a83199423692671e2b20050088426Jaewan Kim            return false;
847d22e37acac3a83199423692671e2b20050088426Jaewan Kim        }
8486057102dbb746593a7d59cf377c969b62e38c664Jae Seo        List<String> subRatings = getSubRatings();
8496057102dbb746593a7d59cf377c969b62e38c664Jae Seo        List<String> subRatingsOther = rating.getSubRatings();
8506057102dbb746593a7d59cf377c969b62e38c664Jae Seo        if (subRatings == null && subRatingsOther == null) {
8516057102dbb746593a7d59cf377c969b62e38c664Jae Seo            return true;
8526057102dbb746593a7d59cf377c969b62e38c664Jae Seo        } else if (subRatings == null && subRatingsOther != null) {
8536057102dbb746593a7d59cf377c969b62e38c664Jae Seo            return false;
8546057102dbb746593a7d59cf377c969b62e38c664Jae Seo        } else if (subRatings != null && subRatingsOther == null) {
8556057102dbb746593a7d59cf377c969b62e38c664Jae Seo            return true;
8566057102dbb746593a7d59cf377c969b62e38c664Jae Seo        } else {
8576057102dbb746593a7d59cf377c969b62e38c664Jae Seo            return subRatings.containsAll(subRatingsOther);
858e16873467cda89d905027458e2664c759465d463Sungsoo Lim        }
859e16873467cda89d905027458e2664c759465d463Sungsoo Lim    }
8601681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim
8611681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    @Override
8621681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    public boolean equals(Object obj) {
8631681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        if (!(obj instanceof TvContentRating)) {
8641681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            return false;
8651681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        }
8661681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        TvContentRating other = (TvContentRating) obj;
8671681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        if (mHashCode != other.mHashCode) {
8681681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            return false;
8691681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        }
8701681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        if (!TextUtils.equals(mDomain, other.mDomain)) {
8711681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            return false;
8721681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        }
8731681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        if (!TextUtils.equals(mRatingSystem, other.mRatingSystem)) {
8741681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            return false;
8751681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        }
8761681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        if (!TextUtils.equals(mRating, other.mRating)) {
8771681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim            return false;
8781681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        }
8791681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        return Arrays.equals(mSubRatings, other.mSubRatings);
8801681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    }
8811681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim
8821681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    @Override
8831681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    public int hashCode() {
8841681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim        return mHashCode;
8851681ac0b690b8888858ab402742dd8eb285518d0Sungsoo Lim    }
886e16873467cda89d905027458e2664c759465d463Sungsoo Lim}
887