Commit 2a6472f9 by tonihei Committed by Rohit Singh

Mark MediaController methods final to prevent accidental overrides

It's currently not possible to even subclass MediaController because
the constructor is package-private. To avoid any accidental usage or
future indirect subclassing, all methods can be marked as final.

PiperOrigin-RevId: 523648114
parent e54a9343
...@@ -1484,122 +1484,122 @@ package androidx.media3.session { ...@@ -1484,122 +1484,122 @@ package androidx.media3.session {
field public static final String EXTRAS_KEY_SLOT_RESERVATION_SEEK_TO_PREV = "android.media.playback.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_PREVIOUS"; field public static final String EXTRAS_KEY_SLOT_RESERVATION_SEEK_TO_PREV = "android.media.playback.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_PREVIOUS";
} }
public class MediaController implements androidx.media3.common.Player { @com.google.errorprone.annotations.DoNotMock public class MediaController implements androidx.media3.common.Player {
method public void addListener(androidx.media3.common.Player.Listener); method public final void addListener(androidx.media3.common.Player.Listener);
method public void addMediaItem(androidx.media3.common.MediaItem); method public final void addMediaItem(androidx.media3.common.MediaItem);
method public void addMediaItem(int, androidx.media3.common.MediaItem); method public final void addMediaItem(int, androidx.media3.common.MediaItem);
method public void addMediaItems(java.util.List<androidx.media3.common.MediaItem>); method public final void addMediaItems(java.util.List<androidx.media3.common.MediaItem>);
method public void addMediaItems(int, java.util.List<androidx.media3.common.MediaItem>); method public final void addMediaItems(int, java.util.List<androidx.media3.common.MediaItem>);
method public boolean canAdvertiseSession(); method public final boolean canAdvertiseSession();
method public void clearMediaItems(); method public final void clearMediaItems();
method public void clearVideoSurface(); method public final void clearVideoSurface();
method public void clearVideoSurface(@Nullable android.view.Surface); method public final void clearVideoSurface(@Nullable android.view.Surface);
method public void clearVideoSurfaceHolder(@Nullable android.view.SurfaceHolder); method public final void clearVideoSurfaceHolder(@Nullable android.view.SurfaceHolder);
method public void clearVideoSurfaceView(@Nullable android.view.SurfaceView); method public final void clearVideoSurfaceView(@Nullable android.view.SurfaceView);
method public void clearVideoTextureView(@Nullable android.view.TextureView); method public final void clearVideoTextureView(@Nullable android.view.TextureView);
method public void decreaseDeviceVolume(); method public final void decreaseDeviceVolume();
method public android.os.Looper getApplicationLooper(); method public final android.os.Looper getApplicationLooper();
method public androidx.media3.common.AudioAttributes getAudioAttributes(); method public final androidx.media3.common.AudioAttributes getAudioAttributes();
method public androidx.media3.common.Player.Commands getAvailableCommands(); method public final androidx.media3.common.Player.Commands getAvailableCommands();
method public androidx.media3.session.SessionCommands getAvailableSessionCommands(); method public final androidx.media3.session.SessionCommands getAvailableSessionCommands();
method @IntRange(from=0, to=100) public int getBufferedPercentage(); method @IntRange(from=0, to=100) public final int getBufferedPercentage();
method public long getBufferedPosition(); method public final long getBufferedPosition();
method @Nullable public androidx.media3.session.SessionToken getConnectedToken(); method @Nullable public final androidx.media3.session.SessionToken getConnectedToken();
method public long getContentBufferedPosition(); method public final long getContentBufferedPosition();
method public long getContentDuration(); method public final long getContentDuration();
method public long getContentPosition(); method public final long getContentPosition();
method public int getCurrentAdGroupIndex(); method public final int getCurrentAdGroupIndex();
method public int getCurrentAdIndexInAdGroup(); method public final int getCurrentAdIndexInAdGroup();
method public androidx.media3.common.text.CueGroup getCurrentCues(); method public final androidx.media3.common.text.CueGroup getCurrentCues();
method public long getCurrentLiveOffset(); method public final long getCurrentLiveOffset();
method @Nullable public androidx.media3.common.MediaItem getCurrentMediaItem(); method @Nullable public final androidx.media3.common.MediaItem getCurrentMediaItem();
method public int getCurrentMediaItemIndex(); method public final int getCurrentMediaItemIndex();
method public int getCurrentPeriodIndex(); method public final int getCurrentPeriodIndex();
method public long getCurrentPosition(); method public final long getCurrentPosition();
method public androidx.media3.common.Timeline getCurrentTimeline(); method public final androidx.media3.common.Timeline getCurrentTimeline();
method public androidx.media3.common.Tracks getCurrentTracks(); method public final androidx.media3.common.Tracks getCurrentTracks();
method public androidx.media3.common.DeviceInfo getDeviceInfo(); method public final androidx.media3.common.DeviceInfo getDeviceInfo();
method @IntRange(from=0) public int getDeviceVolume(); method @IntRange(from=0) public final int getDeviceVolume();
method public long getDuration(); method public final long getDuration();
method public long getMaxSeekToPreviousPosition(); method public final long getMaxSeekToPreviousPosition();
method public androidx.media3.common.MediaItem getMediaItemAt(int); method public final androidx.media3.common.MediaItem getMediaItemAt(int);
method public int getMediaItemCount(); method public final int getMediaItemCount();
method public androidx.media3.common.MediaMetadata getMediaMetadata(); method public final androidx.media3.common.MediaMetadata getMediaMetadata();
method public int getNextMediaItemIndex(); method public final int getNextMediaItemIndex();
method public boolean getPlayWhenReady(); method public final boolean getPlayWhenReady();
method public androidx.media3.common.PlaybackParameters getPlaybackParameters(); method public final androidx.media3.common.PlaybackParameters getPlaybackParameters();
method @androidx.media3.common.Player.State public int getPlaybackState(); method @androidx.media3.common.Player.State public final int getPlaybackState();
method @androidx.media3.common.Player.PlaybackSuppressionReason public int getPlaybackSuppressionReason(); method @androidx.media3.common.Player.PlaybackSuppressionReason public final int getPlaybackSuppressionReason();
method @Nullable public androidx.media3.common.PlaybackException getPlayerError(); method @Nullable public final androidx.media3.common.PlaybackException getPlayerError();
method public androidx.media3.common.MediaMetadata getPlaylistMetadata(); method public final androidx.media3.common.MediaMetadata getPlaylistMetadata();
method public int getPreviousMediaItemIndex(); method public final int getPreviousMediaItemIndex();
method @androidx.media3.common.Player.RepeatMode public int getRepeatMode(); method @androidx.media3.common.Player.RepeatMode public final int getRepeatMode();
method public long getSeekBackIncrement(); method public final long getSeekBackIncrement();
method public long getSeekForwardIncrement(); method public final long getSeekForwardIncrement();
method @Nullable public android.app.PendingIntent getSessionActivity(); method @Nullable public final android.app.PendingIntent getSessionActivity();
method public boolean getShuffleModeEnabled(); method public final boolean getShuffleModeEnabled();
method public long getTotalBufferedDuration(); method public final long getTotalBufferedDuration();
method public androidx.media3.common.TrackSelectionParameters getTrackSelectionParameters(); method public final androidx.media3.common.TrackSelectionParameters getTrackSelectionParameters();
method public androidx.media3.common.VideoSize getVideoSize(); method public final androidx.media3.common.VideoSize getVideoSize();
method @FloatRange(from=0, to=1) public float getVolume(); method @FloatRange(from=0, to=1) public final float getVolume();
method public boolean hasNextMediaItem(); method public final boolean hasNextMediaItem();
method public boolean hasPreviousMediaItem(); method public final boolean hasPreviousMediaItem();
method public void increaseDeviceVolume(); method public final void increaseDeviceVolume();
method public boolean isCommandAvailable(@androidx.media3.common.Player.Command int); method public final boolean isCommandAvailable(@androidx.media3.common.Player.Command int);
method public boolean isConnected(); method public final boolean isConnected();
method public boolean isCurrentMediaItemDynamic(); method public final boolean isCurrentMediaItemDynamic();
method public boolean isCurrentMediaItemLive(); method public final boolean isCurrentMediaItemLive();
method public boolean isCurrentMediaItemSeekable(); method public final boolean isCurrentMediaItemSeekable();
method public boolean isDeviceMuted(); method public final boolean isDeviceMuted();
method public boolean isLoading(); method public final boolean isLoading();
method public boolean isPlaying(); method public final boolean isPlaying();
method public boolean isPlayingAd(); method public final boolean isPlayingAd();
method public boolean isSessionCommandAvailable(@androidx.media3.session.SessionCommand.CommandCode int); method public final boolean isSessionCommandAvailable(@androidx.media3.session.SessionCommand.CommandCode int);
method public boolean isSessionCommandAvailable(androidx.media3.session.SessionCommand); method public final boolean isSessionCommandAvailable(androidx.media3.session.SessionCommand);
method public void moveMediaItem(int, int); method public final void moveMediaItem(int, int);
method public void moveMediaItems(int, int, int); method public final void moveMediaItems(int, int, int);
method public void pause(); method public final void pause();
method public void play(); method public final void play();
method public void prepare(); method public final void prepare();
method public void release(); method public final void release();
method public static void releaseFuture(java.util.concurrent.Future<? extends androidx.media3.session.MediaController>); method public static void releaseFuture(java.util.concurrent.Future<? extends androidx.media3.session.MediaController>);
method public void removeListener(androidx.media3.common.Player.Listener); method public final void removeListener(androidx.media3.common.Player.Listener);
method public void removeMediaItem(int); method public final void removeMediaItem(int);
method public void removeMediaItems(int, int); method public final void removeMediaItems(int, int);
method public void seekBack(); method public final void seekBack();
method public void seekForward(); method public final void seekForward();
method public void seekTo(long); method public final void seekTo(long);
method public void seekTo(int, long); method public final void seekTo(int, long);
method public void seekToDefaultPosition(); method public final void seekToDefaultPosition();
method public void seekToDefaultPosition(int); method public final void seekToDefaultPosition(int);
method public void seekToNext(); method public final void seekToNext();
method public void seekToNextMediaItem(); method public final void seekToNextMediaItem();
method public void seekToPrevious(); method public final void seekToPrevious();
method public void seekToPreviousMediaItem(); method public final void seekToPreviousMediaItem();
method public com.google.common.util.concurrent.ListenableFuture<androidx.media3.session.SessionResult> sendCustomCommand(androidx.media3.session.SessionCommand, android.os.Bundle); method public final com.google.common.util.concurrent.ListenableFuture<androidx.media3.session.SessionResult> sendCustomCommand(androidx.media3.session.SessionCommand, android.os.Bundle);
method public void setDeviceMuted(boolean); method public final void setDeviceMuted(boolean);
method public void setDeviceVolume(@IntRange(from=0) int); method public final void setDeviceVolume(@IntRange(from=0) int);
method public void setMediaItem(androidx.media3.common.MediaItem); method public final void setMediaItem(androidx.media3.common.MediaItem);
method public void setMediaItem(androidx.media3.common.MediaItem, long); method public final void setMediaItem(androidx.media3.common.MediaItem, long);
method public void setMediaItem(androidx.media3.common.MediaItem, boolean); method public final void setMediaItem(androidx.media3.common.MediaItem, boolean);
method public void setMediaItems(java.util.List<androidx.media3.common.MediaItem>); method public final void setMediaItems(java.util.List<androidx.media3.common.MediaItem>);
method public void setMediaItems(java.util.List<androidx.media3.common.MediaItem>, boolean); method public final void setMediaItems(java.util.List<androidx.media3.common.MediaItem>, boolean);
method public void setMediaItems(java.util.List<androidx.media3.common.MediaItem>, int, long); method public final void setMediaItems(java.util.List<androidx.media3.common.MediaItem>, int, long);
method public void setPlayWhenReady(boolean); method public final void setPlayWhenReady(boolean);
method public void setPlaybackParameters(androidx.media3.common.PlaybackParameters); method public final void setPlaybackParameters(androidx.media3.common.PlaybackParameters);
method public void setPlaybackSpeed(float); method public final void setPlaybackSpeed(float);
method public void setPlaylistMetadata(androidx.media3.common.MediaMetadata); method public final void setPlaylistMetadata(androidx.media3.common.MediaMetadata);
method public com.google.common.util.concurrent.ListenableFuture<androidx.media3.session.SessionResult> setRating(String, androidx.media3.common.Rating); method public final com.google.common.util.concurrent.ListenableFuture<androidx.media3.session.SessionResult> setRating(String, androidx.media3.common.Rating);
method public com.google.common.util.concurrent.ListenableFuture<androidx.media3.session.SessionResult> setRating(androidx.media3.common.Rating); method public final com.google.common.util.concurrent.ListenableFuture<androidx.media3.session.SessionResult> setRating(androidx.media3.common.Rating);
method public void setRepeatMode(@androidx.media3.common.Player.RepeatMode int); method public final void setRepeatMode(@androidx.media3.common.Player.RepeatMode int);
method public void setShuffleModeEnabled(boolean); method public final void setShuffleModeEnabled(boolean);
method public void setTrackSelectionParameters(androidx.media3.common.TrackSelectionParameters); method public final void setTrackSelectionParameters(androidx.media3.common.TrackSelectionParameters);
method public void setVideoSurface(@Nullable android.view.Surface); method public final void setVideoSurface(@Nullable android.view.Surface);
method public void setVideoSurfaceHolder(@Nullable android.view.SurfaceHolder); method public final void setVideoSurfaceHolder(@Nullable android.view.SurfaceHolder);
method public void setVideoSurfaceView(@Nullable android.view.SurfaceView); method public final void setVideoSurfaceView(@Nullable android.view.SurfaceView);
method public void setVideoTextureView(@Nullable android.view.TextureView); method public final void setVideoTextureView(@Nullable android.view.TextureView);
method public void setVolume(@FloatRange(from=0, to=1) float); method public final void setVolume(@FloatRange(from=0, to=1) float);
method public void stop(); method public final void stop();
} }
public static final class MediaController.Builder { public static final class MediaController.Builder {
......
...@@ -61,6 +61,7 @@ import androidx.media3.common.util.Util; ...@@ -61,6 +61,7 @@ import androidx.media3.common.util.Util;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.errorprone.annotations.DoNotMock;
import java.util.List; import java.util.List;
import java.util.concurrent.CancellationException; import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
...@@ -163,6 +164,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -163,6 +164,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* androidx.media3.common.Player.Command#COMMAND_CHANGE_MEDIA_ITEMS supported} by the legacy * androidx.media3.common.Player.Command#COMMAND_CHANGE_MEDIA_ITEMS supported} by the legacy
* session. * session.
*/ */
@DoNotMock
public class MediaController implements Player { public class MediaController implements Player {
/** /**
...@@ -420,6 +422,7 @@ public class MediaController implements Player { ...@@ -420,6 +422,7 @@ public class MediaController implements Player {
/* package */ final ConnectionCallback connectionCallback; /* package */ final ConnectionCallback connectionCallback;
/** Creates a {@link MediaController} from the {@link SessionToken}. */ /** Creates a {@link MediaController} from the {@link SessionToken}. */
// This constructor has to be package-private in order to prevent subclassing outside the package.
/* package */ MediaController( /* package */ MediaController(
Context context, Context context,
SessionToken token, SessionToken token,
...@@ -461,7 +464,7 @@ public class MediaController implements Player { ...@@ -461,7 +464,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void stop() { public final void stop() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring stop()."); Log.w(TAG, "The controller is not connected. Ignoring stop().");
...@@ -478,7 +481,7 @@ public class MediaController implements Player { ...@@ -478,7 +481,7 @@ public class MediaController implements Player {
* <p>This method does not call {@link Player#release()} of the underlying player in the session. * <p>This method does not call {@link Player#release()} of the underlying player in the session.
*/ */
@Override @Override
public void release() { public final void release() {
verifyApplicationThread(); verifyApplicationThread();
if (released) { if (released) {
return; return;
...@@ -526,17 +529,17 @@ public class MediaController implements Player { ...@@ -526,17 +529,17 @@ public class MediaController implements Player {
* for the {@link MediaSession} in the service. * for the {@link MediaSession} in the service.
*/ */
@Nullable @Nullable
public SessionToken getConnectedToken() { public final SessionToken getConnectedToken() {
return isConnected() ? impl.getConnectedToken() : null; return isConnected() ? impl.getConnectedToken() : null;
} }
/** Returns whether this controller is connected to a {@link MediaSession} or not. */ /** Returns whether this controller is connected to a {@link MediaSession} or not. */
public boolean isConnected() { public final boolean isConnected() {
return impl.isConnected(); return impl.isConnected();
} }
@Override @Override
public void play() { public final void play() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring play()."); Log.w(TAG, "The controller is not connected. Ignoring play().");
...@@ -546,7 +549,7 @@ public class MediaController implements Player { ...@@ -546,7 +549,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void pause() { public final void pause() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring pause()."); Log.w(TAG, "The controller is not connected. Ignoring pause().");
...@@ -556,7 +559,7 @@ public class MediaController implements Player { ...@@ -556,7 +559,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void prepare() { public final void prepare() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring prepare()."); Log.w(TAG, "The controller is not connected. Ignoring prepare().");
...@@ -566,7 +569,7 @@ public class MediaController implements Player { ...@@ -566,7 +569,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void seekToDefaultPosition() { public final void seekToDefaultPosition() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekTo()."); Log.w(TAG, "The controller is not connected. Ignoring seekTo().");
...@@ -576,7 +579,7 @@ public class MediaController implements Player { ...@@ -576,7 +579,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void seekToDefaultPosition(int mediaItemIndex) { public final void seekToDefaultPosition(int mediaItemIndex) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekTo()."); Log.w(TAG, "The controller is not connected. Ignoring seekTo().");
...@@ -586,7 +589,7 @@ public class MediaController implements Player { ...@@ -586,7 +589,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void seekTo(long positionMs) { public final void seekTo(long positionMs) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekTo()."); Log.w(TAG, "The controller is not connected. Ignoring seekTo().");
...@@ -596,7 +599,7 @@ public class MediaController implements Player { ...@@ -596,7 +599,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void seekTo(int mediaItemIndex, long positionMs) { public final void seekTo(int mediaItemIndex, long positionMs) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekTo()."); Log.w(TAG, "The controller is not connected. Ignoring seekTo().");
...@@ -611,7 +614,7 @@ public class MediaController implements Player { ...@@ -611,7 +614,7 @@ public class MediaController implements Player {
* <p>Interoperability: When connected to {@link MediaSessionCompat}, it returns {code 0}. * <p>Interoperability: When connected to {@link MediaSessionCompat}, it returns {code 0}.
*/ */
@Override @Override
public long getSeekBackIncrement() { public final long getSeekBackIncrement() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getSeekBackIncrement() : 0; return isConnected() ? impl.getSeekBackIncrement() : 0;
} }
...@@ -623,7 +626,7 @@ public class MediaController implements Player { ...@@ -623,7 +626,7 @@ public class MediaController implements Player {
* MediaControllerCompat.TransportControls#rewind()}. * MediaControllerCompat.TransportControls#rewind()}.
*/ */
@Override @Override
public void seekBack() { public final void seekBack() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekBack()."); Log.w(TAG, "The controller is not connected. Ignoring seekBack().");
...@@ -638,7 +641,7 @@ public class MediaController implements Player { ...@@ -638,7 +641,7 @@ public class MediaController implements Player {
* <p>Interoperability: When connected to {@link MediaSessionCompat}, it returns {code 0}. * <p>Interoperability: When connected to {@link MediaSessionCompat}, it returns {code 0}.
*/ */
@Override @Override
public long getSeekForwardIncrement() { public final long getSeekForwardIncrement() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getSeekForwardIncrement() : 0; return isConnected() ? impl.getSeekForwardIncrement() : 0;
} }
...@@ -650,7 +653,7 @@ public class MediaController implements Player { ...@@ -650,7 +653,7 @@ public class MediaController implements Player {
* MediaControllerCompat.TransportControls#fastForward()}. * MediaControllerCompat.TransportControls#fastForward()}.
*/ */
@Override @Override
public void seekForward() { public final void seekForward() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekForward()."); Log.w(TAG, "The controller is not connected. Ignoring seekForward().");
...@@ -661,19 +664,19 @@ public class MediaController implements Player { ...@@ -661,19 +664,19 @@ public class MediaController implements Player {
/** Returns an intent for launching UI associated with the session if exists, or {@code null}. */ /** Returns an intent for launching UI associated with the session if exists, or {@code null}. */
@Nullable @Nullable
public PendingIntent getSessionActivity() { public final PendingIntent getSessionActivity() {
return isConnected() ? impl.getSessionActivity() : null; return isConnected() ? impl.getSessionActivity() : null;
} }
@Override @Override
@Nullable @Nullable
public PlaybackException getPlayerError() { public final PlaybackException getPlayerError() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getPlayerError() : null; return isConnected() ? impl.getPlayerError() : null;
} }
@Override @Override
public void setPlayWhenReady(boolean playWhenReady) { public final void setPlayWhenReady(boolean playWhenReady) {
verifyApplicationThread(); verifyApplicationThread();
if (isConnected()) { if (isConnected()) {
impl.setPlayWhenReady(playWhenReady); impl.setPlayWhenReady(playWhenReady);
...@@ -681,13 +684,13 @@ public class MediaController implements Player { ...@@ -681,13 +684,13 @@ public class MediaController implements Player {
} }
@Override @Override
public boolean getPlayWhenReady() { public final boolean getPlayWhenReady() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.getPlayWhenReady(); return isConnected() && impl.getPlayWhenReady();
} }
@Override @Override
public @PlaybackSuppressionReason int getPlaybackSuppressionReason() { public final @PlaybackSuppressionReason int getPlaybackSuppressionReason() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() return isConnected()
? impl.getPlaybackSuppressionReason() ? impl.getPlaybackSuppressionReason()
...@@ -695,56 +698,56 @@ public class MediaController implements Player { ...@@ -695,56 +698,56 @@ public class MediaController implements Player {
} }
@Override @Override
public @State int getPlaybackState() { public final @State int getPlaybackState() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getPlaybackState() : Player.STATE_IDLE; return isConnected() ? impl.getPlaybackState() : Player.STATE_IDLE;
} }
@Override @Override
public boolean isPlaying() { public final boolean isPlaying() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.isPlaying(); return isConnected() && impl.isPlaying();
} }
@Override @Override
public boolean isLoading() { public final boolean isLoading() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.isLoading(); return isConnected() && impl.isLoading();
} }
@Override @Override
public long getDuration() { public final long getDuration() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getDuration() : C.TIME_UNSET; return isConnected() ? impl.getDuration() : C.TIME_UNSET;
} }
@Override @Override
public long getCurrentPosition() { public final long getCurrentPosition() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentPosition() : 0; return isConnected() ? impl.getCurrentPosition() : 0;
} }
@Override @Override
public long getBufferedPosition() { public final long getBufferedPosition() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getBufferedPosition() : 0; return isConnected() ? impl.getBufferedPosition() : 0;
} }
@Override @Override
@IntRange(from = 0, to = 100) @IntRange(from = 0, to = 100)
public int getBufferedPercentage() { public final int getBufferedPercentage() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getBufferedPercentage() : 0; return isConnected() ? impl.getBufferedPercentage() : 0;
} }
@Override @Override
public long getTotalBufferedDuration() { public final long getTotalBufferedDuration() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getTotalBufferedDuration() : 0; return isConnected() ? impl.getTotalBufferedDuration() : 0;
} }
@Override @Override
public long getCurrentLiveOffset() { public final long getCurrentLiveOffset() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentLiveOffset() : C.TIME_UNSET; return isConnected() ? impl.getCurrentLiveOffset() : C.TIME_UNSET;
} }
...@@ -758,7 +761,7 @@ public class MediaController implements Player { ...@@ -758,7 +761,7 @@ public class MediaController implements Player {
* #getContentBufferedPosition()}. * #getContentBufferedPosition()}.
*/ */
@Override @Override
public long getContentDuration() { public final long getContentDuration() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getContentDuration() : C.TIME_UNSET; return isConnected() ? impl.getContentDuration() : C.TIME_UNSET;
} }
...@@ -771,7 +774,7 @@ public class MediaController implements Player { ...@@ -771,7 +774,7 @@ public class MediaController implements Player {
* #getCurrentPosition()} because content position isn't available. * #getCurrentPosition()} because content position isn't available.
*/ */
@Override @Override
public long getContentPosition() { public final long getContentPosition() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getContentPosition() : 0; return isConnected() ? impl.getContentPosition() : 0;
} }
...@@ -784,31 +787,31 @@ public class MediaController implements Player { ...@@ -784,31 +787,31 @@ public class MediaController implements Player {
* #getBufferedPosition()} because content buffered position isn't available. * #getBufferedPosition()} because content buffered position isn't available.
*/ */
@Override @Override
public long getContentBufferedPosition() { public final long getContentBufferedPosition() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getContentBufferedPosition() : 0; return isConnected() ? impl.getContentBufferedPosition() : 0;
} }
@Override @Override
public boolean isPlayingAd() { public final boolean isPlayingAd() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.isPlayingAd(); return isConnected() && impl.isPlayingAd();
} }
@Override @Override
public int getCurrentAdGroupIndex() { public final int getCurrentAdGroupIndex() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentAdGroupIndex() : C.INDEX_UNSET; return isConnected() ? impl.getCurrentAdGroupIndex() : C.INDEX_UNSET;
} }
@Override @Override
public int getCurrentAdIndexInAdGroup() { public final int getCurrentAdIndexInAdGroup() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentAdIndexInAdGroup() : C.INDEX_UNSET; return isConnected() ? impl.getCurrentAdIndexInAdGroup() : C.INDEX_UNSET;
} }
@Override @Override
public void setPlaybackParameters(PlaybackParameters playbackParameters) { public final void setPlaybackParameters(PlaybackParameters playbackParameters) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(playbackParameters, "playbackParameters must not be null"); checkNotNull(playbackParameters, "playbackParameters must not be null");
if (!isConnected()) { if (!isConnected()) {
...@@ -819,7 +822,7 @@ public class MediaController implements Player { ...@@ -819,7 +822,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setPlaybackSpeed(float speed) { public final void setPlaybackSpeed(float speed) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setPlaybackSpeed()."); Log.w(TAG, "The controller is not connected. Ignoring setPlaybackSpeed().");
...@@ -829,13 +832,13 @@ public class MediaController implements Player { ...@@ -829,13 +832,13 @@ public class MediaController implements Player {
} }
@Override @Override
public PlaybackParameters getPlaybackParameters() { public final PlaybackParameters getPlaybackParameters() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getPlaybackParameters() : PlaybackParameters.DEFAULT; return isConnected() ? impl.getPlaybackParameters() : PlaybackParameters.DEFAULT;
} }
@Override @Override
public AudioAttributes getAudioAttributes() { public final AudioAttributes getAudioAttributes() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return AudioAttributes.DEFAULT; return AudioAttributes.DEFAULT;
...@@ -856,7 +859,7 @@ public class MediaController implements Player { ...@@ -856,7 +859,7 @@ public class MediaController implements Player {
* @return A {@link ListenableFuture} of {@link SessionResult} representing the pending * @return A {@link ListenableFuture} of {@link SessionResult} representing the pending
* completion. * completion.
*/ */
public ListenableFuture<SessionResult> setRating(String mediaId, Rating rating) { public final ListenableFuture<SessionResult> setRating(String mediaId, Rating rating) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaId, "mediaId must not be null"); checkNotNull(mediaId, "mediaId must not be null");
checkNotEmpty(mediaId, "mediaId must not be empty"); checkNotEmpty(mediaId, "mediaId must not be empty");
...@@ -879,7 +882,7 @@ public class MediaController implements Player { ...@@ -879,7 +882,7 @@ public class MediaController implements Player {
* @return A {@link ListenableFuture} of {@link SessionResult} representing the pending * @return A {@link ListenableFuture} of {@link SessionResult} representing the pending
* completion. * completion.
*/ */
public ListenableFuture<SessionResult> setRating(Rating rating) { public final ListenableFuture<SessionResult> setRating(Rating rating) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(rating, "rating must not be null"); checkNotNull(rating, "rating must not be null");
if (isConnected()) { if (isConnected()) {
...@@ -904,7 +907,8 @@ public class MediaController implements Player { ...@@ -904,7 +907,8 @@ public class MediaController implements Player {
* @return A {@link ListenableFuture} of {@link SessionResult} representing the pending * @return A {@link ListenableFuture} of {@link SessionResult} representing the pending
* completion. * completion.
*/ */
public ListenableFuture<SessionResult> sendCustomCommand(SessionCommand command, Bundle args) { public final ListenableFuture<SessionResult> sendCustomCommand(
SessionCommand command, Bundle args) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(command, "command must not be null"); checkNotNull(command, "command must not be null");
checkArgument( checkArgument(
...@@ -920,7 +924,7 @@ public class MediaController implements Player { ...@@ -920,7 +924,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Override @Override
@Nullable @Nullable
public Object getCurrentManifest() { public final Object getCurrentManifest() {
return null; return null;
} }
...@@ -934,13 +938,13 @@ public class MediaController implements Player { ...@@ -934,13 +938,13 @@ public class MediaController implements Player {
* Timeline#CREATOR}. * Timeline#CREATOR}.
*/ */
@Override @Override
public Timeline getCurrentTimeline() { public final Timeline getCurrentTimeline() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentTimeline() : Timeline.EMPTY; return isConnected() ? impl.getCurrentTimeline() : Timeline.EMPTY;
} }
@Override @Override
public void setMediaItem(MediaItem mediaItem) { public final void setMediaItem(MediaItem mediaItem) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaItem, "mediaItems must not be null"); checkNotNull(mediaItem, "mediaItems must not be null");
if (!isConnected()) { if (!isConnected()) {
...@@ -951,7 +955,7 @@ public class MediaController implements Player { ...@@ -951,7 +955,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setMediaItem(MediaItem mediaItem, long startPositionMs) { public final void setMediaItem(MediaItem mediaItem, long startPositionMs) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaItem, "mediaItems must not be null"); checkNotNull(mediaItem, "mediaItems must not be null");
if (!isConnected()) { if (!isConnected()) {
...@@ -962,7 +966,7 @@ public class MediaController implements Player { ...@@ -962,7 +966,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setMediaItem(MediaItem mediaItem, boolean resetPosition) { public final void setMediaItem(MediaItem mediaItem, boolean resetPosition) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaItem, "mediaItems must not be null"); checkNotNull(mediaItem, "mediaItems must not be null");
if (!isConnected()) { if (!isConnected()) {
...@@ -973,7 +977,7 @@ public class MediaController implements Player { ...@@ -973,7 +977,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setMediaItems(List<MediaItem> mediaItems) { public final void setMediaItems(List<MediaItem> mediaItems) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaItems, "mediaItems must not be null"); checkNotNull(mediaItems, "mediaItems must not be null");
for (int i = 0; i < mediaItems.size(); i++) { for (int i = 0; i < mediaItems.size(); i++) {
...@@ -987,7 +991,7 @@ public class MediaController implements Player { ...@@ -987,7 +991,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) { public final void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaItems, "mediaItems must not be null"); checkNotNull(mediaItems, "mediaItems must not be null");
for (int i = 0; i < mediaItems.size(); i++) { for (int i = 0; i < mediaItems.size(); i++) {
...@@ -1001,7 +1005,8 @@ public class MediaController implements Player { ...@@ -1001,7 +1005,8 @@ public class MediaController implements Player {
} }
@Override @Override
public void setMediaItems(List<MediaItem> mediaItems, int startIndex, long startPositionMs) { public final void setMediaItems(
List<MediaItem> mediaItems, int startIndex, long startPositionMs) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(mediaItems, "mediaItems must not be null"); checkNotNull(mediaItems, "mediaItems must not be null");
for (int i = 0; i < mediaItems.size(); i++) { for (int i = 0; i < mediaItems.size(); i++) {
...@@ -1015,7 +1020,7 @@ public class MediaController implements Player { ...@@ -1015,7 +1020,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setPlaylistMetadata(MediaMetadata playlistMetadata) { public final void setPlaylistMetadata(MediaMetadata playlistMetadata) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(playlistMetadata, "playlistMetadata must not be null"); checkNotNull(playlistMetadata, "playlistMetadata must not be null");
if (!isConnected()) { if (!isConnected()) {
...@@ -1026,13 +1031,13 @@ public class MediaController implements Player { ...@@ -1026,13 +1031,13 @@ public class MediaController implements Player {
} }
@Override @Override
public MediaMetadata getPlaylistMetadata() { public final MediaMetadata getPlaylistMetadata() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getPlaylistMetadata() : MediaMetadata.EMPTY; return isConnected() ? impl.getPlaylistMetadata() : MediaMetadata.EMPTY;
} }
@Override @Override
public void addMediaItem(MediaItem mediaItem) { public final void addMediaItem(MediaItem mediaItem) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring addMediaItem()."); Log.w(TAG, "The controller is not connected. Ignoring addMediaItem().");
...@@ -1042,7 +1047,7 @@ public class MediaController implements Player { ...@@ -1042,7 +1047,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void addMediaItem(int index, MediaItem mediaItem) { public final void addMediaItem(int index, MediaItem mediaItem) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring addMediaItem()."); Log.w(TAG, "The controller is not connected. Ignoring addMediaItem().");
...@@ -1058,7 +1063,7 @@ public class MediaController implements Player { ...@@ -1058,7 +1063,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically add items. * android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically add items.
*/ */
@Override @Override
public void addMediaItems(List<MediaItem> mediaItems) { public final void addMediaItems(List<MediaItem> mediaItems) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring addMediaItems()."); Log.w(TAG, "The controller is not connected. Ignoring addMediaItems().");
...@@ -1074,7 +1079,7 @@ public class MediaController implements Player { ...@@ -1074,7 +1079,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically add items. * android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically add items.
*/ */
@Override @Override
public void addMediaItems(int index, List<MediaItem> mediaItems) { public final void addMediaItems(int index, List<MediaItem> mediaItems) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring addMediaItems()."); Log.w(TAG, "The controller is not connected. Ignoring addMediaItems().");
...@@ -1084,7 +1089,7 @@ public class MediaController implements Player { ...@@ -1084,7 +1089,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void removeMediaItem(int index) { public final void removeMediaItem(int index) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring removeMediaItem()."); Log.w(TAG, "The controller is not connected. Ignoring removeMediaItem().");
...@@ -1100,7 +1105,7 @@ public class MediaController implements Player { ...@@ -1100,7 +1105,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically remove items. * android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically remove items.
*/ */
@Override @Override
public void removeMediaItems(int fromIndex, int toIndex) { public final void removeMediaItems(int fromIndex, int toIndex) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring removeMediaItems()."); Log.w(TAG, "The controller is not connected. Ignoring removeMediaItems().");
...@@ -1116,7 +1121,7 @@ public class MediaController implements Player { ...@@ -1116,7 +1121,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically clear items. * android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically clear items.
*/ */
@Override @Override
public void clearMediaItems() { public final void clearMediaItems() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring clearMediaItems()."); Log.w(TAG, "The controller is not connected. Ignoring clearMediaItems().");
...@@ -1132,7 +1137,7 @@ public class MediaController implements Player { ...@@ -1132,7 +1137,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically move items. * android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically move items.
*/ */
@Override @Override
public void moveMediaItem(int currentIndex, int newIndex) { public final void moveMediaItem(int currentIndex, int newIndex) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring moveMediaItem()."); Log.w(TAG, "The controller is not connected. Ignoring moveMediaItem().");
...@@ -1148,7 +1153,7 @@ public class MediaController implements Player { ...@@ -1148,7 +1153,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically move items. * android.support.v4.media.session.MediaSessionCompat}, this doesn't atomically move items.
*/ */
@Override @Override
public void moveMediaItems(int fromIndex, int toIndex, int newIndex) { public final void moveMediaItems(int fromIndex, int toIndex, int newIndex) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring moveMediaItems()."); Log.w(TAG, "The controller is not connected. Ignoring moveMediaItems().");
...@@ -1163,12 +1168,12 @@ public class MediaController implements Player { ...@@ -1163,12 +1168,12 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean isCurrentWindowDynamic() { public final boolean isCurrentWindowDynamic() {
return isCurrentMediaItemDynamic(); return isCurrentMediaItemDynamic();
} }
@Override @Override
public boolean isCurrentMediaItemDynamic() { public final boolean isCurrentMediaItemDynamic() {
verifyApplicationThread(); verifyApplicationThread();
Timeline timeline = getCurrentTimeline(); Timeline timeline = getCurrentTimeline();
return !timeline.isEmpty() && timeline.getWindow(getCurrentMediaItemIndex(), window).isDynamic; return !timeline.isEmpty() && timeline.getWindow(getCurrentMediaItemIndex(), window).isDynamic;
...@@ -1180,12 +1185,12 @@ public class MediaController implements Player { ...@@ -1180,12 +1185,12 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean isCurrentWindowLive() { public final boolean isCurrentWindowLive() {
return isCurrentMediaItemLive(); return isCurrentMediaItemLive();
} }
@Override @Override
public boolean isCurrentMediaItemLive() { public final boolean isCurrentMediaItemLive() {
verifyApplicationThread(); verifyApplicationThread();
Timeline timeline = getCurrentTimeline(); Timeline timeline = getCurrentTimeline();
return !timeline.isEmpty() && timeline.getWindow(getCurrentMediaItemIndex(), window).isLive(); return !timeline.isEmpty() && timeline.getWindow(getCurrentMediaItemIndex(), window).isLive();
...@@ -1197,12 +1202,12 @@ public class MediaController implements Player { ...@@ -1197,12 +1202,12 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean isCurrentWindowSeekable() { public final boolean isCurrentWindowSeekable() {
return isCurrentMediaItemSeekable(); return isCurrentMediaItemSeekable();
} }
@Override @Override
public boolean isCurrentMediaItemSeekable() { public final boolean isCurrentMediaItemSeekable() {
verifyApplicationThread(); verifyApplicationThread();
Timeline timeline = getCurrentTimeline(); Timeline timeline = getCurrentTimeline();
return !timeline.isEmpty() && timeline.getWindow(getCurrentMediaItemIndex(), window).isSeekable; return !timeline.isEmpty() && timeline.getWindow(getCurrentMediaItemIndex(), window).isSeekable;
...@@ -1214,13 +1219,13 @@ public class MediaController implements Player { ...@@ -1214,13 +1219,13 @@ public class MediaController implements Player {
* <p>The MediaController returns {@code false}. * <p>The MediaController returns {@code false}.
*/ */
@Override @Override
public boolean canAdvertiseSession() { public final boolean canAdvertiseSession() {
return false; return false;
} }
@Override @Override
@Nullable @Nullable
public MediaItem getCurrentMediaItem() { public final MediaItem getCurrentMediaItem() {
Timeline timeline = getCurrentTimeline(); Timeline timeline = getCurrentTimeline();
return timeline.isEmpty() return timeline.isEmpty()
? null ? null
...@@ -1228,17 +1233,17 @@ public class MediaController implements Player { ...@@ -1228,17 +1233,17 @@ public class MediaController implements Player {
} }
@Override @Override
public int getMediaItemCount() { public final int getMediaItemCount() {
return getCurrentTimeline().getWindowCount(); return getCurrentTimeline().getWindowCount();
} }
@Override @Override
public MediaItem getMediaItemAt(int index) { public final MediaItem getMediaItemAt(int index) {
return getCurrentTimeline().getWindow(index, window).mediaItem; return getCurrentTimeline().getWindow(index, window).mediaItem;
} }
@Override @Override
public int getCurrentPeriodIndex() { public final int getCurrentPeriodIndex() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentPeriodIndex() : C.INDEX_UNSET; return isConnected() ? impl.getCurrentPeriodIndex() : C.INDEX_UNSET;
} }
...@@ -1249,12 +1254,12 @@ public class MediaController implements Player { ...@@ -1249,12 +1254,12 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public int getCurrentWindowIndex() { public final int getCurrentWindowIndex() {
return getCurrentMediaItemIndex(); return getCurrentMediaItemIndex();
} }
@Override @Override
public int getCurrentMediaItemIndex() { public final int getCurrentMediaItemIndex() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentMediaItemIndex() : C.INDEX_UNSET; return isConnected() ? impl.getCurrentMediaItemIndex() : C.INDEX_UNSET;
} }
...@@ -1265,7 +1270,7 @@ public class MediaController implements Player { ...@@ -1265,7 +1270,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public int getPreviousWindowIndex() { public final int getPreviousWindowIndex() {
return getPreviousMediaItemIndex(); return getPreviousMediaItemIndex();
} }
...@@ -1277,7 +1282,7 @@ public class MediaController implements Player { ...@@ -1277,7 +1282,7 @@ public class MediaController implements Player {
* C#INDEX_UNSET} even when {@link #hasPreviousMediaItem()} is {@code true}. * C#INDEX_UNSET} even when {@link #hasPreviousMediaItem()} is {@code true}.
*/ */
@Override @Override
public int getPreviousMediaItemIndex() { public final int getPreviousMediaItemIndex() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getPreviousMediaItemIndex() : C.INDEX_UNSET; return isConnected() ? impl.getPreviousMediaItemIndex() : C.INDEX_UNSET;
} }
...@@ -1288,7 +1293,7 @@ public class MediaController implements Player { ...@@ -1288,7 +1293,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public int getNextWindowIndex() { public final int getNextWindowIndex() {
return getNextMediaItemIndex(); return getNextMediaItemIndex();
} }
...@@ -1300,7 +1305,7 @@ public class MediaController implements Player { ...@@ -1300,7 +1305,7 @@ public class MediaController implements Player {
* C#INDEX_UNSET} even when {@link #hasNextMediaItem()} is {@code true}. * C#INDEX_UNSET} even when {@link #hasNextMediaItem()} is {@code true}.
*/ */
@Override @Override
public int getNextMediaItemIndex() { public final int getNextMediaItemIndex() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getNextMediaItemIndex() : C.INDEX_UNSET; return isConnected() ? impl.getNextMediaItemIndex() : C.INDEX_UNSET;
} }
...@@ -1311,7 +1316,7 @@ public class MediaController implements Player { ...@@ -1311,7 +1316,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean hasPrevious() { public final boolean hasPrevious() {
return hasPreviousMediaItem(); return hasPreviousMediaItem();
} }
...@@ -1321,7 +1326,7 @@ public class MediaController implements Player { ...@@ -1321,7 +1326,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean hasNext() { public final boolean hasNext() {
return hasNextMediaItem(); return hasNextMediaItem();
} }
...@@ -1331,7 +1336,7 @@ public class MediaController implements Player { ...@@ -1331,7 +1336,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean hasPreviousWindow() { public final boolean hasPreviousWindow() {
return hasPreviousMediaItem(); return hasPreviousMediaItem();
} }
...@@ -1341,18 +1346,18 @@ public class MediaController implements Player { ...@@ -1341,18 +1346,18 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public boolean hasNextWindow() { public final boolean hasNextWindow() {
return hasNextMediaItem(); return hasNextMediaItem();
} }
@Override @Override
public boolean hasPreviousMediaItem() { public final boolean hasPreviousMediaItem() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.hasPreviousMediaItem(); return isConnected() && impl.hasPreviousMediaItem();
} }
@Override @Override
public boolean hasNextMediaItem() { public final boolean hasNextMediaItem() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.hasNextMediaItem(); return isConnected() && impl.hasNextMediaItem();
} }
...@@ -1363,7 +1368,7 @@ public class MediaController implements Player { ...@@ -1363,7 +1368,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public void previous() { public final void previous() {
seekToPreviousMediaItem(); seekToPreviousMediaItem();
} }
...@@ -1373,7 +1378,7 @@ public class MediaController implements Player { ...@@ -1373,7 +1378,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public void next() { public final void next() {
seekToNextMediaItem(); seekToNextMediaItem();
} }
...@@ -1383,7 +1388,7 @@ public class MediaController implements Player { ...@@ -1383,7 +1388,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public void seekToPreviousWindow() { public final void seekToPreviousWindow() {
seekToPreviousMediaItem(); seekToPreviousMediaItem();
} }
...@@ -1394,7 +1399,7 @@ public class MediaController implements Player { ...@@ -1394,7 +1399,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, it's the same as {@link #seekToPrevious}. * android.support.v4.media.session.MediaSessionCompat}, it's the same as {@link #seekToPrevious}.
*/ */
@Override @Override
public void seekToPreviousMediaItem() { public final void seekToPreviousMediaItem() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekToPreviousMediaItem()."); Log.w(TAG, "The controller is not connected. Ignoring seekToPreviousMediaItem().");
...@@ -1409,7 +1414,7 @@ public class MediaController implements Player { ...@@ -1409,7 +1414,7 @@ public class MediaController implements Player {
@UnstableApi @UnstableApi
@Deprecated @Deprecated
@Override @Override
public void seekToNextWindow() { public final void seekToNextWindow() {
seekToNextMediaItem(); seekToNextMediaItem();
} }
...@@ -1420,7 +1425,7 @@ public class MediaController implements Player { ...@@ -1420,7 +1425,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, it's the same as {@link #seekToNext}. * android.support.v4.media.session.MediaSessionCompat}, it's the same as {@link #seekToNext}.
*/ */
@Override @Override
public void seekToNextMediaItem() { public final void seekToNextMediaItem() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekToNextMediaItem()."); Log.w(TAG, "The controller is not connected. Ignoring seekToNextMediaItem().");
...@@ -1437,7 +1442,7 @@ public class MediaController implements Player { ...@@ -1437,7 +1442,7 @@ public class MediaController implements Player {
* index immediately because the previous media item index is unknown. * index immediately because the previous media item index is unknown.
*/ */
@Override @Override
public void seekToPrevious() { public final void seekToPrevious() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekToPrevious()."); Log.w(TAG, "The controller is not connected. Ignoring seekToPrevious().");
...@@ -1453,7 +1458,7 @@ public class MediaController implements Player { ...@@ -1453,7 +1458,7 @@ public class MediaController implements Player {
* android.support.v4.media.session.MediaSessionCompat}, it always returns {@code 0}. * android.support.v4.media.session.MediaSessionCompat}, it always returns {@code 0}.
*/ */
@Override @Override
public long getMaxSeekToPreviousPosition() { public final long getMaxSeekToPreviousPosition() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getMaxSeekToPreviousPosition() : 0L; return isConnected() ? impl.getMaxSeekToPreviousPosition() : 0L;
} }
...@@ -1466,7 +1471,7 @@ public class MediaController implements Player { ...@@ -1466,7 +1471,7 @@ public class MediaController implements Player {
* index immediately because the previous media item index is unknown. * index immediately because the previous media item index is unknown.
*/ */
@Override @Override
public void seekToNext() { public final void seekToNext() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring seekToNext()."); Log.w(TAG, "The controller is not connected. Ignoring seekToNext().");
...@@ -1476,13 +1481,13 @@ public class MediaController implements Player { ...@@ -1476,13 +1481,13 @@ public class MediaController implements Player {
} }
@Override @Override
public @RepeatMode int getRepeatMode() { public final @RepeatMode int getRepeatMode() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getRepeatMode() : Player.REPEAT_MODE_OFF; return isConnected() ? impl.getRepeatMode() : Player.REPEAT_MODE_OFF;
} }
@Override @Override
public void setRepeatMode(@RepeatMode int repeatMode) { public final void setRepeatMode(@RepeatMode int repeatMode) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setRepeatMode()."); Log.w(TAG, "The controller is not connected. Ignoring setRepeatMode().");
...@@ -1492,13 +1497,13 @@ public class MediaController implements Player { ...@@ -1492,13 +1497,13 @@ public class MediaController implements Player {
} }
@Override @Override
public boolean getShuffleModeEnabled() { public final boolean getShuffleModeEnabled() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() && impl.getShuffleModeEnabled(); return isConnected() && impl.getShuffleModeEnabled();
} }
@Override @Override
public void setShuffleModeEnabled(boolean shuffleModeEnabled) { public final void setShuffleModeEnabled(boolean shuffleModeEnabled) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setShuffleMode()."); Log.w(TAG, "The controller is not connected. Ignoring setShuffleMode().");
...@@ -1508,20 +1513,20 @@ public class MediaController implements Player { ...@@ -1508,20 +1513,20 @@ public class MediaController implements Player {
} }
@Override @Override
public VideoSize getVideoSize() { public final VideoSize getVideoSize() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getVideoSize() : VideoSize.UNKNOWN; return isConnected() ? impl.getVideoSize() : VideoSize.UNKNOWN;
} }
@UnstableApi @UnstableApi
@Override @Override
public Size getSurfaceSize() { public final Size getSurfaceSize() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getSurfaceSize() : Size.UNKNOWN; return isConnected() ? impl.getSurfaceSize() : Size.UNKNOWN;
} }
@Override @Override
public void clearVideoSurface() { public final void clearVideoSurface() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurface()."); Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurface().");
...@@ -1531,7 +1536,7 @@ public class MediaController implements Player { ...@@ -1531,7 +1536,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void clearVideoSurface(@Nullable Surface surface) { public final void clearVideoSurface(@Nullable Surface surface) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurface()."); Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurface().");
...@@ -1541,7 +1546,7 @@ public class MediaController implements Player { ...@@ -1541,7 +1546,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setVideoSurface(@Nullable Surface surface) { public final void setVideoSurface(@Nullable Surface surface) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setVideoSurface()."); Log.w(TAG, "The controller is not connected. Ignoring setVideoSurface().");
...@@ -1551,7 +1556,7 @@ public class MediaController implements Player { ...@@ -1551,7 +1556,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { public final void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setVideoSurfaceHolder()."); Log.w(TAG, "The controller is not connected. Ignoring setVideoSurfaceHolder().");
...@@ -1561,7 +1566,7 @@ public class MediaController implements Player { ...@@ -1561,7 +1566,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { public final void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurfaceHolder()."); Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurfaceHolder().");
...@@ -1571,7 +1576,7 @@ public class MediaController implements Player { ...@@ -1571,7 +1576,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setVideoSurfaceView(@Nullable SurfaceView surfaceView) { public final void setVideoSurfaceView(@Nullable SurfaceView surfaceView) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setVideoSurfaceView()."); Log.w(TAG, "The controller is not connected. Ignoring setVideoSurfaceView().");
...@@ -1581,7 +1586,7 @@ public class MediaController implements Player { ...@@ -1581,7 +1586,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) { public final void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurfaceView()."); Log.w(TAG, "The controller is not connected. Ignoring clearVideoSurfaceView().");
...@@ -1591,7 +1596,7 @@ public class MediaController implements Player { ...@@ -1591,7 +1596,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setVideoTextureView(@Nullable TextureView textureView) { public final void setVideoTextureView(@Nullable TextureView textureView) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setVideoTextureView()."); Log.w(TAG, "The controller is not connected. Ignoring setVideoTextureView().");
...@@ -1601,7 +1606,7 @@ public class MediaController implements Player { ...@@ -1601,7 +1606,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void clearVideoTextureView(@Nullable TextureView textureView) { public final void clearVideoTextureView(@Nullable TextureView textureView) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring clearVideoTextureView()."); Log.w(TAG, "The controller is not connected. Ignoring clearVideoTextureView().");
...@@ -1611,20 +1616,20 @@ public class MediaController implements Player { ...@@ -1611,20 +1616,20 @@ public class MediaController implements Player {
} }
@Override @Override
public CueGroup getCurrentCues() { public final CueGroup getCurrentCues() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentCues() : CueGroup.EMPTY_TIME_ZERO; return isConnected() ? impl.getCurrentCues() : CueGroup.EMPTY_TIME_ZERO;
} }
@Override @Override
@FloatRange(from = 0, to = 1) @FloatRange(from = 0, to = 1)
public float getVolume() { public final float getVolume() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getVolume() : 1; return isConnected() ? impl.getVolume() : 1;
} }
@Override @Override
public void setVolume(@FloatRange(from = 0, to = 1) float volume) { public final void setVolume(@FloatRange(from = 0, to = 1) float volume) {
verifyApplicationThread(); verifyApplicationThread();
checkArgument(volume >= 0 && volume <= 1, "volume must be between 0 and 1"); checkArgument(volume >= 0 && volume <= 1, "volume must be between 0 and 1");
if (!isConnected()) { if (!isConnected()) {
...@@ -1635,7 +1640,7 @@ public class MediaController implements Player { ...@@ -1635,7 +1640,7 @@ public class MediaController implements Player {
} }
@Override @Override
public DeviceInfo getDeviceInfo() { public final DeviceInfo getDeviceInfo() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return DeviceInfo.UNKNOWN; return DeviceInfo.UNKNOWN;
...@@ -1645,7 +1650,7 @@ public class MediaController implements Player { ...@@ -1645,7 +1650,7 @@ public class MediaController implements Player {
@Override @Override
@IntRange(from = 0) @IntRange(from = 0)
public int getDeviceVolume() { public final int getDeviceVolume() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return 0; return 0;
...@@ -1654,7 +1659,7 @@ public class MediaController implements Player { ...@@ -1654,7 +1659,7 @@ public class MediaController implements Player {
} }
@Override @Override
public boolean isDeviceMuted() { public final boolean isDeviceMuted() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return false; return false;
...@@ -1663,7 +1668,7 @@ public class MediaController implements Player { ...@@ -1663,7 +1668,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setDeviceVolume(@IntRange(from = 0) int volume) { public final void setDeviceVolume(@IntRange(from = 0) int volume) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setDeviceVolume()."); Log.w(TAG, "The controller is not connected. Ignoring setDeviceVolume().");
...@@ -1673,7 +1678,7 @@ public class MediaController implements Player { ...@@ -1673,7 +1678,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void increaseDeviceVolume() { public final void increaseDeviceVolume() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring increaseDeviceVolume()."); Log.w(TAG, "The controller is not connected. Ignoring increaseDeviceVolume().");
...@@ -1683,7 +1688,7 @@ public class MediaController implements Player { ...@@ -1683,7 +1688,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void decreaseDeviceVolume() { public final void decreaseDeviceVolume() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring decreaseDeviceVolume()."); Log.w(TAG, "The controller is not connected. Ignoring decreaseDeviceVolume().");
...@@ -1693,7 +1698,7 @@ public class MediaController implements Player { ...@@ -1693,7 +1698,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setDeviceMuted(boolean muted) { public final void setDeviceMuted(boolean muted) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setDeviceMuted()."); Log.w(TAG, "The controller is not connected. Ignoring setDeviceMuted().");
...@@ -1703,19 +1708,19 @@ public class MediaController implements Player { ...@@ -1703,19 +1708,19 @@ public class MediaController implements Player {
} }
@Override @Override
public MediaMetadata getMediaMetadata() { public final MediaMetadata getMediaMetadata() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getMediaMetadata() : MediaMetadata.EMPTY; return isConnected() ? impl.getMediaMetadata() : MediaMetadata.EMPTY;
} }
@Override @Override
public Tracks getCurrentTracks() { public final Tracks getCurrentTracks() {
verifyApplicationThread(); verifyApplicationThread();
return isConnected() ? impl.getCurrentTracks() : Tracks.EMPTY; return isConnected() ? impl.getCurrentTracks() : Tracks.EMPTY;
} }
@Override @Override
public TrackSelectionParameters getTrackSelectionParameters() { public final TrackSelectionParameters getTrackSelectionParameters() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT; return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
...@@ -1724,7 +1729,7 @@ public class MediaController implements Player { ...@@ -1724,7 +1729,7 @@ public class MediaController implements Player {
} }
@Override @Override
public void setTrackSelectionParameters(TrackSelectionParameters parameters) { public final void setTrackSelectionParameters(TrackSelectionParameters parameters) {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
Log.w(TAG, "The controller is not connected. Ignoring setTrackSelectionParameters()."); Log.w(TAG, "The controller is not connected. Ignoring setTrackSelectionParameters().");
...@@ -1733,7 +1738,7 @@ public class MediaController implements Player { ...@@ -1733,7 +1738,7 @@ public class MediaController implements Player {
} }
@Override @Override
public Looper getApplicationLooper() { public final Looper getApplicationLooper() {
// Don't verify application thread. We allow calls to this method from any thread. // Don't verify application thread. We allow calls to this method from any thread.
return applicationHandler.getLooper(); return applicationHandler.getLooper();
} }
...@@ -1742,7 +1747,7 @@ public class MediaController implements Player { ...@@ -1742,7 +1747,7 @@ public class MediaController implements Player {
* Gets the optional time diff (in milliseconds) used for calculating the current position, or * Gets the optional time diff (in milliseconds) used for calculating the current position, or
* {@link C#TIME_UNSET} if no diff should be applied. * {@link C#TIME_UNSET} if no diff should be applied.
*/ */
/* package */ long getTimeDiffMs() { /* package */ final long getTimeDiffMs() {
return timeDiffMs; return timeDiffMs;
} }
...@@ -1752,32 +1757,32 @@ public class MediaController implements Player { ...@@ -1752,32 +1757,32 @@ public class MediaController implements Player {
* @param timeDiffMs {@link C#TIME_UNSET} for reset. * @param timeDiffMs {@link C#TIME_UNSET} for reset.
*/ */
@VisibleForTesting(otherwise = NONE) @VisibleForTesting(otherwise = NONE)
/* package */ void setTimeDiffMs(long timeDiffMs) { /* package */ final void setTimeDiffMs(long timeDiffMs) {
verifyApplicationThread(); verifyApplicationThread();
this.timeDiffMs = timeDiffMs; this.timeDiffMs = timeDiffMs;
} }
@Override @Override
public void addListener(Player.Listener listener) { public final void addListener(Player.Listener listener) {
// Don't verify application thread. We allow calls to this method from any thread. // Don't verify application thread. We allow calls to this method from any thread.
checkNotNull(listener, "listener must not be null"); checkNotNull(listener, "listener must not be null");
impl.addListener(listener); impl.addListener(listener);
} }
@Override @Override
public void removeListener(Player.Listener listener) { public final void removeListener(Player.Listener listener) {
verifyApplicationThread(); verifyApplicationThread();
checkNotNull(listener, "listener must not be null"); checkNotNull(listener, "listener must not be null");
impl.removeListener(listener); impl.removeListener(listener);
} }
@Override @Override
public boolean isCommandAvailable(@Command int command) { public final boolean isCommandAvailable(@Command int command) {
return getAvailableCommands().contains(command); return getAvailableCommands().contains(command);
} }
@Override @Override
public Commands getAvailableCommands() { public final Commands getAvailableCommands() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return Commands.EMPTY; return Commands.EMPTY;
...@@ -1790,12 +1795,13 @@ public class MediaController implements Player { ...@@ -1790,12 +1795,13 @@ public class MediaController implements Player {
* sessionCommandCode} must not be {@link SessionCommand#COMMAND_CODE_CUSTOM}. Use {@link * sessionCommandCode} must not be {@link SessionCommand#COMMAND_CODE_CUSTOM}. Use {@link
* #isSessionCommandAvailable(SessionCommand)} for custom commands. * #isSessionCommandAvailable(SessionCommand)} for custom commands.
*/ */
public boolean isSessionCommandAvailable(@SessionCommand.CommandCode int sessionCommandCode) { public final boolean isSessionCommandAvailable(
@SessionCommand.CommandCode int sessionCommandCode) {
return getAvailableSessionCommands().contains(sessionCommandCode); return getAvailableSessionCommands().contains(sessionCommandCode);
} }
/** Returns whether the {@link SessionCommand} is available. */ /** Returns whether the {@link SessionCommand} is available. */
public boolean isSessionCommandAvailable(SessionCommand sessionCommand) { public final boolean isSessionCommandAvailable(SessionCommand sessionCommand) {
return getAvailableSessionCommands().contains(sessionCommand); return getAvailableSessionCommands().contains(sessionCommand);
} }
...@@ -1806,7 +1812,7 @@ public class MediaController implements Player { ...@@ -1806,7 +1812,7 @@ public class MediaController implements Player {
* *
* @return The available session commands. * @return The available session commands.
*/ */
public SessionCommands getAvailableSessionCommands() { public final SessionCommands getAvailableSessionCommands() {
verifyApplicationThread(); verifyApplicationThread();
if (!isConnected()) { if (!isConnected()) {
return SessionCommands.EMPTY; return SessionCommands.EMPTY;
...@@ -1819,16 +1825,16 @@ public class MediaController implements Player { ...@@ -1819,16 +1825,16 @@ public class MediaController implements Player {
new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED)); new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED));
} }
/* package */ void runOnApplicationLooper(Runnable runnable) { /* package */ final void runOnApplicationLooper(Runnable runnable) {
postOrRun(applicationHandler, runnable); postOrRun(applicationHandler, runnable);
} }
/* package */ void notifyControllerListener(Consumer<Listener> listenerConsumer) { /* package */ final void notifyControllerListener(Consumer<Listener> listenerConsumer) {
checkState(Looper.myLooper() == getApplicationLooper()); checkState(Looper.myLooper() == getApplicationLooper());
listenerConsumer.accept(listener); listenerConsumer.accept(listener);
} }
/* package */ void notifyAccepted() { /* package */ final void notifyAccepted() {
checkState(Looper.myLooper() == getApplicationLooper()); checkState(Looper.myLooper() == getApplicationLooper());
checkState(!connectionNotified); checkState(!connectionNotified);
connectionNotified = true; connectionNotified = true;
...@@ -1839,7 +1845,7 @@ public class MediaController implements Player { ...@@ -1839,7 +1845,7 @@ public class MediaController implements Player {
checkState(Looper.myLooper() == getApplicationLooper(), WRONG_THREAD_ERROR_MESSAGE); checkState(Looper.myLooper() == getApplicationLooper(), WRONG_THREAD_ERROR_MESSAGE);
} }
interface MediaControllerImpl { /* package */ interface MediaControllerImpl {
void connect(@UnderInitialization MediaControllerImpl this); void connect(@UnderInitialization MediaControllerImpl this);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment