public class

ForwardingPlayer

extends java.lang.Object

implements Player

 java.lang.Object

↳androidx.media3.common.ForwardingPlayer

Gradle dependencies

compile group: 'androidx.media3', name: 'media3-common', version: '1.5.0-alpha01'

  • groupId: androidx.media3
  • artifactId: media3-common
  • version: 1.5.0-alpha01

Artifact androidx.media3:media3-common:1.5.0-alpha01 it located at Google repository (https://maven.google.com/)

Overview

A Player that forwards method calls to another Player. Applications can use this class to suppress or modify specific operations, by overriding the respective methods.

Summary

Constructors
publicForwardingPlayer(Player player)

Creates a new instance that forwards all operations to player.

Methods
public voidaddListener(Player.Listener listener)

Calls Player.addListener(Player.Listener) on the delegate.

public voidaddMediaItem(int index, MediaItem mediaItem)

Calls Player.addMediaItem(int, MediaItem) on the delegate.

public voidaddMediaItem(MediaItem mediaItem)

Calls Player.addMediaItem(MediaItem) on the delegate.

public voidaddMediaItems(int index, java.util.List<MediaItem> mediaItems)

Calls Player.addMediaItems(int, List) on the delegate.

public voidaddMediaItems(java.util.List<MediaItem> mediaItems)

Calls Player.addMediaItems(List) on the delegate.

public booleancanAdvertiseSession()

Calls Player.canAdvertiseSession() on the delegate and returns the result.

public voidclearMediaItems()

Calls Player.clearMediaItems() on the delegate.

public voidclearVideoSurface()

Calls Player.clearVideoSurface() on the delegate.

public voidclearVideoSurface(Surface surface)

Calls Player.clearVideoSurface(Surface) on the delegate.

public voidclearVideoSurfaceHolder(SurfaceHolder surfaceHolder)

Calls Player.clearVideoSurfaceHolder(SurfaceHolder) on the delegate.

public voidclearVideoSurfaceView(SurfaceView surfaceView)

Calls Player.clearVideoSurfaceView(SurfaceView) on the delegate.

public voidclearVideoTextureView(TextureView textureView)

Calls Player.clearVideoTextureView(TextureView) on the delegate.

public voiddecreaseDeviceVolume()

public voiddecreaseDeviceVolume(int flags)

Calls Player.decreaseDeviceVolume(int) on the delegate.

public LoopergetApplicationLooper()

Calls Player.getApplicationLooper() on the delegate and returns the result.

public AudioAttributesgetAudioAttributes()

Calls Player.getAudioAttributes() on the delegate and returns the result.

public Player.CommandsgetAvailableCommands()

Calls Player.getAvailableCommands() on the delegate and returns the result.

public intgetBufferedPercentage()

Calls Player.getBufferedPercentage() on the delegate and returns the result.

public longgetBufferedPosition()

Calls Player.getBufferedPosition() on the delegate and returns the result.

public longgetContentBufferedPosition()

Calls Player.getContentBufferedPosition() on the delegate and returns the result.

public longgetContentDuration()

Calls Player.getContentDuration() on the delegate and returns the result.

public longgetContentPosition()

Calls Player.getContentPosition() on the delegate and returns the result.

public intgetCurrentAdGroupIndex()

Calls Player.getCurrentAdGroupIndex() on the delegate and returns the result.

public intgetCurrentAdIndexInAdGroup()

Calls Player.getCurrentAdIndexInAdGroup() on the delegate and returns the result.

public CueGroupgetCurrentCues()

Calls Player.getCurrentCues() on the delegate and returns the result.

public longgetCurrentLiveOffset()

Calls Player.getCurrentLiveOffset() on the delegate and returns the result.

public java.lang.ObjectgetCurrentManifest()

Calls Player.getCurrentManifest() on the delegate and returns the result.

public MediaItemgetCurrentMediaItem()

Calls Player.getCurrentMediaItem() on the delegate and returns the result.

public intgetCurrentMediaItemIndex()

Calls Player.getCurrentMediaItemIndex() on the delegate and returns the result.

public intgetCurrentPeriodIndex()

Calls Player.getCurrentPeriodIndex() on the delegate and returns the result.

public longgetCurrentPosition()

Calls Player.getCurrentPosition() on the delegate and returns the result.

public TimelinegetCurrentTimeline()

Calls Player.getCurrentTimeline() on the delegate and returns the result.

public TracksgetCurrentTracks()

Calls Player.getCurrentTracks() on the delegate and returns the result.

public intgetCurrentWindowIndex()

Calls Player.getCurrentWindowIndex() on the delegate and returns the result.

public DeviceInfogetDeviceInfo()

Calls Player.getDeviceInfo() on the delegate and returns the result.

public intgetDeviceVolume()

Calls Player.getDeviceVolume() on the delegate and returns the result.

public longgetDuration()

Calls Player.getDuration() on the delegate and returns the result.

public longgetMaxSeekToPreviousPosition()

Calls Player.getMaxSeekToPreviousPosition() on the delegate and returns the result.

public MediaItemgetMediaItemAt(int index)

Calls Player.getMediaItemAt(int) on the delegate and returns the result.

public intgetMediaItemCount()

Calls Player.getMediaItemCount() on the delegate and returns the result.

public MediaMetadatagetMediaMetadata()

Calls Player.getMediaMetadata() on the delegate and returns the result.

public intgetNextMediaItemIndex()

Calls Player.getNextMediaItemIndex() on the delegate and returns the result.

public intgetNextWindowIndex()

Calls Player.getNextWindowIndex() on the delegate and returns the result.

public PlaybackParametersgetPlaybackParameters()

Calls Player.getPlaybackParameters() on the delegate and returns the result.

public intgetPlaybackState()

Calls Player.getPlaybackState() on the delegate and returns the result.

public intgetPlaybackSuppressionReason()

Calls Player.getPlaybackSuppressionReason() on the delegate and returns the result.

public PlaybackExceptiongetPlayerError()

Calls Player.getPlayerError() on the delegate and returns the result.

public MediaMetadatagetPlaylistMetadata()

Calls Player.getPlaylistMetadata() on the delegate and returns the result.

public booleangetPlayWhenReady()

Calls Player.getPlayWhenReady() on the delegate and returns the result.

public intgetPreviousMediaItemIndex()

Calls Player.getPreviousMediaItemIndex() on the delegate and returns the result.

public intgetPreviousWindowIndex()

Calls Player.getPreviousWindowIndex() on the delegate and returns the result.

public intgetRepeatMode()

Calls Player.getRepeatMode() on the delegate and returns the result.

public longgetSeekBackIncrement()

Calls Player.getSeekBackIncrement() on the delegate and returns the result.

public longgetSeekForwardIncrement()

Calls Player.getSeekForwardIncrement() on the delegate and returns the result.

public booleangetShuffleModeEnabled()

Calls Player.getShuffleModeEnabled() on the delegate and returns the result.

public SizegetSurfaceSize()

Calls Player.getSurfaceSize() on the delegate and returns the result.

public longgetTotalBufferedDuration()

Calls Player.getTotalBufferedDuration() on the delegate and returns the result.

public TrackSelectionParametersgetTrackSelectionParameters()

Calls Player.getTrackSelectionParameters() on the delegate and returns the result.

public VideoSizegetVideoSize()

Calls Player.getVideoSize() on the delegate and returns the result.

public floatgetVolume()

Calls Player.getVolume() on the delegate and returns the result.

public PlayergetWrappedPlayer()

Returns the Player to which operations are forwarded.

public booleanhasNext()

Calls Player.hasNext() on the delegate and returns the result.

public booleanhasNextMediaItem()

Calls Player.hasNextMediaItem() on the delegate and returns the result.

public booleanhasNextWindow()

Calls Player.hasNextWindow() on the delegate and returns the result.

public booleanhasPreviousMediaItem()

Calls Player.hasPreviousMediaItem() on the delegate and returns the result.

public voidincreaseDeviceVolume()

public voidincreaseDeviceVolume(int flags)

Calls Player.increaseDeviceVolume(int) on the delegate.

public booleanisCommandAvailable(int command)

Calls Player.isCommandAvailable(int) on the delegate and returns the result.

public booleanisCurrentMediaItemDynamic()

Calls Player.isCurrentMediaItemDynamic() on the delegate and returns the result.

public booleanisCurrentMediaItemLive()

Calls Player.isCurrentMediaItemLive() on the delegate and returns the result.

public booleanisCurrentMediaItemSeekable()

Calls Player.isCurrentMediaItemSeekable() on the delegate and returns the result.

public booleanisCurrentWindowDynamic()

Calls Player.isCurrentWindowDynamic() on the delegate and returns the result.

public booleanisCurrentWindowLive()

Calls Player.isCurrentWindowLive() on the delegate and returns the result.

public booleanisCurrentWindowSeekable()

Calls Player.isCurrentWindowSeekable() on the delegate and returns the result.

public booleanisDeviceMuted()

Calls Player.isDeviceMuted() on the delegate and returns the result.

public booleanisLoading()

Calls Player.isLoading() on the delegate and returns the result.

public booleanisPlaying()

Calls Player.isPlaying() on the delegate and returns the result.

public booleanisPlayingAd()

Calls Player.isPlayingAd() on the delegate and returns the result.

public voidmoveMediaItem(int currentIndex, int newIndex)

Calls Player.moveMediaItem(int, int) on the delegate.

public voidmoveMediaItems(int fromIndex, int toIndex, int newIndex)

Calls Player.moveMediaItems(int, int, int) on the delegate.

public voidnext()

Calls Player.next() on the delegate.

public voidpause()

Calls Player.pause() on the delegate.

public voidplay()

Calls Player.play() on the delegate.

public voidprepare()

Calls Player.prepare() on the delegate.

public voidrelease()

Calls Player.release() on the delegate.

public voidremoveListener(Player.Listener listener)

Calls Player.removeListener(Player.Listener) on the delegate.

public voidremoveMediaItem(int index)

Calls Player.removeMediaItem(int) on the delegate.

public voidremoveMediaItems(int fromIndex, int toIndex)

Calls Player.removeMediaItems(int, int) on the delegate.

public voidreplaceMediaItem(int index, MediaItem mediaItem)

Calls Player.replaceMediaItem(int, MediaItem) on the delegate.

public voidreplaceMediaItems(int fromIndex, int toIndex, java.util.List<MediaItem> mediaItems)

Calls Player.replaceMediaItems(int, int, List) on the delegate.

public voidseekBack()

Calls Player.seekBack() on the delegate.

public voidseekForward()

Calls Player.seekForward() on the delegate.

public voidseekTo(int mediaItemIndex, long positionMs)

Calls Player.seekTo(int, long) on the delegate.

public voidseekTo(long positionMs)

Calls Player.seekTo(long) on the delegate.

public voidseekToDefaultPosition()

Calls Player.seekToDefaultPosition() on the delegate.

public voidseekToDefaultPosition(int mediaItemIndex)

Calls Player.seekToDefaultPosition(int) on the delegate.

public voidseekToNext()

Calls Player.seekToNext() on the delegate.

public voidseekToNextMediaItem()

Calls Player.seekToNextMediaItem() on the delegate.

public voidseekToNextWindow()

Calls Player.seekToNextWindow() on the delegate.

public voidseekToPrevious()

Calls Player.seekToPrevious() on the delegate.

public voidseekToPreviousMediaItem()

Calls Player.seekToPreviousMediaItem() on the delegate.

public voidseekToPreviousWindow()

Calls Player.seekToPreviousWindow() on the delegate.

public voidsetAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus)

