Adding no-op in PreviewChannel classes for API<26

Bug: 136123939
Test: Ran a sample TV App with Emulator having API version=24 and
invoked all the public methods of PreviewChannelHelper class and
verified the desired no-op behavior.

./gradlew buildOnServer : Successful

Change-Id: If165ec032cf528af7e801b64b50ade6cec4274b7
diff --git a/tv-provider/tv-provider/api/1.1.0-alpha01.txt b/tv-provider/tv-provider/api/1.1.0-alpha01.txt
index f191bd7..20e0c4b 100644
--- a/tv-provider/tv-provider/api/1.1.0-alpha01.txt
+++ b/tv-provider/tv-provider/api/1.1.0-alpha01.txt
@@ -123,9 +123,9 @@
     method public void deletePreviewProgram(long);
     method protected android.graphics.Bitmap! downloadBitmap(android.net.Uri) throws java.io.IOException;
     method public java.util.List<androidx.tvprovider.media.tv.PreviewChannel!>! getAllChannels();
-    method public androidx.tvprovider.media.tv.PreviewChannel! getPreviewChannel(long);
-    method public androidx.tvprovider.media.tv.PreviewProgram! getPreviewProgram(long);
-    method public androidx.tvprovider.media.tv.WatchNextProgram! getWatchNextProgram(long);
+    method public androidx.tvprovider.media.tv.PreviewChannel? getPreviewChannel(long);
+    method public androidx.tvprovider.media.tv.PreviewProgram? getPreviewProgram(long);
+    method public androidx.tvprovider.media.tv.WatchNextProgram? getWatchNextProgram(long);
     method public long publishChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram);
diff --git a/tv-provider/tv-provider/api/current.txt b/tv-provider/tv-provider/api/current.txt
index f191bd7..20e0c4b 100644
--- a/tv-provider/tv-provider/api/current.txt
+++ b/tv-provider/tv-provider/api/current.txt
@@ -123,9 +123,9 @@
     method public void deletePreviewProgram(long);
     method protected android.graphics.Bitmap! downloadBitmap(android.net.Uri) throws java.io.IOException;
     method public java.util.List<androidx.tvprovider.media.tv.PreviewChannel!>! getAllChannels();
-    method public androidx.tvprovider.media.tv.PreviewChannel! getPreviewChannel(long);
-    method public androidx.tvprovider.media.tv.PreviewProgram! getPreviewProgram(long);
-    method public androidx.tvprovider.media.tv.WatchNextProgram! getWatchNextProgram(long);
+    method public androidx.tvprovider.media.tv.PreviewChannel? getPreviewChannel(long);
+    method public androidx.tvprovider.media.tv.PreviewProgram? getPreviewProgram(long);
+    method public androidx.tvprovider.media.tv.WatchNextProgram? getWatchNextProgram(long);
     method public long publishChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram);
diff --git a/tv-provider/tv-provider/api/public_plus_experimental_1.1.0-alpha01.txt b/tv-provider/tv-provider/api/public_plus_experimental_1.1.0-alpha01.txt
index f191bd7..20e0c4b 100644
--- a/tv-provider/tv-provider/api/public_plus_experimental_1.1.0-alpha01.txt
+++ b/tv-provider/tv-provider/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -123,9 +123,9 @@
     method public void deletePreviewProgram(long);
     method protected android.graphics.Bitmap! downloadBitmap(android.net.Uri) throws java.io.IOException;
     method public java.util.List<androidx.tvprovider.media.tv.PreviewChannel!>! getAllChannels();
-    method public androidx.tvprovider.media.tv.PreviewChannel! getPreviewChannel(long);
-    method public androidx.tvprovider.media.tv.PreviewProgram! getPreviewProgram(long);
-    method public androidx.tvprovider.media.tv.WatchNextProgram! getWatchNextProgram(long);
+    method public androidx.tvprovider.media.tv.PreviewChannel? getPreviewChannel(long);
+    method public androidx.tvprovider.media.tv.PreviewProgram? getPreviewProgram(long);
+    method public androidx.tvprovider.media.tv.WatchNextProgram? getWatchNextProgram(long);
     method public long publishChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram);
