Merge "Cleanup support-compat jellybean-mr1 classes" into oc-dev
diff --git a/api/current.txt b/api/current.txt
index 0427daf..b88fab4 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1180,6 +1180,7 @@
     method public java.lang.String getType();
     method public boolean isBrowsable();
     method public boolean isLive();
+    method public boolean isTransient();
   }
 
   public static abstract class BasePreviewProgram.Builder<T extends android.support.media.tv.BasePreviewProgram.Builder> extends android.support.media.tv.BaseProgram.Builder {
@@ -1207,6 +1208,7 @@
     method public T setReviewRatingStyle(java.lang.String);
     method public T setStartingPrice(java.lang.String);
     method public T setThumbnailAspectRatio(java.lang.String);
+    method public T setTransient(boolean);
     method public T setType(java.lang.String);
   }
 
@@ -1290,7 +1292,9 @@
     method public java.lang.String getType();
     method public java.lang.String getVideoFormat();
     method public boolean isBrowsable();
+    method public boolean isLocked();
     method public boolean isSearchable();
+    method public boolean isTransient();
     method public android.content.ContentValues toContentValues();
   }
 
@@ -1319,6 +1323,7 @@
     method public android.support.media.tv.Channel.Builder setSearchable(boolean);
     method public android.support.media.tv.Channel.Builder setServiceId(int);
     method public android.support.media.tv.Channel.Builder setServiceType(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setTransient(boolean);
     method public android.support.media.tv.Channel.Builder setTransportStreamId(int);
     method public android.support.media.tv.Channel.Builder setType(java.lang.String);
     method public android.support.media.tv.Channel.Builder setVideoFormat(java.lang.String);
@@ -1427,6 +1432,7 @@
     field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
     field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
     field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final java.lang.String COLUMN_TRANSIENT = "transient";
     field public static final java.lang.String COLUMN_TYPE = "type";
     field public static final java.lang.String INTERACTION_TYPE_FANS = "INTERACTION_TYPE_FANS";
     field public static final java.lang.String INTERACTION_TYPE_FOLLOWERS = "INTERACTION_TYPE_FOLLOWERS";
@@ -1498,11 +1504,13 @@
     field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
     field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
     field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final java.lang.String COLUMN_LOCKED = "locked";
     field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
     field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
     field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
     field public static final java.lang.String COLUMN_SERVICE_ID = "service_id";
     field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type";
+    field public static final java.lang.String COLUMN_TRANSIENT = "transient";
     field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
     field public static final java.lang.String COLUMN_TYPE = "type";
     field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
diff --git a/tv-provider/src/android/support/media/tv/BasePreviewProgram.java b/tv-provider/src/android/support/media/tv/BasePreviewProgram.java
index 79d24ec..e11a193 100644
--- a/tv-provider/src/android/support/media/tv/BasePreviewProgram.java
+++ b/tv-provider/src/android/support/media/tv/BasePreviewProgram.java
@@ -156,9 +156,7 @@
 
     /**
      * @return The value of {@link BasePreviewProgramColumns#COLUMN_TRANSIENT} for the program.
-     * @hide
      */
-    @RestrictTo(LIBRARY_GROUP)
     public boolean isTransient() {
         return mTransient == IS_TRANSIENT;
     }
@@ -722,9 +720,7 @@
          * @param transientValue The value of {@link BasePreviewProgramColumns#COLUMN_TRANSIENT} for
          *                       the program.
          * @return This Builder object to allow for chaining of calls to builder methods.
-         * @hide
          */
-        @RestrictTo(LIBRARY_GROUP)
         public T setTransient(boolean transientValue) {
             mTransient = transientValue ? IS_TRANSIENT : 0;
             return (T) this;
diff --git a/tv-provider/src/android/support/media/tv/Channel.java b/tv-provider/src/android/support/media/tv/Channel.java
index 7e68755..7290f61 100644
--- a/tv-provider/src/android/support/media/tv/Channel.java
+++ b/tv-provider/src/android/support/media/tv/Channel.java
@@ -77,6 +77,7 @@
     private static final int IS_TRANSIENT = 1;
     private static final int IS_BROWSABLE = 1;
     private static final int IS_SYSTEM_APPROVED = 1;
+    private static final int IS_LOCKED = 1;
 
     private final long mId;
     private final String mPackageName;
@@ -105,6 +106,7 @@
     private final int mTransient;
     private final int mBrowsable;
     private final int mSystemApproved;
+    private final int mLocked;
 
     private Channel(Builder builder) {
         mId = builder.mId;
@@ -134,6 +136,7 @@
         mTransient = builder.mTransient;
         mBrowsable = builder.mBrowsable;
         mSystemApproved = builder.mSystemApproved;
+        mLocked = builder.mLocked;
     }
 
     /**
@@ -316,9 +319,7 @@
 
     /**
      * @return The value of {@link Channels#COLUMN_TRANSIENT} for the channel.
-     * @hide
      */
-    @RestrictTo(LIBRARY_GROUP)
     public boolean isTransient() {
         return mTransient == IS_TRANSIENT;
     }
@@ -339,6 +340,13 @@
         return mSystemApproved == IS_SYSTEM_APPROVED;
     }
 
+    /**
+     * @return The value of {@link Channels#COLUMN_LOCKED} for the channel.
+     */
+    public boolean isLocked() {
+        return mLocked == IS_LOCKED;
+    }
+
     @Override
     public String toString() {
         return "Channel{"
@@ -464,6 +472,7 @@
 
         if (includeProtectedFields) {
             values.put(Channels.COLUMN_BROWSABLE, mBrowsable);
+            values.put(Channels.COLUMN_LOCKED, mLocked);
             if (BuildCompat.isAtLeastO()) {
                 values.put(Channels.COLUMN_SYSTEM_APPROVED, mSystemApproved);
             }
@@ -543,6 +552,10 @@
                 && !cursor.isNull(index)) {
             builder.setBrowsable(cursor.getInt(index) == IS_BROWSABLE);
         }
+        if ((index = cursor.getColumnIndex(Channels.COLUMN_LOCKED)) >= 0
+                && !cursor.isNull(index)) {
+            builder.setLocked(cursor.getInt(index) == IS_LOCKED);
+        }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             if ((index = cursor.getColumnIndex(Channels.COLUMN_APP_LINK_COLOR)) >= 0
                     && !cursor.isNull(index)) {
@@ -612,6 +625,7 @@
                 Channels.COLUMN_TYPE,
                 Channels.COLUMN_VIDEO_FORMAT,
                 Channels.COLUMN_BROWSABLE,
+                Channels.COLUMN_LOCKED,
         };
         String[] marshmallowColumns = new String[] {
                 Channels.COLUMN_APP_LINK_COLOR,
@@ -668,6 +682,7 @@
         private int mTransient;
         private int mBrowsable;
         private int mSystemApproved;
+        private int mLocked;
 
         public Builder() {
         }
@@ -700,6 +715,7 @@
             mTransient = other.mTransient;
             mBrowsable = other.mBrowsable;
             mSystemApproved = other.mSystemApproved;
+            mLocked = other.mLocked;
         }
 
         /**
@@ -1006,9 +1022,7 @@
          *
          * @param value The value of {@link Channels#COLUMN_TRANSIENT} for the channel.
          * @return This Builder object to allow for chaining of calls to builder methods.
-         * @hide
          */
-        @RestrictTo(LIBRARY_GROUP)
         public Builder setTransient(boolean value) {
             mTransient = value ? IS_TRANSIENT : 0;
             return this;
@@ -1041,6 +1055,19 @@
         }
 
         /**
+         * Sets whether this channel is locked or not.
+         *
+         * @param value The value of {@link Channels#COLUMN_LOCKED} for the channel.
+         * @return This Builder object to allow for chaining of calls to builder methods.
+         * @hide
+         */
+        @RestrictTo(LIBRARY_GROUP)
+        public Builder setLocked(boolean value) {
+            mLocked = value ? IS_LOCKED : 0;
+            return this;
+        }
+
+        /**
          * Takes the values of the Builder object and creates a Channel object.
          * @return Channel object with values from the Builder.
          */
diff --git a/tv-provider/src/android/support/media/tv/TvContractCompat.java b/tv-provider/src/android/support/media/tv/TvContractCompat.java
index 1f826e5..b3daa49 100644
--- a/tv-provider/src/android/support/media/tv/TvContractCompat.java
+++ b/tv-provider/src/android/support/media/tv/TvContractCompat.java
@@ -1286,9 +1286,7 @@
          *
          * <p>Type: INTEGER (boolean)
          * @see Channels#COLUMN_TRANSIENT
-         * @hide
          */
-        @RestrictTo(LIBRARY_GROUP)
         String COLUMN_TRANSIENT = "transient";
 
         /**
@@ -1937,10 +1935,11 @@
          * channel is not locked thus the user is not prompted to enter passcode If not specified,
          * this value is set to 0 (not locked) by default.
          *
+         * <p>This column can only be set by applications having proper system permission to
+         * modify parental control settings.
+         *
          * <p>Type: INTEGER (boolean)
-         * @hide
          */
-        @RestrictTo(LIBRARY_GROUP)
         public static final String COLUMN_LOCKED = "locked";
 
         /**
@@ -2130,9 +2129,8 @@
          *
          * <p>Type: INTEGER (boolean)
          * @see PreviewPrograms#COLUMN_TRANSIENT
-         * @hide
+         * @see WatchNextPrograms#COLUMN_TRANSIENT
          */
-        @RestrictTo(LIBRARY_GROUP)
         public static final String COLUMN_TRANSIENT = "transient";
 
         /**
diff --git a/tv-provider/tests/src/android/support/media/tv/ChannelTest.java b/tv-provider/tests/src/android/support/media/tv/ChannelTest.java
index cf085b1..69201ad 100644
--- a/tv-provider/tests/src/android/support/media/tv/ChannelTest.java
+++ b/tv-provider/tests/src/android/support/media/tv/ChannelTest.java
@@ -138,6 +138,7 @@
                 .setInternalProviderFlag4(0x1)
                 .setTransient(true)
                 .setBrowsable(true)
+                .setLocked(true)
                 .setSystemApproved(true)
                 .build();
     }
@@ -173,6 +174,7 @@
             // When we insert a channel using toContentValues() to the system, we drop some
             // protected fields since they only can be modified by system apps.
             assertEquals(channelA.isBrowsable(), channelB.isBrowsable());
+            assertEquals(channelA.isLocked(), channelB.isLocked());
             if (BuildCompat.isAtLeastO()) {
                 assertEquals(channelA.isSystemApproved(), channelB.isSystemApproved());
             }