Calls Player.setAudioAttributes(AudioAttributes, boolean) on the delegate.

public voidsetDeviceMuted(boolean muted)

public voidsetDeviceMuted(boolean muted, int flags)

Calls Player.setDeviceMuted(boolean, int) on the delegate.

public voidsetDeviceVolume(int volume)

public voidsetDeviceVolume(int volume, int flags)

Calls Player.setDeviceVolume(int, int) on the delegate.

public voidsetMediaItem(MediaItem mediaItem)

Calls Player.setMediaItem(MediaItem) on the delegate.

public voidsetMediaItem(MediaItem mediaItem, boolean resetPosition)

Calls Player.setMediaItem(MediaItem, boolean) on the delegate.

public voidsetMediaItem(MediaItem mediaItem, long startPositionMs)

Calls Player.setMediaItem(MediaItem, long) on the delegate.

public voidsetMediaItems(java.util.List<MediaItem> mediaItems)

Calls Player.setMediaItems(List) on the delegate.

public voidsetMediaItems(java.util.List<MediaItem> mediaItems, boolean resetPosition)

Calls Player.setMediaItems(List, boolean) ()} on the delegate.

public voidsetMediaItems(java.util.List<MediaItem> mediaItems, int startIndex, long startPositionMs)

Calls Player.setMediaItems(List, int, long) on the delegate.

public voidsetPlaybackParameters(PlaybackParameters playbackParameters)

Calls Player.setPlaybackParameters(PlaybackParameters) on the delegate.

public voidsetPlaybackSpeed(float speed)

Calls Player.setPlaybackSpeed(float) on the delegate.

public voidsetPlaylistMetadata(MediaMetadata mediaMetadata)

Calls Player.setPlaylistMetadata(MediaMetadata) on the delegate.

public voidsetPlayWhenReady(boolean playWhenReady)

Calls Player.setPlayWhenReady(boolean) on the delegate.

public voidsetRepeatMode(int repeatMode)

Calls Player.setRepeatMode(int) on the delegate.

public voidsetShuffleModeEnabled(boolean shuffleModeEnabled)

Calls Player.setShuffleModeEnabled(boolean) on the delegate.

public voidsetTrackSelectionParameters(TrackSelectionParameters parameters)

Calls Player.setTrackSelectionParameters(TrackSelectionParameters) on the delegate.

public voidsetVideoSurface(Surface surface)

Calls Player.setVideoSurface(Surface) on the delegate.

public voidsetVideoSurfaceHolder(SurfaceHolder surfaceHolder)

Calls Player.setVideoSurfaceHolder(SurfaceHolder) on the delegate.

public voidsetVideoSurfaceView(SurfaceView surfaceView)

Calls Player.setVideoSurfaceView(SurfaceView) on the delegate.

public voidsetVideoTextureView(TextureView textureView)

Calls Player.setVideoTextureView(TextureView) on the delegate.

public voidsetVolume(float volume)

Calls Player.setVolume(float) on the delegate.

public voidstop()

Calls Player.stop() on the delegate.

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public ForwardingPlayer(Player player)

Creates a new instance that forwards all operations to player.

Methods

public Looper getApplicationLooper()

Calls Player.getApplicationLooper() on the delegate and returns the result.

public void addListener(Player.Listener listener)

Calls Player.addListener(Player.Listener) on the delegate.

Overrides of this method must not directly call delegate.addListener. If the override wants to pass the Player.Listener instance to the delegate Player, it must do so by calling super.addListener instead. This ensures the correct Player instance is passed to Player.Listener (i.e. this forwarding instance, and not the underlying delegate instance).

public void removeListener(Player.Listener listener)

Calls Player.removeListener(Player.Listener) on the delegate.

Overrides of this method must not directly call delegate.removeListener. If the override wants to pass the Player.Listener instance to the delegate Player, it must do so by calling super.removeListener instead.

public void setMediaItems(java.util.List<MediaItem> mediaItems)

Calls Player.setMediaItems(List) on the delegate.

public void setMediaItems(java.util.List<MediaItem> mediaItems, boolean resetPosition)

