Package com.castlabs.android.player

## Class PlayerView

- java.lang.Object
- - android.view.View
  - - android.view.ViewGroup
    - - android.widget.FrameLayout
      - - com.castlabs.android.player.PlayerView

- All Implemented Interfaces:
    `Drawable.Callback`, `AccessibilityEventSource`, `KeyEvent.Callback`, `ViewManager`, `ViewParent`, `IPlayerView`

      public class PlayerView
      extends FrameLayout
      implements IPlayerView

  The CastLabs PlayerView is a custom view that provides the video playback surface.

  You can add this view to an activity and access the `PlayerController` to gain control over the player.

  Note that the view needs to react to certain activity lifecycle events to be able to start, stop, and resume playback when the activity is paused or resumed. The underlying `PlayerController` also needs to be shut down when the hosting activity is destroyed.

  The view offers a lifecycle helper class (see `PlayerViewLifecycleDelegate`) to simplify the integration, but you will need to hook up the events in the hosting activity. For this, overwrite the following methods in the hosting activity and delegate to the lifecycle listener:

       @Override
        protected void onStart() {
            super.onStart();
            playerView.getLifecycleDelegate().start(this);
        }

       @Override
        protected void onResume() {
            super.onResume();
            playerView.getLifecycleDelegate().resume();
        }

       @Override
        protected void onStop() {
            super.onStop();
            playerView.getLifecycleDelegate().releasePlayer(false);
        }

  Please note that the example above does not deal with background playback. Please take a look at `PlayerService` to see how to integrate the lifecycle events when you are using a service and want to enable background playback. Note also the `PlayerViewLifecycleDelegate` does not deal with the use-case when the activity is destroyed and then re-created with the saved state. For this to work, the client application should save the state manually in `onSaveInstanceState` and then use it when the activity is re-created in `onCreate`:

       @Override
       public void onSaveInstanceState(Bundle outState) {
                      Bundle savedStateBundle = new Bundle();
                      PlayerConfig playerConfig = playerView.getPlayerController().getPlayerConfig();
                      if (playerConfig != null) {
                              playerView.getPlayerController().getPlayerConfig().save(savedStateBundle);
                              outState.putBundle(SAVED_PLAYBACK_STATE_BUNDLE_KEY, savedStateBundle);
                      }
                      super.onSaveInstanceState(outState);
       }

       @Override
       protected void onCreate(Bundle savedInstanceState) {
                      ...
                      Bundle playbackBundle = null;
                      if (savedInstanceState == null) {
                              Log.d(TAG, "Opening playback initially");
                              playbackBundle = ...
                      } else {
                              Log.d(TAG, "Opening playback from the saved state bundle");
                              playbackBundle = savedInstanceState.getBundle(SAVED_PLAYBACK_STATE_BUNDLE_KEY);
                      }
                      ...
                      playerView.getPlayerController().open(playbackBundle);
       }

  Since:
    1.1.0

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static interface` | `PlayerView.ScalingMode` |
    `static interface` | `PlayerView.SurfaceType` |

    - ### Nested classes/interfaces inherited from class android.widget.FrameLayout

      `FrameLayout.LayoutParams`

    - ### Nested classes/interfaces inherited from class android.view.ViewGroup

      `ViewGroup.MarginLayoutParams, ViewGroup.OnHierarchyChangeListener`

    - ### Nested classes/interfaces inherited from class android.view.View

      `View.AccessibilityDelegate, View.BaseSavedState, View.DragShadowBuilder, View.MeasureSpec, View.OnApplyWindowInsetsListener, View.OnAttachStateChangeListener, View.OnCapturedPointerListener, View.OnClickListener, View.OnContextClickListener, View.OnCreateContextMenuListener, View.OnDragListener, View.OnFocusChangeListener, View.OnGenericMotionListener, View.OnHoverListener, View.OnKeyListener, View.OnLayoutChangeListener, View.OnLongClickListener, View.OnScrollChangeListener, View.OnSystemUiVisibilityChangeListener, View.OnTouchListener, View.OnUnhandledKeyEventListener`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `SCALING_MODE_CROP` | The video will be displayed in its original size.
    `static int` | `SCALING_MODE_FIT` | The video will be scaled using its original aspect ration to fit on the devices screen.
    `static int` | `SCALING_MODE_STRETCH` | The video will be scaled to fully utilize the available screen size.
    `static int` | `SURFACE_SURFACE_VIEW` | Indicates the use of a `SurfaceView` to provide the rendering surface for this player view.
    `static int` | `SURFACE_TEXTURE_VIEW` | Indicates the use of a `TextureView` to provide the rendering surface for this player view.

    - ### Fields inherited from class android.view.ViewGroup

      `FOCUS_AFTER_DESCENDANTS, FOCUS_BEFORE_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS, LAYOUT_MODE_CLIP_BOUNDS, LAYOUT_MODE_OPTICAL_BOUNDS, PERSISTENT_ALL_CACHES, PERSISTENT_ANIMATION_CACHE, PERSISTENT_NO_CACHE, PERSISTENT_SCROLLING_CACHE`

    - ### Fields inherited from class android.view.View

      `ACCESSIBILITY_LIVE_REGION_ASSERTIVE, ACCESSIBILITY_LIVE_REGION_NONE, ACCESSIBILITY_LIVE_REGION_POLITE, ALPHA, AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR, AUTOFILL_HINT_CREDIT_CARD_NUMBER, AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE, AUTOFILL_HINT_EMAIL_ADDRESS, AUTOFILL_HINT_NAME, AUTOFILL_HINT_PASSWORD, AUTOFILL_HINT_PHONE, AUTOFILL_HINT_POSTAL_ADDRESS, AUTOFILL_HINT_POSTAL_CODE, AUTOFILL_HINT_USERNAME, AUTOFILL_TYPE_DATE, AUTOFILL_TYPE_LIST, AUTOFILL_TYPE_NONE, AUTOFILL_TYPE_TEXT, AUTOFILL_TYPE_TOGGLE, DRAG_FLAG_ACCESSIBILITY_ACTION, DRAG_FLAG_GLOBAL, DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION, DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION, DRAG_FLAG_GLOBAL_URI_READ, DRAG_FLAG_GLOBAL_URI_WRITE, DRAG_FLAG_OPAQUE, DRAWING_CACHE_QUALITY_AUTO, DRAWING_CACHE_QUALITY_HIGH, DRAWING_CACHE_QUALITY_LOW, FIND_VIEWS_WITH_CONTENT_DESCRIPTION, FIND_VIEWS_WITH_TEXT, FOCUS_BACKWARD, FOCUS_DOWN, FOCUS_FORWARD, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_UP, FOCUSABLE, FOCUSABLE_AUTO, FOCUSABLES_ALL, FOCUSABLES_TOUCH_MODE, GONE, HAPTIC_FEEDBACK_ENABLED, IMPORTANT_FOR_ACCESSIBILITY_AUTO, IMPORTANT_FOR_ACCESSIBILITY_NO, IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, IMPORTANT_FOR_ACCESSIBILITY_YES, IMPORTANT_FOR_AUTOFILL_AUTO, IMPORTANT_FOR_AUTOFILL_NO, IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS, IMPORTANT_FOR_AUTOFILL_YES, IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS, IMPORTANT_FOR_CONTENT_CAPTURE_AUTO, IMPORTANT_FOR_CONTENT_CAPTURE_NO, IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS, IMPORTANT_FOR_CONTENT_CAPTURE_YES, IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS, INVISIBLE, KEEP_SCREEN_ON, LAYER_TYPE_HARDWARE, LAYER_TYPE_NONE, LAYER_TYPE_SOFTWARE, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_RTL, MEASURED_HEIGHT_STATE_SHIFT, MEASURED_SIZE_MASK, MEASURED_STATE_MASK, MEASURED_STATE_TOO_SMALL, NO_ID, NOT_FOCUSABLE, OVER_SCROLL_ALWAYS, OVER_SCROLL_IF_CONTENT_SCROLLS, OVER_SCROLL_NEVER, ROTATION, ROTATION_X, ROTATION_Y, SCALE_X, SCALE_Y, SCREEN_STATE_OFF, SCREEN_STATE_ON, SCROLL_AXIS_HORIZONTAL, SCROLL_AXIS_NONE, SCROLL_AXIS_VERTICAL, SCROLL_CAPTURE_HINT_AUTO, SCROLL_CAPTURE_HINT_EXCLUDE, SCROLL_CAPTURE_HINT_EXCLUDE_DESCENDANTS, SCROLL_CAPTURE_HINT_INCLUDE, SCROLL_INDICATOR_BOTTOM, SCROLL_INDICATOR_END, SCROLL_INDICATOR_LEFT, SCROLL_INDICATOR_RIGHT, SCROLL_INDICATOR_START, SCROLL_INDICATOR_TOP, SCROLLBAR_POSITION_DEFAULT, SCROLLBAR_POSITION_LEFT, SCROLLBAR_POSITION_RIGHT, SCROLLBARS_INSIDE_INSET, SCROLLBARS_INSIDE_OVERLAY, SCROLLBARS_OUTSIDE_INSET, SCROLLBARS_OUTSIDE_OVERLAY, SOUND_EFFECTS_ENABLED, STATUS_BAR_HIDDEN, STATUS_BAR_VISIBLE, SYSTEM_UI_FLAG_FULLSCREEN, SYSTEM_UI_FLAG_HIDE_NAVIGATION, SYSTEM_UI_FLAG_IMMERSIVE, SYSTEM_UI_FLAG_IMMERSIVE_STICKY, SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION, SYSTEM_UI_FLAG_LAYOUT_STABLE, SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR, SYSTEM_UI_FLAG_LOW_PROFILE, SYSTEM_UI_FLAG_VISIBLE, SYSTEM_UI_LAYOUT_FLAGS, TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_GRAVITY, TEXT_ALIGNMENT_INHERIT, TEXT_ALIGNMENT_TEXT_END, TEXT_ALIGNMENT_TEXT_START, TEXT_ALIGNMENT_VIEW_END, TEXT_ALIGNMENT_VIEW_START, TEXT_DIRECTION_ANY_RTL, TEXT_DIRECTION_FIRST_STRONG, TEXT_DIRECTION_FIRST_STRONG_LTR, TEXT_DIRECTION_FIRST_STRONG_RTL, TEXT_DIRECTION_INHERIT, TEXT_DIRECTION_LOCALE, TEXT_DIRECTION_LTR, TEXT_DIRECTION_RTL, TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, VISIBLE, X, Y, Z`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `PlayerView​(Context context)` |
    `PlayerView​(Context context, AttributeSet attrs)` |
    `PlayerView​(Context context, AttributeSet attrs, int defStyle)` |
    `PlayerView​(Context context, AttributeSet attrs, int defStyle, boolean withAnalytics)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `dispatchKeyEvent​(KeyEvent event)` |
    `<T> T` | `getComponent​(Class<T> type)` | Returns the player view component of the given type if it exists.
    `View` | `getComponentView​(int viewId)` | Returns the component View linked to the provided id
    `PlayerViewLifecycleDelegate` | `getLifecycleDelegate()` | This method must return an instance of the `PlayerViewLifecycleDelegate`.
    `PlayerController` | `getPlayerController()` | Access the `PlayerController` that can be used to interact with this view.
    `ViewGroup` | `getRootView()` | Retrieve the root view of the current `IPlayerView` implementation.
    `int` | `getScalingMode()` |
    `ViewGroup` | `getVideoView()` | Retrieve the video container view of the current `IPlayerView` implementation.
    `Pair<Integer,​Integer>` | `measureSize​(int measuredWidth, int measuredHeight)` |
    `void` | `prepareSurface()` | This method is called by the `PlayerController` once the player and the renderer are available.
    `void` | `removeSurface()` | This method is called by the `PlayerController` once the player is released.
    `void` | `setPlayerController​(PlayerController playerController)` | Set the player controller used by this view.
    `void` | `setScalingMode​(int scalingMode)` | Sets the new scaling mode to one of `SCALING_MODE_FIT`, `SCALING_MODE_CROP`, or `SCALING_MODE_STRETCH`.
    `void` | `setSurfaceType​(int surfaceType)` | Set the surface type to one of `SURFACE_SURFACE_VIEW` or `SURFACE_TEXTURE_VIEW` to specify the type of surface that will be used to render the video content.
    `void` | `setSurfaceVisibility​(boolean visible)` | If you pass true to this method, the current surface view will be scaled to zero size to hide it from the screen but keep it alive.
    `void` | `setVisible​(boolean visible)` | Allow to show ore hide this player view.
    `PlayerController` | `tryPlayerController()` | Returns the current instance of the `PlayerController` that is used by this view.

    - ### Methods inherited from class android.widget.FrameLayout

      `generateLayoutParams, getAccessibilityClassName, getConsiderGoneChildrenWhenMeasuring, getMeasureAllChildren, setForegroundGravity, setMeasureAllChildren, shouldDelayChildPressedState`

    - ### Methods inherited from class android.view.ViewGroup

      `addChildrenForAccessibility, addExtraDataToAccessibilityNodeInfo, addFocusables, addKeyboardNavigationClusters, addStatesFromChildren, addTouchables, addView, addView, addView, addView, addView, bringChildToFront, childDrawableStateChanged, childHasTransientStateChanged, clearChildFocus, clearDisappearingChildren, clearFocus, dispatchApplyWindowInsets, dispatchCapturedPointerEvent, dispatchConfigurationChanged, dispatchCreateViewTranslationRequest, dispatchDisplayHint, dispatchDragEvent, dispatchDrawableHotspotChanged, dispatchFinishTemporaryDetach, dispatchKeyEventPreIme, dispatchKeyShortcutEvent, dispatchPointerCaptureChanged, dispatchProvideAutofillStructure, dispatchProvideStructure, dispatchScrollCaptureSearch, dispatchSetActivated, dispatchSetSelected, dispatchStartTemporaryDetach, dispatchSystemUiVisibilityChanged, dispatchTouchEvent, dispatchTrackballEvent, dispatchUnhandledMove, dispatchWindowFocusChanged, dispatchWindowInsetsAnimationEnd, dispatchWindowInsetsAnimationPrepare, dispatchWindowInsetsAnimationProgress, dispatchWindowInsetsAnimationStart, dispatchWindowSystemUiVisiblityChanged, dispatchWindowVisibilityChanged, endViewTransition, findFocus, findViewsWithText, focusableViewAvailable, focusSearch, gatherTransparentRegion, getChildAt, getChildCount, getChildDrawingOrder, getChildMeasureSpec, getChildVisibleRect, getClipChildren, getClipToPadding, getDescendantFocusability, getFocusedChild, getLayoutAnimation, getLayoutAnimationListener, getLayoutMode, getLayoutTransition, getNestedScrollAxes, getOverlay, getPersistentDrawingCache, getTouchscreenBlocksFocus, hasFocus, hasTransientState, indexOfChild, invalidateChild, invalidateChildInParent, isAlwaysDrawnWithCacheEnabled, isAnimationCacheEnabled, isLayoutSuppressed, isMotionEventSplittingEnabled, isTransitionGroup, jumpDrawablesToCurrentState, layout, notifySubtreeAccessibilityStateChanged, offsetDescendantRectToMyCoords, offsetRectIntoDescendantCoords, onDescendantInvalidated, onInterceptHoverEvent, onInterceptTouchEvent, onNestedFling, onNestedPreFling, onNestedPrePerformAccessibilityAction, onNestedPreScroll, onNestedScroll, onNestedScrollAccepted, onRequestSendAccessibilityEvent, onResolvePointerIcon, onStartNestedScroll, onStopNestedScroll, onViewAdded, onViewRemoved, recomputeViewAttributes, removeAllViews, removeAllViewsInLayout, removeView, removeViewAt, removeViewInLayout, removeViews, removeViewsInLayout, requestChildFocus, requestChildRectangleOnScreen, requestDisallowInterceptTouchEvent, requestFocus, requestSendAccessibilityEvent, requestTransparentRegion, restoreDefaultFocus, scheduleLayoutAnimation, setAddStatesFromChildren, setAlwaysDrawnWithCacheEnabled, setAnimationCacheEnabled, setClipChildren, setClipToPadding, setDescendantFocusability, setLayoutAnimation, setLayoutAnimationListener, setLayoutMode, setLayoutTransition, setMotionEventSplittingEnabled, setOnHierarchyChangeListener, setPersistentDrawingCache, setTouchscreenBlocksFocus, setTransitionGroup, setWindowInsetsAnimationCallback, showContextMenuForChild, showContextMenuForChild, startActionModeForChild, startActionModeForChild, startLayoutAnimation, startViewTransition, suppressLayout, updateViewLayout`

    - ### Methods inherited from class android.view.View

      `addFocusables, addOnAttachStateChangeListener, addOnLayoutChangeListener, addOnUnhandledKeyEventListener, animate, announceForAccessibility, autofill, autofill, bringToFront, buildDrawingCache, buildDrawingCache, buildLayer, callOnClick, cancelDragAndDrop, cancelLongPress, cancelPendingInputEvents, canResolveLayoutDirection, canResolveTextAlignment, canResolveTextDirection, canScrollHorizontally, canScrollVertically, checkInputConnectionProxy, clearAnimation, clearViewTranslationCallback, combineMeasuredStates, computeScroll, computeSystemWindowInsets, createAccessibilityNodeInfo, createContextMenu, destroyDrawingCache, dispatchGenericMotionEvent, dispatchNestedFling, dispatchNestedPreFling, dispatchNestedPrePerformAccessibilityAction, dispatchNestedPreScroll, dispatchNestedScroll, dispatchPopulateAccessibilityEvent, draw, drawableHotspotChanged, findViewById, findViewWithTag, focusSearch, forceHasOverlappingRendering, forceLayout, generateDisplayHash, generateViewId, getAccessibilityDelegate, getAccessibilityLiveRegion, getAccessibilityNodeProvider, getAccessibilityPaneTitle, getAccessibilityTraversalAfter, getAccessibilityTraversalBefore, getAlpha, getAnimation, getAnimationMatrix, getApplicationWindowToken, getAttributeResolutionStack, getAttributeSourceResourceMap, getAutofillHints, getAutofillId, getAutofillType, getAutofillValue, getBackground, getBackgroundTintBlendMode, getBackgroundTintList, getBackgroundTintMode, getBaseline, getBottom, getCameraDistance, getClipBounds, getClipBounds, getClipToOutline, getContentCaptureSession, getContentDescription, getContext, getDefaultFocusHighlightEnabled, getDefaultSize, getDisplay, getDrawableState, getDrawingCache, getDrawingCache, getDrawingCacheBackgroundColor, getDrawingCacheQuality, getDrawingRect, getDrawingTime, getElevation, getExplicitStyle, getFilterTouchesWhenObscured, getFitsSystemWindows, getFocusable, getFocusables, getFocusedRect, getForeground, getForegroundGravity, getForegroundTintBlendMode, getForegroundTintList, getForegroundTintMode, getGlobalVisibleRect, getGlobalVisibleRect, getHandler, getHasOverlappingRendering, getHeight, getHitRect, getHorizontalFadingEdgeLength, getHorizontalScrollbarThumbDrawable, getHorizontalScrollbarTrackDrawable, getId, getImportantForAccessibility, getImportantForAutofill, getImportantForContentCapture, getKeepScreenOn, getKeyDispatcherState, getLabelFor, getLayerType, getLayoutDirection, getLayoutParams, getLeft, getLocalVisibleRect, getLocationInSurface, getLocationInWindow, getLocationOnScreen, getMatrix, getMeasuredHeight, getMeasuredHeightAndState, getMeasuredState, getMeasuredWidth, getMeasuredWidthAndState, getMinimumHeight, getMinimumWidth, getNextClusterForwardId, getNextFocusDownId, getNextFocusForwardId, getNextFocusLeftId, getNextFocusRightId, getNextFocusUpId, getOnFocusChangeListener, getOutlineAmbientShadowColor, getOutlineProvider, getOutlineSpotShadowColor, getOverScrollMode, getPaddingBottom, getPaddingEnd, getPaddingLeft, getPaddingRight, getPaddingStart, getPaddingTop, getParent, getParentForAccessibility, getPivotX, getPivotY, getPointerIcon, getReceiveContentMimeTypes, getResources, getRevealOnFocusHint, getRight, getRootSurfaceControl, getRootWindowInsets, getRotation, getRotationX, getRotationY, getScaleX, getScaleY, getScrollBarDefaultDelayBeforeFade, getScrollBarFadeDuration, getScrollBarSize, getScrollBarStyle, getScrollCaptureHint, getScrollIndicators, getScrollX, getScrollY, getSolidColor, getSourceLayoutResId, getStateDescription, getStateListAnimator, getSystemGestureExclusionRects, getSystemUiVisibility, getTag, getTag, getTextAlignment, getTextDirection, getTooltipText, getTop, getTouchables, getTouchDelegate, getTransitionAlpha, getTransitionName, getTranslationX, getTranslationY, getTranslationZ, getUniqueDrawingId, getVerticalFadingEdgeLength, getVerticalScrollbarPosition, getVerticalScrollbarThumbDrawable, getVerticalScrollbarTrackDrawable, getVerticalScrollbarWidth, getViewTranslationResponse, getViewTreeObserver, getVisibility, getWidth, getWindowId, getWindowInsetsController, getWindowSystemUiVisibility, getWindowToken, getWindowVisibility, getWindowVisibleDisplayFrame, getX, getY, getZ, hasExplicitFocusable, hasFocusable, hasNestedScrollingParent, hasOnClickListeners, hasOnLongClickListeners, hasOverlappingRendering, hasPointerCapture, hasWindowFocus, inflate, invalidate, invalidate, invalidate, invalidateDrawable, invalidateOutline, isAccessibilityFocused, isAccessibilityHeading, isActivated, isAttachedToWindow, isClickable, isContextClickable, isDirty, isDrawingCacheEnabled, isDuplicateParentStateEnabled, isEnabled, isFocusable, isFocusableInTouchMode, isFocused, isFocusedByDefault, isForceDarkAllowed, isHapticFeedbackEnabled, isHardwareAccelerated, isHorizontalFadingEdgeEnabled, isHorizontalScrollBarEnabled, isHovered, isImportantForAccessibility, isImportantForAutofill, isImportantForContentCapture, isInEditMode, isInLayout, isInTouchMode, isKeyboardNavigationCluster, isLaidOut, isLayoutDirectionResolved, isLayoutRequested, isLongClickable, isNestedScrollingEnabled, isOpaque, isPaddingRelative, isPivotSet, isPressed, isSaveEnabled, isSaveFromParentEnabled, isScreenReaderFocusable, isScrollbarFadingEnabled, isScrollContainer, isSelected, isShowingLayoutBounds, isShown, isSoundEffectsEnabled, isTemporarilyDetached, isTextAlignmentResolved, isTextDirectionResolved, isVerticalFadingEdgeEnabled, isVerticalScrollBarEnabled, isVisibleToUserForAutofill, keyboardNavigationClusterSearch, measure, offsetLeftAndRight, offsetTopAndBottom, onApplyWindowInsets, onCancelPendingInputEvents, onCapturedPointerEvent, onCheckIsTextEditor, onCreateInputConnection, onCreateViewTranslationRequest, onCreateVirtualViewTranslationRequests, onDragEvent, onDrawForeground, onFilterTouchEventForSecurity, onFinishTemporaryDetach, onGenericMotionEvent, onHoverChanged, onHoverEvent, onInitializeAccessibilityEvent, onInitializeAccessibilityNodeInfo, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyPreIme, onKeyShortcut, onKeyUp, onPointerCaptureChange, onPopulateAccessibilityEvent, onProvideAutofillStructure, onProvideAutofillVirtualStructure, onProvideContentCaptureStructure, onProvideStructure, onProvideVirtualStructure, onReceiveContent, onRtlPropertiesChanged, onScreenStateChanged, onScrollCaptureSearch, onStartTemporaryDetach, onTouchEvent, onTrackballEvent, onViewTranslationResponse, onVirtualViewTranslationResponses, onVisibilityAggregated, onWindowFocusChanged, onWindowSystemUiVisibilityChanged, performAccessibilityAction, performClick, performContextClick, performContextClick, performHapticFeedback, performHapticFeedback, performLongClick, performLongClick, performReceiveContent, playSoundEffect, post, postDelayed, postInvalidate, postInvalidate, postInvalidateDelayed, postInvalidateDelayed, postInvalidateOnAnimation, postInvalidateOnAnimation, postOnAnimation, postOnAnimationDelayed, refreshDrawableState, releasePointerCapture, removeCallbacks, removeOnAttachStateChangeListener, removeOnLayoutChangeListener, removeOnUnhandledKeyEventListener, requestApplyInsets, requestFitSystemWindows, requestFocus, requestFocus, requestFocusFromTouch, requestLayout, requestPointerCapture, requestRectangleOnScreen, requestRectangleOnScreen, requestUnbufferedDispatch, requestUnbufferedDispatch, requireViewById, resetPivot, resolveSize, resolveSizeAndState, restoreHierarchyState, saveAttributeDataForStyleable, saveHierarchyState, scheduleDrawable, scrollBy, scrollTo, sendAccessibilityEvent, sendAccessibilityEventUnchecked, setAccessibilityDelegate, setAccessibilityHeading, setAccessibilityLiveRegion, setAccessibilityPaneTitle, setAccessibilityTraversalAfter, setAccessibilityTraversalBefore, setActivated, setAllowClickWhenDisabled, setAlpha, setAnimation, setAnimationMatrix, setAutofillHints, setAutofillId, setBackground, setBackgroundColor, setBackgroundDrawable, setBackgroundResource, setBackgroundTintBlendMode, setBackgroundTintList, setBackgroundTintMode, setBottom, setCameraDistance, setClickable, setClipBounds, setClipToOutline, setContentCaptureSession, setContentDescription, setContextClickable, setDefaultFocusHighlightEnabled, setDrawingCacheBackgroundColor, setDrawingCacheEnabled, setDrawingCacheQuality, setDuplicateParentStateEnabled, setElevation, setEnabled, setFadingEdgeLength, setFilterTouchesWhenObscured, setFitsSystemWindows, setFocusable, setFocusable, setFocusableInTouchMode, setFocusedByDefault, setForceDarkAllowed, setForeground, setForegroundTintBlendMode, setForegroundTintList, setForegroundTintMode, setHapticFeedbackEnabled, setHasTransientState, setHorizontalFadingEdgeEnabled, setHorizontalScrollBarEnabled, setHorizontalScrollbarThumbDrawable, setHorizontalScrollbarTrackDrawable, setHovered, setId, setImportantForAccessibility, setImportantForAutofill, setImportantForContentCapture, setKeepScreenOn, setKeyboardNavigationCluster, setLabelFor, setLayerPaint, setLayerType, setLayoutDirection, setLayoutParams, setLeft, setLeftTopRightBottom, setLongClickable, setMinimumHeight, setMinimumWidth, setNestedScrollingEnabled, setNextClusterForwardId, setNextFocusDownId, setNextFocusForwardId, setNextFocusLeftId, setNextFocusRightId, setNextFocusUpId, setOnApplyWindowInsetsListener, setOnCapturedPointerListener, setOnClickListener, setOnContextClickListener, setOnCreateContextMenuListener, setOnDragListener, setOnFocusChangeListener, setOnGenericMotionListener, setOnHoverListener, setOnKeyListener, setOnLongClickListener, setOnReceiveContentListener, setOnScrollChangeListener, setOnSystemUiVisibilityChangeListener, setOnTouchListener, setOutlineAmbientShadowColor, setOutlineProvider, setOutlineSpotShadowColor, setOverScrollMode, setPadding, setPaddingRelative, setPivotX, setPivotY, setPointerIcon, setPressed, setRenderEffect, setRevealOnFocusHint, setRight, setRotation, setRotationX, setRotationY, setSaveEnabled, setSaveFromParentEnabled, setScaleX, setScaleY, setScreenReaderFocusable, setScrollBarDefaultDelayBeforeFade, setScrollBarFadeDuration, setScrollbarFadingEnabled, setScrollBarSize, setScrollBarStyle, setScrollCaptureCallback, setScrollCaptureHint, setScrollContainer, setScrollIndicators, setScrollIndicators, setScrollX, setScrollY, setSelected, setSoundEffectsEnabled, setStateDescription, setStateListAnimator, setSystemGestureExclusionRects, setSystemUiVisibility, setTag, setTag, setTextAlignment, setTextDirection, setTooltipText, setTop, setTouchDelegate, setTransitionAlpha, setTransitionName, setTransitionVisibility, setTranslationX, setTranslationY, setTranslationZ, setVerticalFadingEdgeEnabled, setVerticalScrollBarEnabled, setVerticalScrollbarPosition, setVerticalScrollbarThumbDrawable, setVerticalScrollbarTrackDrawable, setViewTranslationCallback, setVisibility, setWillNotCacheDrawing, setWillNotDraw, setX, setY, setZ, showContextMenu, showContextMenu, startActionMode, startActionMode, startAnimation, startDrag, startDragAndDrop, startNestedScroll, stopNestedScroll, toString, transformMatrixToGlobal, transformMatrixToLocal, unscheduleDrawable, unscheduleDrawable, updateDragShadow, willNotCacheDrawing, willNotDraw`

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

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

    - ### Methods inherited from interface android.view.ViewParent

      `canResolveLayoutDirection, canResolveTextAlignment, canResolveTextDirection, createContextMenu, getLayoutDirection, getParent, getParentForAccessibility, getTextAlignment, getTextDirection, isLayoutDirectionResolved, isLayoutRequested, isTextAlignmentResolved, isTextDirectionResolved, keyboardNavigationClusterSearch, requestFitSystemWindows, requestLayout`

