# PreviewChannelHelper

Artifact: [androidx.tvprovider:tvprovider](https://developer.android.com/jetpack/androidx/releases/tvprovider) [View Source](https://cs.android.com/search?q=file:androidx/tvprovider/media/tv/PreviewChannelHelper.java+class:androidx.tvprovider.media.tv.PreviewChannelHelper) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

*** ** * ** ***


```
@WorkerThread
public class PreviewChannelHelper
```

<br />

*** ** * ** ***

From a user's perspective, the TV home screen has two types of channels: the single Live Channels row versus the App preview Channels. This class is concerned with App Channels; or more precisely: *your* app's preview Channels. In API 26+, all TV apps are allowed to create multiple channels and publish those Channels to the home screen.

This class provides convenience methods to help you publish, update and delete channels; add, update or remove programs in a channel. You do not need to know anything about Content Providers, Content Resolvers, Cursors or such to publish your channels. This class abstracts away all database interactions for you.

To make it easy for you to distinguish classes that help you build App Channels, the support library uses the prefix Preview- to denote the classes that pertain to app Channels. Hence, the classes `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel` and `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewProgram` help your app add channels to the TV home page. All calls to methods in the class should be made on worker threads.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#PreviewChannelHelper(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` |
| `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#PreviewChannelHelper(android.content.Context,int,int)( https://developer.android.com/reference/android/content/Context.html context, int urlConnectionTimeoutMillis, int urlReadTimeoutMillis )` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#deletePreviewChannel(long)(long channelId)` Removes a preview channel from the system's content provider (aka TvProvider). |
| `void` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#deletePreviewProgram(long)(long programId)` Removes programs from a preview channel. |
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel>` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#getAllChannels()()` The TvProvider does not allow select queries. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#getPreviewChannel(long)(long channelId)` Retrieves a single preview channel from the TvProvider. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewProgram` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#getPreviewProgram(long)(long programId)` Retrieves a single preview program from the system content provider (aka TvProvider). |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/tvprovider/media/tv/WatchNextProgram` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#getWatchNextProgram(long)(long programId)` Retrieves a single WatchNext program from the system content provider (aka TvProvider). |
| `long` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishChannel(androidx.tvprovider.media.tv.PreviewChannel)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel channel)` Publishing a channel to the TV home screen is a two step process: first, you add the channel to the TV content provider; second, you make the channel browsable (i.e. visible). |
| `long` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishDefaultChannel(androidx.tvprovider.media.tv.PreviewChannel)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel channel)` This is a convenience method that simply publishes your first channel for you. |
| `long` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishPreviewProgram(androidx.tvprovider.media.tv.PreviewProgram)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewProgram program)` Adds programs to a preview channel. |
| `long` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishWatchNextProgram(androidx.tvprovider.media.tv.WatchNextProgram)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/WatchNextProgram program)` Adds a program to the Watch Next channel |
| `void` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#updatePreviewChannel(long,androidx.tvprovider.media.tv.PreviewChannel)(long channelId, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel update)` To update a preview channel, you need to use the `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel.Builder` to set the attributes you wish to change. |
| `void` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#updatePreviewProgram(long,androidx.tvprovider.media.tv.PreviewProgram)(long programId, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewProgram update)` Updates programs in a preview channel. |
| `void` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#updateWatchNextProgram(androidx.tvprovider.media.tv.WatchNextProgram,long)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/tvprovider/media/tv/WatchNextProgram upgrade, long programId)` Updates a WatchNext program. |

| ### Protected methods |
|---|---|
| `https://developer.android.com/reference/android/graphics/Bitmap.html` | `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#downloadBitmap(android.net.Uri)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/net/Uri.html logoUri)` Downloads a Bitmap from a remote server. |

## Public constructors

### PreviewChannelHelper

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public PreviewChannelHelper(Context context)
```

### PreviewChannelHelper

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public PreviewChannelHelper(
    Context context,
    int urlConnectionTimeoutMillis,
    int urlReadTimeoutMillis
)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | the Context object that holds the channels |
| `int urlConnectionTimeoutMillis` | see `https://developer.android.com/reference/java/net/URLConnection.html#setConnectTimeout(int)` |
| `int urlReadTimeoutMillis` | see `https://developer.android.com/reference/java/net/URLConnection.html#setReadTimeout(int)` |

## Public methods

### deletePreviewChannel

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public void deletePreviewChannel(long channelId)
```

Removes a preview channel from the system's content provider (aka TvProvider).

### deletePreviewProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public void deletePreviewProgram(long programId)
```

Removes programs from a preview channel.

### getAllChannels

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public List<PreviewChannel> getAllChannels()
```

The TvProvider does not allow select queries. Hence, unless you are querying for a `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#getPreviewChannel(long)`, you must get all of your channels at once and then use the returned list as necessary.