Calls Player.setMediaItems(List, boolean) ()} on the delegate.

public void setMediaItems(java.util.List<MediaItem> mediaItems, int startIndex, long startPositionMs)

Calls Player.setMediaItems(List, int, long) on the delegate.

public void setMediaItem(MediaItem mediaItem)

Calls Player.setMediaItem(MediaItem) on the delegate.

public void setMediaItem(MediaItem mediaItem, long startPositionMs)

Calls Player.setMediaItem(MediaItem, long) on the delegate.

public void setMediaItem(MediaItem mediaItem, boolean resetPosition)

Calls Player.setMediaItem(MediaItem, boolean) on the delegate.

public void addMediaItem(MediaItem mediaItem)

Calls Player.addMediaItem(MediaItem) on the delegate.

public void addMediaItem(int index, MediaItem mediaItem)

Calls Player.addMediaItem(int, MediaItem) on the delegate.

public void addMediaItems(java.util.List<MediaItem> mediaItems)

Calls Player.addMediaItems(List) on the delegate.

public void addMediaItems(int index, java.util.List<MediaItem> mediaItems)

Calls Player.addMediaItems(int, List) on the delegate.

public void moveMediaItem(int currentIndex, int newIndex)

Calls Player.moveMediaItem(int, int) on the delegate.

public void moveMediaItems(int fromIndex, int toIndex, int newIndex)

Calls Player.moveMediaItems(int, int, int) on the delegate.

public void replaceMediaItem(int index, MediaItem mediaItem)

Calls Player.replaceMediaItem(int, MediaItem) on the delegate.

public void replaceMediaItems(int fromIndex, int toIndex, java.util.List<MediaItem> mediaItems)

Calls Player.replaceMediaItems(int, int, List) on the delegate.

public void removeMediaItem(int index)

Calls Player.removeMediaItem(int) on the delegate.

public void removeMediaItems(int fromIndex, int toIndex)

Calls Player.removeMediaItems(int, int) on the delegate.

public void clearMediaItems()

Calls Player.clearMediaItems() on the delegate.

public boolean isCommandAvailable(int command)

Calls Player.isCommandAvailable(int) on the delegate and returns the result.

public boolean canAdvertiseSession()

Calls Player.canAdvertiseSession() on the delegate and returns the result.

public Player.Commands getAvailableCommands()

Calls Player.getAvailableCommands() on the delegate and returns the result.

public void prepare()

Calls Player.prepare() on the delegate.

public int getPlaybackState()

Calls Player.getPlaybackState() on the delegate and returns the result.

public int getPlaybackSuppressionReason()

Calls Player.getPlaybackSuppressionReason() on the delegate and returns the result.

public boolean isPlaying()

Calls Player.isPlaying() on the delegate and returns the result.

public PlaybackException getPlayerError()

Calls Player.getPlayerError() on the delegate and returns the result.

public void play()

Calls Player.play() on the delegate.

public void pause()

Calls Player.pause() on the delegate.

public void setPlayWhenReady(boolean playWhenReady)

Calls Player.setPlayWhenReady(boolean) on the delegate.

public boolean getPlayWhenReady()

Calls Player.getPlayWhenReady() on the delegate and returns the result.

public void setRepeatMode(int repeatMode)

Calls Player.setRepeatMode(int) on the delegate.

public int getRepeatMode()

Calls Player.getRepeatMode() on the delegate and returns the result.

public void setShuffleModeEnabled(boolean shuffleModeEnabled)

Calls Player.setShuffleModeEnabled(boolean) on the delegate.

public boolean getShuffleModeEnabled()

Calls Player.getShuffleModeEnabled() on the delegate and returns the result.

public boolean isLoading()

Calls Player.isLoading() on the delegate and returns the result.

public void seekToDefaultPosition()

Calls Player.seekToDefaultPosition() on the delegate.

public void seekToDefaultPosition(int mediaItemIndex)

Calls Player.seekToDefaultPosition(int) on the delegate.

public void seekTo(long positionMs)

Calls Player.seekTo(long) on the delegate.

public void seekTo(int mediaItemIndex, long positionMs)

Calls Player.seekTo(int, long) on the delegate.

public long getSeekBackIncrement()

Calls Player.getSeekBackIncrement() on the delegate and returns the result.

public void seekBack()

Calls Player.seekBack() on the delegate.

public long getSeekForwardIncrement()

Calls Player.getSeekForwardIncrement() on the delegate and returns the result.

public void seekForward()

Calls Player.seekForward() on the delegate.

public boolean hasPreviousMediaItem()

Calls Player.hasPreviousMediaItem() on the delegate and returns the result.

public void seekToPreviousWindow()

Deprecated: Use ForwardingPlayer.seekToPreviousMediaItem() instead.

Calls Player.seekToPreviousWindow() on the delegate.

public void seekToPreviousMediaItem()

Calls Player.seekToPreviousMediaItem() on the delegate.

public void seekToPrevious()

Calls Player.seekToPrevious() on the delegate.

public long getMaxSeekToPreviousPosition()

Calls Player.getMaxSeekToPreviousPosition() on the delegate and returns the result.

public boolean hasNext()

Deprecated: Use ForwardingPlayer.hasNextMediaItem() instead.

Calls Player.hasNext() on the delegate and returns the result.

public boolean hasNextWindow()

Deprecated: Use ForwardingPlayer.hasNextMediaItem() instead.

Calls Player.hasNextWindow() on the delegate and returns the result.

public boolean hasNextMediaItem()

Calls Player.hasNextMediaItem() on the delegate and returns the result.

public void next()

Deprecated: Use ForwardingPlayer.seekToNextMediaItem() instead.

Calls Player.next() on the delegate.

public void seekToNextWindow()

Deprecated: Use ForwardingPlayer.seekToNextMediaItem() instead.

Calls Player.seekToNextWindow() on the delegate.

public void seekToNextMediaItem()

Calls Player.seekToNextMediaItem() on the delegate.

public void seekToNext()

Calls Player.seekToNext() on the delegate.

public void setPlaybackParameters(PlaybackParameters playbackParameters)

Calls Player.setPlaybackParameters(PlaybackParameters) on the delegate.

public void setPlaybackSpeed(float speed)

Calls Player.setPlaybackSpeed(float) on the delegate.

public PlaybackParameters getPlaybackParameters()

Calls Player.getPlaybackParameters() on the delegate and returns the result.

public void stop()

Calls Player.stop() on the delegate.

public void release()

Calls Player.release() on the delegate.

public Tracks getCurrentTracks()

Calls Player.getCurrentTracks() on the delegate and returns the result.

public TrackSelectionParameters getTrackSelectionParameters()

Calls Player.getTrackSelectionParameters() on the delegate and returns the result.

public void setTrackSelectionParameters(TrackSelectionParameters parameters)

Calls Player.setTrackSelectionParameters(TrackSelectionParameters) on the delegate.

public MediaMetadata getMediaMetadata()

Calls Player.getMediaMetadata() on the delegate and returns the result.

public MediaMetadata getPlaylistMetadata()

Calls Player.getPlaylistMetadata() on the delegate and returns the result.

public void setPlaylistMetadata(MediaMetadata mediaMetadata)

Calls Player.setPlaylistMetadata(MediaMetadata) on the delegate.

public java.lang.Object getCurrentManifest()

Calls Player.getCurrentManifest() on the delegate and returns the result.

public Timeline getCurrentTimeline()

Calls Player.getCurrentTimeline() on the delegate and returns the result.

public int getCurrentPeriodIndex()

Calls Player.getCurrentPeriodIndex() on the delegate and returns the result.

public int getCurrentWindowIndex()

Deprecated: Use ForwardingPlayer.getCurrentMediaItemIndex() instead.

Calls Player.getCurrentWindowIndex() on the delegate and returns the result.

public int getCurrentMediaItemIndex()

Calls Player.getCurrentMediaItemIndex() on the delegate and returns the result.

public int getNextWindowIndex()

Deprecated: Use ForwardingPlayer.getNextMediaItemIndex() instead.

Calls Player.getNextWindowIndex() on the delegate and returns the result.

public int getNextMediaItemIndex()

Calls Player.getNextMediaItemIndex() on the delegate and returns the result.

public int getPreviousWindowIndex()

Deprecated: Use ForwardingPlayer.getPreviousMediaItemIndex() instead.

Calls Player.getPreviousWindowIndex() on the delegate and returns the result.

public int getPreviousMediaItemIndex()

Calls Player.getPreviousMediaItemIndex() on the delegate and returns the result.

public MediaItem getCurrentMediaItem()

Calls Player.getCurrentMediaItem() on the delegate and returns the result.

public int getMediaItemCount()

Calls Player.getMediaItemCount() on the delegate and returns the result.

public MediaItem getMediaItemAt(int index)

Calls Player.getMediaItemAt(int) on the delegate and returns the result.

public long getDuration()

Calls Player.getDuration() on the delegate and returns the result.

public long getCurrentPosition()

Calls Player.getCurrentPosition() on the delegate and returns the result.

public long getBufferedPosition()

Calls Player.getBufferedPosition() on the delegate and returns the result.

public int getBufferedPercentage()

Calls Player.getBufferedPercentage() on the delegate and returns the result.

public long getTotalBufferedDuration()

Calls Player.getTotalBufferedDuration() on the delegate and returns the result.

public boolean isCurrentWindowDynamic()

Deprecated: Use ForwardingPlayer.isCurrentMediaItemDynamic() instead.

Calls Player.isCurrentWindowDynamic() on the delegate and returns the result.

public boolean isCurrentMediaItemDynamic()

Calls Player.isCurrentMediaItemDynamic() on the delegate and returns the result.

public boolean isCurrentWindowLive()

Deprecated: Use ForwardingPlayer.isCurrentMediaItemLive() instead.

Calls Player.isCurrentWindowLive() on the delegate and returns the result.

public boolean isCurrentMediaItemLive()

Calls Player.isCurrentMediaItemLive() on the delegate and returns the result.

public long getCurrentLiveOffset()

Calls Player.getCurrentLiveOffset() on the delegate and returns the result.

public boolean isCurrentWindowSeekable()

Deprecated: Use ForwardingPlayer.isCurrentMediaItemSeekable() instead.

Calls Player.isCurrentWindowSeekable() on the delegate and returns the result.

public boolean isCurrentMediaItemSeekable()

Calls Player.isCurrentMediaItemSeekable() on the delegate and returns the result.

public boolean isPlayingAd()

Calls Player.isPlayingAd() on the delegate and returns the result.

public int getCurrentAdGroupIndex()

Calls Player.getCurrentAdGroupIndex() on the delegate and returns the result.

public int getCurrentAdIndexInAdGroup()

Calls Player.getCurrentAdIndexInAdGroup() on the delegate and returns the result.

public long getContentDuration()

Calls Player.getContentDuration() on the delegate and returns the result.

public long getContentPosition()

Calls Player.getContentPosition() on the delegate and returns the result.

public long getContentBufferedPosition()

Calls Player.getContentBufferedPosition() on the delegate and returns the result.

public AudioAttributes getAudioAttributes()

Calls Player.getAudioAttributes() on the delegate and returns the result.

public void setVolume(float volume)

Calls Player.setVolume(float) on the delegate.

public float getVolume()

Calls Player.getVolume() on the delegate and returns the result.

public VideoSize getVideoSize()

Calls Player.getVideoSize() on the delegate and returns the result.

public Size getSurfaceSize()

Calls Player.getSurfaceSize() on the delegate and returns the result.

public void clearVideoSurface()

Calls Player.clearVideoSurface() on the delegate.

public void clearVideoSurface(Surface surface)

Calls Player.clearVideoSurface(Surface) on the delegate.

public void setVideoSurface(Surface surface)

Calls Player.setVideoSurface(Surface) on the delegate.

public void setVideoSurfaceHolder(SurfaceHolder surfaceHolder)

Calls Player.setVideoSurfaceHolder(SurfaceHolder) on the delegate.

public void clearVideoSurfaceHolder(SurfaceHolder surfaceHolder)

Calls Player.clearVideoSurfaceHolder(SurfaceHolder) on the delegate.

public void setVideoSurfaceView(SurfaceView surfaceView)

Calls Player.setVideoSurfaceView(SurfaceView) on the delegate.

public void clearVideoSurfaceView(SurfaceView surfaceView)

Calls Player.clearVideoSurfaceView(SurfaceView) on the delegate.

public void setVideoTextureView(TextureView textureView)

Calls Player.setVideoTextureView(TextureView) on the delegate.

public void clearVideoTextureView(TextureView textureView)

Calls Player.clearVideoTextureView(TextureView) on the delegate.

public CueGroup getCurrentCues()

Calls Player.getCurrentCues() on the delegate and returns the result.

public DeviceInfo getDeviceInfo()

Calls Player.getDeviceInfo() on the delegate and returns the result.

public int getDeviceVolume()

Calls Player.getDeviceVolume() on the delegate and returns the result.

public boolean isDeviceMuted()

Calls Player.isDeviceMuted() on the delegate and returns the result.

public void setDeviceVolume(int volume)

Deprecated: Use ForwardingPlayer.setDeviceVolume(int, int) instead.

public void setDeviceVolume(int volume, int flags)

Calls Player.setDeviceVolume(int, int) on the delegate.

public void increaseDeviceVolume()

Deprecated: Use ForwardingPlayer.increaseDeviceVolume(int) instead.

public void increaseDeviceVolume(int flags)

Calls Player.increaseDeviceVolume(int) on the delegate.

public void decreaseDeviceVolume()

Deprecated: Use ForwardingPlayer.decreaseDeviceVolume(int) instead.

public void decreaseDeviceVolume(int flags)

Calls Player.decreaseDeviceVolume(int) on the delegate.

public void setDeviceMuted(boolean muted)

Deprecated: Use ForwardingPlayer.setDeviceMuted(boolean, int) instead.

public void setDeviceMuted(boolean muted, int flags)

Calls Player.setDeviceMuted(boolean, int) on the delegate.

public void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus)

Calls Player.setAudioAttributes(AudioAttributes, boolean) on the delegate.

public Player getWrappedPlayer()

Returns the Player to which operations are forwarded.

Source

/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package androidx.media3.common;

import android.os.Looper;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.TextureView;
import androidx.annotation.Nullable;
import androidx.media3.common.text.Cue;
import androidx.media3.common.text.CueGroup;
import androidx.media3.common.util.Size;
import androidx.media3.common.util.UnstableApi;
import java.util.List;

/**
 * A {@link Player} that forwards method calls to another {@link Player}. Applications can use this
 * class to suppress or modify specific operations, by overriding the respective methods.
 */
@UnstableApi
public class ForwardingPlayer implements Player {

  private final Player player;

  /** Creates a new instance that forwards all operations to {@code player}. */
  public ForwardingPlayer(Player player) {
    this.player = player;
  }

  /** Calls {@link Player#getApplicationLooper()} on the delegate and returns the result. */
  @Override
  public Looper getApplicationLooper() {
    return player.getApplicationLooper();
  }

  /**
   * Calls {@link Player#addListener(Listener)} on the delegate.
   *
   * <p>Overrides of this method must <strong>not</strong> directly call {@code
   * delegate.addListener}. If the override wants to pass the {@link Player.Listener} instance to
   * the delegate {@link Player}, it must do so by calling {@code super.addListener} instead. This
   * ensures the correct {@link Player} instance is passed to {@link
   * Player.Listener#onEvents(Player, Events)} (i.e. this forwarding instance, and not the
   * underlying {@code delegate} instance).
   */
  @Override
  public void addListener(Listener listener) {
    player.addListener(new ForwardingListener(this, listener));
  }