- - ### Field Detail

    - #### SURFACE_SURFACE_VIEW

          public static final int SURFACE_SURFACE_VIEW

      Indicates the use of a `SurfaceView` to provide the rendering surface for this player view. This is the default and allows playback of encrypted content.
      See Also:
        Constant Field Values

    - #### SURFACE_TEXTURE_VIEW

          public static final int SURFACE_TEXTURE_VIEW

      Indicates the use of a `TextureView` to provide the rendering surface for this player view. Note that this will not allow playback of encrypted content.
      See Also:
        Constant Field Values

    - #### SCALING_MODE_FIT

          public static final int SCALING_MODE_FIT

      The video will be scaled using its original aspect ration to fit on the devices screen. Any blank space will be filled with horizontal or vertical black bars. This is the default behaviour.
      See Also:
        Constant Field Values

    - #### SCALING_MODE_CROP

          public static final int SCALING_MODE_CROP

      The video will be displayed in its original size. If the video is larger than the screen size, any overflow will not be visible and cut off (cropped).
      See Also:
        Constant Field Values

    - #### SCALING_MODE_STRETCH

          public static final int SCALING_MODE_STRETCH

      The video will be scaled to fully utilize the available screen size. The original aspect ratio of the video will not be kept.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### PlayerView

          public PlayerView​(Context context)

    - #### PlayerView

          public PlayerView​(Context context,
                            AttributeSet attrs)

    - #### PlayerView

          public PlayerView​(Context context,
                            AttributeSet attrs,
                            int defStyle,
                            boolean withAnalytics)

    - #### PlayerView

          public PlayerView​(Context context,
                            AttributeSet attrs,
                            int defStyle)

  - ### Method Detail

    - #### dispatchKeyEvent

          public boolean dispatchKeyEvent​(KeyEvent event)

      Overrides:
        `dispatchKeyEvent` in class `ViewGroup`

    - #### measureSize

          public Pair<Integer,​Integer> measureSize​(int measuredWidth,
                                                         int measuredHeight)

    - #### getPlayerController

          @NonNull
          public PlayerController getPlayerController()

      Access the `PlayerController` that can be used to interact with this view.
      Specified by:
        `getPlayerController` in interface `IPlayerView`
      Returns:
        playerController the player controller instance

    - #### setPlayerController

          public void setPlayerController​(@Nullable
                                          PlayerController playerController)

      Set the player controller used by this view. This is used for example when reattaching to an existing controller. Note that you usually do not need to manually call this method. When you are using a `PlayerService`, the service will automatically reattach the controller and call this method. When you are using the view without a service, the view will create a controller for you automatically.
      Specified by:
        `setPlayerController` in interface `IPlayerView`
      Parameters:
        `playerController` - The player controller

    - #### tryPlayerController

          @Nullable
          public PlayerController tryPlayerController()

      Description copied from interface: `IPlayerView`
      Returns the current instance of the `PlayerController` that is used by this view.

      Note that you do not create the controller lazily here.
      Specified by:
        `tryPlayerController` in interface `IPlayerView`
      Returns:
        The player controller instance that is used to render video to this view

    - #### getLifecycleDelegate

          @NonNull
          public PlayerViewLifecycleDelegate getLifecycleDelegate()

      Description copied from interface: `IPlayerView`
      This method must return an instance of the `PlayerViewLifecycleDelegate`. That instance can be used to integrate the view and its controller with an Activity lifecycle. Please note that the returned instance might also be used implicitly when the `PlayerService` is used and the player is send to background.
      Specified by:
        `getLifecycleDelegate` in interface `IPlayerView`
      Returns:
        The lifecycle helper to delegate activity lifecycle events

    - #### getScalingMode

          public int getScalingMode()

      Specified by:
        `getScalingMode` in interface `IPlayerView`
      Returns:
        The current scaling mode

    - #### setScalingMode

          public void setScalingMode​(int scalingMode)

      Sets the new scaling mode to one of `SCALING_MODE_FIT`, `SCALING_MODE_CROP`, or `SCALING_MODE_STRETCH`.
      Specified by:
        `setScalingMode` in interface `IPlayerView`
      Parameters:
        `scalingMode` - the new scaling mode

    - #### setSurfaceType

          public void setSurfaceType​(int surfaceType)

      Set the surface type to one of `SURFACE_SURFACE_VIEW` or `SURFACE_TEXTURE_VIEW` to specify the type of surface that will be used to render the video content.

      This only sets the desired type, but will not actively change the type.

      Note that using `SURFACE_TEXTURE_VIEW` and a `TextureView` will not allow you to playback encrypted and protected content.
      Parameters:
        `surfaceType` - the surface type

    - #### removeSurface

          public void removeSurface()

      Description copied from interface: `IPlayerView`
      This method is called by the `PlayerController` once the player is released. Implementations should remove the video surface if it exists.
      Specified by:
        `removeSurface` in interface `IPlayerView`

    - #### setSurfaceVisibility

          public void setSurfaceVisibility​(boolean visible)

      If you pass true to this method, the current surface view will be scaled to zero size to hide it from the screen but keep it alive. This will allow you to reuse the same surface. This method can be used for example when you are doing ad insertion and you need to show another surface view on top of this one.
      Parameters:
        `visible` - the surface visibility

    - #### setVisible

          public void setVisible​(boolean visible)

      Description copied from interface: `IPlayerView`
      Allow to show ore hide this player view. This is used by the player controller in case the the player view needs to be made invisible. For example, if a secondary display is connected and content playback should be prevented, playback will stop and this method will be used hide the player view.
      Specified by:
        `setVisible` in interface `IPlayerView`
      Parameters:
        `visible` - True if the view should be visible

    - #### prepareSurface

          public void prepareSurface()

      Description copied from interface: `IPlayerView`
      This method is called by the `PlayerController` once the player and the renderer are available. Implementations should create the video surface here and push it to the controller using `PlayerController.setSurface(Surface)`.

      Please note that you usually also need to setup a listener on the surface and delegate create and destroy events to the underlying player controller also using `PlayerController.setSurface(Surface)`.
      Specified by:
        `prepareSurface` in interface `IPlayerView`

    - #### getRootView

          @NonNull
          public ViewGroup getRootView()

      Description copied from interface: `IPlayerView`
      Retrieve the root view of the current `IPlayerView` implementation. The video container view is added internally to the root view with the index zero. All other child views when added to the root view are on top of video container view and do not respect the video container aspect ratio.
      Specified by:
        `getRootView` in interface `IPlayerView`
      Overrides:
        `getRootView` in class `View`
      Returns:
        The root view of the current `IPlayerView` implementation

    - #### getVideoView

          @NonNull
          public ViewGroup getVideoView()

      Description copied from interface: `IPlayerView`
      Retrieve the video container view of the current `IPlayerView` implementation. All the child view when added to the video container view do respect the video container aspect ratio.
      Specified by:
        `getVideoView` in interface `IPlayerView`
      Returns:
        The video container view of the current `IPlayerView` implementation

    - #### getComponent

          @Nullable
          public <T> T getComponent​(Class<T> type)

      Returns the player view component of the given type if it exists.
      Type Parameters:
        `T` - The component
      Parameters:
        `type` - The target type
      Returns:
        The component or null

    - #### getComponentView

          @Nullable
          public View getComponentView​(@IdRes
                                       int viewId)

      Returns the component View linked to the provided id
      Parameters:
        `viewId` - the id
      Returns:
        the View