diff --git a/tv-provider/tv-provider/api/public_plus_experimental_current.txt b/tv-provider/tv-provider/api/public_plus_experimental_current.txt
index f191bd7..20e0c4b 100644
--- a/tv-provider/tv-provider/api/public_plus_experimental_current.txt
+++ b/tv-provider/tv-provider/api/public_plus_experimental_current.txt
@@ -123,9 +123,9 @@
     method public void deletePreviewProgram(long);
     method protected android.graphics.Bitmap! downloadBitmap(android.net.Uri) throws java.io.IOException;
     method public java.util.List<androidx.tvprovider.media.tv.PreviewChannel!>! getAllChannels();
-    method public androidx.tvprovider.media.tv.PreviewChannel! getPreviewChannel(long);
-    method public androidx.tvprovider.media.tv.PreviewProgram! getPreviewProgram(long);
-    method public androidx.tvprovider.media.tv.WatchNextProgram! getWatchNextProgram(long);
+    method public androidx.tvprovider.media.tv.PreviewChannel? getPreviewChannel(long);
+    method public androidx.tvprovider.media.tv.PreviewProgram? getPreviewProgram(long);
+    method public androidx.tvprovider.media.tv.WatchNextProgram? getWatchNextProgram(long);
     method public long publishChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram);
diff --git a/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt b/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt
index 3e2e7d7..9349521 100644
--- a/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt
+++ b/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt
@@ -150,9 +150,9 @@
     method public void deletePreviewProgram(long);
     method protected android.graphics.Bitmap! downloadBitmap(android.net.Uri) throws java.io.IOException;
     method public java.util.List<androidx.tvprovider.media.tv.PreviewChannel!>! getAllChannels();
-    method public androidx.tvprovider.media.tv.PreviewChannel! getPreviewChannel(long);
-    method public androidx.tvprovider.media.tv.PreviewProgram! getPreviewProgram(long);
-    method public androidx.tvprovider.media.tv.WatchNextProgram! getWatchNextProgram(long);
+    method public androidx.tvprovider.media.tv.PreviewChannel? getPreviewChannel(long);
+    method public androidx.tvprovider.media.tv.PreviewProgram? getPreviewProgram(long);
+    method public androidx.tvprovider.media.tv.WatchNextProgram? getWatchNextProgram(long);
     method public long publishChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram);
diff --git a/tv-provider/tv-provider/api/restricted_current.txt b/tv-provider/tv-provider/api/restricted_current.txt
index 3e2e7d7..9349521 100644
--- a/tv-provider/tv-provider/api/restricted_current.txt
+++ b/tv-provider/tv-provider/api/restricted_current.txt
@@ -150,9 +150,9 @@
     method public void deletePreviewProgram(long);
     method protected android.graphics.Bitmap! downloadBitmap(android.net.Uri) throws java.io.IOException;
     method public java.util.List<androidx.tvprovider.media.tv.PreviewChannel!>! getAllChannels();
-    method public androidx.tvprovider.media.tv.PreviewChannel! getPreviewChannel(long);
-    method public androidx.tvprovider.media.tv.PreviewProgram! getPreviewProgram(long);
-    method public androidx.tvprovider.media.tv.WatchNextProgram! getWatchNextProgram(long);
+    method public androidx.tvprovider.media.tv.PreviewChannel? getPreviewChannel(long);
+    method public androidx.tvprovider.media.tv.PreviewProgram? getPreviewProgram(long);
+    method public androidx.tvprovider.media.tv.WatchNextProgram? getWatchNextProgram(long);
     method public long publishChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel) throws java.io.IOException;
     method public long publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram);