  /**
   * Calls {@link Player#removeListener(Listener)} on the delegate.
   *
   * <p>Overrides of this method must <strong>not</strong> directly call {@code
   * delegate.removeListener}. If the override wants to pass the {@link Player.Listener} instance to
   * the delegate {@link Player}, it must do so by calling {@code super.removeListener} instead.
   */
  @Override
  public void removeListener(Listener listener) {
    player.removeListener(new ForwardingListener(this, listener));
  }

  /** Calls {@link Player#setMediaItems(List)} on the delegate. */
  @Override
  public void setMediaItems(List<MediaItem> mediaItems) {
    player.setMediaItems(mediaItems);
  }

  /** Calls {@link Player#setMediaItems(List, boolean)} ()} on the delegate. */
  @Override
  public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) {
    player.setMediaItems(mediaItems, resetPosition);
  }

  /** Calls {@link Player#setMediaItems(List, int, long)} on the delegate. */
  @Override
  public void setMediaItems(List<MediaItem> mediaItems, int startIndex, long startPositionMs) {
    player.setMediaItems(mediaItems, startIndex, startPositionMs);
  }

  /** Calls {@link Player#setMediaItem(MediaItem)} on the delegate. */
  @Override
  public void setMediaItem(MediaItem mediaItem) {
    player.setMediaItem(mediaItem);
  }

  /** Calls {@link Player#setMediaItem(MediaItem, long)} on the delegate. */
  @Override
  public void setMediaItem(MediaItem mediaItem, long startPositionMs) {
    player.setMediaItem(mediaItem, startPositionMs);
  }

  /** Calls {@link Player#setMediaItem(MediaItem, boolean)} on the delegate. */
  @Override
  public void setMediaItem(MediaItem mediaItem, boolean resetPosition) {
    player.setMediaItem(mediaItem, resetPosition);
  }

  /** Calls {@link Player#addMediaItem(MediaItem)} on the delegate. */
  @Override
  public void addMediaItem(MediaItem mediaItem) {
    player.addMediaItem(mediaItem);
  }

  /** Calls {@link Player#addMediaItem(int, MediaItem)} on the delegate. */
  @Override
  public void addMediaItem(int index, MediaItem mediaItem) {
    player.addMediaItem(index, mediaItem);
  }

  /** Calls {@link Player#addMediaItems(List)} on the delegate. */
  @Override
  public void addMediaItems(List<MediaItem> mediaItems) {
    player.addMediaItems(mediaItems);
  }

  /** Calls {@link Player#addMediaItems(int, List)} on the delegate. */
  @Override
  public void addMediaItems(int index, List<MediaItem> mediaItems) {
    player.addMediaItems(index, mediaItems);
  }

  /** Calls {@link Player#moveMediaItem(int, int)} on the delegate. */
  @Override
  public void moveMediaItem(int currentIndex, int newIndex) {
    player.moveMediaItem(currentIndex, newIndex);
  }

  /** Calls {@link Player#moveMediaItems(int, int, int)} on the delegate. */
  @Override
  public void moveMediaItems(int fromIndex, int toIndex, int newIndex) {
    player.moveMediaItems(fromIndex, toIndex, newIndex);
  }

  /** Calls {@link Player#replaceMediaItem(int, MediaItem)} on the delegate. */
  @Override
  public void replaceMediaItem(int index, MediaItem mediaItem) {
    player.replaceMediaItem(index, mediaItem);
  }

  /** Calls {@link Player#replaceMediaItems(int, int, List)} on the delegate. */
  @Override
  public void replaceMediaItems(int fromIndex, int toIndex, List<MediaItem> mediaItems) {
    player.replaceMediaItems(fromIndex, toIndex, mediaItems);
  }

  /** Calls {@link Player#removeMediaItem(int)} on the delegate. */
  @Override
  public void removeMediaItem(int index) {
    player.removeMediaItem(index);
  }

  /** Calls {@link Player#removeMediaItems(int, int)} on the delegate. */
  @Override
  public void removeMediaItems(int fromIndex, int toIndex) {
    player.removeMediaItems(fromIndex, toIndex);
  }

  /** Calls {@link Player#clearMediaItems()} on the delegate. */
  @Override
  public void clearMediaItems() {
    player.clearMediaItems();
  }

  /** Calls {@link Player#isCommandAvailable(int)} on the delegate and returns the result. */
  @Override
  public boolean isCommandAvailable(@Command int command) {
    return player.isCommandAvailable(command);
  }

  /** Calls {@link Player#canAdvertiseSession()} on the delegate and returns the result. */
  @Override
  public boolean canAdvertiseSession() {
    return player.canAdvertiseSession();
  }

  /** Calls {@link Player#getAvailableCommands()} on the delegate and returns the result. */
  @Override
  public Commands getAvailableCommands() {
    return player.getAvailableCommands();
  }

  /** Calls {@link Player#prepare()} on the delegate. */
  @Override
  public void prepare() {
    player.prepare();
  }

  /** Calls {@link Player#getPlaybackState()} on the delegate and returns the result. */
  @Override
  public int getPlaybackState() {
    return player.getPlaybackState();
  }

  /** Calls {@link Player#getPlaybackSuppressionReason()} on the delegate and returns the result. */
  @Override
  public int getPlaybackSuppressionReason() {
    return player.getPlaybackSuppressionReason();
  }

  /** Calls {@link Player#isPlaying()} on the delegate and returns the result. */
  @Override
  public boolean isPlaying() {
    return player.isPlaying();
  }

  /** Calls {@link Player#getPlayerError()} on the delegate and returns the result. */
  @Nullable
  @Override
  public PlaybackException getPlayerError() {
    return player.getPlayerError();
  }

  /** Calls {@link Player#play()} on the delegate. */
  @Override
  public void play() {
    player.play();
  }

  /** Calls {@link Player#pause()} on the delegate. */
  @Override
  public void pause() {
    player.pause();
  }

  /** Calls {@link Player#setPlayWhenReady(boolean)} on the delegate. */
  @Override
  public void setPlayWhenReady(boolean playWhenReady) {
    player.setPlayWhenReady(playWhenReady);
  }

  /** Calls {@link Player#getPlayWhenReady()} on the delegate and returns the result. */
  @Override
  public boolean getPlayWhenReady() {
    return player.getPlayWhenReady();
  }

  /** Calls {@link Player#setRepeatMode(int)} on the delegate. */
  @Override
  public void setRepeatMode(@RepeatMode int repeatMode) {
    player.setRepeatMode(repeatMode);
  }

  /** Calls {@link Player#getRepeatMode()} on the delegate and returns the result. */
  @Override
  public int getRepeatMode() {
    return player.getRepeatMode();
  }

  /** Calls {@link Player#setShuffleModeEnabled(boolean)} on the delegate. */
  @Override
  public void setShuffleModeEnabled(boolean shuffleModeEnabled) {
    player.setShuffleModeEnabled(shuffleModeEnabled);
  }

  /** Calls {@link Player#getShuffleModeEnabled()} on the delegate and returns the result. */
  @Override
  public boolean getShuffleModeEnabled() {
    return player.getShuffleModeEnabled();
  }

  /** Calls {@link Player#isLoading()} on the delegate and returns the result. */
  @Override
  public boolean isLoading() {
    return player.isLoading();
  }

  /** Calls {@link Player#seekToDefaultPosition()} on the delegate. */
  @Override
  public void seekToDefaultPosition() {
    player.seekToDefaultPosition();
  }

  /** Calls {@link Player#seekToDefaultPosition(int)} on the delegate. */
  @Override
  public void seekToDefaultPosition(int mediaItemIndex) {
    player.seekToDefaultPosition(mediaItemIndex);
  }

  /** Calls {@link Player#seekTo(long)} on the delegate. */
  @Override
  public void seekTo(long positionMs) {
    player.seekTo(positionMs);
  }

  /** Calls {@link Player#seekTo(int, long)} on the delegate. */
  @Override
  public void seekTo(int mediaItemIndex, long positionMs) {
    player.seekTo(mediaItemIndex, positionMs);
  }

  /** Calls {@link Player#getSeekBackIncrement()} on the delegate and returns the result. */
  @Override
  public long getSeekBackIncrement() {
    return player.getSeekBackIncrement();
  }

  /** Calls {@link Player#seekBack()} on the delegate. */
  @Override
  public void seekBack() {
    player.seekBack();
  }

  /** Calls {@link Player#getSeekForwardIncrement()} on the delegate and returns the result. */
  @Override
  public long getSeekForwardIncrement() {
    return player.getSeekForwardIncrement();
  }

  /** Calls {@link Player#seekForward()} on the delegate. */
  @Override
  public void seekForward() {
    player.seekForward();
  }

  /** Calls {@link Player#hasPreviousMediaItem()} on the delegate and returns the result. */
  @Override
  public boolean hasPreviousMediaItem() {
    return player.hasPreviousMediaItem();
  }

  /**
   * Calls {@link Player#seekToPreviousWindow()} on the delegate.
   *
   * @deprecated Use {@link #seekToPreviousMediaItem()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public void seekToPreviousWindow() {
    player.seekToPreviousWindow();
  }

  /** Calls {@link Player#seekToPreviousMediaItem()} on the delegate. */
  @Override
  public void seekToPreviousMediaItem() {
    player.seekToPreviousMediaItem();
  }

  /** Calls {@link Player#seekToPrevious()} on the delegate. */
  @Override
  public void seekToPrevious() {
    player.seekToPrevious();
  }

  /** Calls {@link Player#getMaxSeekToPreviousPosition()} on the delegate and returns the result. */
  @Override
  public long getMaxSeekToPreviousPosition() {
    return player.getMaxSeekToPreviousPosition();
  }

  /**
   * Calls {@link Player#hasNext()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #hasNextMediaItem()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public boolean hasNext() {
    return player.hasNext();
  }

  /**
   * Calls {@link Player#hasNextWindow()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #hasNextMediaItem()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public boolean hasNextWindow() {
    return player.hasNextWindow();
  }

  /** Calls {@link Player#hasNextMediaItem()} on the delegate and returns the result. */
  @Override
  public boolean hasNextMediaItem() {
    return player.hasNextMediaItem();
  }

  /**
   * Calls {@link Player#next()} on the delegate.
   *
   * @deprecated Use {@link #seekToNextMediaItem()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public void next() {
    player.next();
  }

  /**
   * Calls {@link Player#seekToNextWindow()} on the delegate.
   *
   * @deprecated Use {@link #seekToNextMediaItem()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public void seekToNextWindow() {
    player.seekToNextWindow();
  }

  /** Calls {@link Player#seekToNextMediaItem()} on the delegate. */
  @Override
  public void seekToNextMediaItem() {
    player.seekToNextMediaItem();
  }

  /** Calls {@link Player#seekToNext()} on the delegate. */
  @Override
  public void seekToNext() {
    player.seekToNext();
  }

  /** Calls {@link Player#setPlaybackParameters(PlaybackParameters)} on the delegate. */
  @Override
  public void setPlaybackParameters(PlaybackParameters playbackParameters) {
    player.setPlaybackParameters(playbackParameters);
  }

  /** Calls {@link Player#setPlaybackSpeed(float)} on the delegate. */
  @Override
  public void setPlaybackSpeed(float speed) {
    player.setPlaybackSpeed(speed);
  }

  /** Calls {@link Player#getPlaybackParameters()} on the delegate and returns the result. */
  @Override
  public PlaybackParameters getPlaybackParameters() {
    return player.getPlaybackParameters();
  }

  /** Calls {@link Player#stop()} on the delegate. */
  @Override
  public void stop() {
    player.stop();
  }

  /** Calls {@link Player#release()} on the delegate. */
  @Override
  public void release() {
    player.release();
  }

  /** Calls {@link Player#getCurrentTracks()} on the delegate and returns the result. */
  @Override
  public Tracks getCurrentTracks() {
    return player.getCurrentTracks();
  }

  /** Calls {@link Player#getTrackSelectionParameters()} on the delegate and returns the result. */
  @Override
  public TrackSelectionParameters getTrackSelectionParameters() {
    return player.getTrackSelectionParameters();
  }

  /** Calls {@link Player#setTrackSelectionParameters(TrackSelectionParameters)} on the delegate. */
  @Override
  public void setTrackSelectionParameters(TrackSelectionParameters parameters) {
    player.setTrackSelectionParameters(parameters);
  }

  /** Calls {@link Player#getMediaMetadata()} on the delegate and returns the result. */
  @Override
  public MediaMetadata getMediaMetadata() {
    return player.getMediaMetadata();
  }

  /** Calls {@link Player#getPlaylistMetadata()} on the delegate and returns the result. */
  @Override
  public MediaMetadata getPlaylistMetadata() {
    return player.getPlaylistMetadata();
  }

  /** Calls {@link Player#setPlaylistMetadata(MediaMetadata)} on the delegate. */
  @Override
  public void setPlaylistMetadata(MediaMetadata mediaMetadata) {
    player.setPlaylistMetadata(mediaMetadata);
  }

  /** Calls {@link Player#getCurrentManifest()} on the delegate and returns the result. */
  @Nullable
  @Override
  public Object getCurrentManifest() {
    return player.getCurrentManifest();
  }

  /** Calls {@link Player#getCurrentTimeline()} on the delegate and returns the result. */
  @Override
  public Timeline getCurrentTimeline() {
    return player.getCurrentTimeline();
  }

  /** Calls {@link Player#getCurrentPeriodIndex()} on the delegate and returns the result. */
  @Override
  public int getCurrentPeriodIndex() {
    return player.getCurrentPeriodIndex();
  }

  /**
   * Calls {@link Player#getCurrentWindowIndex()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #getCurrentMediaItemIndex()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public int getCurrentWindowIndex() {
    return player.getCurrentWindowIndex();
  }

  /** Calls {@link Player#getCurrentMediaItemIndex()} on the delegate and returns the result. */
  @Override
  public int getCurrentMediaItemIndex() {
    return player.getCurrentMediaItemIndex();
  }

  /**
   * Calls {@link Player#getNextWindowIndex()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #getNextMediaItemIndex()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public int getNextWindowIndex() {
    return player.getNextWindowIndex();
  }

  /** Calls {@link Player#getNextMediaItemIndex()} on the delegate and returns the result. */
  @Override
  public int getNextMediaItemIndex() {
    return player.getNextMediaItemIndex();
  }

  /**
   * Calls {@link Player#getPreviousWindowIndex()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #getPreviousMediaItemIndex()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public int getPreviousWindowIndex() {
    return player.getPreviousWindowIndex();
  }

  /** Calls {@link Player#getPreviousMediaItemIndex()} on the delegate and returns the result. */
  @Override
  public int getPreviousMediaItemIndex() {
    return player.getPreviousMediaItemIndex();
  }

  /** Calls {@link Player#getCurrentMediaItem()} on the delegate and returns the result. */
  @Nullable
  @Override
  public MediaItem getCurrentMediaItem() {
    return player.getCurrentMediaItem();
  }

  /** Calls {@link Player#getMediaItemCount()} on the delegate and returns the result. */
  @Override
  public int getMediaItemCount() {
    return player.getMediaItemCount();
  }

  /** Calls {@link Player#getMediaItemAt(int)} on the delegate and returns the result. */
  @Override
  public MediaItem getMediaItemAt(int index) {
    return player.getMediaItemAt(index);
  }

  /** Calls {@link Player#getDuration()} on the delegate and returns the result. */
  @Override
  public long getDuration() {
    return player.getDuration();
  }

  /** Calls {@link Player#getCurrentPosition()} on the delegate and returns the result. */
  @Override
  public long getCurrentPosition() {
    return player.getCurrentPosition();
  }

  /** Calls {@link Player#getBufferedPosition()} on the delegate and returns the result. */
  @Override
  public long getBufferedPosition() {
    return player.getBufferedPosition();
  }

  /** Calls {@link Player#getBufferedPercentage()} on the delegate and returns the result. */
  @Override
  public int getBufferedPercentage() {
    return player.getBufferedPercentage();
  }

  /** Calls {@link Player#getTotalBufferedDuration()} on the delegate and returns the result. */
  @Override
  public long getTotalBufferedDuration() {
    return player.getTotalBufferedDuration();
  }

  /**
   * Calls {@link Player#isCurrentWindowDynamic()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #isCurrentMediaItemDynamic()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public boolean isCurrentWindowDynamic() {
    return player.isCurrentWindowDynamic();
  }

  /** Calls {@link Player#isCurrentMediaItemDynamic()} on the delegate and returns the result. */
  @Override
  public boolean isCurrentMediaItemDynamic() {
    return player.isCurrentMediaItemDynamic();
  }

  /**
   * Calls {@link Player#isCurrentWindowLive()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #isCurrentMediaItemLive()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public boolean isCurrentWindowLive() {
    return player.isCurrentWindowLive();
  }

  /** Calls {@link Player#isCurrentMediaItemLive()} on the delegate and returns the result. */
  @Override
  public boolean isCurrentMediaItemLive() {
    return player.isCurrentMediaItemLive();
  }

  /** Calls {@link Player#getCurrentLiveOffset()} on the delegate and returns the result. */
  @Override
  public long getCurrentLiveOffset() {
    return player.getCurrentLiveOffset();
  }

  /**
   * Calls {@link Player#isCurrentWindowSeekable()} on the delegate and returns the result.
   *
   * @deprecated Use {@link #isCurrentMediaItemSeekable()} instead.
   */
  @SuppressWarnings("deprecation") // Forwarding to deprecated method
  @Deprecated
  @Override
  public boolean isCurrentWindowSeekable() {
    return player.isCurrentWindowSeekable();
  }

  /** Calls {@link Player#isCurrentMediaItemSeekable()} on the delegate and returns the result. */
  @Override
  public boolean isCurrentMediaItemSeekable() {
    return player.isCurrentMediaItemSeekable();
  }

  /** Calls {@link Player#isPlayingAd()} on the delegate and returns the result. */
  @Override
  public boolean isPlayingAd() {
    return player.isPlayingAd();
  }

  /** Calls {@link Player#getCurrentAdGroupIndex()} on the delegate and returns the result. */
  @Override
  public int getCurrentAdGroupIndex() {
    return player.getCurrentAdGroupIndex();
  }

  /** Calls {@link Player#getCurrentAdIndexInAdGroup()} on the delegate and returns the result. */
  @Override
  public int getCurrentAdIndexInAdGroup() {
    return player.getCurrentAdIndexInAdGroup();
  }

  /** Calls {@link Player#getContentDuration()} on the delegate and returns the result. */
  @Override
  public long getContentDuration() {
    return player.getContentDuration();
  }

  /** Calls {@link Player#getContentPosition()} on the delegate and returns the result. */
  @Override
  public long getContentPosition() {
    return player.getContentPosition();
  }

  /** Calls {@link Player#getContentBufferedPosition()} on the delegate and returns the result. */
  @Override
  public long getContentBufferedPosition() {
    return player.getContentBufferedPosition();
  }

  /** Calls {@link Player#getAudioAttributes()} on the delegate and returns the result. */
  @Override
  public AudioAttributes getAudioAttributes() {
    return player.getAudioAttributes();
  }

  /** Calls {@link Player#setVolume(float)} on the delegate. */
  @Override
  public void setVolume(float volume) {
    player.setVolume(volume);
  }

  /** Calls {@link Player#getVolume()} on the delegate and returns the result. */
  @Override
  public float getVolume() {
    return player.getVolume();
  }

  /** Calls {@link Player#getVideoSize()} on the delegate and returns the result. */
  @Override
  public VideoSize getVideoSize() {
    return player.getVideoSize();
  }

  /** Calls {@link Player#getSurfaceSize()} on the delegate and returns the result. */
  @Override
  public Size getSurfaceSize() {
    return player.getSurfaceSize();
  }

  /** Calls {@link Player#clearVideoSurface()} on the delegate. */
  @Override
  public void clearVideoSurface() {
    player.clearVideoSurface();
  }

  /** Calls {@link Player#clearVideoSurface(Surface)} on the delegate. */
  @Override
  public void clearVideoSurface(@Nullable Surface surface) {
    player.clearVideoSurface(surface);
  }

  /** Calls {@link Player#setVideoSurface(Surface)} on the delegate. */
  @Override
  public void setVideoSurface(@Nullable Surface surface) {
    player.setVideoSurface(surface);
  }

  /** Calls {@link Player#setVideoSurfaceHolder(SurfaceHolder)} on the delegate. */
  @Override
  public void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) {
    player.setVideoSurfaceHolder(surfaceHolder);
  }

  /** Calls {@link Player#clearVideoSurfaceHolder(SurfaceHolder)} on the delegate. */
  @Override
  public void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) {
    player.clearVideoSurfaceHolder(surfaceHolder);
  }

  /** Calls {@link Player#setVideoSurfaceView(SurfaceView)} on the delegate. */
  @Override
  public void setVideoSurfaceView(@Nullable SurfaceView surfaceView) {
    player.setVideoSurfaceView(surfaceView);
  }

  /** Calls {@link Player#clearVideoSurfaceView(SurfaceView)} on the delegate. */
  @Override
  public void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) {
    player.clearVideoSurfaceView(surfaceView);
  }

  /** Calls {@link Player#setVideoTextureView(TextureView)} on the delegate. */
  @Override
  public void setVideoTextureView(@Nullable TextureView textureView) {
    player.setVideoTextureView(textureView);
  }

  /** Calls {@link Player#clearVideoTextureView(TextureView)} on the delegate. */
  @Override
  public void clearVideoTextureView(@Nullable TextureView textureView) {
    player.clearVideoTextureView(textureView);
  }

  /** Calls {@link Player#getCurrentCues()} on the delegate and returns the result. */
  @Override
  public CueGroup getCurrentCues() {
    return player.getCurrentCues();
  }

  /** Calls {@link Player#getDeviceInfo()} on the delegate and returns the result. */
  @Override
  public DeviceInfo getDeviceInfo() {
    return player.getDeviceInfo();
  }

  /** Calls {@link Player#getDeviceVolume()} on the delegate and returns the result. */
  @Override
  public int getDeviceVolume() {
    return player.getDeviceVolume();
  }

  /** Calls {@link Player#isDeviceMuted()} on the delegate and returns the result. */
  @Override
  public boolean isDeviceMuted() {
    return player.isDeviceMuted();
  }

  /**
   * @deprecated Use {@link #setDeviceVolume(int, int)} instead.
   */
  @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method
  @Deprecated
  @Override
  public void setDeviceVolume(int volume) {
    player.setDeviceVolume(volume);
  }

  /** Calls {@link Player#setDeviceVolume(int, int)} on the delegate. */
  @Override
  public void setDeviceVolume(int volume, @C.VolumeFlags int flags) {
    player.setDeviceVolume(volume, flags);
  }

  /**
   * @deprecated Use {@link #increaseDeviceVolume(int)} instead.
   */
  @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method
  @Deprecated
  @Override
  public void increaseDeviceVolume() {
    player.increaseDeviceVolume();
  }

  /** Calls {@link Player#increaseDeviceVolume(int)} on the delegate. */
  @Override
  public void increaseDeviceVolume(@C.VolumeFlags int flags) {
    player.increaseDeviceVolume(flags);
  }

  /**
   * @deprecated Use {@link #decreaseDeviceVolume(int)} instead.
   */
  @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method
  @Deprecated
  @Override
  public void decreaseDeviceVolume() {
    player.decreaseDeviceVolume();
  }

  /** Calls {@link Player#decreaseDeviceVolume(int)} on the delegate. */
  @Override
  public void decreaseDeviceVolume(@C.VolumeFlags int flags) {
    player.decreaseDeviceVolume(flags);
  }

  /**
   * @deprecated Use {@link #setDeviceMuted(boolean, int)} instead.
   */
  @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method
  @Deprecated
  @Override
  public void setDeviceMuted(boolean muted) {
    player.setDeviceMuted(muted);
  }

  /** Calls {@link Player#setDeviceMuted(boolean, int)} on the delegate. */
  @Override
  public void setDeviceMuted(boolean muted, @C.VolumeFlags int flags) {
    player.setDeviceMuted(muted, flags);
  }

  /** Calls {@link Player#setAudioAttributes(AudioAttributes, boolean)} on the delegate. */
  @Override
  public void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus) {
    player.setAudioAttributes(audioAttributes, handleAudioFocus);
  }

  /** Returns the {@link Player} to which operations are forwarded. */
  public Player getWrappedPlayer() {
    return player;
  }

  private static final class ForwardingListener implements Listener {

    private final ForwardingPlayer forwardingPlayer;
    private final Listener listener;

    public ForwardingListener(ForwardingPlayer forwardingPlayer, Listener listener) {
      this.forwardingPlayer = forwardingPlayer;
      this.listener = listener;
    }

    @Override
    public void onEvents(Player player, Events events) {
      // Replace player with forwarding player.
      listener.onEvents(forwardingPlayer, events);
    }

    @Override
    public void onTimelineChanged(Timeline timeline, @TimelineChangeReason int reason) {
      listener.onTimelineChanged(timeline, reason);
    }

    @Override
    public void onMediaItemTransition(
        @Nullable MediaItem mediaItem, @MediaItemTransitionReason int reason) {
      listener.onMediaItemTransition(mediaItem, reason);
    }

    @Override
    public void onTracksChanged(Tracks tracks) {
      listener.onTracksChanged(tracks);
    }

    @Override
    public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
      listener.onMediaMetadataChanged(mediaMetadata);
    }

    @Override
    public void onPlaylistMetadataChanged(MediaMetadata mediaMetadata) {
      listener.onPlaylistMetadataChanged(mediaMetadata);
    }

    @Override
    public void onIsLoadingChanged(boolean isLoading) {
      listener.onIsLoadingChanged(isLoading);
    }

    @Override
    @SuppressWarnings("deprecation")
    public void onLoadingChanged(boolean isLoading) {
      listener.onIsLoadingChanged(isLoading);
    }

    @Override
    public void onAvailableCommandsChanged(Commands availableCommands) {
      listener.onAvailableCommandsChanged(availableCommands);
    }

    @Override
    public void onTrackSelectionParametersChanged(TrackSelectionParameters parameters) {
      listener.onTrackSelectionParametersChanged(parameters);
    }

    @Override
    @SuppressWarnings("deprecation")
    public void onPlayerStateChanged(boolean playWhenReady, @State int playbackState) {
      listener.onPlayerStateChanged(playWhenReady, playbackState);
    }

    @Override
    public void onPlaybackStateChanged(@State int playbackState) {
      listener.onPlaybackStateChanged(playbackState);
    }

    @Override
    public void onPlayWhenReadyChanged(
        boolean playWhenReady, @PlayWhenReadyChangeReason int reason) {
      listener.onPlayWhenReadyChanged(playWhenReady, reason);
    }

    @Override
    public void onPlaybackSuppressionReasonChanged(
        @PlayWhenReadyChangeReason int playbackSuppressionReason) {
      listener.onPlaybackSuppressionReasonChanged(playbackSuppressionReason);
    }

    @Override
    public void onIsPlayingChanged(boolean isPlaying) {
      listener.onIsPlayingChanged(isPlaying);
    }

    @Override
    public void onRepeatModeChanged(@RepeatMode int repeatMode) {
      listener.onRepeatModeChanged(repeatMode);
    }

    @Override
    public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
      listener.onShuffleModeEnabledChanged(shuffleModeEnabled);
    }

    @Override
    public void onPlayerError(PlaybackException error) {
      listener.onPlayerError(error);
    }

    @Override
    public void onPlayerErrorChanged(@Nullable PlaybackException error) {
      listener.onPlayerErrorChanged(error);
    }

    @Override
    @SuppressWarnings("deprecation")
    public void onPositionDiscontinuity(@DiscontinuityReason int reason) {
      listener.onPositionDiscontinuity(reason);
    }

    @Override
    public void onPositionDiscontinuity(
        PositionInfo oldPosition, PositionInfo newPosition, @DiscontinuityReason int reason) {
      listener.onPositionDiscontinuity(oldPosition, newPosition, reason);
    }

    @Override
    public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
      listener.onPlaybackParametersChanged(playbackParameters);
    }

    @Override
    public void onSeekBackIncrementChanged(long seekBackIncrementMs) {
      listener.onSeekBackIncrementChanged(seekBackIncrementMs);
    }

    @Override
    public void onSeekForwardIncrementChanged(long seekForwardIncrementMs) {
      listener.onSeekForwardIncrementChanged(seekForwardIncrementMs);
    }

    @Override
    public void onMaxSeekToPreviousPositionChanged(long maxSeekToPreviousPositionMs) {
      listener.onMaxSeekToPreviousPositionChanged(maxSeekToPreviousPositionMs);
    }

    @Override
    public void onVideoSizeChanged(VideoSize videoSize) {
      listener.onVideoSizeChanged(videoSize);
    }

    @Override
    public void onSurfaceSizeChanged(int width, int height) {
      listener.onSurfaceSizeChanged(width, height);
    }

    @Override
    public void onRenderedFirstFrame() {
      listener.onRenderedFirstFrame();
    }

    @Override
    public void onAudioSessionIdChanged(int audioSessionId) {
      listener.onAudioSessionIdChanged(audioSessionId);
    }

    @Override
    public void onAudioAttributesChanged(AudioAttributes audioAttributes) {
      listener.onAudioAttributesChanged(audioAttributes);
    }

    @Override
    public void onVolumeChanged(float volume) {
      listener.onVolumeChanged(volume);
    }

    @Override
    public void onSkipSilenceEnabledChanged(boolean skipSilenceEnabled) {
      listener.onSkipSilenceEnabledChanged(skipSilenceEnabled);
    }

    @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method
    @Override
    public void onCues(List<Cue> cues) {
      listener.onCues(cues);
    }

    @Override
    public void onCues(CueGroup cueGroup) {
      listener.onCues(cueGroup);
    }

    @Override
    public void onMetadata(Metadata metadata) {
      listener.onMetadata(metadata);
    }

    @Override
    public void onDeviceInfoChanged(DeviceInfo deviceInfo) {
      listener.onDeviceInfoChanged(deviceInfo);
    }

    @Override
    public void onDeviceVolumeChanged(int volume, boolean muted) {
      listener.onDeviceVolumeChanged(volume, muted);
    }

    @Override
    public boolean equals(@Nullable Object o) {
      if (this == o) {
        return true;
      }
      if (!(o instanceof ForwardingListener)) {
        return false;
      }
      ForwardingListener that = (ForwardingListener) o;
      if (!forwardingPlayer.equals(that.forwardingPlayer)) {
        return false;
      }
      return listener.equals(that.listener);
    }

    @Override
    public int hashCode() {
      int result = forwardingPlayer.hashCode();
      result = 31 * result + listener.hashCode();
      return result;
    }
  }
}