### getPreviewChannel

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public @Nullable PreviewChannel getPreviewChannel(long channelId)
```

Retrieves a single preview channel from the TvProvider. When you publish a preview channel, the TvProvider assigns an ID to it. That's the channelId to use here.

| Parameters |
|---|---|
| `long channelId` | ID of preview channel in TvProvider |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel` | PreviewChannel or null if not found |

### getPreviewProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public @Nullable PreviewProgram getPreviewProgram(long programId)
```

Retrieves a single preview program from the system content provider (aka TvProvider).

### getWatchNextProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public @Nullable WatchNextProgram getWatchNextProgram(long programId)
```

Retrieves a single WatchNext program from the system content provider (aka TvProvider).

### publishChannel

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public long publishChannel(@NonNull PreviewChannel channel)
```

Publishing a channel to the TV home screen is a two step process: first, you add the channel to the TV content provider; second, you make the channel browsable (i.e. visible). `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishChannel(androidx.tvprovider.media.tv.PreviewChannel)` adds the channel to the TV content provider for you and returns a channelId. Next you must use the channelId to make the channel browsable. There are two ways you can make a channel browsable: a) For your first channel, simply ask the system to make the channel browsable: TvContractCompat.requestChannelBrowsable(context,channelId) b) For any additional channel beyond the first channel, you must get permission from the user. So if this channel is not your first channel, you must request user permission through the following intent. So take the channelId returned by `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishChannel(androidx.tvprovider.media.tv.PreviewChannel)` and do the following inside an Activity or Fragment:

```
intent = new Intent(TvContractCompat.ACTION_REQUEST_CHANNEL_BROWSABLE);
intent.putExtra(TvContractCompat.EXTRA_CHANNEL_ID, channelId);
startActivityForResult(intent, REQUEST_CHANNEL_BROWSABLE);
```

Creating a PreviewChannel, you may pass to the builder a `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel.Builder#setLogo(android.net.Uri)`. In such case, `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#updatePreviewChannel(long,androidx.tvprovider.media.tv.PreviewChannel)` will load the logo over the network. To use your own networking code, override `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#downloadBitmap(android.net.Uri)`.

| Returns |
|---|---|
| `long` | channelId or -1 if insertion fails. This is the id the system assigns to your published channel. You can use it later to get a reference to this published PreviewChannel. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### publishDefaultChannel

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public long publishDefaultChannel(@NonNull PreviewChannel channel)
```

This is a convenience method that simply publishes your first channel for you. After calling `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishChannel(androidx.tvprovider.media.tv.PreviewChannel)` to add the channel to the TvProvider, it calls `https://developer.android.com/reference/androidx/tvprovider/media/tv/TvContractCompat#requestChannelBrowsable(android.content.Context,long)` to make the channel visible.

Only use this method to publish your first channel as you do not need user permission to make your first channel browsable (i.e. visible on home screen). For additional channels, see the documentations for `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishChannel(androidx.tvprovider.media.tv.PreviewChannel)`.

Creating a PreviewChannel, you may pass to the builder a `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel.Builder#setLogo(android.net.Uri)`. In such case, `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#updatePreviewChannel(long,androidx.tvprovider.media.tv.PreviewChannel)` will load the logo over the network. To use your own networking code, override `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#downloadBitmap(android.net.Uri)`.

| Returns |
|---|---|
| `long` | 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. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### publishPreviewProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public long publishPreviewProgram(@NonNull PreviewProgram program)
```

Adds programs to a preview channel.

### publishWatchNextProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public long publishWatchNextProgram(@NonNull WatchNextProgram program)
```

Adds a program to the Watch Next channel

### updatePreviewChannel

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public void updatePreviewChannel(long channelId, @NonNull PreviewChannel update)
```

To update a preview channel, you need to use the `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel.Builder` to set the attributes you wish to change. Then simply pass in the built channel and the channelId of the preview channel. (The channelId is the ID you received when you originally `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#publishChannel(androidx.tvprovider.media.tv.PreviewChannel)` the preview channel.)

Creating a PreviewChannel, you may pass to the builder a `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannel.Builder#setLogo(android.net.Uri)`. In such case, `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#updatePreviewChannel(long,androidx.tvprovider.media.tv.PreviewChannel)` will load the logo over the network. To use your own networking code, override `https://developer.android.com/reference/androidx/tvprovider/media/tv/PreviewChannelHelper#downloadBitmap(android.net.Uri)`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### updatePreviewProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public void updatePreviewProgram(long programId, @NonNull PreviewProgram update)
```

Updates programs in a preview channel.

### updateWatchNextProgram

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
public void updateWatchNextProgram(@NonNull WatchNextProgram upgrade, long programId)
```

Updates a WatchNext program.

## Protected methods

### downloadBitmap

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/tvprovider#1.1.0)

```
protected Bitmap downloadBitmap(@NonNull Uri logoUri)
```

Downloads a Bitmap from a remote server. It is declared protected to allow you to override it to use your own networking implementation if you so wish.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |