Package com.castlabs.android.player

## Class VisualComponentProxy

- java.lang.Object
- - com.castlabs.android.player.VisualComponentProxy

- All Implemented Interfaces:
    `PlayerControllerPlugin.Component`, `PlayerControllerPlugin.ComponentViewListener`, `PlayerControllerPlugin.VisualComponent`
  Direct Known Subclasses:
    `ExoSubtitlesRendererPlugin.ExoSubtitleComponent`

      public abstract class VisualComponentProxy
      extends Object
      implements PlayerControllerPlugin.VisualComponent

  VisualComponent whose task is to communicate a `PlayerControllerPlugin.ComponentViewListener` with the `PlayerControllerPlugin.Component` machinery.

  Here we forward the events to a PlayerControllerPlugin.ComponentViewListener. Thus giving it a chance to update its inner `View`.

  We also take care of async calls. For instance, the SubtitlesTrackRenderer will set the `listener` in its createRenderer() call. This is too late, for instance in the case where the client code uses `PlayerController.scanComponentViews(ViewGroup)`. In this case, we would be called `scanComponentViews(ViewGroup)` before having a `componentsViewListener`.

  That's why we save the ViewGroup and forward the pending call to the `listener` as soon as it is set.

  Users of this Class should implement the `PlayerControllerPlugin.Component.id()` method returning the concrete Class's class. This is why you should *not* create anonymous concrete Classes.

  Since:
    4.2.2

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `VisualComponentProxy()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `onComponentViewsChanged​(PlayerController playerController)` | Called whenever the list of ComponentViews in the `PlayerController` has changed.
    `void` | `onDestroy​(PlayerController playerController)` | Called when the controller is destroyed.
    `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.
    `Collection<Pair<Integer,​View>>` | `scanComponentViews​(ViewGroup container)` | Implementors should scan for the "desired" Views.
    `void` | `setComponentViewListener​(PlayerControllerPlugin.ComponentViewListener componentsViewListener)` | Sets the Listener.

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

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

    - ### Methods inherited from interface com.castlabs.android.player.PlayerControllerPlugin.Component

      `id`

- - ### Constructor Detail

    - #### VisualComponentProxy

          public VisualComponentProxy()

  - ### Method Detail

    - #### 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

    - #### onComponentViewsChanged

          public void onComponentViewsChanged​(@NonNull
                                              PlayerController playerController)

      Description copied from interface: `PlayerControllerPlugin.ComponentViewListener`
      Called whenever the list of ComponentViews in the `PlayerController` has changed. This is whenever a View is added, or removed. Implementors should use this callback to detach from an old View (if any) and attach to the new one (if any). It is possible that there's actually no change affecting one particular ComponentViewListener. In this case the callback should just be ignored.
      Specified by:
        `onComponentViewsChanged` in interface `PlayerControllerPlugin.ComponentViewListener`
      Parameters:
        `playerController` - the PlayerController firing this event.

    - #### scanComponentViews

          public Collection<Pair<Integer,​View>> scanComponentViews​(@NonNull
                                                                         ViewGroup container)

      Description copied from interface: `PlayerControllerPlugin.ComponentViewListener`
      Implementors should scan for the "desired" Views. The Views could be at any hierarchy level, so the use of `View.findViewById(int)` is encouraged. You *should not* hold a reference to the found Views.
      Specified by:
        `scanComponentViews` in interface `PlayerControllerPlugin.ComponentViewListener`
      Parameters:
        `container` - the ViewGroup where there specific Views should be looked for.
      Returns:
        a Collection of the found Views in the container

    - #### setComponentViewListener

          public void setComponentViewListener​(PlayerControllerPlugin.ComponentViewListener componentsViewListener)

      Sets the Listener.

      Will be immediately called if there's a pending `scanComponentViews(ViewGroup)` call.

      Parameters:
        `componentsViewListener` - the listener to set