Package com.google.android.exoplayer2.ui

## Class StyledPlayerView

- java.lang.Object
- - android.view.View
  - - android.view.ViewGroup
    - - android.widget.FrameLayout
      - - com.google.android.exoplayer2.ui.StyledPlayerView

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

      public class StyledPlayerView
      extends FrameLayout
      implements AdViewProvider

  A high level view for `Player` media playbacks. It displays video, subtitles and album art during playback, and displays playback controls using a `StyledPlayerControlView`.

  A StyledPlayerView can be customized by setting attributes (or calling corresponding methods), overriding drawables, overriding the view's layout file, or by specifying a custom view layout file.

  ## Attributes

  The following attributes can be set on a StyledPlayerView when used in a layout XML file:
  - `use_artwork` - Whether artwork is used if available in audio streams.
    - Corresponding method: `setUseArtwork(boolean)`
    - Default: `true`
  - `default_artwork` - Default artwork to use if no artwork available in audio streams.
    - Corresponding method: `setDefaultArtwork(Drawable)`
    - Default: `null`
  - `use_controller` - Whether the playback controls can be shown.
    - Corresponding method: `setUseController(boolean)`
    - Default: `true`
  - `hide_on_touch` - Whether the playback controls are hidden by touch events.
    - Corresponding method: `setControllerHideOnTouch(boolean)`
    - Default: `true`
  - `auto_show` - Whether the playback controls are automatically shown when playback starts, pauses, ends, or fails. If set to false, the playback controls can be manually operated with `showController()` and `hideController()`.
    - Corresponding method: `setControllerAutoShow(boolean)`
    - Default: `true`
  - `hide_during_ads` - Whether the playback controls are hidden during ads. Controls are always shown during ads if they are enabled and the player is paused.
    - Corresponding method: `setControllerHideDuringAds(boolean)`
    - Default: `true`
  - `show_buffering` - Whether the buffering spinner is displayed when the player is buffering. Valid values are `never`, `when_playing` and `always`.
    - Corresponding method: `setShowBuffering(int)`
    - Default: `never`
  - `resize_mode` - Controls how video and album art is resized within the view. Valid values are `fit`, `fixed_width`, `fixed_height`, `fill` and `zoom`.
    - Corresponding method: `setResizeMode(int)`
    - Default: `fit`
  - `surface_type` - The type of surface view used for video playbacks. Valid values are `surface_view`, `texture_view`, `spherical_gl_surface_view`, `video_decoder_gl_surface_view` and `none`. Using `none` is recommended for audio only applications, since creating the surface can be expensive. Using `surface_view` is recommended for video applications. Note, TextureView can only be used in a hardware accelerated window. When rendered in software, TextureView will draw nothing.
    - Corresponding method: None
    - Default: `surface_view`
  - `shutter_background_color` - The background color of the `exo_shutter` view.
    - Corresponding method: `setShutterBackgroundColor(int)`
    - Default: `unset`
  - `keep_content_on_player_reset` - Whether the currently displayed video frame or media artwork is kept visible when the player is reset.
    - Corresponding method: `setKeepContentOnPlayerReset(boolean)`
    - Default: `false`
  - `player_layout_id` - Specifies the id of the layout to be inflated. See below for more details.
    - Corresponding method: None
    - Default: `R.layout.exo_styled_player_view`
  - `controller_layout_id` - Specifies the id of the layout resource to be inflated by the child `StyledPlayerControlView`. See below for more details.
    - Corresponding method: None
    - Default: `R.layout.exo_styled_player_control_view`
  - All attributes that can be set on `StyledPlayerControlView` and `DefaultTimeBar` can also be set on a StyledPlayerView, and will be propagated to the inflated `StyledPlayerControlView` unless the layout is overridden to specify a custom `exo_controller` (see below).

  ## Overriding drawables

  The drawables used by `StyledPlayerControlView` (with its default layout file) can be overridden by drawables with the same names defined in your application. See the `StyledPlayerControlView` documentation for a list of drawables that can be overridden.

  ## Overriding the layout file

  To customize the layout of StyledPlayerView throughout your app, or just for certain configurations, you can define `exo_styled_player_view.xml` layout files in your application `res/layout*` directories. These layouts will override the one provided by the ExoPlayer library, and will be inflated for use by StyledPlayerView. The view identifies and binds its children by looking for the following ids:
  - `exo_content_frame` - A frame whose aspect ratio is resized based on the video or album art of the media being played, and the configured `resize_mode`. The video surface view is inflated into this frame as its first child.
    - Type: `AspectRatioFrameLayout`
  - `exo_shutter` - A view that's made visible when video should be hidden. This view is typically an opaque view that covers the video surface, thereby obscuring it when visible. Obscuring the surface in this way also helps to prevent flicker at the start of playback when `surface_type="surface_view"`.
    - Type: `View`
  - `exo_buffering` - A view that's made visible when the player is buffering. This view typically displays a buffering spinner or animation.
    - Type: `View`
  - `exo_subtitles` - Displays subtitles.
    - Type: `SubtitleView`
  - `exo_artwork` - Displays album art.
    - Type: `ImageView`
  - `exo_error_message` - Displays an error message to the user if playback fails.
    - Type: `TextView`
  - `exo_controller_placeholder` - A placeholder that's replaced with the inflated `StyledPlayerControlView`. Ignored if an `exo_controller` view exists.
    - Type: `View`
  - `exo_controller` - An already inflated `StyledPlayerControlView`. Allows use of a custom extension of `StyledPlayerControlView`. `StyledPlayerControlView` and `DefaultTimeBar` attributes set on the StyledPlayerView will not be automatically propagated through to this instance. If a view exists with this id, any `exo_controller_placeholder` view will be ignored.
    - Type: `StyledPlayerControlView`
  - `exo_ad_overlay` - A `FrameLayout` positioned on top of the player which is used to show ad UI (if applicable).
    - Type: `FrameLayout`
  - `exo_overlay` - A `FrameLayout` positioned on top of the player which the app can access via `getOverlayFrameLayout()`, provided for convenience.
    - Type: `FrameLayout`

  All child views are optional and so can be omitted if not required, however where defined they must be of the expected type.

  ## Specifying a custom layout file

  Defining your own `exo_styled_player_view.xml` is useful to customize the layout of StyledPlayerView throughout your application. It's also possible to customize the layout for a single instance in a layout file. This is achieved by setting the `player_layout_id` attribute on a StyledPlayerView. This will cause the specified layout to be inflated instead of `exo_styled_player_view.xml` for only the instance on which the attribute is set.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static interface` | `StyledPlayerView.ShowBuffering` | Determines when the buffering view is shown.

    - ### 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` | `SHOW_BUFFERING_ALWAYS` | The buffering view is always shown when the player is in the `buffering` state.
    `static int` | `SHOW_BUFFERING_NEVER` | The buffering view is never shown.
    `static int` | `SHOW_BUFFERING_WHEN_PLAYING` | The buffering view is shown when the player is in the `buffering` state and `playWhenReady` is `true`.

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

      `CLIP_TO_PADDING_MASK, 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_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, EMPTY_STATE_SET, ENABLED_FOCUSED_SELECTED_STATE_SET, ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, ENABLED_FOCUSED_STATE_SET, ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET, ENABLED_SELECTED_STATE_SET, ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET, ENABLED_STATE_SET, ENABLED_WINDOW_FOCUSED_STATE_SET, 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, FOCUSED_SELECTED_STATE_SET, FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, FOCUSED_STATE_SET, FOCUSED_WINDOW_FOCUSED_STATE_SET, 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, PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET, PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_ENABLED_FOCUSED_STATE_SET, PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET, PRESSED_ENABLED_SELECTED_STATE_SET, PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_ENABLED_STATE_SET, PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET, PRESSED_FOCUSED_SELECTED_STATE_SET, PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_FOCUSED_STATE_SET, PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET, PRESSED_SELECTED_STATE_SET, PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_STATE_SET, PRESSED_WINDOW_FOCUSED_STATE_SET, 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_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, SELECTED_STATE_SET, SELECTED_WINDOW_FOCUSED_STATE_SET, 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, VIEW_LOG_TAG, VISIBLE, WINDOW_FOCUSED_STATE_SET, X, Y, Z`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `StyledPlayerView​(Context context)` |
    `StyledPlayerView​(Context context, AttributeSet attrs)` |
    `StyledPlayerView​(Context context, AttributeSet attrs, int defStyleAttr)` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `dispatchKeyEvent​(KeyEvent event)` |
    `boolean` | `dispatchMediaKeyEvent​(KeyEvent event)` | Called to process media key events.
    `List<AdOverlayInfo>` | `getAdOverlayInfos()` | Returns a list of `AdOverlayInfo` instances describing views that are on top of the ad view group, but that are essential for controlling playback and should be excluded from ad viewability measurements.
    `ViewGroup` | `getAdViewGroup()` | Returns the `ViewGroup` on top of the player that will show any ad UI, or `null` if playing audio-only ads.
    `boolean` | `getControllerAutoShow()` | Returns whether the playback controls are automatically shown when playback starts, pauses, ends, or fails.
    `boolean` | `getControllerHideOnTouch()` | Returns whether the playback controls are hidden by touch events.
    `int` | `getControllerShowTimeoutMs()` | Returns the playback controls timeout.
    `Drawable` | `getDefaultArtwork()` | Returns the default artwork to display.
    `FrameLayout` | `getOverlayFrameLayout()` | Gets the overlay `FrameLayout`, which can be populated with UI elements to show on top of the player.
    `Player` | `getPlayer()` | Returns the player currently set on this view, or null if no player is set.
    `int` | `getResizeMode()` | Returns the `AspectRatioFrameLayout.ResizeMode`.
    `SubtitleView` | `getSubtitleView()` | Gets the `SubtitleView`.
    `boolean` | `getUseArtwork()` | Returns whether artwork is displayed if present in the media.
    `boolean` | `getUseController()` | Returns whether the playback controls can be shown.
    `View` | `getVideoSurfaceView()` | Gets the view onto which video is rendered.
    `void` | `hideController()` | Hides the playback controls.
    `boolean` | `isControllerFullyVisible()` | Returns whether the controller is currently fully visible.
    `protected void` | `onContentAspectRatioChanged​(AspectRatioFrameLayout contentFrame, float aspectRatio)` | Called when there's a change in the desired aspect ratio of the content frame.
    `void` | `onPause()` | Should be called when the player is no longer visible to the user, if the `surface_type` extends `GLSurfaceView`.
    `void` | `onResume()` | Should be called when the player is visible to the user, if the `surface_type` extends `GLSurfaceView`.
    `boolean` | `onTouchEvent​(MotionEvent event)` |
    `boolean` | `onTrackballEvent​(MotionEvent ev)` |
    `boolean` | `performClick()` |
    `void` | `setAspectRatioListener​(AspectRatioFrameLayout.AspectRatioListener listener)` | Set the `AspectRatioFrameLayout.AspectRatioListener`.
    `void` | `setControlDispatcher​(ControlDispatcher controlDispatcher)` | Deprecated. Use a `ForwardingPlayer` and pass it to `setPlayer(Player)` instead.
    `void` | `setControllerAutoShow​(boolean controllerAutoShow)` | Sets whether the playback controls are automatically shown when playback starts, pauses, ends, or fails.
    `void` | `setControllerHideDuringAds​(boolean controllerHideDuringAds)` | Sets whether the playback controls are hidden when ads are playing.
    `void` | `setControllerHideOnTouch​(boolean controllerHideOnTouch)` | Sets whether the playback controls are hidden by touch events.
    `void` | `setControllerOnFullScreenModeChangedListener​(StyledPlayerControlView.OnFullScreenModeChangedListener listener)` | Sets the `StyledPlayerControlView.OnFullScreenModeChangedListener`.
    `void` | `setControllerShowTimeoutMs​(int controllerShowTimeoutMs)` | Sets the playback controls timeout.
    `void` | `setControllerVisibilityListener​(StyledPlayerControlView.VisibilityListener listener)` | Set the `StyledPlayerControlView.VisibilityListener`.
    `void` | `setCustomErrorMessage​(CharSequence message)` | Sets a custom error message to be displayed by the view.
    `void` | `setDefaultArtwork​(Drawable defaultArtwork)` | Sets the default artwork to display if `useArtwork` is `true` and no artwork is present in the media.
    `void` | `setErrorMessageProvider​(ErrorMessageProvider<? super PlaybackException> errorMessageProvider)` | Sets the optional `ErrorMessageProvider`.
    `void` | `setExtraAdGroupMarkers​(long[] extraAdGroupTimesMs, boolean[] extraPlayedAdGroups)` | Sets the millisecond positions of extra ad markers relative to the start of the window (or timeline, if in multi-window mode) and whether each extra ad has been played or not.
    `void` | `setKeepContentOnPlayerReset​(boolean keepContentOnPlayerReset)` | Sets whether the currently displayed video frame or media artwork is kept visible when the player is reset.
    `void` | `setPlayer​(Player player)` | Set the `Player` to use.
    `void` | `setRepeatToggleModes​(int repeatToggleModes)` | Sets which repeat toggle modes are enabled.
    `void` | `setResizeMode​(int resizeMode)` | Sets the `AspectRatioFrameLayout.ResizeMode`.
    `void` | `setShowBuffering​(int showBuffering)` | Sets whether a buffering spinner is displayed when the player is in the buffering state.
    `void` | `setShowFastForwardButton​(boolean showFastForwardButton)` | Sets whether the fast forward button is shown.
    `void` | `setShowMultiWindowTimeBar​(boolean showMultiWindowTimeBar)` | Sets whether the time bar should show all windows, as opposed to just the current one.
    `void` | `setShowNextButton​(boolean showNextButton)` | Sets whether the next button is shown.
    `void` | `setShowPreviousButton​(boolean showPreviousButton)` | Sets whether the previous button is shown.
    `void` | `setShowRewindButton​(boolean showRewindButton)` | Sets whether the rewind button is shown.
    `void` | `setShowShuffleButton​(boolean showShuffleButton)` | Sets whether the shuffle button is shown.
    `void` | `setShowSubtitleButton​(boolean showSubtitleButton)` | Sets whether the subtitle button is shown.
    `void` | `setShowVrButton​(boolean showVrButton)` | Sets whether the vr button is shown.
    `void` | `setShutterBackgroundColor​(int color)` | Sets the background color of the `exo_shutter` view.
    `void` | `setUseArtwork​(boolean useArtwork)` | Sets whether artwork is displayed if present in the media.
    `void` | `setUseController​(boolean useController)` | Sets whether the playback controls can be shown.
    `void` | `setVisibility​(int visibility)` |
    `void` | `showController()` | Shows the playback controls.
    `static void` | `switchTargetView​(Player player, StyledPlayerView oldPlayerView, StyledPlayerView newPlayerView)` | Switches the view targeted by a given `Player`.

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

      `checkLayoutParams, generateDefaultLayoutParams, generateLayoutParams, generateLayoutParams, getAccessibilityClassName, getConsiderGoneChildrenWhenMeasuring, getMeasureAllChildren, onLayout, onMeasure, setForegroundGravity, setMeasureAllChildren, shouldDelayChildPressedState`

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

      `addChildrenForAccessibility, addExtraDataToAccessibilityNodeInfo, addFocusables, addKeyboardNavigationClusters, addStatesFromChildren, addTouchables, addView, addView, addView, addView, addView, addViewInLayout, addViewInLayout, attachLayoutAnimationParameters, attachViewToParent, bringChildToFront, canAnimate, childDrawableStateChanged, childHasTransientStateChanged, cleanupLayoutState, clearChildFocus, clearDisappearingChildren, clearFocus, debug, detachAllViewsFromParent, detachViewFromParent, detachViewFromParent, detachViewsFromParent, dispatchApplyWindowInsets, dispatchCapturedPointerEvent, dispatchConfigurationChanged, dispatchDisplayHint, dispatchDragEvent, dispatchDraw, dispatchDrawableHotspotChanged, dispatchFinishTemporaryDetach, dispatchFreezeSelfOnly, dispatchGenericFocusedEvent, dispatchGenericPointerEvent, dispatchHoverEvent, dispatchKeyEventPreIme, dispatchKeyShortcutEvent, dispatchPointerCaptureChanged, dispatchProvideAutofillStructure, dispatchProvideStructure, dispatchRestoreInstanceState, dispatchSaveInstanceState, dispatchSetActivated, dispatchSetPressed, dispatchSetSelected, dispatchStartTemporaryDetach, dispatchSystemUiVisibilityChanged, dispatchThawSelfOnly, dispatchTouchEvent, dispatchTrackballEvent, dispatchUnhandledMove, dispatchVisibilityChanged, dispatchWindowFocusChanged, dispatchWindowInsetsAnimationEnd, dispatchWindowInsetsAnimationPrepare, dispatchWindowInsetsAnimationProgress, dispatchWindowInsetsAnimationStart, dispatchWindowSystemUiVisiblityChanged, dispatchWindowVisibilityChanged, drawableStateChanged, drawChild, endViewTransition, findFocus, findViewsWithText, focusableViewAvailable, focusSearch, gatherTransparentRegion, getChildAt, getChildCount, getChildDrawingOrder, getChildDrawingOrder, getChildMeasureSpec, getChildStaticTransformation, getChildVisibleRect, getClipChildren, getClipToPadding, getDescendantFocusability, getFocusedChild, getLayoutAnimation, getLayoutAnimationListener, getLayoutMode, getLayoutTransition, getNestedScrollAxes, getOverlay, getPersistentDrawingCache, getTouchscreenBlocksFocus, hasFocus, hasTransientState, indexOfChild, invalidateChild, invalidateChildInParent, isAlwaysDrawnWithCacheEnabled, isAnimationCacheEnabled, isChildrenDrawingOrderEnabled, isChildrenDrawnWithCacheEnabled, isLayoutSuppressed, isMotionEventSplittingEnabled, isTransitionGroup, jumpDrawablesToCurrentState, layout, measureChild, measureChildren, measureChildWithMargins, notifySubtreeAccessibilityStateChanged, offsetDescendantRectToMyCoords, offsetRectIntoDescendantCoords, onAttachedToWindow, onCreateDrawableState, onDescendantInvalidated, onDetachedFromWindow, onInterceptHoverEvent, onInterceptTouchEvent, onNestedFling, onNestedPreFling, onNestedPrePerformAccessibilityAction, onNestedPreScroll, onNestedScroll, onNestedScrollAccepted, onRequestFocusInDescendants, onRequestSendAccessibilityEvent, onResolvePointerIcon, onStartNestedScroll, onStopNestedScroll, onViewAdded, onViewRemoved, recomputeViewAttributes, removeAllViews, removeAllViewsInLayout, removeDetachedView, removeView, removeViewAt, removeViewInLayout, removeViews, removeViewsInLayout, requestChildFocus, requestChildRectangleOnScreen, requestDisallowInterceptTouchEvent, requestFocus, requestSendAccessibilityEvent, requestTransparentRegion, restoreDefaultFocus, scheduleLayoutAnimation, setAddStatesFromChildren, setAlwaysDrawnWithCacheEnabled, setAnimationCacheEnabled, setChildrenDrawingCacheEnabled, setChildrenDrawingOrderEnabled, setChildrenDrawnWithCacheEnabled, setClipChildren, setClipToPadding, setDescendantFocusability, setLayoutAnimation, setLayoutAnimationListener, setLayoutMode, setLayoutTransition, setMotionEventSplittingEnabled, setOnHierarchyChangeListener, setPersistentDrawingCache, setStaticTransformationsEnabled, 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, awakenScrollBars, awakenScrollBars, awakenScrollBars, bringToFront, buildDrawingCache, buildDrawingCache, buildLayer, callOnClick, cancelDragAndDrop, cancelLongPress, cancelPendingInputEvents, canResolveLayoutDirection, canResolveTextAlignment, canResolveTextDirection, canScrollHorizontally, canScrollVertically, checkInputConnectionProxy, clearAnimation, combineMeasuredStates, computeHorizontalScrollExtent, computeHorizontalScrollOffset, computeHorizontalScrollRange, computeScroll, computeSystemWindowInsets, computeVerticalScrollExtent, computeVerticalScrollOffset, computeVerticalScrollRange, createAccessibilityNodeInfo, createContextMenu, destroyDrawingCache, dispatchGenericMotionEvent, dispatchNestedFling, dispatchNestedPreFling, dispatchNestedPrePerformAccessibilityAction, dispatchNestedPreScroll, dispatchNestedScroll, dispatchPopulateAccessibilityEvent, draw, drawableHotspotChanged, findViewById, findViewWithTag, fitSystemWindows, focusSearch, forceHasOverlappingRendering, forceLayout, generateViewId, getAccessibilityDelegate, getAccessibilityLiveRegion, getAccessibilityNodeProvider, getAccessibilityPaneTitle, getAccessibilityTraversalAfter, getAccessibilityTraversalBefore, getAlpha, getAnimation, getAnimationMatrix, getApplicationWindowToken, getAttributeResolutionStack, getAttributeSourceResourceMap, getAutofillHints, getAutofillId, getAutofillType, getAutofillValue, getBackground, getBackgroundTintBlendMode, getBackgroundTintList, getBackgroundTintMode, getBaseline, getBottom, getBottomFadingEdgeStrength, getBottomPaddingOffset, getCameraDistance, getClipBounds, getClipBounds, getClipToOutline, getContentCaptureSession, getContentDescription, getContext, getContextMenuInfo, 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, getHorizontalScrollbarHeight, getHorizontalScrollbarThumbDrawable, getHorizontalScrollbarTrackDrawable, getId, getImportantForAccessibility, getImportantForAutofill, getImportantForContentCapture, getKeepScreenOn, getKeyDispatcherState, getLabelFor, getLayerType, getLayoutDirection, getLayoutParams, getLeft, getLeftFadingEdgeStrength, getLeftPaddingOffset, 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, getResources, getRevealOnFocusHint, getRight, getRightFadingEdgeStrength, getRightPaddingOffset, getRootView, getRootWindowInsets, getRotation, getRotationX, getRotationY, getScaleX, getScaleY, getScrollBarDefaultDelayBeforeFade, getScrollBarFadeDuration, getScrollBarSize, getScrollBarStyle, getScrollIndicators, getScrollX, getScrollY, getSolidColor, getSourceLayoutResId, getStateDescription, getStateListAnimator, getSuggestedMinimumHeight, getSuggestedMinimumWidth, getSystemGestureExclusionRects, getSystemUiVisibility, getTag, getTag, getTextAlignment, getTextDirection, getTooltipText, getTop, getTopFadingEdgeStrength, getTopPaddingOffset, getTouchables, getTouchDelegate, getTransitionAlpha, getTransitionName, getTranslationX, getTranslationY, getTranslationZ, getUniqueDrawingId, getVerticalFadingEdgeLength, getVerticalScrollbarPosition, getVerticalScrollbarThumbDrawable, getVerticalScrollbarTrackDrawable, getVerticalScrollbarWidth, getViewTreeObserver, getVisibility, getWidth, getWindowAttachCount, 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, isPaddingOffsetRequired, isPaddingRelative, isPivotSet, isPressed, isSaveEnabled, isSaveFromParentEnabled, isScreenReaderFocusable, isScrollbarFadingEnabled, isScrollContainer, isSelected, isShowingLayoutBounds, isShown, isSoundEffectsEnabled, isTemporarilyDetached, isTextAlignmentResolved, isTextDirectionResolved, isVerticalFadingEdgeEnabled, isVerticalScrollBarEnabled, isVisibleToUserForAutofill, keyboardNavigationClusterSearch, measure, mergeDrawableStates, offsetLeftAndRight, offsetTopAndBottom, onAnimationEnd, onAnimationStart, onApplyWindowInsets, onCancelPendingInputEvents, onCapturedPointerEvent, onCheckIsTextEditor, onConfigurationChanged, onCreateContextMenu, onCreateInputConnection, onDisplayHint, onDragEvent, onDraw, onDrawForeground, onDrawScrollBars, onFilterTouchEventForSecurity, onFinishInflate, onFinishTemporaryDetach, onFocusChanged, onGenericMotionEvent, onHoverChanged, onHoverEvent, onInitializeAccessibilityEvent, onInitializeAccessibilityNodeInfo, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyPreIme, onKeyShortcut, onKeyUp, onOverScrolled, onPointerCaptureChange, onPopulateAccessibilityEvent, onProvideAutofillStructure, onProvideAutofillVirtualStructure, onProvideContentCaptureStructure, onProvideStructure, onProvideVirtualStructure, onRestoreInstanceState, onRtlPropertiesChanged, onSaveInstanceState, onScreenStateChanged, onScrollChanged, onSetAlpha, onSizeChanged, onStartTemporaryDetach, onVisibilityAggregated, onVisibilityChanged, onWindowFocusChanged, onWindowSystemUiVisibilityChanged, onWindowVisibilityChanged, overScrollBy, performAccessibilityAction, performContextClick, performContextClick, performHapticFeedback, performHapticFeedback, performLongClick, performLongClick, 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, 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, setMeasuredDimension, setMinimumHeight, setMinimumWidth, setNestedScrollingEnabled, setNextClusterForwardId, setNextFocusDownId, setNextFocusForwardId, setNextFocusLeftId, setNextFocusRightId, setNextFocusUpId, setOnApplyWindowInsetsListener, setOnCapturedPointerListener, setOnClickListener, setOnContextClickListener, setOnCreateContextMenuListener, setOnDragListener, setOnFocusChangeListener, setOnGenericMotionListener, setOnHoverListener, setOnKeyListener, setOnLongClickListener, setOnScrollChangeListener, setOnSystemUiVisibilityChangeListener, setOnTouchListener, setOutlineAmbientShadowColor, setOutlineProvider, setOutlineSpotShadowColor, setOverScrollMode, setPadding, setPaddingRelative, setPivotX, setPivotY, setPointerIcon, setPressed, setRevealOnFocusHint, setRight, setRotation, setRotationX, setRotationY, setSaveEnabled, setSaveFromParentEnabled, setScaleX, setScaleY, setScreenReaderFocusable, setScrollBarDefaultDelayBeforeFade, setScrollBarFadeDuration, setScrollbarFadingEnabled, setScrollBarSize, setScrollBarStyle, 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, setWillNotCacheDrawing, setWillNotDraw, setX, setY, setZ, showContextMenu, showContextMenu, startActionMode, startActionMode, startAnimation, startDrag, startDragAndDrop, startNestedScroll, stopNestedScroll, toString, transformMatrixToGlobal, transformMatrixToLocal, unscheduleDrawable, unscheduleDrawable, updateDragShadow, verifyDrawable, willNotCacheDrawing, willNotDraw`

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

      `clone, equals, finalize, 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

    - #### SHOW_BUFFERING_NEVER

          public static final int SHOW_BUFFERING_NEVER

      The buffering view is never shown.
      See Also:
        Constant Field Values

    - #### SHOW_BUFFERING_WHEN_PLAYING

          public static final int SHOW_BUFFERING_WHEN_PLAYING

      The buffering view is shown when the player is in the `buffering` state and `playWhenReady` is `true`.
      See Also:
        Constant Field Values

    - #### SHOW_BUFFERING_ALWAYS

          public static final int SHOW_BUFFERING_ALWAYS

      The buffering view is always shown when the player is in the `buffering` state.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### StyledPlayerView

          public StyledPlayerView​(Context context)

    - #### StyledPlayerView

          public StyledPlayerView​(Context context,
                                  @Nullable
                                  AttributeSet attrs)

    - #### StyledPlayerView

          public StyledPlayerView​(Context context,
                                  @Nullable
                                  AttributeSet attrs,
                                  int defStyleAttr)

  - ### Method Detail

    - #### switchTargetView

          public static void switchTargetView​(Player player,
                                              @Nullable
                                              StyledPlayerView oldPlayerView,
                                              @Nullable
                                              StyledPlayerView newPlayerView)

      Switches the view targeted by a given `Player`.
      Parameters:
        `player` - The player whose target view is being switched.
        `oldPlayerView` - The old view to detach from the player.
        `newPlayerView` - The new view to attach to the player.

    - #### getPlayer

          @Nullable
          public Player getPlayer()

      Returns the player currently set on this view, or null if no player is set.

    - #### setPlayer

          public void setPlayer​(@Nullable
                                Player player)

      Set the `Player` to use.

      To transition a `Player` from targeting one view to another, it's recommended to use `switchTargetView(Player, StyledPlayerView, StyledPlayerView)` rather than this method. If you do wish to use this method directly, be sure to attach the player to the new view before calling `setPlayer(null)` to detach it from the old one. This ordering is significantly more efficient and may allow for more seamless transitions.

      Parameters:
        `player` - The `Player` to use, or `null` to detach the current player. Only players which are accessed on the main thread are supported (`player.getApplicationLooper() == Looper.getMainLooper()`).

    - #### setVisibility

          public void setVisibility​(int visibility)

      Overrides:
        `setVisibility` in class `View`

    - #### setResizeMode

          public void setResizeMode​(@ResizeMode
                                    int resizeMode)

      Sets the `AspectRatioFrameLayout.ResizeMode`.
      Parameters:
        `resizeMode` - The `AspectRatioFrameLayout.ResizeMode`.

    - #### getResizeMode

          @ResizeMode
          public int getResizeMode()

      Returns the `AspectRatioFrameLayout.ResizeMode`.

    - #### getUseArtwork

          public boolean getUseArtwork()

      Returns whether artwork is displayed if present in the media.

    - #### setUseArtwork

          public void setUseArtwork​(boolean useArtwork)

      Sets whether artwork is displayed if present in the media.
      Parameters:
        `useArtwork` - Whether artwork is displayed.

    - #### getDefaultArtwork

          @Nullable
          public Drawable getDefaultArtwork()

      Returns the default artwork to display.

    - #### setDefaultArtwork

          public void setDefaultArtwork​(@Nullable
                                        Drawable defaultArtwork)

      Sets the default artwork to display if `useArtwork` is `true` and no artwork is present in the media.
      Parameters:
        `defaultArtwork` - the default artwork to display

    - #### getUseController

          public boolean getUseController()

      Returns whether the playback controls can be shown.

    - #### setUseController

          public void setUseController​(boolean useController)

      Sets whether the playback controls can be shown. If set to `false` the playback controls are never visible and are disconnected from the player.
      Parameters:
        `useController` - Whether the playback controls can be shown.

    - #### setShutterBackgroundColor

          public void setShutterBackgroundColor​(int color)

      Sets the background color of the `exo_shutter` view.
      Parameters:
        `color` - The background color.

    - #### setKeepContentOnPlayerReset

          public void setKeepContentOnPlayerReset​(boolean keepContentOnPlayerReset)

      Sets whether the currently displayed video frame or media artwork is kept visible when the player is reset. A player reset is defined to mean the player being re-prepared with different media, the player transitioning to unprepared media or an empty list of media items, or the player being replaced or cleared by calling `setPlayer(Player)`.

      If enabled, the currently displayed video frame or media artwork will be kept visible until the player set on the view has been successfully prepared with new media and loaded enough of it to have determined the available tracks. Hence enabling this option allows transitioning from playing one piece of media to another, or from using one player instance to another, without clearing the view's content.

      If disabled, the currently displayed video frame or media artwork will be hidden as soon as the player is reset. Note that the video frame is hidden by making `exo_shutter` visible. Hence the video frame will not be hidden if using a custom layout that omits this view.

      Parameters:
        `keepContentOnPlayerReset` - Whether the currently displayed video frame or media artwork is kept visible when the player is reset.

    - #### setShowBuffering

          public void setShowBuffering​(@ShowBuffering
                                       int showBuffering)

      Sets whether a buffering spinner is displayed when the player is in the buffering state. The buffering spinner is not displayed by default.
      Parameters:
        `showBuffering` - The mode that defines when the buffering spinner is displayed. One of `SHOW_BUFFERING_NEVER`, `SHOW_BUFFERING_WHEN_PLAYING` and `SHOW_BUFFERING_ALWAYS`.

    - #### setErrorMessageProvider

          public void setErrorMessageProvider​(@Nullable
                                              ErrorMessageProvider<? super PlaybackException> errorMessageProvider)

      Sets the optional `ErrorMessageProvider`.
      Parameters:
        `errorMessageProvider` - The error message provider.

    - #### setCustomErrorMessage

          public void setCustomErrorMessage​(@Nullable
                                            CharSequence message)

      Sets a custom error message to be displayed by the view. The error message will be displayed permanently, unless it is cleared by passing `null` to this method.
      Parameters:
        `message` - The message to display, or `null` to clear a previously set message.

    - #### dispatchKeyEvent

          public boolean dispatchKeyEvent​(KeyEvent event)

      Overrides:
        `dispatchKeyEvent` in class `ViewGroup`

    - #### dispatchMediaKeyEvent

          public boolean dispatchMediaKeyEvent​(KeyEvent event)

      Called to process media key events. Any `KeyEvent` can be passed but only media key events will be handled. Does nothing if playback controls are disabled.
      Parameters:
        `event` - A key event.
      Returns:
        Whether the key event was handled.

    - #### isControllerFullyVisible

          public boolean isControllerFullyVisible()

      Returns whether the controller is currently fully visible.

    - #### showController

          public void showController()

      Shows the playback controls. Does nothing if playback controls are disabled.

      The playback controls are automatically hidden during playback after {`getControllerShowTimeoutMs()`}. They are shown indefinitely when playback has not started yet, is paused, has ended or failed.

    - #### hideController

          public void hideController()

      Hides the playback controls. Does nothing if playback controls are disabled.

    - #### getControllerShowTimeoutMs

          public int getControllerShowTimeoutMs()

      Returns the playback controls timeout. The playback controls are automatically hidden after this duration of time has elapsed without user input and with playback or buffering in progress.
      Returns:
        The timeout in milliseconds. A non-positive value will cause the controller to remain visible indefinitely.

    - #### setControllerShowTimeoutMs

          public void setControllerShowTimeoutMs​(int controllerShowTimeoutMs)

      Sets the playback controls timeout. The playback controls are automatically hidden after this duration of time has elapsed without user input and with playback or buffering in progress.
      Parameters:
        `controllerShowTimeoutMs` - The timeout in milliseconds. A non-positive value will cause the controller to remain visible indefinitely.

    - #### getControllerHideOnTouch

          public boolean getControllerHideOnTouch()

      Returns whether the playback controls are hidden by touch events.

    - #### setControllerHideOnTouch

          public void setControllerHideOnTouch​(boolean controllerHideOnTouch)

      Sets whether the playback controls are hidden by touch events.
      Parameters:
        `controllerHideOnTouch` - Whether the playback controls are hidden by touch events.

    - #### getControllerAutoShow

          public boolean getControllerAutoShow()

      Returns whether the playback controls are automatically shown when playback starts, pauses, ends, or fails. If set to false, the playback controls can be manually operated with `showController()` and `hideController()`.

    - #### setControllerAutoShow

          public void setControllerAutoShow​(boolean controllerAutoShow)

      Sets whether the playback controls are automatically shown when playback starts, pauses, ends, or fails. If set to false, the playback controls can be manually operated with `showController()` and `hideController()`.
      Parameters:
        `controllerAutoShow` - Whether the playback controls are allowed to show automatically.

    - #### setControllerHideDuringAds

          public void setControllerHideDuringAds​(boolean controllerHideDuringAds)

      Sets whether the playback controls are hidden when ads are playing. Controls are always shown during ads if they are enabled and the player is paused.
      Parameters:
        `controllerHideDuringAds` - Whether the playback controls are hidden when ads are playing.

    - #### setControllerVisibilityListener

          public void setControllerVisibilityListener​(@Nullable
                                                      StyledPlayerControlView.VisibilityListener listener)

      Set the `StyledPlayerControlView.VisibilityListener`.
      Parameters:
        `listener` - The listener to be notified about visibility changes, or null to remove the current listener.

    - #### setControllerOnFullScreenModeChangedListener

          public void setControllerOnFullScreenModeChangedListener​(@Nullable
                                                                   StyledPlayerControlView.OnFullScreenModeChangedListener listener)

      Sets the `StyledPlayerControlView.OnFullScreenModeChangedListener`.
      Parameters:
        `listener` - The listener to be notified when the fullscreen button is clicked, or null to remove the current listener and hide the fullscreen button.

    - #### setControlDispatcher

          @Deprecated
          public void setControlDispatcher​(ControlDispatcher controlDispatcher)

      Deprecated.
      Use a `ForwardingPlayer` and pass it to `setPlayer(Player)` instead. You can also customize some operations when configuring the player (for example by using `SimpleExoPlayer.Builder.setSeekBackIncrementMs(long)`).

    - #### setShowRewindButton

          public void setShowRewindButton​(boolean showRewindButton)

      Sets whether the rewind button is shown.
      Parameters:
        `showRewindButton` - Whether the rewind button is shown.

    - #### setShowFastForwardButton

          public void setShowFastForwardButton​(boolean showFastForwardButton)

      Sets whether the fast forward button is shown.
      Parameters:
        `showFastForwardButton` - Whether the fast forward button is shown.

    - #### setShowPreviousButton

          public void setShowPreviousButton​(boolean showPreviousButton)

      Sets whether the previous button is shown.
      Parameters:
        `showPreviousButton` - Whether the previous button is shown.

    - #### setShowNextButton

          public void setShowNextButton​(boolean showNextButton)

      Sets whether the next button is shown.
      Parameters:
        `showNextButton` - Whether the next button is shown.

    - #### setRepeatToggleModes

          public void setRepeatToggleModes​(@RepeatToggleModes
                                           int repeatToggleModes)

      Sets which repeat toggle modes are enabled.
      Parameters:
        `repeatToggleModes` - A set of `RepeatModeUtil.RepeatToggleModes`.

    - #### setShowShuffleButton

          public void setShowShuffleButton​(boolean showShuffleButton)

      Sets whether the shuffle button is shown.
      Parameters:
        `showShuffleButton` - Whether the shuffle button is shown.

    - #### setShowSubtitleButton

          public void setShowSubtitleButton​(boolean showSubtitleButton)

      Sets whether the subtitle button is shown.
      Parameters:
        `showSubtitleButton` - Whether the subtitle button is shown.

    - #### setShowVrButton

          public void setShowVrButton​(boolean showVrButton)

      Sets whether the vr button is shown.
      Parameters:
        `showVrButton` - Whether the vr button is shown.

    - #### setShowMultiWindowTimeBar

          public void setShowMultiWindowTimeBar​(boolean showMultiWindowTimeBar)

      Sets whether the time bar should show all windows, as opposed to just the current one.
      Parameters:
        `showMultiWindowTimeBar` - Whether to show all windows.

    - #### setExtraAdGroupMarkers

          public void setExtraAdGroupMarkers​(@Nullable
                                             long[] extraAdGroupTimesMs,
                                             @Nullable
                                             boolean[] extraPlayedAdGroups)

      Sets the millisecond positions of extra ad markers relative to the start of the window (or timeline, if in multi-window mode) and whether each extra ad has been played or not. The markers are shown in addition to any ad markers for ads in the player's timeline.
      Parameters:
        `extraAdGroupTimesMs` - The millisecond timestamps of the extra ad markers to show, or `null` to show no extra ad markers.
        `extraPlayedAdGroups` - Whether each ad has been played, or `null` to show no extra ad markers.

    - #### setAspectRatioListener

          public void setAspectRatioListener​(@Nullable
                                             AspectRatioFrameLayout.AspectRatioListener listener)

      Set the `AspectRatioFrameLayout.AspectRatioListener`.
      Parameters:
        `listener` - The listener to be notified about aspect ratios changes of the video content or the content frame.

    - #### getVideoSurfaceView

          @Nullable
          public View getVideoSurfaceView()

      Gets the view onto which video is rendered. This is a:
      - `SurfaceView` by default, or if the `surface_type` attribute is set to `surface_view`.
      - `TextureView` if `surface_type` is `texture_view`.
      - `SphericalGLSurfaceView` if `surface_type` is `spherical_gl_surface_view`.
      - `VideoDecoderGLSurfaceView` if `surface_type` is `video_decoder_gl_surface_view`.
      - `null` if `surface_type` is `none`.
      Returns:
        The `SurfaceView`, `TextureView`, `SphericalGLSurfaceView`, `VideoDecoderGLSurfaceView` or `null`.

    - #### getOverlayFrameLayout

          @Nullable
          public FrameLayout getOverlayFrameLayout()

      Gets the overlay `FrameLayout`, which can be populated with UI elements to show on top of the player.
      Returns:
        The overlay `FrameLayout`, or `null` if the layout has been customized and the overlay is not present.

    - #### getSubtitleView

          @Nullable
          public SubtitleView getSubtitleView()

      Gets the `SubtitleView`.
      Returns:
        The `SubtitleView`, or `null` if the layout has been customized and the subtitle view is not present.

    - #### onTouchEvent

          public boolean onTouchEvent​(MotionEvent event)

      Overrides:
        `onTouchEvent` in class `View`

    - #### performClick

          public boolean performClick()

      Overrides:
        `performClick` in class `View`

    - #### onTrackballEvent

          public boolean onTrackballEvent​(MotionEvent ev)

      Overrides:
        `onTrackballEvent` in class `View`

    - #### onResume

          public void onResume()

      Should be called when the player is visible to the user, if the `surface_type` extends `GLSurfaceView`. It is the counterpart to `onPause()`.

      This method should typically be called in `Activity.onStart()`, or `Activity.onResume()` for API versions <= 23.

    - #### onPause

          public void onPause()

      Should be called when the player is no longer visible to the user, if the `surface_type` extends `GLSurfaceView`. It is the counterpart to `onResume()`.

      This method should typically be called in `Activity.onStop()`, or `Activity.onPause()` for API versions <= 23.

    - #### onContentAspectRatioChanged

          protected void onContentAspectRatioChanged​(@Nullable
                                                     AspectRatioFrameLayout contentFrame,
                                                     float aspectRatio)

      Called when there's a change in the desired aspect ratio of the content frame. The default implementation sets the aspect ratio of the content frame to the specified value.
      Parameters:
        `contentFrame` - The content frame, or `null`.
        `aspectRatio` - The aspect ratio to apply.

    - #### getAdViewGroup

          public ViewGroup getAdViewGroup()

      Description copied from interface: `AdViewProvider`
      Returns the `ViewGroup` on top of the player that will show any ad UI, or `null` if playing audio-only ads. Any views on top of the returned view group must be described by `AdOverlayInfos` returned by `AdViewProvider.getAdOverlayInfos()`, for accurate viewability measurement.
      Specified by:
        `getAdViewGroup` in interface `AdViewProvider`

    - #### getAdOverlayInfos

          public List<AdOverlayInfo> getAdOverlayInfos()

      Description copied from interface: `AdViewProvider`
      Returns a list of `AdOverlayInfo` instances describing views that are on top of the ad view group, but that are essential for controlling playback and should be excluded from ad viewability measurements.

      Each view must be either a fully transparent overlay (for capturing touch events), or a small piece of transient UI that is essential to the user experience of playback (such as a button to pause/resume playback or a transient full-screen or cast button). For more information see the documentation for your ads loader.

      Specified by:
        `getAdOverlayInfos` in interface `AdViewProvider`