Package com.castlabs.android.player.playlist

## Interface MultiControllerPlaylist.PlaylistListener

- All Known Implementing Classes:
    `MultiControllerPlaylist.AbstractPlaylistListener`
  Enclosing class:
    MultiControllerPlaylist

      public static interface MultiControllerPlaylist.PlaylistListener

  Playlist-related events listener.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `onControllerCreate​(PlayerController playerController)` | Called when a `PlayerController` is created.
    `void` | `onControllerDestroy​(PlayerController playerController)` | Player controller is destroyed.
    `void` | `onControllerError​(PlayerController controller, CastlabsPlayerException error, PlayerConfig config)` | Called if a `PlayerController` fires an error.
    `PlayerConfig` | `onControllerLoad​(PlayerConfig config, PlayerController playerController)` | Called right before starting to load an item into the given `PlayerController`.
    `void` | `onControllerRelease​(PlayerController playerController)` | Player controller is released.
    `void` | `onItemChange​(PlayerConfig newConfig, PlayerController oldController, PlayerController newController)` | Called every time a new playlist item is about to start.
    `void` | `onPlaylistEndReached​(boolean willLoop)` | Called whenever the MultiControllerPlaylist has played the last item in the playlist.

- - ### Method Detail

    - #### onItemChange

          void onItemChange​(@NonNull
                            PlayerConfig newConfig,
                            @Nullable
                            PlayerController oldController,
                            @Nullable
                            PlayerController newController)

      Called every time a new playlist item is about to start. As the internal implementation uses two separate `PlayerControllers`, the client code should take care of binding / unbinding the appropriate listeners and UI elements.

      This method will be also called for the first element in the playlist, with a null oldController.

      You can use `MultiControllerPlaylist.migratePlayerListeners(PlayerController, PlayerController)` to remove player listeners from the old PlayerController and add them to the new one.

      Parameters:
        `newConfig` - The config representing the new playlist item, which is about to be played.
        `oldController` - Old PlayerController. Should be used to unbind listeners and UI elements.
        `newController` - New PlayerController, where playback will happen.

    - #### onControllerCreate

          void onControllerCreate​(@NonNull
                                  PlayerController playerController)

      Called when a `PlayerController` is created.
      Parameters:
        `playerController` - the PlayerController just created

    - #### onControllerLoad

          @Nullable
          PlayerConfig onControllerLoad​(@NonNull
                                        PlayerConfig config,
                                        @NonNull
                                        PlayerController playerController)

      Called right before starting to load an item into the given `PlayerController`.

      This controller could be in background at the moment and getting ready to play the next item.

      Parameters:
        `config` - the `PlayerConfig` that is going to be loaded onto the controller.
        `playerController` - the controller which is going to load the config.
      Returns:
        `PlayerConfig` that the Controller will load. You can use this method to create a modified Config from the param. If null, the original config will be used.

    - #### onControllerRelease

          void onControllerRelease​(@NonNull
                                   PlayerController playerController)

      Player controller is released. This means the controller is no longer loading / playing an item.
      Parameters:
        `playerController` - the controller being released

    - #### onControllerDestroy

          void onControllerDestroy​(@NonNull
                                   PlayerController playerController)

      Player controller is destroyed. This means the controller will no longer be used.
      Parameters:
        `playerController` - the controller being destroyed.

    - #### onControllerError

          void onControllerError​(@NonNull
                                 PlayerController controller,
                                 @NonNull
                                 CastlabsPlayerException error,
                                 @NonNull
                                 PlayerConfig config)

      Called if a `PlayerController` fires an error. This controller could be in background and pre-loading an item, or it could be the current controller.
      Parameters:
        `controller` - the controller firing the error
        `error` - the error
        `config` - the `PlayerConfig` which is loaded onto the error-firing controller.

    - #### onPlaylistEndReached

          void onPlaylistEndReached​(boolean willLoop)

      Called whenever the MultiControllerPlaylist has played the last item in the playlist.

      This will also be triggered by calling `MultiControllerPlaylist.nextItem()` while already playing the last item.

      Parameters:
        `willLoop` - whether the Playlist will `MultiControllerPlaylist.enableLooping(boolean)`loop and start over from the first item or not.