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());
             }
