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