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
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.tvprovider.media.tv;
1883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
19ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport static androidx.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;
33757f518fcb66e82116697d5a226798ae22c14a95Aurimas Liutikasimport android.text.TextUtils;
34757f518fcb66e82116697d5a226798ae22c14a95Aurimas Liutikas
35ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.NonNull;
36ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.Nullable;
37ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RequiresApi;
38ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo;
39ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.StringDef;
40ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.tvprovider.media.tv.TvContractCompat.Programs.Genres;
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    /**
559d38958270cc9439b2a7167984d8ab19110926961Conrad Chen     * Returns {@code true}, if {@code uri} is a recorded program URI.
560d38958270cc9439b2a7167984d8ab19110926961Conrad Chen     */
561d38958270cc9439b2a7167984d8ab19110926961Conrad Chen    public static boolean isRecordedProgramUri(Uri uri) {
562d38958270cc9439b2a7167984d8ab19110926961Conrad Chen        return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_RECORDED_PROGRAM);
563d38958270cc9439b2a7167984d8ab19110926961Conrad Chen    }
564d38958270cc9439b2a7167984d8ab19110926961Conrad Chen
565d38958270cc9439b2a7167984d8ab19110926961Conrad Chen    /**
566c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * Requests to make a channel browsable.
567c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
568c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * <p>Once called, the system will review the request and make the channel browsable based on
569c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * its policy. The first request from a package is guaranteed to be approved. This is only
570c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * relevant to channels with {@link Channels#TYPE_PREVIEW} type.
571c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
572c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * <p>No-op on devices prior to {@link android.os.Build.VERSION_CODES#O}.
573c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     *
574c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @param context The context for accessing content provider.
575c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @param channelId The channel ID to be browsable.
576c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     * @see Channels#COLUMN_BROWSABLE
577c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang     */
578b30fefbedf4564400015b61f991607eae61d16d0Dongwon Kang    @RequiresApi(api = 26)
579c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    public static void requestChannelBrowsable(Context context, long channelId) {
580b30fefbedf4564400015b61f991607eae61d16d0Dongwon Kang        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
581c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang            TvContract.requestChannelBrowsable(context, channelId);
582c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang        }
583c6d1177a6a0f27af6f64d25747fa183b60f59bffDongwon Kang    }
58483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
58583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    private TvContractCompat() {}
58683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
58783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
58883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Common base for the tables of TV channels/programs.
58983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
59083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    public interface BaseTvColumns extends BaseColumns {
59183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
59283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The name of the package that owns the current row.
59383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
59483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>The TV provider fills in this column with the name of the package that provides the
59583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * initial data of the row. If the package is later uninstalled, the rows it owns are
59683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * automatically removed from the tables.
59783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
59883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
59983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
60083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        String COLUMN_PACKAGE_NAME = "package_name";
60183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
60283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
6030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
6040cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * Common columns for the tables of TV programs.
6050cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * @hide
6060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
6070cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    @RestrictTo(LIBRARY_GROUP)
6080cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    interface ProgramColumns {
6099b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
6109b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating style for five star rating.
6119b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
6129b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
6139b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
6149b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        int REVIEW_RATING_STYLE_STARS = 0;
6159b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
6169b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
6179b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating style for thumbs-up and thumbs-down rating.
6189b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
6199b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
6209b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
6219b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1;
6229b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
6239b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
6249b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating style for 0 to 100 point system.
6259b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
6269b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
6279b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
6289b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        int REVIEW_RATING_STYLE_PERCENTAGE = 2;
6299b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
63083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The title of this TV program.
63283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>If this program is an episodic TV show, it is recommended that the title is the series
6340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * title and its related fields ({@link #COLUMN_SEASON_TITLE} and/or
6350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, {@link #COLUMN_SEASON_DISPLAY_NUMBER},
6360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_EPISODE_DISPLAY_NUMBER}, and {@link #COLUMN_EPISODE_TITLE}) are filled in.
63783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
63983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_TITLE = "title";
64183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
64283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The season display number of this TV program for episodic TV shows.
64483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to indicate the season number. (e.g. 1, 2 or 3) Note that the value
6460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * does not necessarily be numeric. (e.g. 12B)
64783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
65183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
65383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
65483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The title of the season for this TV program for episodic TV shows.
65683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is an optional field supplied only when the season has a special title
6580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (e.g. The Final Season). If provided, the applications should display it instead of
6590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, and should display it without alterations.
6600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (e.g. for "The Final Season", displayed string should be "The Final Season", not
6610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * "Season The Final Season"). When displaying multiple programs, the order should be based
6620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * on {@link #COLUMN_SEASON_DISPLAY_NUMBER}, even when {@link #COLUMN_SEASON_TITLE} exists.
6630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
66783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SEASON_TITLE = "season_title";
66983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
67083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The episode display number of this TV program for episodic TV shows.
67283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to indicate the episode number. (e.g. 1, 2 or 3) Note that the value
6740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * does not necessarily be numeric. (e.g. 12B)
6750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
67983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
68183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
68283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The episode title of this TV program for episodic TV shows.
68483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
6860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
68883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
6890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_EPISODE_TITLE = "episode_title";
69083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
69183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
6920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated canonical genre string of this TV program.
69383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
6940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Canonical genres are defined in {@link Genres}. Use {@link Genres#encode} to create a
6950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * text that can be stored in this column. Use {@link Genres#decode} to get the canonical
6960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * genre strings from the text stored in the column.
6970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
6980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
6990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres
7000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#encode
7010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#decode
70283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_CANONICAL_GENRE = "canonical_genre";
70483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
70583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The short description of this TV program that is displayed to the user by default.
70783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is recommended to limit the length of the descriptions to 256 characters.
7090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
71183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SHORT_DESCRIPTION = "short_description";
71383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
71483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The detailed, lengthy description of this TV program that is displayed only when the user
7160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * wants to see more information.
71783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>TV input services should leave this field empty if they have no additional details
7190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * beyond {@link #COLUMN_SHORT_DESCRIPTION}.
7200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
72283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LONG_DESCRIPTION = "long_description";
72483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
72583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The width of the video for this TV program, in the unit of pixels.
72783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Together with {@link #COLUMN_VIDEO_HEIGHT} this is used to determine the video
7290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * resolution of the current TV program. Can be empty if it is not known initially or the
7300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * program does not convey any video such as the programs from type
7310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Channels#SERVICE_TYPE_AUDIO} channels.
7320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
73483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_VIDEO_WIDTH = "video_width";
73683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
73783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The height of the video for this TV program, in the unit of pixels.
73983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Together with {@link #COLUMN_VIDEO_WIDTH} this is used to determine the video
7410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * resolution of the current TV program. Can be empty if it is not known initially or the
7420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * program does not convey any video such as the programs from type
7430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Channels#SERVICE_TYPE_AUDIO} channels.
7440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
74683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_VIDEO_HEIGHT = "video_height";
74883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
74983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated audio languages of this TV program.
75183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to describe available audio languages included in the program. Use either
7530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * ISO 639-1 or 639-2/T codes.
7540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
75683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_AUDIO_LANGUAGE = "audio_language";
75883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
75983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated content ratings of this TV program.
76183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to describe the content rating(s) of this program. Each comma-separated
7630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * content rating sub-string should be generated by calling
7640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link TvContentRating#flattenToString}. Note that in most cases the program content is
7650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * rated by a single rating system, thus resulting in a corresponding single sub-string that
7660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * does not require comma separation and multiple sub-strings appear only when the program
7670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * content is rated by two or more content rating systems. If any of those ratings is
7680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified as "blocked rating" in the user's parental control settings, the TV input
7690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * service should block the current content and wait for the signal that it is okay to
7700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * unblock.
7710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
77383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_CONTENT_RATING = "content_rating";
77583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
77683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the poster art of this TV program.
77883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
7790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
7800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
7820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
7830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
7840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
7850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
7860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
7870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
7890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
79183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
7920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_POSTER_ART_URI = "poster_art_uri";
79383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
79483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
7950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the thumbnail of this TV program.
7960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
7970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The system can generate a thumbnail from the poster art if this column is not
7980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified. Thus it is not necessary for TV input services to include a thumbnail if it is
7990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * just a scaled image of the poster art.
8000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
8020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
8040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
8050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
8060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
8070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
8080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
8090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
8110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
8130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
8150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV program is searchable or not.
8180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The columns of searchable programs can be read by other applications that have proper
8200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * permission. Care must be taken not to open sensitive data.
8210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the program is searchable and its columns can be read by
8230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, a value of 0 indicates that the program is hidden and its columns can
8240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * be read only by the package that owns the program and the system. If not specified, this
8250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * value is set to 1 (searchable) by default.
8260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
8280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_SEARCHABLE = "searchable";
8300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal data used by individual TV input services.
8330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: BLOB
8380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
8400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
8500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
8600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
8700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Internal integer flag used by individual TV input services.
8730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
8750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
8760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
8800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
8810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
8820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The version number of this row entry used by TV input services.
8830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is best used by sync adapters to identify the rows to update. The number can be
8850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * defined by individual TV input services. One may assign the same value as
8860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@code version_number} in ETSI EN 300 468 or ATSC A/65, if the data are coming from a TV
8870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast.
8880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
8890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
8900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
8910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_VERSION_NUMBER = "version_number";
8929b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
8939b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
8949b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating score style used for {@link #COLUMN_REVIEW_RATING}.
8959b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
8969b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p> The value should match one of the followings: {@link #REVIEW_RATING_STYLE_STARS},
8979b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * {@link #REVIEW_RATING_STYLE_THUMBS_UP_DOWN}, and {@link #REVIEW_RATING_STYLE_PERCENTAGE}.
8989b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
8999b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p>Type: INTEGER
9009b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING
9019b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
9029b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
9039b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen
9049b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        /**
9059b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * The review rating score for this program.
9069b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
9079b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p>The format of the value is dependent on {@link #COLUMN_REVIEW_RATING_STYLE}. If the
9089b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * style is {@link #REVIEW_RATING_STYLE_STARS}, the value should be a real number between
9099b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * 0.0 and 5.0. (e.g. "4.5") If the style is {@link #REVIEW_RATING_STYLE_THUMBS_UP_DOWN},
9109b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * the value should be two integers, one for thumbs-up count and the other for thumbs-down
9119b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * count, with a comma between them. (e.g. "200,40") If the style is
9129b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * {@link #REVIEW_RATING_STYLE_PERCENTAGE}, the value shoule be a real number between 0 and
9139b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * 100. (e.g. "99.9")
9149b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         *
9159b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * <p>Type: TEXT
9169b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         * @see #COLUMN_REVIEW_RATING_STYLE
9179b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen         */
9189b81091fb8bde807ed01a7383c16e20a2e2adef7Conrad Chen        String COLUMN_REVIEW_RATING = "review_rating";
9190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
9200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
9210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
9220cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * Common columns for the tables of preview programs.
9230cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang     * @hide
9240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
9250cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    @RestrictTo(LIBRARY_GROUP)
9260cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public interface PreviewProgramColumns {
9270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
9280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for movie.
92983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
93083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
93183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
932407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_MOVIE = 0;
93383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
93483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for TV series.
93683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
93783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
93883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
939407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TV_SERIES = 1;
94083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
94183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for TV season.
94383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
94483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
94583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
946407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TV_SEASON = 2;
94783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
94883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for TV episode.
95083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
95183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
95283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
953407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TV_EPISODE = 3;
95483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
95583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for clip.
95783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
95883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
95983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
960407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_CLIP = 4;
96183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
96283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for event.
96483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
96583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
96683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
967407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_EVENT = 5;
96883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
96983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for channel.
97183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
97283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
97383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
974407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_CHANNEL = 6;
97583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
97683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for track.
97883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
97983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
98083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
981407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_TRACK = 7;
98283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
98383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for album.
98583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
98683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
98783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
988407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_ALBUM = 8;
98983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
99083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for artist.
99283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
99383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
99483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
995407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_ARTIST = 9;
99683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
99783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
9980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for playlist.
99983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
10000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
10010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1002407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_PLAYLIST = 10;
10030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
10040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The program type for station.
100683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
100783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_TYPE
100883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1009407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int TYPE_STATION = 11;
101083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10112081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        /**
10122081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * The program type for game.
10132081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         *
10142081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * @see #COLUMN_TYPE
10152081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         */
10162081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        int TYPE_GAME = 12;
10172081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson
10180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 16:9.
10200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1024407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int ASPECT_RATIO_16_9 = 0;
102583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 3:2.
10280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1032407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int ASPECT_RATIO_3_2 = 1;
103383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10358f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * The aspect ratio for 4:3.
10368f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         *
10378f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10388f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10398f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         */
10408f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        int ASPECT_RATIO_4_3 = 2;
10418f95356f24ddac5b6cafc455824507057529d315Dongwon Kang
10428f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        /**
10430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 1:1.
10440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
10488f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        int ASPECT_RATIO_1_1 = 3;
10490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
10500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio for 2:3.
10520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
10568f95356f24ddac5b6cafc455824507057529d315Dongwon Kang        int ASPECT_RATIO_2_3 = 4;
105783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10582081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        /**
10592081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * The aspect ratio for movie poster which is 1:1.441.
10602081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         *
10612081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * @see #COLUMN_POSTER_ART_ASPECT_RATIO
10622081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * @see #COLUMN_THUMBNAIL_ASPECT_RATIO
10632081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         */
10642081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        int ASPECT_RATIO_MOVIE_POSTER = 5;
10652081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson
10660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability for "available to this user".
10680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_AVAILABILITY
10700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1071407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int AVAILABILITY_AVAILABLE = 0;
107283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability for "free with subscription".
10750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_AVAILABILITY
10770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1078407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1;
107983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
10812081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * The availability for "paid content", either to-own or rental
10820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (user has not purchased/rented).
10830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
10840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_AVAILABILITY
10850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
1086407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int AVAILABILITY_PAID_CONTENT = 2;
108783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
10882081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        /**
10892081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * The availability for content already purchased by the user.
10902081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         *
10912081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * @see #COLUMN_AVAILABILITY
10922081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         */
10932081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        int AVAILABILITY_PURCHASED = 3;
10942081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson
10952081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        /**
10962081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * The availability for free content.
10972081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         *
10982081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * @see #COLUMN_AVAILABILITY
10992081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         */
11002081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson        int AVAILABILITY_FREE = 4;
11012081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson
110283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1103407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "views".
110483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
110683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1107407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_VIEWS = 0;
110883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
110983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1110407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "listens".
111183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
111383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1114407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_LISTENS = 1;
111583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
111683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1117407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "followers".
111883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
112083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1121407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_FOLLOWERS = 2;
112283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
112383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1124407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "fans".
112583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
112783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1128407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_FANS = 3;
112983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
113083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1131407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "likes".
113283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
113483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1135407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_LIKES = 4;
113683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
113783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
1138407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * The interaction type for "thumbs".
113983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
114183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1142407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_THUMBS = 5;
114383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
114483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
11450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The interaction type for "viewers".
114683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
114883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
1149407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        int INTERACTION_TYPE_VIEWERS = 6;
11500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
115183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
11520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The type of this program content.
115383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
11550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_MOVIE},
11560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TV_SERIES},
11570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TV_SEASON},
11580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TV_EPISODE},
11590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_CLIP},
11600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_EVENT},
11610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_CHANNEL},
11620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_TRACK},
11630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ALBUM},
11640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ARTIST},
11652081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #TYPE_PLAYLIST},
11662081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #TYPE_STATION}, and
11672081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #TYPE_GAME}.
11680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
11690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field if the program is from a {@link Channels#TYPE_PREVIEW}
11700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel.
117183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1172407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
117383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
11740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_TYPE = "type";
117583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
117683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
11770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio of the poster art for this TV program.
117883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
11800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_16_9},
11810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_3_2},
11828f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * {@link #ASPECT_RATIO_4_3},
11832081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #ASPECT_RATIO_1_1},
11842081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #ASPECT_RATIO_2_3}, and
11852081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #ASPECT_RATIO_MOVIE_POSTER}.
118683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1187407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
118883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
11890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
119083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
119183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
11920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The aspect ratio of the thumbnail for this TV program.
119383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
11940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
11950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_16_9},
11960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ASPECT_RATIO_3_2},
11978f95356f24ddac5b6cafc455824507057529d315Dongwon Kang         * {@link #ASPECT_RATIO_4_3},
11982081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #ASPECT_RATIO_1_1},
11992081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #ASPECT_RATIO_2_3}, and
12002081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #ASPECT_RATIO_MOVIE_POSTER}.
120183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1202407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
120383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
120583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
120683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the logo of this TV program.
120883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a small badge shown on top of the poster art or thumbnail representing the
12100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * source of the content.
121183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
12130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
12150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
12160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
12170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
12180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
12190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
12200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
12220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
122483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LOGO_URI = "logo_uri";
122683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
122783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The availability of this TV program.
122983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
12310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #AVAILABILITY_AVAILABLE},
12322081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #AVAILABILITY_FREE_WITH_SUBSCRIPTION},
12332081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #AVAILABILITY_PAID_CONTENT},
12342081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #AVAILABILITY_PURCHASED} and
12352081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #AVAILABILITY_FREE}.
123683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1237407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
12380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
12390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_AVAILABILITY = "availability";
12400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
12410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
12420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The starting price of this TV program.
124383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This indicates the lowest regular acquisition cost of the content. It is only used
12452081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * if the availability of the program is {@link #AVAILABILITY_PAID_CONTENT} or
12462081517c7522faef9804fb028634103b12cea5fdIsaac Katzenelson         * {@link #AVAILABILITY_FREE}.
12470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
12490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_OFFER_PRICE
125083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_STARTING_PRICE = "starting_price";
125283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
125383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The offer price of this TV program.
125583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is the promotional cost of the content. It is only used if the availability of
12570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the program is {@link #AVAILABILITY_PAID_CONTENT}.
125883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
12600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_STARTING_PRICE
126183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
12620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_OFFER_PRICE = "offer_price";
126383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
126483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
12650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The release date of this TV program.
126683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
126750224da7ae3cad6a6f555838b54f372364e45453Dongwon Kang         * <p>The value should be in one of the following formats:
126850224da7ae3cad6a6f555838b54f372364e45453Dongwon Kang         * "yyyy", "yyyy-MM-dd", and "yyyy-MM-ddTHH:mm:ssZ" (UTC in ISO 8601).
126983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
12710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
12720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_RELEASE_DATE = "release_date";
12730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
12740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
12750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The count of the items included in this TV program.
127683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
12770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is only relevant if the program represents a collection of items such as series,
12780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * episodes, or music tracks.
12790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
12810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
12820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_ITEM_COUNT = "item_count";
12830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
12840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
12850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV program is live or not.
12860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the content is airing and should be consumed now, a value
12880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * of 0 indicates that the content is off the air and does not need to be consumed at the
12890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * present time. If not specified, the value is set to 0 (not live) by default.
12900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
12920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
12930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LIVE = "live";
12940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
12950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
12960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The internal ID used by individual TV input services.
12970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
12980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
12990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
13000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
130283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
130383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
130483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
130683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
130783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the preview video.
130983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13104109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
131183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
131283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <ul>
131383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
131483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
131583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * </li>
131683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
131783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * </ul>
131883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
132083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
132183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
132283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
132483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
132583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13264109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * The last playback position (in milliseconds) of the original content of this preview
13274109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * program.
132883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
133083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
133283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_LAST_PLAYBACK_POSITION_MILLIS =
13340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                "last_playback_position_millis";
133583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
133683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13374109ea358285eb3a4b98a7987fb1c44ec3cbcadcDongwon Kang         * The duration (in milliseconds) of the original content of this preview program.
133883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
13400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
13410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
134283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_DURATION_MILLIS = "duration_millis";
134483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
134583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13462ed7093758f4b3e84f19a003d1ed78c899a14130Dongwon Kang         * The intent URI which is launched when the preview program is selected.
134783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
134883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>The URI is created using {@link Intent#toUri} with {@link Intent#URI_INTENT_SCHEME}
134983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * and converted back to the original intent with {@link Intent#parseUri}. The intent is
13502ed7093758f4b3e84f19a003d1ed78c899a14130Dongwon Kang         * launched when the user selects the preview program item.
135183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
135383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
135483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
135583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13562ed7093758f4b3e84f19a003d1ed78c899a14130Dongwon Kang        String COLUMN_INTENT_URI = "intent_uri";
135783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
135883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this program is transient or not.
136083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel will be automatically removed by the system on
13620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * reboot, and a value of 0 indicates that the channel is persistent across reboot. If not
13630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified, this value is set to 0 (not transient) by default.
136483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
13660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Channels#COLUMN_TRANSIENT
136783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_TRANSIENT = "transient";
136983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
137083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The type of interaction for this TV program.
137283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p> The value should match one of the followings:
13740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_LISTENS},
13750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_FOLLOWERS},
13760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_FANS},
13770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_LIKES},
13780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_THUMBS},
13790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_VIEWS}, and
13800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #INTERACTION_TYPE_VIEWERS}.
138183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
1382407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
13830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_COUNT
138483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERACTION_TYPE = "interaction_type";
138683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
138783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The interaction count for this program.
138983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This indicates the number of times interaction has happened.
139183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
13920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
13930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_INTERACTION_TYPE
139483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
13950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_INTERACTION_COUNT = "interaction_count";
139683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
139783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
13980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The author or artist of this content.
139983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
140183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_AUTHOR = "author";
140383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
140483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
14050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV program is browsable or not.
140683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This column can only be set by applications having proper system permission. For
14080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, this is a read-only column.
14090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
14100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the program is browsable and can be shown to users in
14110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the UI. A value of 0 indicates that the program should be hidden from users and the
14120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * application who changes this value to 0 should send
14130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED} to the owner of the program
14140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * to notify this change.
14150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
14160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This value is set to 1 (browsable) by default.
141783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
141883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (boolean)
141983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_BROWSABLE = "browsable";
142183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
142283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
14230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The content ID of this TV program.
142483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A public ID of the content which allows the application to apply the same operation to
14260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * all the program copies in different channels.
142783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
142983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
14300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
143183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
14320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        String COLUMN_CONTENT_ID = "content_id";
143383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1434b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        /**
1435b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * The content description of the logo of this TV program.
1436b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1437b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>A description of the logo shown on the program used in accessibility mode.
1438b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1439b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Can be empty.
1440b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1441b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Type: TEXT
1442b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * @see #COLUMN_LOGO_URI
1443b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         */
1444b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        String COLUMN_LOGO_CONTENT_DESCRIPTION = "logo_content_description";
1445b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson
1446b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        /**
1447b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * A genre(s) that are related to this TV program.
1448b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1449b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>A short freeform description of the genre(s) of the program. Usually a comma seperated
1450b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * list of a few genres. For example: Drama, Sci-Fi.
1451b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1452b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Can be empty.
1453b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1454b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Type: TEXT
1455b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         */
1456b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        String COLUMN_GENRE = "genre";
1457b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson
1458b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        /**
1459b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * The start time of this TV program, in milliseconds since the epoch.
1460b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1461b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Should be empty if this program is not live.
1462b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1463b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Type: INTEGER (long)
1464b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * @see #COLUMN_LIVE
1465b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         */
1466b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
1467b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson
1468b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        /**
1469b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * The end time of this TV program, in milliseconds since the epoch.
1470b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1471b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Should be empty if this program is not live.
1472b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1473b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Type: INTEGER (long)
1474b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * @see #COLUMN_LIVE
1475b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         */
1476b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
1477b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson
1478b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        /**
1479b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * The URI for the preview audio.
1480b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1481b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>The data in the column must be a URL, or a URI in one of the following formats:
1482b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1483b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <ul>
1484b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
1485b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
1486b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * </li>
1487b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
1488b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * </ul>
1489b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1490b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Can be empty.
1491b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         *
1492b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         * <p>Type: TEXT
1493b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson         */
1494b9004ae856906c21257befe148a7e033eb4b4ba8Isaac Katzenelson        String COLUMN_PREVIEW_AUDIO_URI = "preview_audio_uri";
149583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
149683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
14970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /** Column definitions for the TV channels table. */
14980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    public static final class Channels implements BaseTvColumns {
149983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1500239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
1501239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
1502239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
1503239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
1504239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
1505239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
150683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
15070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_CHANNEL);
150883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
15090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of TV channels. */
15100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
151183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
15120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single TV channel. */
15130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
151483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
1515acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1516acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
1517acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @StringDef({
15180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_OTHER,
15190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_NTSC,
15200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_PAL,
15210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_SECAM,
15220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_T,
15230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_T2,
15240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_S,
15250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_S2,
15260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_C,
15270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_C2,
15280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_H,
15290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DVB_SH,
15300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ATSC_T,
15310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ATSC_C,
15320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ATSC_M_H,
15330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_T,
15340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_TB,
15350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_S,
15360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_ISDB_C,
15370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_1SEG,
15380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_DTMB,
15390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_CMMB,
15400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_T_DMB,
15410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_S_DMB,
15420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                TYPE_PREVIEW,
1543acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1544acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
1545acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        public @interface Type {}
1546acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
154783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
15480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * A generic channel type.
15497ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Use this if the current channel is streaming-based or its broadcast system type does not
15510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * fit under any other types. This is the default channel type.
15527ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15537ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15547ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_OTHER = "TYPE_OTHER";
15567ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15577ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for NTSC.
15597ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15607ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15617ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_NTSC = "TYPE_NTSC";
15637ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15647ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for PAL.
15667ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15677ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15687ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_PAL = "TYPE_PAL";
15707ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15717ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for SECAM.
15737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15747ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15757ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_SECAM = "TYPE_SECAM";
15777ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15787ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-T (terrestrial).
15807ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15817ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15827ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_T = "TYPE_DVB_T";
15847ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15857ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-T2 (terrestrial).
15877ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15887ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15897ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_T2 = "TYPE_DVB_T2";
15917ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15927ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
15930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-S (satellite).
15947ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
15957ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
15967ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
15970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_S = "TYPE_DVB_S";
15987ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
15997ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-S2 (satellite).
16017ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16027ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
16037ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_S2 = "TYPE_DVB_S2";
16057ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16067ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-C (cable).
16087ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16097ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
16107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_C = "TYPE_DVB_C";
16127ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16137ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-C2 (cable).
16157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16167ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
16177ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_C2 = "TYPE_DVB_C2";
16197ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16207ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-H (handheld).
16227ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16237ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * @see #COLUMN_TYPE
16247ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_H = "TYPE_DVB_H";
1626acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16277ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DVB-SH (satellite).
16297ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16317ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DVB_SH = "TYPE_DVB_SH";
16337ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16347ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ATSC (terrestrial).
16367ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16387ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ATSC_T = "TYPE_ATSC_T";
16407ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16417ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ATSC (cable).
16437ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16457ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ATSC_C = "TYPE_ATSC_C";
1647acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16487ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ATSC-M/H (mobile/handheld).
16507ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16527ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
16547ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16557ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-T (terrestrial).
16577ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16597ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_T = "TYPE_ISDB_T";
16617ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16627ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-Tb (Brazil).
16647ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16667ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_TB = "TYPE_ISDB_TB";
16687ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16697ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-S (satellite).
16717ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_S = "TYPE_ISDB_S";
1675acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16767ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for ISDB-C (cable).
16787ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16807ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_ISDB_C = "TYPE_ISDB_C";
16827ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16837ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for 1seg (handheld).
16857ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16877ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_1SEG = "TYPE_1SEG";
16897ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
16907ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for DTMB (terrestrial).
16927ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
16930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
16947ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
16950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_DTMB = "TYPE_DTMB";
1696acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
16977ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
16980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for CMMB (handheld).
16997ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
17000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
17017ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
17020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_CMMB = "TYPE_CMMB";
17037ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17047ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
17050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for T-DMB (terrestrial).
17067ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
17070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
17087ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
17090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_T_DMB = "TYPE_T_DMB";
17107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17117ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
17120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for S-DMB (satellite).
17137ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
17140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
17157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
17160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_S_DMB = "TYPE_S_DMB";
17177ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17187ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
17190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel type for preview videos.
17207ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
17210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <P>Unlike other broadcast TV channel types, the programs in the preview channel usually
17220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * are promotional videos. The UI may treat the preview channels differently from the other
17230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast channels.
17247ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
17250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_TYPE
17267ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
17270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String TYPE_PREVIEW = "TYPE_PREVIEW";
17287ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** @hide */
17300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
17310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @StringDef({
17320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                SERVICE_TYPE_OTHER,
17330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                SERVICE_TYPE_AUDIO_VIDEO,
17340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                SERVICE_TYPE_AUDIO,
17350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        })
17360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
17370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface ServiceType {}
17387ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** A generic service type. */
17400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
17410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The service type for regular TV channels that have both audio and video. */
17430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
17440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
17450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The service type for radio channels that have audio only. */
17460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
17477ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
1748acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        /** @hide */
1749acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
1750acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @StringDef({
17510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_240P,
17520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_360P,
17530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_480I,
17540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_576I,
17550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_576P,
17560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_720P,
17570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_1080I,
17580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_1080P,
17590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_2160P,
17600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_FORMAT_4320P,
1761acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        })
1762acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
17630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface VideoFormat {}
1764acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
17650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 240p. */
17660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
17677ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 360p. */
17690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
17707ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 480i. */
17720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
17737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 480p. */
17750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
177683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 576i. */
17780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
17797ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 576p. */
17810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
17827ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
17830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 720p. */
17840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
178583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 1080i. */
17870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
178883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 1080p. */
17900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
179183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 2160p. */
17930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
179483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video format for 4320p. */
17960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
179783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
17980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** @hide */
17990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
18000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @StringDef({
18010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_SD,
18020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_ED,
18030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_HD,
18040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_FHD,
18050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                VIDEO_RESOLUTION_UHD,
18060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        })
18070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Retention(RetentionPolicy.SOURCE)
18080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public @interface VideoResolution {}
180983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
18100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for standard-definition. */
18110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
18120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
18130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for enhanced-definition. */
18140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
18150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
18160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for high-definition. */
18170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
18180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
18190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for full high-definition. */
18200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
18210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
18220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The video resolution for ultra high-definition. */
18230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
18240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
18250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private static final Map<String, String> VIDEO_FORMAT_TO_RESOLUTION_MAP = new HashMap<>();
18260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
18270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        static {
18280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_480I, VIDEO_RESOLUTION_SD);
18290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_480P, VIDEO_RESOLUTION_ED);
18300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_576I, VIDEO_RESOLUTION_SD);
18310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_576P, VIDEO_RESOLUTION_ED);
18320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_720P, VIDEO_RESOLUTION_HD);
18330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_1080I, VIDEO_RESOLUTION_HD);
18340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_1080P, VIDEO_RESOLUTION_FHD);
18350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_2160P, VIDEO_RESOLUTION_UHD);
18360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            VIDEO_FORMAT_TO_RESOLUTION_MAP.put(VIDEO_FORMAT_4320P, VIDEO_RESOLUTION_UHD);
18370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
183883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
183983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Returns the video resolution (definition) for a given video format.
184183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @param videoFormat The video format defined in {@link Channels}.
18430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @return the corresponding video resolution string. {@code null} if the resolution string
18440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         is not defined for the given video format.
18450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_VIDEO_FORMAT
184683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Nullable
18480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static String getVideoResolution(@VideoFormat String videoFormat) {
18490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            return VIDEO_FORMAT_TO_RESOLUTION_MAP.get(videoFormat);
18500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
185183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
185283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV input service that provides this TV channel.
185483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Use {@link #buildInputId} to build the ID.
185683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
185883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
186083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_INPUT_ID = "input_id";
186283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
186383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
18640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The broadcast system type of this TV channel.
186583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
18660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to indicate the broadcast standard (e.g. ATSC, DVB or ISDB) the current
18670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel conforms to. Use {@link #TYPE_OTHER} for streaming-based channels, which is the
18680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * default channel type. The value should match one of the followings:
18690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_1SEG},
18700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ATSC_C},
18710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ATSC_M_H},
18720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ATSC_T},
18730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_CMMB},
18740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DTMB},
18750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_C},
18760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_C2},
18770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_H},
18780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_S},
18790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_S2},
18800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_SH},
18810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_T},
18820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_DVB_T2},
18830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_C},
18840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_S},
18850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_T},
18860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_ISDB_TB},
18870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_NTSC},
18880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_OTHER},
18890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_PAL},
18900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_SECAM},
18910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_S_DMB}, and
18920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #TYPE_T_DMB}.
18930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
18940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
189583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
189683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
189783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
18980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_TYPE = "type";
189983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
190083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The predefined service type of this TV channel.
190283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is primarily used to indicate whether the current channel is a regular TV channel
19040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * or a radio-like channel. Use the same coding for {@code service_type} in the underlying
19050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast standard if it is defined there (e.g. ATSC A/53, ETSI EN 300 468 and ARIB
19060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * STD-B10). Otherwise use one of the followings: {@link #SERVICE_TYPE_OTHER},
19070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #SERVICE_TYPE_AUDIO_VIDEO}, {@link #SERVICE_TYPE_AUDIO}
19080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
191083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
191183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
191283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SERVICE_TYPE = "service_type";
191483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
191583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The original network ID of this TV channel.
191783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is used to identify the originating delivery system, if applicable. Use the same
19190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * coding for {@code original_network_id} for ETSI EN 300 468/TR 101 211 and ARIB STD-B10.
192083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field only if the underlying broadcast standard defines the same
19220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * name field. Otherwise, leave empty.
19230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
192583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
192783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
192883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The transport stream ID of this channel.
193083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is used to identify the Transport Stream that contains the current channel from any
19320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other multiplex within a network, if applicable. Use the same coding for
19330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@code transport_stream_id} defined in ISO/IEC 13818-1 if the channel is transmitted via
19340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the MPEG Transport Stream.
193583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field only if the current channel is transmitted via the MPEG
19370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Transport Stream. Leave empty otherwise.
19380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
194083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
194283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
194383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The service ID of this channel.
194583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>It is used to identify the current service, or channel from any other services within
19470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * a given Transport Stream, if applicable. Use the same coding for {@code service_id} in
19480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * ETSI EN 300 468 and ARIB STD-B10 or {@code program_number} in ISO/IEC 13818-1.
19490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
19500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field only if the underlying broadcast standard defines the same
19510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * name field, or the current channel is transmitted via the MPEG Transport Stream. Leave
19520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * empty otherwise.
195383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
195483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
195583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SERVICE_ID = "service_id";
195783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
195883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel number that is displayed to the user.
196083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The format can vary depending on broadcast standard and product specification.
196283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
196483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_DISPLAY_NUMBER = "display_number";
196683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
196783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The channel name that is displayed to the user.
196983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A call sign is a good candidate to use for this purpose but any name that helps the
19710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * user recognize the current channel will be enough. Can also be empty depending on
19720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * broadcast standard.
197383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p> Type: TEXT
197583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_DISPLAY_NAME = "display_name";
197783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
197883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The network affiliation for this TV channel.
198083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is used to identify a channel that is commonly called by its network affiliation
19820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * instead of the display name. Examples include ABC for the channel KGO-HD, FOX for the
19830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel KTVU-HD and NBC for the channel KNTV-HD. Can be empty if not applicable.
198483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
198583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
198683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
198883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
198983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The description of this TV channel.
199183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
19920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty initially.
199383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
199483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
199583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
19960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_DESCRIPTION = "description";
199783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
199883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
19990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The typical video format for programs from this TV channel.
20007ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is primarily used to filter out channels based on video format by applications.
20020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The value should match one of the followings: {@link #VIDEO_FORMAT_240P},
20030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_360P}, {@link #VIDEO_FORMAT_480I}, {@link #VIDEO_FORMAT_480P},
20040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_576I}, {@link #VIDEO_FORMAT_576P}, {@link #VIDEO_FORMAT_720P},
20050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_1080I}, {@link #VIDEO_FORMAT_1080P}, {@link #VIDEO_FORMAT_2160P},
20060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #VIDEO_FORMAT_4320P}. Note that the actual video resolution of each program from a
20070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * given channel can vary thus one should use {@link Programs#COLUMN_VIDEO_WIDTH} and
20080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Programs#COLUMN_VIDEO_HEIGHT} to get more accurate video resolution.
20097ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
20110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
20120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #getVideoResolution
20137ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_VIDEO_FORMAT = "video_format";
20157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20167ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is browsable or not.
201883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
20190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This column can only be set by applications having proper system permission. For
20200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, this is a read-only column.
202183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
20220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates the channel is included in the channel list that applications
20230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * use to browse channels, a value of 0 indicates the channel is not included in the list.
20240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * If not specified, this value is set to 0 (not browsable) by default.
202583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
20260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
20270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
20280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_BROWSABLE = "browsable";
20290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
20300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
20310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is searchable or not.
203283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
20330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The columns of searchable channels can be read by other applications that have proper
20340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * permission. Care must be taken not to open sensitive data.
203583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
20360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel is searchable and its columns can be read by
20370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * other applications, a value of 0 indicates that the channel is hidden and its columns can
20380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * be read only by the package that owns the channel and the system. If not specified, this
20390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * value is set to 1 (searchable) by default.
20400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
20410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
204283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
20430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SEARCHABLE = "searchable";
204483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
204583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
20460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is locked or not.
20477ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is primarily used for alternative parental control to prevent unauthorized users
20490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * from watching the current channel regardless of the content rating. A value of 1
20500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * indicates the channel is locked and the user is required to enter passcode to unlock it
20510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * in order to watch the current program from the channel, a value of 0 indicates the
20520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel is not locked thus the user is not prompted to enter passcode If not specified,
20530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * this value is set to 0 (not locked) by default.
20547ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
2055d14f98d763f117942d726be5d9e69ce6faad399bConrad Chen         * <p>This column can only be set by applications having proper system permission to
2056d14f98d763f117942d726be5d9e69ce6faad399bConrad Chen         * modify parental control settings.
2057d14f98d763f117942d726be5d9e69ce6faad399bConrad Chen         *
20580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
20597ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_LOCKED = "locked";
20617ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20627ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the app badge icon of the app link template for this channel.
20647ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This small icon is overlaid at the bottom of the poster art specified by
20660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #COLUMN_APP_LINK_POSTER_ART_URI}. The data in the column must be a URI in one of
20670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the following formats:
20687ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20697ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <ul>
20707ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
20717ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
20727ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * </li>
20737ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
20747ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * </ul>
20757ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
20770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
20780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
20797ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20807ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
20810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
20820c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
20830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
20840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
20857ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
20860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
20877ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
20887ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
20890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The URI for the poster art used as the background of the app link template for this
20900c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel.
20917ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The data in the column must be a URL, or a URI in one of the following formats:
20937ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
20940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
20950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li>
20960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE})
20970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </li>
20980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li>
20990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
21007ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
21020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
21030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
21047ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21057ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
21060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
21070c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
21080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
21090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
21107ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
21110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
21127ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
21137ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
21140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The link text of the app link template for this channel.
21157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This provides a short description of the action that happens when the corresponding
21170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * app link is clicked.
21187ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
21200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
21210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
21227ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21237ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
21240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
21250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
21260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
21270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
21287ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
21290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_TEXT = "app_link_text";
21307ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
21317ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
21320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The accent color of the app link template for this channel. This is primarily used for
21330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the background color of the text box in the template.
21347ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
21360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
21370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
21387ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
21390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (color value)
21400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
21410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_INTENT_URI
21420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
21430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
21447ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
21450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_COLOR = "app_link_color";
21467ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
21477ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
21480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The intent URI of the app link for this channel.
214983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The URI is created using {@link Intent#toUri} with {@link Intent#URI_INTENT_SCHEME}
21510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * and converted back to the original intent with {@link Intent#parseUri}. The intent is
21520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * launched when the user clicks the corresponding app link for the current channel.
215383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The app-linking allows channel input sources to provide activity links from their live
21550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel programming to another activity. This enables content providers to increase user
21560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * engagement by offering the viewer other content or actions.
215783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
21590c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_COLOR
21600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_ICON_URI
21610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_POSTER_ART_URI
21620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_APP_LINK_TEXT
216383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
21640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
216583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
216683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
21670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The internal ID used by individual TV input services.
216883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21690c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
21700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * apps.
217183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
21720c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
21730c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
21740c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: TEXT
217583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
21760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
217783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
217883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
217983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal data used by individual TV input services.
218083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
218183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
218283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
218383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
218483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: BLOB
218583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
218683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
218783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
218883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
218983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
219083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
219183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
219283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
219383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
219483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
219583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
219683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
219783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
219883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
219983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
220083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
220183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
220283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
220383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
220483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
220583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
220683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
220783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
220883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
220983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
221083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
221183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
221283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
221383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
221483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
221583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
221683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
221783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
221883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
221983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Internal integer flag used by individual TV input services.
222083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
222183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is internal to the provider that inserted it, and should not be decoded by other
222283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * apps.
222383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
222483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
222583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
222683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
222783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
222883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
222983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The version number of this row entry used by TV input services.
223083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
223183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is best used by sync adapters to identify the rows to update. The number can be
223283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * defined by individual TV input services. One may assign the same value as
22330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@code version_number} that appears in ETSI EN 300 468 or ATSC A/65, if the data are
22340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * coming from a TV broadcast.
223583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
223683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
223783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
223883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_VERSION_NUMBER = "version_number";
223983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
224083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is transient or not.
224283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel will be automatically removed by the system on
22440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * reboot, and a value of 0 indicates that the channel is persistent across reboot. If not
22450c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * specified, this value is set to 0 (not transient) by default.
224683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
22480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see PreviewPrograms#COLUMN_TRANSIENT
224921cac9da019ba4968a015b482d216ab558cda20eConrad Chen         * @see WatchNextPrograms#COLUMN_TRANSIENT
225083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
22510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_TRANSIENT = "transient";
225283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
225383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether this TV channel is approved to be shown by the system.
225583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that the channel is approved to be shown by the system, and a
22570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * value of 0 indicates that the channel is blocked by system. If not specified, this value
22580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * is set to 0 (not approved) by default.
225983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
22610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @hide
226283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
22630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @RestrictTo(LIBRARY_GROUP)
22640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SYSTEM_APPROVED = "system_approved";
22650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2266c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia        /**
2267c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * A value that can be used to define the order an app's channels should be displayed in
2268c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * the configure channels menu.
2269c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         *
2270c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * <p>If not specified, this value is set to 0 (unordered) by default.
2271c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * A value of 0 indicates that there is no defined order for this TV channel and it will
2272c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * default to alphabetical ordering after any channels ordered by this value.
2273c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * For example, given channels A, B, and C, with orders 0, 1, and 2 respectively,
2274c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * the final order will be B, C, A.
2275c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         *
2276c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         * <p>Type: INTEGER
2277c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia         */
2278c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia        public static final String COLUMN_CONFIGURATION_DISPLAY_ORDER =
2279c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia                "configuration_display_order";
2280c5d70b551dcb12622f23da9a5c5e3838204b1220Rhiannon Malia
2281581e134d67d93904a6c9aef04650d6e33819308aloih        /**
2282581e134d67d93904a6c9aef04650d6e33819308aloih         * A channel identifier set in the TvProvider by the app to help OEM differentiate among
2283581e134d67d93904a6c9aef04650d6e33819308aloih         * the app's channels. This identifier should be unique per channel for each app, and should
2284581e134d67d93904a6c9aef04650d6e33819308aloih         * be agreed between the app and the OEM. It is up to the OEM on how they use this
2285581e134d67d93904a6c9aef04650d6e33819308aloih         * identifier for customization purposes.
2286581e134d67d93904a6c9aef04650d6e33819308aloih         *
2287581e134d67d93904a6c9aef04650d6e33819308aloih         * <p>Can be empty.
2288581e134d67d93904a6c9aef04650d6e33819308aloih         *
2289581e134d67d93904a6c9aef04650d6e33819308aloih         * <p>Type: TEXT
2290581e134d67d93904a6c9aef04650d6e33819308aloih         */
2291581e134d67d93904a6c9aef04650d6e33819308aloih        public static final String COLUMN_SYSTEM_CHANNEL_KEY = "system_channel_key";
2292581e134d67d93904a6c9aef04650d6e33819308aloih
22930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private Channels() {}
229483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
229583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
22960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * A sub-directory of a single TV channel that represents its primary logo.
229783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
22980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>To access this directory, append {@link Channels.Logo#CONTENT_DIRECTORY} to the raw
22990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel URI.  The resulting URI represents an image file, and should be interacted
23000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * using ContentResolver.openAssetFileDescriptor.
230183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Note that this sub-directory also supports opening the logo as an asset file in write
23030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * mode.  Callers can create or replace the primary logo associated with this channel by
23040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * opening the asset file and writing the full-size photo contents into it. (Make sure there
23050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * is no padding around the logo image.) When the file is closed, the image will be parsed,
23060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * sized down if necessary, and stored.
230783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Usage example:
23090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <pre>
23100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * public void writeChannelLogo(long channelId, byte[] logo) {
23110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     Uri channelLogoUri = TvContract.buildChannelLogoUri(channelId);
23120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     try {
23130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         AssetFileDescriptor fd =
23140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *             getContentResolver().openAssetFileDescriptor(channelLogoUri, "rw");
23150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         OutputStream os = fd.createOutputStream();
23160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         os.write(logo);
23170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         os.close();
23180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         fd.close();
23190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     } catch (IOException e) {
23200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *         // Handle error cases.
23210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     }
23220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * }
23230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </pre>
232483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final class Logo {
23260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
23270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            /**
23280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang             * The directory twig for this sub-table.
23290c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang             */
23300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            public static final String CONTENT_DIRECTORY = "logo";
23310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
23320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang            private Logo() {}
23330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        }
23340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
23350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
23360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
23370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Column definitions for the TV programs table.
23380c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     *
23390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * <p>By default, the query results will be sorted by
23400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * {@link Programs#COLUMN_START_TIME_UTC_MILLIS} in ascending order.
23410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
23420cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class Programs implements BaseTvColumns, ProgramColumns {
23430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2344239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2345239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2346239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2347239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2348239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2349239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
23500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
23510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_PROGRAM);
23520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
23530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of TV programs. */
23540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/program";
23550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
23560c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single TV program. */
23570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
235883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
235983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
23600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV channel that provides this TV program.
236183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23620c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
236383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
236583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
236783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_CHANNEL_ID = "channel_id";
236983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
237083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
23710c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The season number of this TV program for episodic TV shows.
237283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
237383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Can be empty.
237483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER
23760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
23770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @deprecated Use {@link #COLUMN_SEASON_DISPLAY_NUMBER} instead.
237883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23790c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Deprecated
23800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_SEASON_NUMBER = "season_number";
238183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
238283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
23830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The episode number of this TV program for episodic TV shows.
238483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
238583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Can be empty.
238683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
238783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
238883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
23890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @deprecated Use {@link #COLUMN_EPISODE_DISPLAY_NUMBER} instead.
239083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
23910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        @Deprecated
23920c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_EPISODE_NUMBER = "episode_number";
239383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
23947ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
23950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The start time of this TV program, in milliseconds since the epoch.
23967ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
23970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should be equal to or larger than {@link #COLUMN_END_TIME_UTC_MILLIS} of the
23980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * previous program in the same channel. In practice, start time will usually be the end
23990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * time of the previous program.
24007ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty if this program belongs to a {@link Channels#TYPE_PREVIEW} channel.
24020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
24030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
24047ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
24050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
24067ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
24077ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
24080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The end time of this TV program, in milliseconds since the epoch.
24097ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should be equal to or less than {@link #COLUMN_START_TIME_UTC_MILLIS} of the
24110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * next program in the same channel. In practice, end time will usually be the start time of
24120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * the next program.
24137ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty if this program belongs to a {@link Channels#TYPE_PREVIEW} channel.
24157ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
24177ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
24180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
24197ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
24207ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang        /**
24210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The comma-separated genre string of this TV program.
24227ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Use the same language appeared in the underlying broadcast standard, if applicable.
24240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * (For example, one can refer to the genre strings used in Genre Descriptor of ATSC A/65 or
24250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Content Descriptor of ETSI EN 300 468, if appropriate.) Otherwise, leave empty. Use
24260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Genres#encode} to create a text that can be stored in this column. Use
24270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Genres#decode} to get the broadcast genre strings from the text stored in the
24280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * column.
24297ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24307ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         * <p>Type: TEXT
24310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#encode
24320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see Genres#decode
24337ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
24340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
24350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
24360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
24370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The flag indicating whether recording of this program is prohibited.
24387ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         *
24390c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>A value of 1 indicates that recording of this program is prohibited and application
24400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * will not schedule any recording for this program. A value of 0 indicates that the
24410c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * recording is not prohibited. If not specified, this value is set to 0 (not prohibited) by
24420c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * default.
24430c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
24440c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (boolean)
24457ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang         */
24460c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
24477ded2e6b97dd9838eab4424dfa8cfaa57eb323e4Dongwon Kang
244883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        private Programs() {}
244983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
245083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /** Canonical genres for TV programs. */
245183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final class Genres {
2452acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            /** @hide */
245304c9e28ea0be0cedcee58e4d29343ac08733d58aAurimas Liutikas            @RestrictTo(RestrictTo.Scope.LIBRARY)
2454acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            @StringDef({
2455acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    FAMILY_KIDS,
2456acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    SPORTS,
2457acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    SHOPPING,
2458acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    MOVIES,
2459acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    COMEDY,
2460acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    TRAVEL,
2461acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    DRAMA,
2462acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    EDUCATION,
2463acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    ANIMAL_WILDLIFE,
2464acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    NEWS,
2465acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    GAMING,
2466acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    ARTS,
2467acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    ENTERTAINMENT,
2468acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    LIFE_STYLE,
2469acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    MUSIC,
2470acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    PREMIER,
2471acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang                    TECH_SCIENCE,
2472acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            })
2473acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            @Retention(RetentionPolicy.SOURCE)
2474acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            public @interface Genre {}
2475acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang
247683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Family/Kids. */
247783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String FAMILY_KIDS = "FAMILY_KIDS";
247883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
247983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Sports. */
248083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String SPORTS = "SPORTS";
248183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
248283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Shopping. */
248383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String SHOPPING = "SHOPPING";
248483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
248583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Movies. */
248683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String MOVIES = "MOVIES";
248783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
248883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Comedy. */
248983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String COMEDY = "COMEDY";
249083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
249183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Travel. */
249283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String TRAVEL = "TRAVEL";
249383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
249483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Drama. */
249583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String DRAMA = "DRAMA";
249683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
249783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Education. */
249883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String EDUCATION = "EDUCATION";
249983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
250083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Animal/Wildlife. */
250183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
250283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
250383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for News. */
250483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String NEWS = "NEWS";
250583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
250683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Gaming. */
250783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String GAMING = "GAMING";
250883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
250983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Arts. */
251083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String ARTS = "ARTS";
251183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
251283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Entertainment. */
251383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String ENTERTAINMENT = "ENTERTAINMENT";
251483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
251583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Life Style. */
251683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String LIFE_STYLE = "LIFE_STYLE";
251783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
251883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Music. */
251983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String MUSIC = "MUSIC";
252083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
252183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Premier. */
252283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String PREMIER = "PREMIER";
252383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
252483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /** The genre for Tech/Science. */
252583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static final String TECH_SCIENCE = "TECH_SCIENCE";
252683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
252783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final HashSet<String> CANONICAL_GENRES = new HashSet<>();
252883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            static {
252983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(FAMILY_KIDS);
253083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(SPORTS);
253183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(SHOPPING);
253283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(MOVIES);
253383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(COMEDY);
253483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(TRAVEL);
253583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(DRAMA);
253683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(EDUCATION);
253783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(ANIMAL_WILDLIFE);
253883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(NEWS);
253983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(GAMING);
254083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(ARTS);
254183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(ENTERTAINMENT);
254283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(LIFE_STYLE);
254383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(MUSIC);
254483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(PREMIER);
254583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                CANONICAL_GENRES.add(TECH_SCIENCE);
254683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
254783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
254883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final char DOUBLE_QUOTE = '"';
254983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final char COMMA = ',';
255083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final String DELIMITER = ",";
255183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
255283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static final String[] EMPTY_STRING_ARRAY = new String[0];
255383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
255483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private Genres() {}
255583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
255683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /**
255783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * Encodes genre strings to a text that can be put into the database.
255883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *
255983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @param genres Genre strings.
256083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @return an encoded genre string that can be inserted into the
256183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *         {@link #COLUMN_BROADCAST_GENRE} or {@link #COLUMN_CANONICAL_GENRE} column.
256283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             */
2563acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            public static String encode(@NonNull @Genre String... genres) {
256483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (genres == null) {
256583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    // MNC and before will throw a NPE.
256683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    return null;
256783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
256883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                StringBuilder sb = new StringBuilder();
256983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                String separator = "";
257083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                for (String genre : genres) {
257183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    sb.append(separator).append(encodeToCsv(genre));
257283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    separator = DELIMITER;
257383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
257483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return sb.toString();
257583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
257683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
257783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            private static String encodeToCsv(String genre) {
257883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                StringBuilder sb = new StringBuilder();
257983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                int length = genre.length();
258083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                for (int i = 0; i < length; ++i) {
258183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    char c = genre.charAt(i);
258283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    switch (c) {
258383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case DOUBLE_QUOTE:
258483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            sb.append(DOUBLE_QUOTE);
258583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
258683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case COMMA:
258783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            sb.append(DOUBLE_QUOTE);
258883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
258983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    }
259083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    sb.append(c);
259183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
259283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return sb.toString();
259383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
259483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
259583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /**
259683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * Decodes the genre strings from the text stored in the database.
259783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *
259883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @param genres The encoded genre string retrieved from the
259983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *            {@link #COLUMN_BROADCAST_GENRE} or {@link #COLUMN_CANONICAL_GENRE} column.
260083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @return genre strings.
260183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             */
2602acef6e2a926e6198340aa7cf978510b32a86f1a5Dongwon Kang            public static @Genre String[] decode(@NonNull String genres) {
260383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (TextUtils.isEmpty(genres)) {
260483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    // MNC and before will throw a NPE for {@code null} genres.
260583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    return EMPTY_STRING_ARRAY;
260683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
260783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (genres.indexOf(COMMA) == -1 && genres.indexOf(DOUBLE_QUOTE) == -1) {
260883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    return new String[] {genres.trim()};
260983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
261083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                StringBuilder sb = new StringBuilder();
261183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                List<String> results = new ArrayList<>();
261283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                int length = genres.length();
261383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                boolean escape = false;
261483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                for (int i = 0; i < length; ++i) {
261583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    char c = genres.charAt(i);
261683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    switch (c) {
261783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case DOUBLE_QUOTE:
261883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            if (!escape) {
261983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                escape = true;
262083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                continue;
262183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            }
262283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
262383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                        case COMMA:
262483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            if (!escape) {
262583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                String string = sb.toString().trim();
262683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                if (string.length() > 0) {
262783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                    results.add(string);
262883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                }
262983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                sb = new StringBuilder();
263083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                                continue;
263183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            }
263283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                            break;
263383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    }
263483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    sb.append(c);
263583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    escape = false;
263683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
263783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                String string = sb.toString().trim();
263883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                if (string.length() > 0) {
263983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                    results.add(string);
264083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                }
264183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return results.toArray(new String[results.size()]);
264283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
264383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
264483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            /**
264583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * Returns whether a given text is a canonical genre defined in {@link Genres}.
264683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             *
264783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @param genre The name of genre to be checked.
264883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             * @return {@code true} if the genre is canonical, otherwise {@code false}.
264983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang             */
265083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            public static boolean isCanonical(String genre) {
265183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                return CANONICAL_GENRES.contains(genre);
265283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang            }
265383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        }
265483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
265583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
265683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    /**
265783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * Column definitions for the recorded TV programs table.
265883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     *
265983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * <p>By default, the query results will be sorted by {@link #COLUMN_START_TIME_UTC_MILLIS} in
266083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     * ascending order.
266183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang     */
26620cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class RecordedPrograms implements BaseTvColumns, ProgramColumns {
266383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
2664239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2665239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2666239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2667239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2668239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2669239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
267083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
267183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                + PATH_RECORDED_PROGRAM);
267283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
267383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /** The MIME type of a directory of recorded TV programs. */
267483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
267583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
267683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /** The MIME type of a single recorded TV program. */
267783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
267883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
267983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
26800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV channel that provides this recorded program.
268183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
268283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
268383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
268483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>This is a required field.
268583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
268683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
268783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
26880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_CHANNEL_ID = "channel_id";
268983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
269083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
26910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV input service that is associated with this recorded program.
269283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
26930c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Use {@link #buildInputId} to build the ID.
269483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
26950c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
269683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
269783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
269883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
26990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_INPUT_ID = "input_id";
270083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
270183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
270283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The start time of the original TV program, in milliseconds since the epoch.
270383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
270483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
270583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see Programs#COLUMN_START_TIME_UTC_MILLIS
270683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
270783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_START_TIME_UTC_MILLIS =
270883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                Programs.COLUMN_START_TIME_UTC_MILLIS;
270983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
271083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
271183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The end time of the original TV program, in milliseconds since the epoch.
271283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
271383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
271483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see Programs#COLUMN_END_TIME_UTC_MILLIS
271583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
271683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_END_TIME_UTC_MILLIS = Programs.COLUMN_END_TIME_UTC_MILLIS;
271783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
271883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
271983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The comma-separated genre string of this recorded TV program.
272083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
272183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Use the same language appeared in the underlying broadcast standard, if applicable.
272283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * (For example, one can refer to the genre strings used in Genre Descriptor of ATSC A/65 or
272383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * Content Descriptor of ETSI EN 300 468, if appropriate.) Otherwise, leave empty. Use
27240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link Genres#encode Genres.encode()} to create a text that can be stored in this column.
27250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * Use {@link Genres#decode Genres.decode()} to get the broadcast genre strings from the
27260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * text stored in the column.
272783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
272883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
272983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see Programs#COLUMN_BROADCAST_GENRE
273083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
273183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_BROADCAST_GENRE = Programs.COLUMN_BROADCAST_GENRE;
273283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
273383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
273483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The URI of the recording data for this recorded program.
273583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
273683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Together with {@link #COLUMN_RECORDING_DATA_BYTES}, applications can use this
273783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * information to manage recording storage. The URI should indicate a file or directory with
273883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * the scheme {@link android.content.ContentResolver#SCHEME_FILE}.
273983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
274083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: TEXT
274183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_RECORDING_DATA_BYTES
274283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
274383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
274483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
274583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
274683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The data size (in bytes) for this recorded program.
274783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
274883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Together with {@link #COLUMN_RECORDING_DATA_URI}, applications can use this
274983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * information to manage recording storage.
275083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
275183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
275283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * @see #COLUMN_RECORDING_DATA_URI
275383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
275483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
275583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
275683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
275783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The duration (in milliseconds) of this recorded program.
275883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
275983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>The actual duration of the recorded program can differ from the one calculated by
276083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * {@link #COLUMN_END_TIME_UTC_MILLIS} - {@link #COLUMN_START_TIME_UTC_MILLIS} as program
276183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * recording can be interrupted in the middle for some reason, resulting in a partially
276283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * recorded program, which is still playable.
276383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
276483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
276583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
276683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
276783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
276883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
276983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * The expiration time for this recorded program, in milliseconds since the epoch.
277083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
277183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Recorded TV programs do not expire by default unless explicitly requested by the user
277283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * or the user allows applications to delete them in order to free up disk space for future
277383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * recording. However, some TV content can have expiration date set by the content provider
277483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * when recorded. This field is used to indicate such a restriction.
277583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
277683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Can be empty.
277783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
277883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER (long)
277983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
278083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        public static final String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS =
278183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang                "recording_expire_time_utc_millis";
278283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
27830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private RecordedPrograms() {}
27840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
27850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
27860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
27870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Column definitions for the preview TV programs table.
27880c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
27890cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class PreviewPrograms implements BaseTvColumns, ProgramColumns,
27900cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang            PreviewProgramColumns {
27910c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2792239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2793239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2794239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2795239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2796239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2797239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
27980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
27990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_PREVIEW_PROGRAM);
28000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28010c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of preview TV programs. */
28020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
28030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28040c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single preview TV program. */
28050c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
280683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
280783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28080c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The ID of the TV channel that provides this TV program.
280983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
281183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28120c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
28130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
28140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
281583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
28160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_CHANNEL_ID = "channel_id";
281783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
281883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The weight of the preview program within the channel.
282083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The UI may choose to show this item in a different position in the channel row.
28220c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * A larger weight value means the program is more important than other programs having
28230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * smaller weight values. The value is relevant for the preview programs in the same
28240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * channel. This is only relevant to {@link Channels#TYPE_PREVIEW}.
28250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
28260c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Can be empty.
282783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
282883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         * <p>Type: INTEGER
282983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
28300c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_WEIGHT = "weight";
28310c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28320c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        private PreviewPrograms() {}
28330c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    }
28340c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28350c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang    /**
28360c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     * Column definitions for the "watch next" TV programs table.
28370c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang     */
28380cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang    public static final class WatchNextPrograms implements BaseTvColumns, ProgramColumns,
28390cec6a661912ea29e0b8e0c9a79925f250cafebfDongwon Kang            PreviewProgramColumns {
28400c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
2841239795a5cada6a491e671660bb608f782465576fDongwon Kang        /**
2842239795a5cada6a491e671660bb608f782465576fDongwon Kang         * The content:// style URI for this table.
2843239795a5cada6a491e671660bb608f782465576fDongwon Kang         *
2844239795a5cada6a491e671660bb608f782465576fDongwon Kang         * <p>SQL selection is not supported for {@link ContentResolver#query},
2845239795a5cada6a491e671660bb608f782465576fDongwon Kang         * {@link ContentResolver#update} and {@link ContentResolver#delete} operations.
2846239795a5cada6a491e671660bb608f782465576fDongwon Kang         */
28470c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
28480c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                + PATH_WATCH_NEXT_PROGRAM);
28490c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28500c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a directory of "watch next" TV programs. */
28510c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
28520c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28530c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /** The MIME type of a single preview TV program. */
28540c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
28550c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
285683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28570c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for CONTINUE. Use this type when the user has already watched more
28580c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * than 1 minute of this content.
285983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28600c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
28610c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
2862407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_CONTINUE = 0;
28630c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28640c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
28650c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for NEXT. Use this type when the user has watched one or more
28660c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * complete episodes from some episodic content, but there remains more than one episode
28670c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * remaining or there is one last episode remaining, but it is not “new” in that it was
28680c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * released before the user started watching the show.
286983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28700c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
287183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
2872407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_NEXT = 1;
287383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
287483178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28750c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for NEW. Use this type when the user had watched all of the available
28760c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * episodes from some episodic content, but a new episode became available since the user
28770c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * started watching the first episode and now there is exactly one unwatched episode. This
28780c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * could also work for recorded events in a series e.g. soccer matches or football games.
287983178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28800c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
28810c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         */
2882407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_NEW = 2;
28830c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang
28840c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        /**
28850c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The watch next type for WATCHLIST. Use this type when the user has elected to explicitly
28860c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * add a movie, event or series to a “watchlist” as a manual way of curating what they
28870c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * want to watch next.
288883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28890c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * @see #COLUMN_WATCH_NEXT_TYPE
289083178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
2891407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang        public static final int WATCH_NEXT_TYPE_WATCHLIST = 3;
289283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
289383178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
28940c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The "watch next" type of this program content.
289583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
28960c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The value should match one of the followings:
28970c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_CONTINUE},
28980c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_NEXT},
28990c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_NEW}, and
29000c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * {@link #WATCH_NEXT_TYPE_WATCHLIST}.
290183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
29020c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
29030c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
2904407fc323df9cff9ad90eec812bb6299a2d8c8558Dongwon Kang         * <p>Type: INTEGER
290583178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
29060c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
290783178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang
290883178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang        /**
29090c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * The last UTC time that the user engaged in this TV program, in milliseconds since the
29100c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * epoch. This is a hint for the application that is used for ordering of "watch next"
29110c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * programs.
291283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
29130c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>The meaning of the value varies depending on the {@link #COLUMN_WATCH_NEXT_TYPE}:
29140c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <ul>
29150c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_CONTINUE}: the date that the user was last watching the
29160c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     content.</li>
29170c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_NEXT}: the date of the last episode watched.</li>
29180c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_NEW}: the release date of the new episode.</li>
29190c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     <li>{@link #WATCH_NEXT_TYPE_WATCHLIST}: the date the item was added to the Watchlist.
29200c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *     </li>
29210c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * </ul>
292283178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         *
29230c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>This is a required field.
29240c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         *
29250c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang         * <p>Type: INTEGER (long)
292683178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang         */
29270c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang        public static final String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS =
29280c89a1312d7df71bec4a66a68001df26d16649d5Dongwon Kang                "last_engagement_time_utc_millis";
2929c16bab6a385ff737b1c5a55450d7e987ca70d755Dongwon Kang
2930c16bab6a385ff737b1c5a55450d7e987ca70d755Dongwon Kang        private WatchNextPrograms() {}
293183178b74cce5265bbcdc22b6fbaa24d801c76c81Dongwon Kang    }
29328f95356f24ddac5b6cafc455824507057529d315Dongwon Kang}
2933