183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang/*
283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * Copyright (C) 2017 The Android Open Source Project
383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *
483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * Licensed under the Apache License, Version 2.0 (the "License");
583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * you may not use this file except in compliance with the License.
683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * You may obtain a copy of the License at
783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *
883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *      http://www.apache.org/licenses/LICENSE-2.0
983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *
1083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * Unless required by applicable law or agreed to in writing, software
1183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * distributed under the License is distributed on an "AS IS" BASIS,
1283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * See the License for the specific language governing permissions and
1483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * limitations under the License.
1583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang */
160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangpackage android.support.media.tv;
1883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
2083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
21c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kangimport android.app.Activity;
2283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.content.ComponentName;
2383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.content.ContentResolver;
2483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.content.ContentUris;
25c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kangimport android.content.Context;
2683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.content.Intent;
2783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.media.tv.TvContentRating;
2883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.media.tv.TvContract;
2983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.net.Uri;
30b30fefbedf4564400015b61f991607eae61d16d0Dongwon Kangimport android.os.Build;
310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kangimport android.os.Bundle;
3283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.provider.BaseColumns;
33407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kangimport android.support.annotation.IntDef;
3483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.support.annotation.NonNull;
3583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.support.annotation.Nullable;
36b30fefbedf4564400015b61f991607eae61d16d0Dongwon Kangimport android.support.annotation.RequiresApi;
3783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.support.annotation.RestrictTo;
38acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kangimport android.support.annotation.StringDef;
390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kangimport android.support.media.tv.TvContractCompat.Programs.Genres;
4083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport android.text.TextUtils;
4183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
42acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kangimport java.lang.annotation.Retention;
43acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kangimport java.lang.annotation.RetentionPolicy;
4483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport java.util.ArrayList;
4583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport java.util.HashMap;
4683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport java.util.HashSet;
4783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport java.util.List;
4883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangimport java.util.Map;
4983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
5083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang/**
5183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * The contract between the TV provider and applications. Contains definitions for the supported
5283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * URIs and columns.
5383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * <h3>Overview</h3>
5483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *
5583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * <p>TvContract defines a basic database of TV content metadata such as channel and program
5683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * information. The information is stored in {@link Channels} and {@link Programs} tables.
5783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *
5883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * <ul>
5983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *     <li>A row in the {@link Channels} table represents information about a TV channel. The data
6083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *         format can vary greatly from standard to standard or according to service provider, thus
6183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *         the columns here are mostly comprised of basic entities that are usually seen to users
6283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *         regardless of standard such as channel number and name.</li>
6383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *     <li>A row in the {@link Programs} table represents a set of data describing a TV program such
6483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang *         as program title and start time.</li>
6583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang * </ul>
6683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang */
6783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kangpublic final class TvContractCompat {
6883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /** The authority for the TV provider. */
6983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String AUTHORITY = "android.media.tv";
7083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
7183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
7283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Permission to read TV listings. This is required to read all the TV channel and program
7383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * information available on the system.
7483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
7583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
7683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
7783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PERMISSION_READ_TV_LISTINGS = "android.permission.READ_TV_LISTINGS";
7883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
7983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private static final String PATH_CHANNEL = "channel";
8083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private static final String PATH_PROGRAM = "program";
8183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private static final String PATH_RECORDED_PROGRAM = "recorded_program";
820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    private static final String PATH_PREVIEW_PROGRAM = "preview_program";
830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    private static final String PATH_WATCH_NEXT_PROGRAM = "watch_next_program";
8483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private static final String PATH_PASSTHROUGH = "passthrough";
8583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
8683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
87c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * Broadcast Action: sent when an application requests the system to make the given channel
88c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * browsable.  The operation is performed in the background without user interaction. This
89c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * is only relevant to channels with {@link Channels#TYPE_PREVIEW} type.
900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>The intent must contain the following bundle parameters:
920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <ul>
930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@link #EXTRA_CHANNEL_ID}: ID for the {@link Channels#TYPE_PREVIEW} channel as a long
940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     integer.</li>
950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@link #EXTRA_PACKAGE_NAME}: the package name of the requesting application.</li>
960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * </ul>
97c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @hide
98c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     */
99c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    @RestrictTo(LIBRARY_GROUP)
100c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    public static final String ACTION_CHANNEL_BROWSABLE_REQUESTED =
101c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang            "android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED";
102c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang
103c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    /**
104c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * Activity Action: sent by an application telling the system to make the given channel
105c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * browsable with user interaction. The system may show UI to ask user to approve the channel.
106c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * This is only relevant to channels with {@link Channels#TYPE_PREVIEW} type. Use
107c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * {@link Activity#startActivityForResult} to get the result of the request.
108c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
109c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * <p>The intent must contain the following bundle parameters:
110c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * <ul>
111c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *     <li>{@link #EXTRA_CHANNEL_ID}: ID for the {@link Channels#TYPE_PREVIEW} channel as a long
112c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *     integer.</li>
113c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * </ul>
1140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
115c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    public static final String ACTION_REQUEST_CHANNEL_BROWSABLE =
116c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang            "android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
1170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
1190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Broadcast Action: sent by the system to tell the target TV input that one of its preview
1200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * program's browsable state is disabled, i.e., it will no longer be shown to users, which, for
1210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * example, might be a result of users' interaction with UI. The input is expected to delete the
1220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * preview program from the content provider.
1230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
1240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>The intent must contain the following bundle parameter:
1250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <ul>
1260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@link #EXTRA_PREVIEW_PROGRAM_ID}: the disabled preview program ID.</li>
1270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * </ul>
1280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
1290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED =
1300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
1310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
1330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Broadcast Action: sent by the system to tell the target TV input that one of its "watch next"
1340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * program's browsable state is disabled, i.e., it will no longer be shown to users, which, for
1350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * example, might be a result of users' interaction with UI. The input is expected to delete the
1360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * "watch next" program from the content provider.
1370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
1380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>The intent must contain the following bundle parameter:
1390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <ul>
1400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@link #EXTRA_WATCH_NEXT_PROGRAM_ID}: the disabled "watch next" program ID.</li>
1410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * </ul>
1420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
1430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED =
1440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            "android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
1450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
1470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Broadcast Action: sent by the system to tell the target TV input that one of its existing
1480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * preview programs is added to the watch next programs table by user.
1490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
1500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>The intent must contain the following bundle parameters:
1510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <ul>
1520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@link #EXTRA_PREVIEW_PROGRAM_ID}: the ID of the existing preview program.</li>
1530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@link #EXTRA_WATCH_NEXT_PROGRAM_ID}: the ID of the new watch next program.</li>
1540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * </ul>
1550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
1560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT =
1570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
1580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
159df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen    /**
160df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * Broadcast Action: sent to the target TV input after it is first installed to notify the input
161df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * to initialize its channels and programs to the system content provider.
162df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     *
163df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * <p>Note that this intent is sent only on devices with
164df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * {@link android.content.pm.PackageManager#FEATURE_LEANBACK} enabled. Besides that, in order
165df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * to receive this intent, the target TV input must:
166df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * <ul>
167df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     *     <li>Declare a broadcast receiver for this intent in its
168df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     *         <code>AndroidManifest.xml</code>.</li>
169df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     *     <li>Declare appropriate permissions to write channel and program data in its
170df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     *         <code>AndroidManifest.xml</code>.</li>
171df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     * </ul>
172df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen     */
173df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen    public static final String ACTION_INITIALIZE_PROGRAMS =
174df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen            "android.media.tv.action.INITIALIZE_PROGRAMS";
175df6aff0a9d4805140ffe6304d8ff46e8460ab889Conrad Chen
176c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    /**
177c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * The key for a bundle parameter containing a channel ID as a long integer
178c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     */
1790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_CHANNEL_ID = "android.media.tv.extra.CHANNEL_ID";
1800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
181c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    /**
182c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * The key for a bundle parameter containing a package name as a string.
183c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @hide
184c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     */
185c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    @RestrictTo(LIBRARY_GROUP)
1860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_PACKAGE_NAME = "android.media.tv.extra.PACKAGE_NAME";
1870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /** The key for a bundle parameter containing a program ID as a long integer. */
1890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_PREVIEW_PROGRAM_ID =
1900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            "android.media.tv.extra.PREVIEW_PROGRAM_ID";
1910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /** The key for a bundle parameter containing a watch next program ID as a long integer. */
1930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_WATCH_NEXT_PROGRAM_ID =
1940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            "android.media.tv.extra.WATCH_NEXT_PROGRAM_ID";
1950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
1960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
1970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * The method name to get existing columns in the given table of the specified content provider.
1980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
1990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>The method caller must provide the following parameter:
2000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <ul>
2010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@code arg}: The content URI of the target table as a {@link String}.</li>
2020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * </ul>
2030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>On success, the returned {@link android.os.Bundle} will include existing column names
2050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * with the key {@link #EXTRA_EXISTING_COLUMN_NAMES}. Otherwise, the return value will be
2060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * {@code null}.
2070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see ContentResolver#call(Uri, String, String, Bundle)
2090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #EXTRA_EXISTING_COLUMN_NAMES
2100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @hide
2110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
2120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
2130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String METHOD_GET_COLUMNS = "get_columns";
2140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
2160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * The method name to add a new column in the given table of the specified content provider.
2170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>The method caller must provide the following parameter:
2190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <ul>
2200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@code arg}: The content URI of the target table as a {@link String}.</li>
2210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     <li>{@code extra}: Name, data type, and default value of the new column in a Bundle:
2220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *         <ul>
2230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *             <li>{@link #EXTRA_COLUMN_NAME} the column name as a {@link String}.</li>
2240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *             <li>{@link #EXTRA_DATA_TYPE} the data type as a {@link String}.</li>
2250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *             <li>{@link #EXTRA_DEFAULT_VALUE} the default value as a {@link String}.
2260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *                 (optional)</li>
2270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *         </ul>
2280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *     </li>
2290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * </ul>
2300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>On success, the returned {@link android.os.Bundle} will include current colum names after
2320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * the addition operation with the key {@link #EXTRA_EXISTING_COLUMN_NAMES}. Otherwise, the
2330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * return value will be {@code null}.
2340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see ContentResolver#call(Uri, String, String, Bundle)
2360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #EXTRA_COLUMN_NAME
2370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #EXTRA_DATA_TYPE
2380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #EXTRA_DEFAULT_VALUE
2390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #EXTRA_EXISTING_COLUMN_NAMES
2400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @hide
2410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
2420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
2430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String METHOD_ADD_COLUMN = "add_column";
2440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
2460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * The key for a returned {@link Bundle} value containing existing column names in the given
2470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * table as an {@link ArrayList} of {@link String}.
2480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #METHOD_GET_COLUMNS
2500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #METHOD_ADD_COLUMN
2510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @hide
2520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
2530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
2540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_EXISTING_COLUMN_NAMES =
2550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            "android.media.tv.extra.EXISTING_COLUMN_NAMES";
2560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
2580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * The key for a {@link Bundle} parameter containing the new column name to be added in the
2590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * given table as a non-empty {@link CharSequence}.
2600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #METHOD_ADD_COLUMN
2620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @hide
2630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
2640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
2650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_COLUMN_NAME = "android.media.tv.extra.COLUMN_NAME";
2660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
2680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * The key for a {@link Bundle} parameter containing the data type of the new column to be added
2690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * in the given table as a non-empty {@link CharSequence}, which should be one of the following
2700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * values: {@code "TEXT"}, {@code "INTEGER"}, {@code "REAL"}, or {@code "BLOB"}.
2710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #METHOD_ADD_COLUMN
2730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @hide
2740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
2750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
2760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_DATA_TYPE = "android.media.tv.extra.DATA_TYPE";
2770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
2790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * The key for a {@link Bundle} parameter containing the default value of the new column to be
2800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * added in the given table as a {@link CharSequence}, which represents a valid default value
2810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * according to the data type provided with {@link #EXTRA_DATA_TYPE}.
2820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
2830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @see #METHOD_ADD_COLUMN
2840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @hide
2850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
2860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
2870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final String EXTRA_DEFAULT_VALUE = "android.media.tv.extra.DEFAULT_VALUE";
2880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
29083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * An optional query, update or delete URI parameter that allows the caller to specify TV input
29183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * ID to filter channels.
29283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
29383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
29483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
29583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PARAM_INPUT = "input";
29683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
29783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
29883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * An optional query, update or delete URI parameter that allows the caller to specify channel
29983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * ID to filter programs.
30083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
30183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
30283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
30383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PARAM_CHANNEL = "channel";
30483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
30583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
30683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * An optional query, update or delete URI parameter that allows the caller to specify start
30783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * time (in milliseconds since the epoch) to filter programs.
30883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
30983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
31083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
31183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PARAM_START_TIME = "start_time";
31283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
31383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
31483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * An optional query, update or delete URI parameter that allows the caller to specify end time
31583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * (in milliseconds since the epoch) to filter programs.
31683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
31783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
31883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
31983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PARAM_END_TIME = "end_time";
32083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
32183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
32283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * A query, update or delete URI parameter that allows the caller to operate on all or
32383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * browsable-only channels. If set to "true", the rows that contain non-browsable channels are
32483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * not affected.
32583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
32683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
32783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
32883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PARAM_BROWSABLE_ONLY = "browsable_only";
32983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
33083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
33183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * A optional query, update or delete URI parameter that allows the caller to specify canonical
33283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * genre to filter programs.
33383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @hide
33483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
33583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    @RestrictTo(LIBRARY_GROUP)
33683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static final String PARAM_CANONICAL_GENRE = "canonical_genre";
33783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
33883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
33983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds an ID that uniquely identifies a TV input service.
34083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
34183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param name The {@link ComponentName} of the TV input service to build ID for.
34283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @return the ID for the given TV input service.
34383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
34483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static String buildInputId(ComponentName name) {
34583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildInputId(name);
34683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
34783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
34883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
34983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to a specific channel.
35083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
35183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelId The ID of the channel to point to.
35283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
35383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildChannelUri(long channelId) {
35483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildChannelUri(channelId);
35583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
35683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
35783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
35883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Build a special channel URI intended to be used with pass-through inputs. (e.g. HDMI)
35983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
36083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param inputId The ID of the pass-through input to build a channels URI for.
36183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
36283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildChannelUriForPassthroughInput(String inputId) {
36383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildChannelUriForPassthroughInput(inputId);
36483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
36583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
36683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
36783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to a channel logo. See {@link Channels.Logo}.
36883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
36983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelId The ID of the channel whose logo is pointed to.
37083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
37183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildChannelLogoUri(long channelId) {
37283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildChannelLogoUri(channelId);
37383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
37483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
37583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
37683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to a channel logo. See {@link Channels.Logo}.
37783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
37883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelUri The URI of the channel whose logo is pointed to.
37983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
38083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildChannelLogoUri(Uri channelUri) {
38183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildChannelLogoUri(channelUri);
38283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
38383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
38483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
38583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to all channels from a given TV input.
38683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
38783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param inputId The ID of the TV input to build a channels URI for. If {@code null}, builds a
38883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *            URI for all the TV inputs.
38983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
39083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildChannelsUriForInput(@Nullable String inputId) {
39183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildChannelsUriForInput(inputId);
39283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
39383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
39483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
39583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to a specific program.
39683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
39783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param programId The ID of the program to point to.
39883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
39983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildProgramUri(long programId) {
40083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildProgramUri(programId);
40183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
40283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
40383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
40483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to all programs on a given channel.
40583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
40683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelId The ID of the channel to return programs for.
40783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
40883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildProgramsUriForChannel(long channelId) {
40983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildProgramsUriForChannel(channelId);
41083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
41183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
41283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
41383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to all programs on a given channel.
41483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
41583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelUri The URI of the channel to return programs for.
41683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
41783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildProgramsUriForChannel(Uri channelUri) {
41883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildProgramsUriForChannel(channelUri);
41983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
42083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
42183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
42283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to programs on a specific channel whose schedules overlap with the
42383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * given time frame.
42483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
42583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelId The ID of the channel to return programs for.
42683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param startTime The start time used to filter programs. The returned programs should have
42783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *            {@link Programs#COLUMN_END_TIME_UTC_MILLIS} that is greater than this time.
42883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param endTime The end time used to filter programs. The returned programs should have
42983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *            {@link Programs#COLUMN_START_TIME_UTC_MILLIS} that is less than this time.
43083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
43183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildProgramsUriForChannel(long channelId, long startTime,
43283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            long endTime) {
43383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildProgramsUriForChannel(channelId, startTime, endTime);
43483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
43583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
43683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
43783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to programs on a specific channel whose schedules overlap with the
43883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * given time frame.
43983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
44083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param channelUri The URI of the channel to return programs for.
44183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param startTime The start time used to filter programs. The returned programs should have
44283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *            {@link Programs#COLUMN_END_TIME_UTC_MILLIS} that is greater than this time.
44383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param endTime The end time used to filter programs. The returned programs should have
44483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *            {@link Programs#COLUMN_START_TIME_UTC_MILLIS} that is less than this time.
44583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
44683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildProgramsUriForChannel(Uri channelUri, long startTime,
44783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            long endTime) {
44883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return TvContract.buildProgramsUriForChannel(channelUri, startTime, endTime);
44983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
45083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
45183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
45283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Builds a URI that points to a specific recorded program.
45383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
45483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * @param recordedProgramId The ID of the recorded program to point to.
45583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
45683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static Uri buildRecordedProgramUri(long recordedProgramId) {
45783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        if (android.os.Build.VERSION.SDK_INT >= 24) {
45883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return TvContract.buildRecordedProgramUri(recordedProgramId);
45983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        } else {
46083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return ContentUris.withAppendedId(RecordedPrograms.CONTENT_URI, recordedProgramId);
46183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
46283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
46383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
4640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
4650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Builds a URI that points to a specific preview program.
4660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
4670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @param previewProgramId The ID of the preview program to point to.
4680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
4690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static Uri buildPreviewProgramUri(long previewProgramId) {
4700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        return ContentUris.withAppendedId(PreviewPrograms.CONTENT_URI, previewProgramId);
4710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
4720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
4730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
4740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Builds a URI that points to all preview programs on a given channel.
4750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
4760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @param channelId The ID of the channel to return preview programs for.
4770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
4780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static Uri buildPreviewProgramsUriForChannel(long channelId) {
4790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        return PreviewPrograms.CONTENT_URI.buildUpon()
4800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                .appendQueryParameter(PARAM_CHANNEL, String.valueOf(channelId)).build();
4810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
4820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
4830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
4840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Builds a URI that points to all preview programs on a given channel.
4850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
4860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @param channelUri The URI of the channel to return preview programs for.
4870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
4880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static Uri buildPreviewProgramsUriForChannel(Uri channelUri) {
4890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        if (!isChannelUriForTunerInput(channelUri)) {
4900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            throw new IllegalArgumentException("Not a channel: " + channelUri);
4910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
4920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        return buildPreviewProgramsUriForChannel(ContentUris.parseId(channelUri));
4930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
4940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
4950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
4960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Builds a URI that points to a specific watch next program.
4970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
4980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * @param watchNextProgramId The ID of the watch next program to point to.
4990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
5000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static Uri buildWatchNextProgramUri(long watchNextProgramId) {
5010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        return ContentUris.withAppendedId(WatchNextPrograms.CONTENT_URI, watchNextProgramId);
5020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
5030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
50483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private static boolean isTvUri(Uri uri) {
50583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return uri != null && ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())
50683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                && AUTHORITY.equals(uri.getAuthority());
50783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
50883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
50983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private static boolean isTwoSegmentUriStartingWith(Uri uri, String pathSegment) {
51083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        List<String> pathSegments = uri.getPathSegments();
51183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        return pathSegments.size() == 2 && pathSegment.equals(pathSegments.get(0));
51283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
51383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
51483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
51583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Returns {@code true}, if {@code uri} is a channel URI.
51683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
51783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static boolean isChannelUri(Uri uri) {
51883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        if (android.os.Build.VERSION.SDK_INT >= 24) {
51983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return TvContract.isChannelUri(uri);
52083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        } else {
52183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return isChannelUriForTunerInput(uri) || isChannelUriForPassthroughInput(uri);
52283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
52383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
52483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
52583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
52683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Returns {@code true}, if {@code uri} is a channel URI for a tuner input.
52783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
52883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static boolean isChannelUriForTunerInput(Uri uri) {
52983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        if (android.os.Build.VERSION.SDK_INT >= 24) {
53083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return TvContract.isChannelUriForTunerInput(uri);
53183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        } else {
53283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_CHANNEL);
53383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
53483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
53583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
53683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
53783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Returns {@code true}, if {@code uri} is a channel URI for a pass-through input.
53883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
53983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static boolean isChannelUriForPassthroughInput(Uri uri) {
54083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        if (android.os.Build.VERSION.SDK_INT >= 24) {
54183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return TvContract.isChannelUriForPassthroughInput(uri);
54283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        } else {
54383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PASSTHROUGH);
54483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
54583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
54683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
54783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
54883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Returns {@code true}, if {@code uri} is a program URI.
54983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
55083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public static boolean isProgramUri(Uri uri) {
55183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        if (android.os.Build.VERSION.SDK_INT >= 24) {
55283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return TvContract.isProgramUri(uri);
55383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        } else {
55483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PROGRAM);
55583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
55683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
55783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
558c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    /**
559c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * Requests to make a channel browsable.
560c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
561c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * <p>Once called, the system will review the request and make the channel browsable based on
562c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * its policy. The first request from a package is guaranteed to be approved. This is only
563c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * relevant to channels with {@link Channels#TYPE_PREVIEW} type.
564c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
565c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * <p>No-op on devices prior to {@link android.os.Build.VERSION_CODES#O}.
566c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
567c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @param context The context for accessing content provider.
568c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @param channelId The channel ID to be browsable.
569c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @see Channels#COLUMN_BROWSABLE
570c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     */
571b30fefbedf4564400015b61f991607eae61d16d0Dongwon Kang    @RequiresApi(api = 26)
572c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    public static void requestChannelBrowsable(Context context, long channelId) {
573b30fefbedf4564400015b61f991607eae61d16d0Dongwon Kang        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
574c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang            TvContract.requestChannelBrowsable(context, channelId);
575c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang        }
576c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    }
57783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
57883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private TvContractCompat() {}
57983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
58083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
58183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Common base for the tables of TV channels/programs.
58283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
58383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public interface BaseTvColumns extends BaseColumns {
58483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
58583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The name of the package that owns the current row.
58683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
58783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>The TV provider fills in this column with the name of the package that provides the
58883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * initial data of the row. If the package is later uninstalled, the rows it owns are
58983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * automatically removed from the tables.
59083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
59183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
59283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
59383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        String COLUMN_PACKAGE_NAME = "package_name";
59483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
59583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
5960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
5970cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * Common columns for the tables of TV programs.
5980cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * @hide
5990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
6000cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    @RestrictTo(LIBRARY_GROUP)
6010cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    interface ProgramColumns {
6029b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /** @hide */
6039b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        @IntDef({
6049b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen                REVIEW_RATING_STYLE_STARS,
6059b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen                REVIEW_RATING_STYLE_THUMBS_UP_DOWN,
6069b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen                REVIEW_RATING_STYLE_PERCENTAGE,
6079b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        })
6089b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        @Retention(RetentionPolicy.SOURCE)
6099b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        @RestrictTo(LIBRARY_GROUP)
6109b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        @interface ReviewRatingStyle {}
6119b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
6129b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
6139b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating style for five star rating.
6149b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
6159b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
6169b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
6179b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        int REVIEW_RATING_STYLE_STARS = 0;
6189b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
6199b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
6209b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating style for thumbs-up and thumbs-down rating.
6219b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
6229b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
6239b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
6249b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1;
6259b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
6269b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
6279b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating style for 0 to 100 point system.
6289b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
6299b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
6309b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
6319b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        int REVIEW_RATING_STYLE_PERCENTAGE = 2;
6329b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
63383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The title of this TV program.
63583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>If this program is an episodic TV show, it is recommended that the title is the series
6370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * title and its related fields ({@link #COLUMN_SEASON_TITLE} and/or
6380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, {@link #COLUMN_SEASON_DISPLAY_NUMBER},
6390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_EPISODE_DISPLAY_NUMBER}, and {@link #COLUMN_EPISODE_TITLE}) are filled in.
64083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
64283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_TITLE = "title";
64483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
64583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The season display number of this TV program for episodic TV shows.
64783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to indicate the season number. (e.g. 1, 2 or 3) Note that the value
6490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * does not necessarily be numeric. (e.g. 12B)
65083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
65483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
65683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
65783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The title of the season for this TV program for episodic TV shows.
65983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is an optional field supplied only when the season has a special title
6610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (e.g. The Final Season). If provided, the applications should display it instead of
6620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, and should display it without alterations.
6630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (e.g. for "The Final Season", displayed string should be "The Final Season", not
6640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * "Season The Final Season"). When displaying multiple programs, the order should be based
6650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * on {@link #COLUMN_SEASON_DISPLAY_NUMBER}, even when {@link #COLUMN_SEASON_TITLE} exists.
6660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
67083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SEASON_TITLE = "season_title";
67283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
67383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The episode display number of this TV program for episodic TV shows.
67583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to indicate the episode number. (e.g. 1, 2 or 3) Note that the value
6770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * does not necessarily be numeric. (e.g. 12B)
6780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
68283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
68483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
68583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The episode title of this TV program for episodic TV shows.
68783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
69183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_EPISODE_TITLE = "episode_title";
69383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
69483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated canonical genre string of this TV program.
69683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Canonical genres are defined in {@link Genres}. Use {@link Genres#encode} to create a
6980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * text that can be stored in this column. Use {@link Genres#decode} to get the canonical
6990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * genre strings from the text stored in the column.
7000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
7020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres
7030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#encode
7040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#decode
70583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_CANONICAL_GENRE = "canonical_genre";
70783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
70883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The short description of this TV program that is displayed to the user by default.
71083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is recommended to limit the length of the descriptions to 256 characters.
7120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
71483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SHORT_DESCRIPTION = "short_description";
71683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
71783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The detailed, lengthy description of this TV program that is displayed only when the user
7190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * wants to see more information.
72083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>TV input services should leave this field empty if they have no additional details
7220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * beyond {@link #COLUMN_SHORT_DESCRIPTION}.
7230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
72583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LONG_DESCRIPTION = "long_description";
72783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
72883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The width of the video for this TV program, in the unit of pixels.
73083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Together with {@link #COLUMN_VIDEO_HEIGHT} this is used to determine the video
7320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * resolution of the current TV program. Can be empty if it is not known initially or the
7330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * program does not convey any video such as the programs from type
7340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Channels#SERVICE_TYPE_AUDIO} channels.
7350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
73783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_VIDEO_WIDTH = "video_width";
73983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
74083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The height of the video for this TV program, in the unit of pixels.
74283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Together with {@link #COLUMN_VIDEO_WIDTH} this is used to determine the video
7440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * resolution of the current TV program. Can be empty if it is not known initially or the
7450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * program does not convey any video such as the programs from type
7460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Channels#SERVICE_TYPE_AUDIO} channels.
7470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
74983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_VIDEO_HEIGHT = "video_height";
75183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
75283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated audio languages of this TV program.
75483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to describe available audio languages included in the program. Use either
7560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * ISO 639-1 or 639-2/T codes.
7570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
75983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_AUDIO_LANGUAGE = "audio_language";
76183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
76283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated content ratings of this TV program.
76483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to describe the content rating(s) of this program. Each comma-separated
7660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * content rating sub-string should be generated by calling
7670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link TvContentRating#flattenToString}. Note that in most cases the program content is
7680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * rated by a single rating system, thus resulting in a corresponding single sub-string that
7690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * does not require comma separation and multiple sub-strings appear only when the program
7700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * content is rated by two or more content rating systems. If any of those ratings is
7710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified as "blocked rating" in the user's parental control settings, the TV input
7720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * service should block the current content and wait for the signal that it is okay to
7730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * unblock.
7740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
77683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_CONTENT_RATING = "content_rating";
77883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
77983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the poster art of this TV program.
78183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
7830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
7850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
7860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
7870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
7880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
7890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
7900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
7920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
79483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_POSTER_ART_URI = "poster_art_uri";
79683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
79783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the thumbnail of this TV program.
7990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The system can generate a thumbnail from the poster art if this column is not
8010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified. Thus it is not necessary for TV input services to include a thumbnail if it is
8020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * just a scaled image of the poster art.
8030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
8050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
8070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
8080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
8090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
8100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
8110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
8120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
8140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
8160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
8180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV program is searchable or not.
8210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The columns of searchable programs can be read by other applications that have proper
8230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * permission. Care must be taken not to open sensitive data.
8240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the program is searchable and its columns can be read by
8260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, a value of 0 indicates that the program is hidden and its columns can
8270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * be read only by the package that owns the program and the system. If not specified, this
8280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * value is set to 1 (searchable) by default.
8290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
8310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SEARCHABLE = "searchable";
8330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal data used by individual TV input services.
8360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: BLOB
8410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
8430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
8530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
8630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
8730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
8830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The version number of this row entry used by TV input services.
8860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is best used by sync adapters to identify the rows to update. The number can be
8880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * defined by individual TV input services. One may assign the same value as
8890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@code version_number} in ETSI EN 300 468 or ATSC A/65, if the data are coming from a TV
8900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast.
8910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_VERSION_NUMBER = "version_number";
8959b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
8969b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
8979b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating score style used for {@link #COLUMN_REVIEW_RATING}.
8989b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
8999b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p> The value should match one of the followings: {@link #REVIEW_RATING_STYLE_STARS},
9009b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * {@link #REVIEW_RATING_STYLE_THUMBS_UP_DOWN}, and {@link #REVIEW_RATING_STYLE_PERCENTAGE}.
9019b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
9029b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p>Type: INTEGER
9039b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING
9049b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
9059b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
9069b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
9079b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
9089b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating score for this program.
9099b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
9109b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p>The format of the value is dependent on {@link #COLUMN_REVIEW_RATING_STYLE}. If the
9119b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * style is {@link #REVIEW_RATING_STYLE_STARS}, the value should be a real number between
9129b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * 0.0 and 5.0. (e.g. "4.5") If the style is {@link #REVIEW_RATING_STYLE_THUMBS_UP_DOWN},
9139b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * the value should be two integers, one for thumbs-up count and the other for thumbs-down
9149b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * count, with a comma between them. (e.g. "200,40") If the style is
9159b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * {@link #REVIEW_RATING_STYLE_PERCENTAGE}, the value shoule be a real number between 0 and
9169b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * 100. (e.g. "99.9")
9179b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
9189b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p>Type: TEXT
9199b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
9209b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
9219b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        String COLUMN_REVIEW_RATING = "review_rating";
9220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
9230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
9240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
9250cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * Common columns for the tables of preview programs.
9260cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * @hide
9270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
9280cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    @RestrictTo(LIBRARY_GROUP)
9290cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public interface PreviewProgramColumns {
9300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
9310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** @hide */
932407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @IntDef({
9330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_MOVIE,
9340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_TV_SERIES,
9350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_TV_SEASON,
9360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_TV_EPISODE,
9370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_CLIP,
9380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_EVENT,
9390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_CHANNEL,
9400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_TRACK,
9410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ALBUM,
9420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ARTIST,
9430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_PLAYLIST,
9440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_STATION,
9450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        })
9460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
9470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
9480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface Type {}
9490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
9500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
9510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for movie.
95283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
95383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
95483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
955407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_MOVIE = 0;
95683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
95783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for TV series.
95983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
96083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
96183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
962407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TV_SERIES = 1;
96383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
96483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for TV season.
96683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
96783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
96883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
969407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TV_SEASON = 2;
97083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
97183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for TV episode.
97383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
97483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
97583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
976407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TV_EPISODE = 3;
97783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
97883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for clip.
98083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
98183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
98283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
983407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_CLIP = 4;
98483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
98583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for event.
98783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
98883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
98983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
990407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_EVENT = 5;
99183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
99283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for channel.
99483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
99583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
99683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
997407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_CHANNEL = 6;
99883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
99983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
10000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for track.
100183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
100283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
100383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1004407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TRACK = 7;
100583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
100683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
10070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for album.
100883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
100983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
101083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1011407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_ALBUM = 8;
101283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
101383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
10140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for artist.
101583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
101683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
101783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1018407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_ARTIST = 9;
101983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
102083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
10210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for playlist.
102283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
10230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
10240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1025407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_PLAYLIST = 10;
10260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
10270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for station.
102983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
103083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
103183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1032407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_STATION = 11;
103383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1034acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1035407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @IntDef({
10360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                ASPECT_RATIO_16_9,
10370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                ASPECT_RATIO_3_2,
10388f95356f24ddac5b6cafc455824507057529d315Dongwon Kang                ASPECT_RATIO_4_3,
10390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                ASPECT_RATIO_1_1,
10400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                ASPECT_RATIO_2_3,
1041acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1042acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
1043407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
10440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface AspectRatio {}
1045acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
10460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 16:9.
10480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1052407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int ASPECT_RATIO_16_9 = 0;
105383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 3:2.
10560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1060407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int ASPECT_RATIO_3_2 = 1;
106183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10638f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * The aspect ratio for 4:3.
10648f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         *
10658f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10668f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10678f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         */
10688f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        int ASPECT_RATIO_4_3 = 2;
10698f95356f24ddac5b6cafc455824507057529d315Dongwon Kang
10708f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        /**
10710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 1:1.
10720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
10768f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        int ASPECT_RATIO_1_1 = 3;
10770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
10780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 2:3.
10800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
10848f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        int ASPECT_RATIO_2_3 = 4;
108583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1086acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1087407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @IntDef({
10880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                AVAILABILITY_AVAILABLE,
10890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                AVAILABILITY_FREE_WITH_SUBSCRIPTION,
10900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                AVAILABILITY_PAID_CONTENT,
1091acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1092acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
1093407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
10940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface Availability {}
109583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability for "available to this user".
10980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_AVAILABILITY
11000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1101407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int AVAILABILITY_AVAILABLE = 0;
110283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
11030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
11040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability for "free with subscription".
11050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
11060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_AVAILABILITY
11070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1108407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1;
110983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
11100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
11110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability for "paid content, either to-own or rental
11120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (user has not purchased/rented).
11130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
11140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_AVAILABILITY
11150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1116407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int AVAILABILITY_PAID_CONTENT = 2;
111783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1118acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1119407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @IntDef({
1120407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang                INTERACTION_TYPE_VIEWS,
11210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                INTERACTION_TYPE_LISTENS,
11220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                INTERACTION_TYPE_FOLLOWERS,
11230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                INTERACTION_TYPE_FANS,
11240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                INTERACTION_TYPE_LIKES,
11250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                INTERACTION_TYPE_THUMBS,
11260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                INTERACTION_TYPE_VIEWERS,
1127acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1128acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
11290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
11300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface InteractionType {}
113183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
113283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1133407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "views".
113483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
113683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1137407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_VIEWS = 0;
113883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
113983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1140407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "listens".
114183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
114383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1144407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_LISTENS = 1;
114583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
114683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1147407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "followers".
114883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
115083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1151407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_FOLLOWERS = 2;
115283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
115383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1154407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "fans".
115583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
115783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1158407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_FANS = 3;
115983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
116083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1161407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "likes".
116283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
116483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1165407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_LIKES = 4;
116683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
116783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1168407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "thumbs".
116983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
117183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1172407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_THUMBS = 5;
117383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
117483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
11750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The interaction type for "viewers".
117683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
117883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1179407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_VIEWERS = 6;
11800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
118183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
11820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The type of this program content.
118383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
11850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_MOVIE},
11860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TV_SERIES},
11870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TV_SEASON},
11880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TV_EPISODE},
11890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_CLIP},
11900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_EVENT},
11910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_CHANNEL},
11920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TRACK},
11930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ALBUM},
11940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ARTIST},
11950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_PLAYLIST}, and
11960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_STATION}.
11970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
11980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field if the program is from a {@link Channels#TYPE_PREVIEW}
11990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel.
120083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1201407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
120283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_TYPE = "type";
120483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
120583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio of the poster art for this TV program.
120783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
12090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_16_9},
12100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_3_2},
12118f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * {@link #ASPECT_RATIO_4_3},
12120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_1_1}, and
12130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_2_3}.
121483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1215407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
121683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
121883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
121983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio of the thumbnail for this TV program.
122183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
12230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_16_9},
12240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_3_2},
12258f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * {@link #ASPECT_RATIO_4_3},
12260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_1_1}, and
12270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_2_3}.
122883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1229407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
123083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
123283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
123383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the logo of this TV program.
123583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a small badge shown on top of the poster art or thumbnail representing the
12370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * source of the content.
123883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
12400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
12420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
12430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
12440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
12450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
12460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
12470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
12490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
125183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LOGO_URI = "logo_uri";
125383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
125483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability of this TV program.
125683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
12580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #AVAILABILITY_AVAILABLE},
12590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #AVAILABILITY_FREE_WITH_SUBSCRIPTION}, and
12600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #AVAILABILITY_PAID_CONTENT}.
126183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1262407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
12630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
12640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_AVAILABILITY = "availability";
12650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
12660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
12670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The starting price of this TV program.
126883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This indicates the lowest regular acquisition cost of the content. It is only used
12700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * if the availability of the program is {@link #AVAILABILITY_PAID_CONTENT}.
12710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
12730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_OFFER_PRICE
127483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_STARTING_PRICE = "starting_price";
127683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
127783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The offer price of this TV program.
127983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is the promotional cost of the content. It is only used if the availability of
12810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the program is {@link #AVAILABILITY_PAID_CONTENT}.
128283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
12840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_STARTING_PRICE
128583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_OFFER_PRICE = "offer_price";
128783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
128883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The release date of this TV program.
129083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
129150224da7ae3cad6a6f555838b54f372364e45453Dongwon Kang         * <p>The value should be in one of the following formats:
129250224da7ae3cad6a6f555838b54f372364e45453Dongwon Kang         * "yyyy", "yyyy-MM-dd", and "yyyy-MM-ddTHH:mm:ssZ" (UTC in ISO 8601).
129383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
12950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
12960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_RELEASE_DATE = "release_date";
12970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
12980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
12990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The count of the items included in this TV program.
130083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is only relevant if the program represents a collection of items such as series,
13020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * episodes, or music tracks.
13030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
13050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
13060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_ITEM_COUNT = "item_count";
13070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
13080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
13090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV program is live or not.
13100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the content is airing and should be consumed now, a value
13120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * of 0 indicates that the content is off the air and does not need to be consumed at the
13130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * present time. If not specified, the value is set to 0 (not live) by default.
13140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
13160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
13170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LIVE = "live";
13180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
13190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
13200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The internal ID used by individual TV input services.
13210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
13230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
13240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
132683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
132783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
132883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
133083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
133183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the preview video.
133383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13344109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
133583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
133683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <ul>
133783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
133883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
133983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * </li>
134083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
134183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * </ul>
134283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
134483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
134583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
134683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
134883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
134983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13504109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * The last playback position (in milliseconds) of the original content of this preview
13514109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * program.
135283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
135483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
135683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LAST_PLAYBACK_POSITION_MILLIS =
13580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                "last_playback_position_millis";
135983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
136083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13614109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * The duration (in milliseconds) of the original content of this preview program.
136283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
13640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
136683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_DURATION_MILLIS = "duration_millis";
136883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
136983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13702ed7093758f4b3e84f19a003d1ed78c899a14130Dongwon Kang         * The intent URI which is launched when the preview program is selected.
137183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
137283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>The URI is created using {@link Intent#toUri} with {@link Intent#URI_INTENT_SCHEME}
137383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * and converted back to the original intent with {@link Intent#parseUri}. The intent is
13742ed7093758f4b3e84f19a003d1ed78c899a14130Dongwon Kang         * launched when the user selects the preview program item.
137583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
137783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
137883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
137983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13802ed7093758f4b3e84f19a003d1ed78c899a14130Dongwon Kang        String COLUMN_INTENT_URI = "intent_uri";
138183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
138283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this program is transient or not.
138483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel will be automatically removed by the system on
13860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * reboot, and a value of 0 indicates that the channel is persistent across reboot. If not
13870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified, this value is set to 0 (not transient) by default.
138883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
13900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Channels#COLUMN_TRANSIENT
139183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_TRANSIENT = "transient";
139383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
139483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The type of interaction for this TV program.
139683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p> The value should match one of the followings:
13980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_LISTENS},
13990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_FOLLOWERS},
14000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_FANS},
14010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_LIKES},
14020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_THUMBS},
14030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_VIEWS}, and
14040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_VIEWERS}.
140583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1406407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
14070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_COUNT
140883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERACTION_TYPE = "interaction_type";
141083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
141183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
14120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The interaction count for this program.
141383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This indicates the number of times interaction has happened.
141583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
14170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
141883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERACTION_COUNT = "interaction_count";
142083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
142183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
14220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The author or artist of this content.
142383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
142583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_AUTHOR = "author";
142783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
142883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
14290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV program is browsable or not.
143083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This column can only be set by applications having proper system permission. For
14320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, this is a read-only column.
14330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
14340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the program is browsable and can be shown to users in
14350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the UI. A value of 0 indicates that the program should be hidden from users and the
14360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * application who changes this value to 0 should send
14370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED} to the owner of the program
14380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * to notify this change.
14390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
14400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This value is set to 1 (browsable) by default.
144183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
144283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (boolean)
144383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_BROWSABLE = "browsable";
144583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
144683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
14470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The content ID of this TV program.
144883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A public ID of the content which allows the application to apply the same operation to
14500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * all the program copies in different channels.
145183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
145383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
145583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_CONTENT_ID = "content_id";
145783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
145883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
145983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
14600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /** Column definitions for the TV channels table. */
14610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final class Channels implements BaseTvColumns {
146283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1463239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
1464239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
1465239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
1466239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
1467239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
1468239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
146983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
14700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_CHANNEL);
147183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
14720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of TV channels. */
14730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
147483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
14750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single TV channel. */
14760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
147783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1478acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1479acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
1480acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @StringDef({
14810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_OTHER,
14820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_NTSC,
14830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_PAL,
14840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_SECAM,
14850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_T,
14860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_T2,
14870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_S,
14880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_S2,
14890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_C,
14900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_C2,
14910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_H,
14920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_SH,
14930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ATSC_T,
14940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ATSC_C,
14950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ATSC_M_H,
14960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_T,
14970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_TB,
14980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_S,
14990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_C,
15000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_1SEG,
15010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DTMB,
15020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_CMMB,
15030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_T_DMB,
15040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_S_DMB,
15050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_PREVIEW,
1506acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1507acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
1508acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        public @interface Type {}
1509acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
151083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
15110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * A generic channel type.
15127ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Use this if the current channel is streaming-based or its broadcast system type does not
15140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * fit under any other types. This is the default channel type.
15157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15167ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15177ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_OTHER = "TYPE_OTHER";
15197ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15207ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for NTSC.
15227ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15237ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15247ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_NTSC = "TYPE_NTSC";
15267ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15277ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for PAL.
15297ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15307ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15317ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_PAL = "TYPE_PAL";
15337ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15347ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for SECAM.
15367ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15377ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15387ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_SECAM = "TYPE_SECAM";
15407ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15417ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-T (terrestrial).
15437ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15447ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15457ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_T = "TYPE_DVB_T";
15477ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15487ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-T2 (terrestrial).
15507ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15517ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15527ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_T2 = "TYPE_DVB_T2";
15547ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15557ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-S (satellite).
15577ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15587ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15597ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_S = "TYPE_DVB_S";
15617ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15627ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-S2 (satellite).
15647ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15657ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15667ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_S2 = "TYPE_DVB_S2";
15687ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15697ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-C (cable).
15717ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15727ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_C = "TYPE_DVB_C";
15757ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15767ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-C2 (cable).
15787ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15797ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15807ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_C2 = "TYPE_DVB_C2";
15827ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15837ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-H (handheld).
15857ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15867ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15877ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_H = "TYPE_DVB_H";
1589acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
15907ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-SH (satellite).
15927ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
15947ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_SH = "TYPE_DVB_SH";
15967ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15977ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ATSC (terrestrial).
15997ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16017ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ATSC_T = "TYPE_ATSC_T";
16037ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16047ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ATSC (cable).
16067ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16087ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ATSC_C = "TYPE_ATSC_C";
1610acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16117ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ATSC-M/H (mobile/handheld).
16137ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
16177ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16187ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-T (terrestrial).
16207ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16227ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_T = "TYPE_ISDB_T";
16247ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16257ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-Tb (Brazil).
16277ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16297ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_TB = "TYPE_ISDB_TB";
16317ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16327ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-S (satellite).
16347ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16367ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_S = "TYPE_ISDB_S";
1638acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16397ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-C (cable).
16417ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16437ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_C = "TYPE_ISDB_C";
16457ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16467ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for 1seg (handheld).
16487ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16507ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_1SEG = "TYPE_1SEG";
16527ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16537ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DTMB (terrestrial).
16557ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16577ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DTMB = "TYPE_DTMB";
1659acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16607ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for CMMB (handheld).
16627ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16647ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_CMMB = "TYPE_CMMB";
16667ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16677ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for T-DMB (terrestrial).
16697ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16717ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_T_DMB = "TYPE_T_DMB";
16737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16747ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for S-DMB (satellite).
16767ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16787ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_S_DMB = "TYPE_S_DMB";
16807ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16817ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for preview videos.
16837ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <P>Unlike other broadcast TV channel types, the programs in the preview channel usually
16850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * are promotional videos. The UI may treat the preview channels differently from the other
16860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast channels.
16877ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16897ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_PREVIEW = "TYPE_PREVIEW";
16917ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** @hide */
16930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
16940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @StringDef({
16950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                SERVICE_TYPE_OTHER,
16960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                SERVICE_TYPE_AUDIO_VIDEO,
16970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                SERVICE_TYPE_AUDIO,
16980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        })
16990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
17000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface ServiceType {}
17017ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** A generic service type. */
17030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
17040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The service type for regular TV channels that have both audio and video. */
17060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
17070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The service type for radio channels that have audio only. */
17090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
17107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
1711acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1712acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
1713acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @StringDef({
17140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_240P,
17150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_360P,
17160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_480I,
17170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_576I,
17180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_576P,
17190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_720P,
17200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_1080I,
17210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_1080P,
17220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_2160P,
17230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_4320P,
1724acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1725acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
17260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface VideoFormat {}
1727acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
17280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 240p. */
17290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
17307ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 360p. */
17320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
17337ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 480i. */
17350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
17367ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 480p. */
17380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
173983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 576i. */
17410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
17427ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 576p. */
17440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
17457ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 720p. */
17470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
174883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 1080i. */
17500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
175183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 1080p. */
17530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
175483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 2160p. */
17560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
175783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 4320p. */
17590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
176083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** @hide */
17620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
17630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @StringDef({
17640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_SD,
17650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_ED,
17660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_HD,
17670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_FHD,
17680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_UHD,
17690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        })
17700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
17710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface VideoResolution {}
177283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for standard-definition. */
17740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
17750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for enhanced-definition. */
17770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
17780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for high-definition. */
17800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
17810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for full high-definition. */
17830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
17840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for ultra high-definition. */
17860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
17870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private static final Map<String, String> VIDEO_FORMAT_TO_RESOLUTION_MAP = new HashMap<>();
17890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        static {
17910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_480I, VIDEO_RESOLUTION_SD);
17920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_480P, VIDEO_RESOLUTION_ED);
17930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_576I, VIDEO_RESOLUTION_SD);
17940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_576P, VIDEO_RESOLUTION_ED);
17950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_720P, VIDEO_RESOLUTION_HD);
17960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_1080I, VIDEO_RESOLUTION_HD);
17970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_1080P, VIDEO_RESOLUTION_FHD);
17980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_2160P, VIDEO_RESOLUTION_UHD);
17990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_4320P, VIDEO_RESOLUTION_UHD);
18000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
180183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
180283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Returns the video resolution (definition) for a given video format.
180483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @param videoFormat The video format defined in {@link Channels}.
18060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @return the corresponding video resolution string. {@code null} if the resolution string
18070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         is not defined for the given video format.
18080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_VIDEO_FORMAT
180983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Nullable
18110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static String getVideoResolution(@VideoFormat String videoFormat) {
18120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            return VIDEO_FORMAT_TO_RESOLUTION_MAP.get(videoFormat);
18130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
181483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
181583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV input service that provides this TV channel.
181783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Use {@link #buildInputId} to build the ID.
181983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
182183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
182383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_INPUT_ID = "input_id";
182583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
182683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The broadcast system type of this TV channel.
182883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to indicate the broadcast standard (e.g. ATSC, DVB or ISDB) the current
18300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel conforms to. Use {@link #TYPE_OTHER} for streaming-based channels, which is the
18310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * default channel type. The value should match one of the followings:
18320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_1SEG},
18330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ATSC_C},
18340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ATSC_M_H},
18350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ATSC_T},
18360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_CMMB},
18370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DTMB},
18380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_C},
18390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_C2},
18400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_H},
18410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_S},
18420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_S2},
18430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_SH},
18440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_T},
18450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_T2},
18460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_C},
18470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_S},
18480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_T},
18490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_TB},
18500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_NTSC},
18510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_OTHER},
18520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_PAL},
18530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_SECAM},
18540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_S_DMB}, and
18550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_T_DMB}.
18560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
18570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
185883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
185983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
186083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_TYPE = "type";
186283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
186383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The predefined service type of this TV channel.
186583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is primarily used to indicate whether the current channel is a regular TV channel
18670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * or a radio-like channel. Use the same coding for {@code service_type} in the underlying
18680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast standard if it is defined there (e.g. ATSC A/53, ETSI EN 300 468 and ARIB
18690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * STD-B10). Otherwise use one of the followings: {@link #SERVICE_TYPE_OTHER},
18700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #SERVICE_TYPE_AUDIO_VIDEO}, {@link #SERVICE_TYPE_AUDIO}
18710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
18720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
187383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
187483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
187583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SERVICE_TYPE = "service_type";
187783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
187883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The original network ID of this TV channel.
188083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is used to identify the originating delivery system, if applicable. Use the same
18820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * coding for {@code original_network_id} for ETSI EN 300 468/TR 101 211 and ARIB STD-B10.
188383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field only if the underlying broadcast standard defines the same
18850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * name field. Otherwise, leave empty.
18860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
18870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
188883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
189083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
189183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The transport stream ID of this channel.
189383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is used to identify the Transport Stream that contains the current channel from any
18950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other multiplex within a network, if applicable. Use the same coding for
18960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@code transport_stream_id} defined in ISO/IEC 13818-1 if the channel is transmitted via
18970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the MPEG Transport Stream.
189883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field only if the current channel is transmitted via the MPEG
19000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Transport Stream. Leave empty otherwise.
19010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
190383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
190583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
190683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The service ID of this channel.
190883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is used to identify the current service, or channel from any other services within
19100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * a given Transport Stream, if applicable. Use the same coding for {@code service_id} in
19110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * ETSI EN 300 468 and ARIB STD-B10 or {@code program_number} in ISO/IEC 13818-1.
19120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field only if the underlying broadcast standard defines the same
19140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * name field, or the current channel is transmitted via the MPEG Transport Stream. Leave
19150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * empty otherwise.
191683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
191783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
191883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SERVICE_ID = "service_id";
192083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
192183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel number that is displayed to the user.
192383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The format can vary depending on broadcast standard and product specification.
192583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
192783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_DISPLAY_NUMBER = "display_number";
192983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
193083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel name that is displayed to the user.
193283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A call sign is a good candidate to use for this purpose but any name that helps the
19340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * user recognize the current channel will be enough. Can also be empty depending on
19350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast standard.
193683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p> Type: TEXT
193883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_DISPLAY_NAME = "display_name";
194083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
194183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The network affiliation for this TV channel.
194383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to identify a channel that is commonly called by its network affiliation
19450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * instead of the display name. Examples include ABC for the channel KGO-HD, FOX for the
19460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel KTVU-HD and NBC for the channel KNTV-HD. Can be empty if not applicable.
194783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
194883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
194983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
195183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
195283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The description of this TV channel.
195483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty initially.
195683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
195783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
195883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_DESCRIPTION = "description";
196083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
196183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The typical video format for programs from this TV channel.
19637ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
19640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is primarily used to filter out channels based on video format by applications.
19650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The value should match one of the followings: {@link #VIDEO_FORMAT_240P},
19660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_360P}, {@link #VIDEO_FORMAT_480I}, {@link #VIDEO_FORMAT_480P},
19670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_576I}, {@link #VIDEO_FORMAT_576P}, {@link #VIDEO_FORMAT_720P},
19680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_1080I}, {@link #VIDEO_FORMAT_1080P}, {@link #VIDEO_FORMAT_2160P},
19690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_4320P}. Note that the actual video resolution of each program from a
19700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * given channel can vary thus one should use {@link Programs#COLUMN_VIDEO_WIDTH} and
19710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Programs#COLUMN_VIDEO_HEIGHT} to get more accurate video resolution.
19727ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
19737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
19740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #getVideoResolution
19767ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
19770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_VIDEO_FORMAT = "video_format";
19787ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
19797ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
19800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is browsable or not.
198183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This column can only be set by applications having proper system permission. For
19830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, this is a read-only column.
198483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates the channel is included in the channel list that applications
19860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * use to browse channels, a value of 0 indicates the channel is not included in the list.
19870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * If not specified, this value is set to 0 (not browsable) by default.
198883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
19900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
19910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_BROWSABLE = "browsable";
19920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
19930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
19940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is searchable or not.
199583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The columns of searchable channels can be read by other applications that have proper
19970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * permission. Care must be taken not to open sensitive data.
199883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel is searchable and its columns can be read by
20000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, a value of 0 indicates that the channel is hidden and its columns can
20010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * be read only by the package that owns the channel and the system. If not specified, this
20020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * value is set to 1 (searchable) by default.
20030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
20040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
200583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
20060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SEARCHABLE = "searchable";
200783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
200883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
20090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is locked or not.
20107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is primarily used for alternative parental control to prevent unauthorized users
20120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * from watching the current channel regardless of the content rating. A value of 1
20130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * indicates the channel is locked and the user is required to enter passcode to unlock it
20140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * in order to watch the current program from the channel, a value of 0 indicates the
20150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel is not locked thus the user is not prompted to enter passcode If not specified,
20160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * this value is set to 0 (not locked) by default.
20177ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
2018d14f98d763f117942d726be5d9e69ce6faad399bConrad Chen         * <p>This column can only be set by applications having proper system permission to
2019d14f98d763f117942d726be5d9e69ce6faad399bConrad Chen         * modify parental control settings.
2020d14f98d763f117942d726be5d9e69ce6faad399bConrad Chen         *
20210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
20227ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_LOCKED = "locked";
20247ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20257ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the app badge icon of the app link template for this channel.
20277ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This small icon is overlaid at the bottom of the poster art specified by
20290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_APP_LINK_POSTER_ART_URI}. The data in the column must be a URI in one of
20300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the following formats:
20317ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20327ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <ul>
20337ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
20347ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
20357ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * </li>
20367ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
20377ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * </ul>
20387ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
20400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
20410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
20427ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20437ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
20440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
20450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
20460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
20470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
20487ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
20507ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20517ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the poster art used as the background of the app link template for this
20530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel.
20547ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
20567ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
20580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
20590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
20600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
20610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
20620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
20637ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
20650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
20660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
20677ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20687ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
20690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
20700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
20710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
20720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
20737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
20757ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20767ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The link text of the app link template for this channel.
20787ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This provides a short description of the action that happens when the corresponding
20800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * app link is clicked.
20817ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
20830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
20840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
20857ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20867ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
20870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
20880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
20890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
20900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
20917ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_TEXT = "app_link_text";
20937ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20947ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The accent color of the app link template for this channel. This is primarily used for
20960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the background color of the text box in the template.
20977ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
20990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
21000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
21017ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (color value)
21030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
21040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
21050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
21060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
21077ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
21080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_COLOR = "app_link_color";
21097ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
21107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
21110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The intent URI of the app link for this channel.
211283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The URI is created using {@link Intent#toUri} with {@link Intent#URI_INTENT_SCHEME}
21140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * and converted back to the original intent with {@link Intent#parseUri}. The intent is
21150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * launched when the user clicks the corresponding app link for the current channel.
211683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
21180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
21190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
212083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
21220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
21230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
21240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
21250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
212683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
21270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
212883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
212983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
21300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The internal ID used by individual TV input services.
213183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
21330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
213483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
21360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
21370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
213883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
21390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
214083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
214183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
214283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal data used by individual TV input services.
214383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
214483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
214583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
214683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
214783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: BLOB
214883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
214983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
215083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
215183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
215283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
215383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
215483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
215583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
215683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
215783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
215883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
215983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
216083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
216183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
216283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
216383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
216483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
216583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
216683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
216783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
216883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
216983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
217083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
217183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
217283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
217383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
217483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
217583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
217683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
217783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
217883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
217983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
218083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
218183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
218283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
218383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
218483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
218583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
218683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
218783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
218883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
218983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
219083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
219183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
219283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The version number of this row entry used by TV input services.
219383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
219483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is best used by sync adapters to identify the rows to update. The number can be
219583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * defined by individual TV input services. One may assign the same value as
21960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@code version_number} that appears in ETSI EN 300 468 or ATSC A/65, if the data are
21970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * coming from a TV broadcast.
219883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
219983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
220083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
220183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_VERSION_NUMBER = "version_number";
220283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
220383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is transient or not.
220583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel will be automatically removed by the system on
22070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * reboot, and a value of 0 indicates that the channel is persistent across reboot. If not
22080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified, this value is set to 0 (not transient) by default.
220983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
22110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see PreviewPrograms#COLUMN_TRANSIENT
221221cac9da019ba4968a015b482d216ab558cda20eConrad Chen         * @see WatchNextPrograms#COLUMN_TRANSIENT
221383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
22140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_TRANSIENT = "transient";
221583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
221683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is approved to be shown by the system.
221883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel is approved to be shown by the system, and a
22200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * value of 0 indicates that the channel is blocked by system. If not specified, this value
22210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * is set to 0 (not approved) by default.
222283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
22240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @hide
222583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
22260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
22270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SYSTEM_APPROVED = "system_approved";
22280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
22290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private Channels() {}
223083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
223183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * A sub-directory of a single TV channel that represents its primary logo.
223383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>To access this directory, append {@link Channels.Logo#CONTENT_DIRECTORY} to the raw
22350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel URI.  The resulting URI represents an image file, and should be interacted
22360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * using ContentResolver.openAssetFileDescriptor.
223783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Note that this sub-directory also supports opening the logo as an asset file in write
22390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * mode.  Callers can create or replace the primary logo associated with this channel by
22400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * opening the asset file and writing the full-size photo contents into it. (Make sure there
22410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * is no padding around the logo image.) When the file is closed, the image will be parsed,
22420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * sized down if necessary, and stored.
224383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Usage example:
22450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <pre>
22460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * public void writeChannelLogo(long channelId, byte[] logo) {
22470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     Uri channelLogoUri = TvContract.buildChannelLogoUri(channelId);
22480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     try {
22490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         AssetFileDescriptor fd =
22500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *             getContentResolver().openAssetFileDescriptor(channelLogoUri, "rw");
22510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         OutputStream os = fd.createOutputStream();
22520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         os.write(logo);
22530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         os.close();
22540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         fd.close();
22550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     } catch (IOException e) {
22560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         // Handle error cases.
22570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     }
22580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * }
22590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </pre>
226083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
22610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final class Logo {
22620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
22630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            /**
22640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang             * The directory twig for this sub-table.
22650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang             */
22660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            public static final String CONTENT_DIRECTORY = "logo";
22670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
22680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            private Logo() {}
22690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
22700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
22710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
22720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
22730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Column definitions for the TV programs table.
22740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
22750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>By default, the query results will be sorted by
22760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * {@link Programs#COLUMN_START_TIME_UTC_MILLIS} in ascending order.
22770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
22780cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class Programs implements BaseTvColumns, ProgramColumns {
22790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2280239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2281239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2282239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2283239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2284239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2285239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
22860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
22870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_PROGRAM);
22880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
22890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of TV programs. */
22900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/program";
22910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
22920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single TV program. */
22930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
229483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
229583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV channel that provides this TV program.
229783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
229983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
230183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
230383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_CHANNEL_ID = "channel_id";
230583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
230683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
23070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The season number of this TV program for episodic TV shows.
230883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
230983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Can be empty.
231083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
23120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
23130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @deprecated Use {@link #COLUMN_SEASON_DISPLAY_NUMBER} instead.
231483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Deprecated
23160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SEASON_NUMBER = "season_number";
231783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
231883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
23190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The episode number of this TV program for episodic TV shows.
232083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
232183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Can be empty.
232283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
232383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
232483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @deprecated Use {@link #COLUMN_EPISODE_DISPLAY_NUMBER} instead.
232683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Deprecated
23280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_EPISODE_NUMBER = "episode_number";
232983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
23307ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
23310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The start time of this TV program, in milliseconds since the epoch.
23327ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should be equal to or larger than {@link #COLUMN_END_TIME_UTC_MILLIS} of the
23340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * previous program in the same channel. In practice, start time will usually be the end
23350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * time of the previous program.
23367ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty if this program belongs to a {@link Channels#TYPE_PREVIEW} channel.
23380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
23390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
23407ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
23410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
23427ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
23437ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
23440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The end time of this TV program, in milliseconds since the epoch.
23457ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should be equal to or less than {@link #COLUMN_START_TIME_UTC_MILLIS} of the
23470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * next program in the same channel. In practice, end time will usually be the start time of
23480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the next program.
23497ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty if this program belongs to a {@link Channels#TYPE_PREVIEW} channel.
23517ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
23537ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
23540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
23557ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
23567ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
23570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated genre string of this TV program.
23587ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Use the same language appeared in the underlying broadcast standard, if applicable.
23600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (For example, one can refer to the genre strings used in Genre Descriptor of ATSC A/65 or
23610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Content Descriptor of ETSI EN 300 468, if appropriate.) Otherwise, leave empty. Use
23620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Genres#encode} to create a text that can be stored in this column. Use
23630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Genres#decode} to get the broadcast genre strings from the text stored in the
23640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * column.
23657ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23667ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
23670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#encode
23680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#decode
23697ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
23700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
23710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
23720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
23730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether recording of this program is prohibited.
23747ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that recording of this program is prohibited and application
23760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * will not schedule any recording for this program. A value of 0 indicates that the
23770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * recording is not prohibited. If not specified, this value is set to 0 (not prohibited) by
23780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * default.
23790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
23800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
23817ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
23820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
23837ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
238483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        private Programs() {}
238583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
238683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /** Canonical genres for TV programs. */
238783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final class Genres {
2388acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            /** @hide */
2389acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            @StringDef({
2390acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    FAMILY_KIDS,
2391acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    SPORTS,
2392acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    SHOPPING,
2393acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    MOVIES,
2394acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    COMEDY,
2395acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    TRAVEL,
2396acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    DRAMA,
2397acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    EDUCATION,
2398acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    ANIMAL_WILDLIFE,
2399acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    NEWS,
2400acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    GAMING,
2401acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    ARTS,
2402acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    ENTERTAINMENT,
2403acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    LIFE_STYLE,
2404acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    MUSIC,
2405acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    PREMIER,
2406acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    TECH_SCIENCE,
2407acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            })
2408acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            @Retention(RetentionPolicy.SOURCE)
2409acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            public @interface Genre {}
2410acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
241183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Family/Kids. */
241283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String FAMILY_KIDS = "FAMILY_KIDS";
241383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
241483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Sports. */
241583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String SPORTS = "SPORTS";
241683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
241783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Shopping. */
241883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String SHOPPING = "SHOPPING";
241983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
242083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Movies. */
242183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String MOVIES = "MOVIES";
242283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
242383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Comedy. */
242483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String COMEDY = "COMEDY";
242583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
242683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Travel. */
242783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String TRAVEL = "TRAVEL";
242883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
242983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Drama. */
243083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String DRAMA = "DRAMA";
243183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
243283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Education. */
243383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String EDUCATION = "EDUCATION";
243483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
243583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Animal/Wildlife. */
243683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
243783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
243883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for News. */
243983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String NEWS = "NEWS";
244083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
244183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Gaming. */
244283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String GAMING = "GAMING";
244383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
244483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Arts. */
244583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String ARTS = "ARTS";
244683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
244783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Entertainment. */
244883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String ENTERTAINMENT = "ENTERTAINMENT";
244983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
245083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Life Style. */
245183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String LIFE_STYLE = "LIFE_STYLE";
245283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
245383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Music. */
245483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String MUSIC = "MUSIC";
245583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
245683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Premier. */
245783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String PREMIER = "PREMIER";
245883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
245983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Tech/Science. */
246083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String TECH_SCIENCE = "TECH_SCIENCE";
246183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
246283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final HashSet<String> CANONICAL_GENRES = new HashSet<>();
246383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            static {
246483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(FAMILY_KIDS);
246583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(SPORTS);
246683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(SHOPPING);
246783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(MOVIES);
246883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(COMEDY);
246983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(TRAVEL);
247083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(DRAMA);
247183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(EDUCATION);
247283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(ANIMAL_WILDLIFE);
247383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(NEWS);
247483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(GAMING);
247583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(ARTS);
247683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(ENTERTAINMENT);
247783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(LIFE_STYLE);
247883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(MUSIC);
247983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(PREMIER);
248083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(TECH_SCIENCE);
248183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
248283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
248383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final char DOUBLE_QUOTE = '"';
248483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final char COMMA = ',';
248583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final String DELIMITER = ",";
248683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
248783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final String[] EMPTY_STRING_ARRAY = new String[0];
248883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
248983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private Genres() {}
249083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
249183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /**
249283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * Encodes genre strings to a text that can be put into the database.
249383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *
249483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @param genres Genre strings.
249583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @return an encoded genre string that can be inserted into the
249683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *         {@link #COLUMN_BROADCAST_GENRE} or {@link #COLUMN_CANONICAL_GENRE} column.
249783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             */
2498acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            public static String encode(@NonNull @Genre String... genres) {
249983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (genres == null) {
250083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    // MNC and before will throw a NPE.
250183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    return null;
250283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
250383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                StringBuilder sb = new StringBuilder();
250483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                String separator = "";
250583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                for (String genre : genres) {
250683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    sb.append(separator).append(encodeToCsv(genre));
250783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    separator = DELIMITER;
250883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
250983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return sb.toString();
251083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
251183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
251283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static String encodeToCsv(String genre) {
251383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                StringBuilder sb = new StringBuilder();
251483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                int length = genre.length();
251583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                for (int i = 0; i < length; ++i) {
251683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    char c = genre.charAt(i);
251783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    switch (c) {
251883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case DOUBLE_QUOTE:
251983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            sb.append(DOUBLE_QUOTE);
252083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
252183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case COMMA:
252283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            sb.append(DOUBLE_QUOTE);
252383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
252483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    }
252583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    sb.append(c);
252683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
252783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return sb.toString();
252883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
252983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
253083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /**
253183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * Decodes the genre strings from the text stored in the database.
253283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *
253383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @param genres The encoded genre string retrieved from the
253483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *            {@link #COLUMN_BROADCAST_GENRE} or {@link #COLUMN_CANONICAL_GENRE} column.
253583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @return genre strings.
253683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             */
2537acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            public static @Genre String[] decode(@NonNull String genres) {
253883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (TextUtils.isEmpty(genres)) {
253983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    // MNC and before will throw a NPE for {@code null} genres.
254083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    return EMPTY_STRING_ARRAY;
254183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
254283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (genres.indexOf(COMMA) == -1 && genres.indexOf(DOUBLE_QUOTE) == -1) {
254383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    return new String[] {genres.trim()};
254483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
254583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                StringBuilder sb = new StringBuilder();
254683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                List<String> results = new ArrayList<>();
254783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                int length = genres.length();
254883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                boolean escape = false;
254983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                for (int i = 0; i < length; ++i) {
255083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    char c = genres.charAt(i);
255183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    switch (c) {
255283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case DOUBLE_QUOTE:
255383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            if (!escape) {
255483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                escape = true;
255583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                continue;
255683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            }
255783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
255883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case COMMA:
255983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            if (!escape) {
256083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                String string = sb.toString().trim();
256183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                if (string.length() > 0) {
256283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                    results.add(string);
256383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                }
256483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                sb = new StringBuilder();
256583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                continue;
256683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            }
256783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
256883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    }
256983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    sb.append(c);
257083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    escape = false;
257183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
257283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                String string = sb.toString().trim();
257383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (string.length() > 0) {
257483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    results.add(string);
257583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
257683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return results.toArray(new String[results.size()]);
257783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
257883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
257983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /**
258083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * Returns whether a given text is a canonical genre defined in {@link Genres}.
258183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *
258283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @param genre The name of genre to be checked.
258383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @return {@code true} if the genre is canonical, otherwise {@code false}.
258483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             */
258583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static boolean isCanonical(String genre) {
258683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return CANONICAL_GENRES.contains(genre);
258783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
258883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
258983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
259083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
259183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
259283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Column definitions for the recorded TV programs table.
259383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
259483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * <p>By default, the query results will be sorted by {@link #COLUMN_START_TIME_UTC_MILLIS} in
259583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * ascending order.
259683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
25970cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class RecordedPrograms implements BaseTvColumns, ProgramColumns {
259883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
2599239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2600239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2601239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2602239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2603239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2604239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
260583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
260683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                + PATH_RECORDED_PROGRAM);
260783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
260883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /** The MIME type of a directory of recorded TV programs. */
260983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
261083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
261183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /** The MIME type of a single recorded TV program. */
261283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
261383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
261483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
26150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV channel that provides this recorded program.
261683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
261783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
261883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
261983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is a required field.
262083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
262183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
262283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
26230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_CHANNEL_ID = "channel_id";
262483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
262583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
26260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV input service that is associated with this recorded program.
262783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
26280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Use {@link #buildInputId} to build the ID.
262983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
26300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
263183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
263283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
263383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
26340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_INPUT_ID = "input_id";
263583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
263683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
263783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The start time of the original TV program, in milliseconds since the epoch.
263883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
263983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
264083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see Programs#COLUMN_START_TIME_UTC_MILLIS
264183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
264283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_START_TIME_UTC_MILLIS =
264383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                Programs.COLUMN_START_TIME_UTC_MILLIS;
264483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
264583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
264683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The end time of the original TV program, in milliseconds since the epoch.
264783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
264883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
264983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see Programs#COLUMN_END_TIME_UTC_MILLIS
265083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
265183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_END_TIME_UTC_MILLIS = Programs.COLUMN_END_TIME_UTC_MILLIS;
265283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
265383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
265483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The comma-separated genre string of this recorded TV program.
265583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
265683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Use the same language appeared in the underlying broadcast standard, if applicable.
265783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * (For example, one can refer to the genre strings used in Genre Descriptor of ATSC A/65 or
265883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Content Descriptor of ETSI EN 300 468, if appropriate.) Otherwise, leave empty. Use
26590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Genres#encode Genres.encode()} to create a text that can be stored in this column.
26600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Use {@link Genres#decode Genres.decode()} to get the broadcast genre strings from the
26610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * text stored in the column.
266283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
266383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
266483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see Programs#COLUMN_BROADCAST_GENRE
266583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
266683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_BROADCAST_GENRE = Programs.COLUMN_BROADCAST_GENRE;
266783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
266883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
266983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The URI of the recording data for this recorded program.
267083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
267183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Together with {@link #COLUMN_RECORDING_DATA_BYTES}, applications can use this
267283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * information to manage recording storage. The URI should indicate a file or directory with
267383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * the scheme {@link android.content.ContentResolver#SCHEME_FILE}.
267483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
267583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
267683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_RECORDING_DATA_BYTES
267783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
267883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
267983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
268083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
268183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The data size (in bytes) for this recorded program.
268283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
268383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Together with {@link #COLUMN_RECORDING_DATA_URI}, applications can use this
268483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * information to manage recording storage.
268583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
268683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
268783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_RECORDING_DATA_URI
268883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
268983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
269083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
269183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
269283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The duration (in milliseconds) of this recorded program.
269383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
269483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>The actual duration of the recorded program can differ from the one calculated by
269583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * {@link #COLUMN_END_TIME_UTC_MILLIS} - {@link #COLUMN_START_TIME_UTC_MILLIS} as program
269683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * recording can be interrupted in the middle for some reason, resulting in a partially
269783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * recorded program, which is still playable.
269883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
269983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
270083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
270183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
270283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
270383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
270483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The expiration time for this recorded program, in milliseconds since the epoch.
270583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
270683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Recorded TV programs do not expire by default unless explicitly requested by the user
270783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * or the user allows applications to delete them in order to free up disk space for future
270883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * recording. However, some TV content can have expiration date set by the content provider
270983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * when recorded. This field is used to indicate such a restriction.
271083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
271183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Can be empty.
271283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
271383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
271483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
271583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS =
271683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                "recording_expire_time_utc_millis";
271783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
27180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private RecordedPrograms() {}
27190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
27200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
27220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Column definitions for the preview TV programs table.
27230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
27240cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class PreviewPrograms implements BaseTvColumns, ProgramColumns,
27250cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang            PreviewProgramColumns {
27260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2727239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2728239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2729239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2730239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2731239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2732239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
27330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
27340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_PREVIEW_PROGRAM);
27350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of preview TV programs. */
27370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
27380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single preview TV program. */
27400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
274183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
274283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
27430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV channel that provides this TV program.
274483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
27450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
274683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
27470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
27480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
27490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
275083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
27510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_CHANNEL_ID = "channel_id";
275283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
275383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
27540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The weight of the preview program within the channel.
275583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
27560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The UI may choose to show this item in a different position in the channel row.
27570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * A larger weight value means the program is more important than other programs having
27580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * smaller weight values. The value is relevant for the preview programs in the same
27590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel. This is only relevant to {@link Channels#TYPE_PREVIEW}.
27600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
27610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
276283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
276383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
276483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
27650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_WEIGHT = "weight";
27660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private PreviewPrograms() {}
27680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
27690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
27710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Column definitions for the "watch next" TV programs table.
27720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
27730cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class WatchNextPrograms implements BaseTvColumns, ProgramColumns,
27740cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang            PreviewProgramColumns {
27750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2776239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2777239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2778239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2779239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2780239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2781239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
27820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
27830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_WATCH_NEXT_PROGRAM);
27840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of "watch next" TV programs. */
27860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
27870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single preview TV program. */
27890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
27900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** @hide */
2792407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        @IntDef({
27930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                WATCH_NEXT_TYPE_CONTINUE,
27940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                WATCH_NEXT_TYPE_NEXT,
27950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                WATCH_NEXT_TYPE_NEW,
27960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                WATCH_NEXT_TYPE_WATCHLIST,
27970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        })
27980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
27990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
28000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface WatchNextType {}
280183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
280283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for CONTINUE. Use this type when the user has already watched more
28040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * than 1 minute of this content.
280583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
28070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
2808407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_CONTINUE = 0;
28090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
28110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for NEXT. Use this type when the user has watched one or more
28120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * complete episodes from some episodic content, but there remains more than one episode
28130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * remaining or there is one last episode remaining, but it is not “new” in that it was
28140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * released before the user started watching the show.
281583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
281783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
2818407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_NEXT = 1;
281983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
282083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for NEW. Use this type when the user had watched all of the available
28220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * episodes from some episodic content, but a new episode became available since the user
28230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * started watching the first episode and now there is exactly one unwatched episode. This
28240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * could also work for recorded events in a series e.g. soccer matches or football games.
282583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
28270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
2828407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_NEW = 2;
28290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
28310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for WATCHLIST. Use this type when the user has elected to explicitly
28320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * add a movie, event or series to a “watchlist” as a manual way of curating what they
28330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * want to watch next.
283483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
283683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
2837407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_WATCHLIST = 3;
283883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
283983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The "watch next" type of this program content.
284183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
28430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_CONTINUE},
28440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_NEXT},
28450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_NEW}, and
28460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_WATCHLIST}.
284783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
28490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
2850407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
285183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
28520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
285383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
285483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The last UTC time that the user engaged in this TV program, in milliseconds since the
28560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * epoch. This is a hint for the application that is used for ordering of "watch next"
28570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * programs.
285883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The meaning of the value varies depending on the {@link #COLUMN_WATCH_NEXT_TYPE}:
28600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
28610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_CONTINUE}: the date that the user was last watching the
28620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     content.</li>
28630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_NEXT}: the date of the last episode watched.</li>
28640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_NEW}: the release date of the new episode.</li>
28650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_WATCHLIST}: the date the item was added to the Watchlist.
28660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     </li>
28670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
286883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
28700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
28710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
287283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
28730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS =
28740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                "last_engagement_time_utc_millis";
2875c16bab6a385ff737b1c5a55450d7e987ca70d755Dongwon Kang
2876c16bab6a385ff737b1c5a55450d7e987ca70d755Dongwon Kang        private WatchNextPrograms() {}
287783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
28788f95356f24ddac5b6cafc455824507057529d315Dongwon Kang}
2879