diff --git a/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/PreviewChannelHelper.java b/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/PreviewChannelHelper.java
index 40b0bf8..540ec01 100644
--- a/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/PreviewChannelHelper.java
+++ b/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/PreviewChannelHelper.java
@@ -26,10 +26,12 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
+import android.os.Build;
 import android.text.format.DateUtils;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.WorkerThread;
 
@@ -40,6 +42,7 @@
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -122,6 +125,11 @@
      * published channel. You can use it later to get a reference to this published PreviewChannel.
      */
     public long publishChannel(@NonNull PreviewChannel channel) throws IOException {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return INVALID_CONTENT_ID;
+        }
+
         try {
             Uri channelUri = mContext.getContentResolver().insert(
                     TvContractCompat.Channels.CONTENT_URI,
@@ -164,8 +172,12 @@
      * @return channelId: This is the id the system assigns to your published channel. You can
      * use it later to get a reference to this published PreviewChannel.
      */
-    public long publishDefaultChannel(@NonNull PreviewChannel channel)
-            throws IOException {
+    public long publishDefaultChannel(@NonNull PreviewChannel channel) throws IOException {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return INVALID_CONTENT_ID;
+        }
+
         long channelId = publishChannel(channel);
         TvContractCompat.requestChannelBrowsable(mContext, channelId);
         return channelId;
@@ -177,6 +189,11 @@
      * your channels at once and then use the returned list as necessary.
      */
     public List<PreviewChannel> getAllChannels() {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return Collections.emptyList();
+        }
+
         Cursor cursor = mContext.getContentResolver()
                 .query(
                         TvContractCompat.Channels.CONTENT_URI,
@@ -201,7 +218,13 @@
      * @param channelId ID of preview channel in TvProvider
      * @return PreviewChannel or null if not found
      */
+    @Nullable
     public PreviewChannel getPreviewChannel(long channelId) {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return null;
+        }
+
         PreviewChannel channel = null;
         Uri channelUri = TvContractCompat.buildChannelUri(channelId);
         Cursor cursor = mContext.getContentResolver()
@@ -363,6 +386,11 @@
      * Adds programs to a preview channel.
      */
     public long publishPreviewProgram(@NonNull PreviewProgram program) {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return INVALID_CONTENT_ID;
+        }
+
         try {
             Uri programUri = mContext.getContentResolver().insert(
                     TvContractCompat.PreviewPrograms.CONTENT_URI,
@@ -379,7 +407,13 @@
     /**
      * Retrieves a single preview program from the system content provider (aka TvProvider).
      */
+    @Nullable
     public PreviewProgram getPreviewProgram(long programId) {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return null;
+        }
+
         PreviewProgram program = null;
         Uri programUri = TvContractCompat.buildPreviewProgramUri(programId);
         Cursor cursor = mContext.getContentResolver().query(programUri, null, null, null, null);
@@ -418,6 +452,11 @@
      * Removes programs from a preview channel.
      */
     public void deletePreviewProgram(long programId) {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return;
+        }
+
         mContext.getContentResolver().delete(
                 TvContractCompat.buildPreviewProgramUri(programId), null, null);
     }
@@ -426,6 +465,11 @@
      * Adds a program to the Watch Next channel
      */
     public long publishWatchNextProgram(@NonNull WatchNextProgram program) {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return INVALID_CONTENT_ID;
+        }
+
         try {
             Uri programUri = mContext.getContentResolver().insert(
                     TvContractCompat.WatchNextPrograms.CONTENT_URI, program.toContentValues());
@@ -440,7 +484,13 @@
     /**
      * Retrieves a single WatchNext program from the system content provider (aka TvProvider).
      */
+    @Nullable
     public WatchNextProgram getWatchNextProgram(long programId) {
+
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            return null;
+        }
+
         WatchNextProgram program = null;
         Uri programUri = TvContractCompat.buildWatchNextProgramUri(programId);
         Cursor cursor = mContext.getContentResolver().query(programUri, null, null, null, null);