# Playlist Feed

Playlist Feed displays videos from a specific playlist within a channel. Unlike Channel Feed, the order is deterministic - videos appear in the same order they were added to the playlist, without recommendation engine interference.

## Overview

Playlist Feed provides:

* **Deterministic Order** - Videos appear in the exact order they were added
* **Curated Content** - Manually organized video collections
* **Fixed Sequence** - No algorithmic reordering

This makes it perfect for scenarios where video sequence matters, such as tutorial series, story-driven content, or seasonal campaigns.

## Usage

### Required Parameters

* `channelId` - Your encoded channel identifier (required, non-empty)
* `playlistId` - Your encoded playlist identifier (required, non-empty)

### XML Configuration

```xml
<com.firework.videofeed.FwVideoFeedView
    android:id="@+id/videoFeedView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
```

### Programmatic Configuration

```kotlin
val viewOptions = viewOptions {
    baseOptions {
        feedResource(
            FeedResource.Playlist(
                channelId = "Your_Encoded_Channel_Id",
                playlistId = "Your_Encoded_Playlist_Id"
            )
        )
    }
    layoutOptions {
        feedLayout(FeedLayout.HORIZONTAL)
    }
}

val videoFeedView = findViewById<FwVideoFeedView>(R.id.videoFeedView)
videoFeedView.init(viewOptions)
```

## Complete Example

```kotlin
class FeaturedPlaylistActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_featured_playlist)
        
        val videoFeedView = findViewById<FwVideoFeedView>(R.id.videoFeedView)
        
        val viewOptions = viewOptions {
            baseOptions {
                feedResource(
                    FeedResource.Playlist(
                        channelId = "encoded_channelId",
                        playlistId = "encoded_playlistId"
                    )
                )
            }
            layoutOptions {
                feedLayout(FeedLayout.GRID)
                columnCount(2)
            }
            titleOptions {
                showFeedTitle(true)
            }
        }
        
        videoFeedView.init(viewOptions)
    }
}
```

## Dynamic Playlist Loading

```kotlin
class PlaylistGalleryActivity : AppCompatActivity() {
    private fun loadPlaylist(channelId: String, playlistId: String) {
        val videoFeedView = findViewById<FwVideoFeedView>(R.id.videoFeedView)
        
        val viewOptions = viewOptions {
            baseOptions {
                feedResource(
                    FeedResource.Playlist(
                        channelId = channelId,
                        playlistId = playlistId
                    )
                )
            }
            layoutOptions {
                feedLayout(FeedLayout.VERTICAL)
            }
        }
        
        videoFeedView.init(viewOptions)
    }
    
    private fun showTutorialSeries() {
        loadPlaylist(
            channelId = "encoded_channelId",
            playlistId = "encoded_playlistId"
        )
    }
    
    private fun showSeasonalContent() {
        loadPlaylist(
            channelId = "encoded_channelId",
            playlistId = "encoded_playlistId"
        )
    }
}
```

## Important Notes

* **Encoded IDs Required** - Both channel and playlist IDs must be encoded values provided by Firework
* **Empty String Exception** - Providing empty IDs will throw an exception
* **Deterministic Order** - Videos maintain their playlist order
* **No Recommendation** - The recommendation engine does not reorder playlist videos
* **Playlist Management** - Playlists can be managed through the Firework CMS

> **Tip:** Refer to the Firework documentation or contact your partner success team to learn how to find your encoded channel ID and playlist ID.

## Key Differences from Channel Feed

| Feature        | Channel Feed              | Playlist Feed                |
| -------------- | ------------------------- | ---------------------------- |
| Video Order    | Algorithmic (recommended) | Deterministic (manual order) |
| Content Source | All channel videos        | Specific playlist videos     |
| Use Case       | General browsing          | Sequential content           |
| Recommendation | ✅ Enabled                 | ❌ Disabled                   |

## See Also

* [Feed Sources Overview](https://docs.firework.com/firework-for-developers/android-sdk/integration-guide/feed-sources) - All available feed types
* [Channel Feed](https://docs.firework.com/firework-for-developers/android-sdk/integration-guide/feed-sources/channel-feed) - Display all videos from a channel
* [BaseOption Configuration](https://docs.firework.com/firework-for-developers/android-sdk/integration-guide/configuration/base-options) - Detailed configuration
* [FwVideoFeedView](https://docs.firework.com/firework-for-developers/android-sdk/integration-guide/configure-video-feed) - Video feed widget
