Package com.castlabs.analytics

## Class AnalyticsSessionProxy

- java.lang.Object
- - com.castlabs.analytics.AnalyticsSessionProxy

- All Implemented Interfaces:
    `AnalyticsSession`, `PlayerControllerPlugin.Component`

      public class AnalyticsSessionProxy
      extends Object
      implements AnalyticsSession

  Proxy implementation of an `AnalyticsSession` that can delegate to a list of session.
  Since:
    3.1.0

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `AnalyticsSessionProxy​(List<AnalyticsSession> sessions)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `adError​(CastlabsPlayerException exception)` | Inform the session that an ad error occurred.
    `void` | `adSkipped()` | Inform the session that the ad is skipped.
    `void` | `adStart​(Ad ad)` | Inform the session that an ad playback started.
    `void` | `adStop()` | Inform the session that an ad playback stopped.
    `void` | `detachFromController()` | Detach the Analytics session from the PlayerController.
    `List<AnalyticsSession>` | `getSessions()` |
    `Class` | `id()` | Returns the class that is used to identify this component when it is registered with the player controller.
    `void` | `onDestroy​(PlayerController playerController)` | Called when the controller is destroyed.
    `void` | `onExoPlayerStateChanged​(boolean playWhenReady, int playbackState)` | Lets the Analytics Sessions know of any state changes in ExoPlayer.
    `void` | `onOpenBundle​(PlayerController playerController, Bundle bundle)` | Called when the player controller is opened with a bundle.
    `void` | `onOpenState​(PlayerController playerController, PlayerConfig playerConfig)` | Called when the player controller is opened with a config.
    `void` | `release()` | Terminate the AnalyticsSession.
    `void` | `seekEnd()` | Inform the session that the seeking has completed.
    `void` | `seekProcessed()` | Inform the session that the requested seek position of the video playback is processed.
    `void` | `seekStart​(long newPosition)` | Inform the session that the new position of the video playback is requested.
    `void` | `sendError​(String code, String message, int severity)` | Send an error manually.
    `void` | `start​(PlayerController playerController, AnalyticsMetaData analyticsMetaData)` | Start the session on the given controller
    `void` | `stop()` | Stop the session.

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AnalyticsSessionProxy

          public AnalyticsSessionProxy​(@Nullable
                                       List<AnalyticsSession> sessions)

  - ### Method Detail

    - #### getSessions

          @Nullable
          public List<AnalyticsSession> getSessions()

    - #### start

          public void start​(@NonNull
                            PlayerController playerController,
                            @NonNull
                            AnalyticsMetaData analyticsMetaData)

      Description copied from interface: `AnalyticsSession`
      Start the session on the given controller
      Specified by:
        `start` in interface `AnalyticsSession`
      Parameters:
        `playerController` - The player controller
        `analyticsMetaData` - The meta-data associated with this session

    - #### stop

          public void stop()

      Description copied from interface: `AnalyticsSession`
      Stop the session.
      Specified by:
        `stop` in interface `AnalyticsSession`

    - #### adStart

          public void adStart​(Ad ad)

      Description copied from interface: `AnalyticsSession`
      Inform the session that an ad playback started.
      Specified by:
        `adStart` in interface `AnalyticsSession`
      Parameters:
        `ad` - The ad metadata. Contains streamType (Either `SdkConsts.AD_EMBEDDED` if the ad is embedded into the content or `SdkConsts.AD_SEPARATE` if the ad is played separate from the main content.), playerType (Either `SdkConsts.AD_EMBEDDED` if the ad is using the same player as the main content or `SdkConsts.AD_SEPARATE` if the ad is played in a separate player and adPosition The ad position. One of `SdkConsts.AD_POSITION_PREROLL` `SdkConsts.AD_POSITION_MIDROLL` , or `SdkConsts.AD_POSITION_POSTROLL`

    - #### adStop

          public void adStop()

      Description copied from interface: `AnalyticsSession`
      Inform the session that an ad playback stopped.
      Specified by:
        `adStop` in interface `AnalyticsSession`

    - #### adError

          public void adError​(CastlabsPlayerException exception)

      Description copied from interface: `AnalyticsSession`
      Inform the session that an ad error occurred.
      Specified by:
        `adError` in interface `AnalyticsSession`
      Parameters:
        `exception` - The error's exception

    - #### adSkipped

          public void adSkipped()

      Description copied from interface: `AnalyticsSession`
      Inform the session that the ad is skipped.
      Specified by:
        `adSkipped` in interface `AnalyticsSession`

    - #### sendError

          public void sendError​(String code,
                                String message,
                                int severity)

      Description copied from interface: `AnalyticsSession`
      Send an error manually. Note that the player integration takes care of playback error occurring during playback. Use this method to send error that happen outside of the playback session.
      Specified by:
        `sendError` in interface `AnalyticsSession`
      Parameters:
        `code` - The error code
        `message` - The error message
        `severity` - The severity of the error

    - #### seekStart

          public void seekStart​(long newPosition)

      Description copied from interface: `AnalyticsSession`
      Inform the session that the new position of the video playback is requested.
      Specified by:
        `seekStart` in interface `AnalyticsSession`
      Parameters:
        `newPosition` - the new position in microseconds

    - #### seekEnd

          public void seekEnd()

      Description copied from interface: `AnalyticsSession`
      Inform the session that the seeking has completed.

      Triggered when the player is ready to continue playback by transitioning to either `PlayerController.State.Playing` or `PlayerController.State.Pausing`.

      Specified by:
        `seekEnd` in interface `AnalyticsSession`

    - #### seekProcessed

          public void seekProcessed()

      Description copied from interface: `AnalyticsSession`
      Inform the session that the requested seek position of the video playback is processed. This is called right after the player has updated the internal playback position.
      Specified by:
        `seekProcessed` in interface `AnalyticsSession`

    - #### detachFromController

          public void detachFromController()

      Description copied from interface: `AnalyticsSession`
      Detach the Analytics session from the PlayerController. Unregister listeners and remove any references.

      This method allows to unbind the AnalyticsSession from a PlayerController, to later set it to a new controller and continue with the same analytics session.

      Should be called by client code after getting the AnalyticsSession via `PlayerController.getAnalyticsSession()` , and before releasing the PlayerController.

      You can later re-attach the AnalyticsSession to a PlayerController before `opening` it with the `PlayerController.setAnalyticsSession(AnalyticsSession)` method

      Specified by:
        `detachFromController` in interface `AnalyticsSession`

    - #### release

          public void release()

      Description copied from interface: `AnalyticsSession`
      Terminate the AnalyticsSession. Although implementation is vendor-specific, this method will terminate any ongoing session as if the player itself had been destroyed. Generally, there's no need to call this manually. Unless you're detaching the session and not reusing it later.
      Specified by:
        `release` in interface `AnalyticsSession`

    - #### onExoPlayerStateChanged

          public void onExoPlayerStateChanged​(boolean playWhenReady,
                                              int playbackState)

      Description copied from interface: `AnalyticsSession`
      Lets the Analytics Sessions know of any state changes in ExoPlayer.

      This method allows any interested Analytics sessions to know of any changes in the ExoPlayer even if it doesn't correspond to any state changes in the PlayerController.

      Specified by:
        `onExoPlayerStateChanged` in interface `AnalyticsSession`

    - #### id

          @NonNull
          public Class id()

      Description copied from interface: `PlayerControllerPlugin.Component`
      Returns the class that is used to identify this component when it is registered with the player controller. This is what you need to pass to `PlayerController.getComponent(Class)` to get the registered instance of this component.
      Specified by:
        `id` in interface `PlayerControllerPlugin.Component`
      Returns:
        The class that identifies this component.

    - #### onDestroy

          public void onDestroy​(@NonNull
                                PlayerController playerController)

      Description copied from interface: `PlayerControllerPlugin.Component`
      Called when the controller is destroyed. Implementation must use this to unregister any listeners that were attached to the controller before.
      Specified by:
        `onDestroy` in interface `PlayerControllerPlugin.Component`
      Parameters:
        `playerController` - The player controller

    - #### onOpenBundle

          public void onOpenBundle​(@NonNull
                                   PlayerController playerController,
                                   @NonNull
                                   Bundle bundle)

      Description copied from interface: `PlayerControllerPlugin.Component`
      Called when the player controller is opened with a bundle. Implementations can use this to extract or modify bundle data.
      Specified by:
        `onOpenBundle` in interface `PlayerControllerPlugin.Component`
      Parameters:
        `playerController` - The player controller
        `bundle` - The bundle

    - #### onOpenState

          public void onOpenState​(PlayerController playerController,
                                  PlayerConfig playerConfig)

      Description copied from interface: `PlayerControllerPlugin.Component`
      Called when the player controller is opened with a config. Implementations can use this to extract or modify config data.
      Specified by:
        `onOpenState` in interface `PlayerControllerPlugin.Component`
      Parameters:
        `playerController` - The player controller
        `playerConfig` - The playback state