Commit 4f5ac9e0 by aquilescanta Committed by Oliver Woodman

Extract Player interface from ExoPlayer

This is the first step towards facilitating Cast integration to ExoPlayer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162366198
parent 41028faf
......@@ -39,6 +39,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player.EventListener;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager;
......@@ -82,7 +83,7 @@ import java.util.UUID;
/**
* An activity that plays media using {@link SimpleExoPlayer}.
*/
public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener,
public class PlayerActivity extends Activity implements OnClickListener, EventListener,
PlaybackControlView.VisibilityListener {
public static final String DRM_SCHEME_UUID_EXTRA = "drm_scheme_uuid";
......
......@@ -35,6 +35,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroupArray;
......@@ -484,7 +485,7 @@ public final class MediaSessionConnector {
Pair<Integer, String> message = errorMessageProvider.getErrorMessage(playbackException);
builder.setErrorMessage(message.first, message.second);
}
if (player.getPlaybackState() != ExoPlayer.STATE_IDLE) {
if (player.getPlaybackState() != Player.STATE_IDLE) {
playbackException = null;
}
}
......@@ -507,7 +508,7 @@ public final class MediaSessionConnector {
if (queue == null || queue.size() < 2) {
removePlaybackActions(PlaybackStateCompat.ACTION_SKIP_TO_NEXT
| PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS);
} else if (player.getRepeatMode() != ExoPlayer.REPEAT_MODE_OFF) {
} else if (player.getRepeatMode() != Player.REPEAT_MODE_OFF) {
addPlaybackActions(PlaybackStateCompat.ACTION_SKIP_TO_NEXT
| PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS);
} else if (activeQueueItemId == queue.get(0).getQueueId()) {
......@@ -576,11 +577,11 @@ public final class MediaSessionConnector {
private int mapPlaybackState(int exoPlayerPlaybackState, boolean playWhenReady) {
switch (exoPlayerPlaybackState) {
case ExoPlayer.STATE_BUFFERING:
case Player.STATE_BUFFERING:
return PlaybackStateCompat.STATE_BUFFERING;
case ExoPlayer.STATE_READY:
case Player.STATE_READY:
return playWhenReady ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED;
case ExoPlayer.STATE_ENDED:
case Player.STATE_ENDED:
return PlaybackStateCompat.STATE_PAUSED;
default:
return PlaybackStateCompat.STATE_NONE;
......@@ -599,7 +600,7 @@ public final class MediaSessionConnector {
return playbackPreparer != null && isActionPublished(action);
}
private class ExoPlayerEventListener implements ExoPlayer.EventListener {
private class ExoPlayerEventListener implements Player.EventListener {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
if (queueNavigator != null) {
......@@ -625,9 +626,9 @@ public final class MediaSessionConnector {
}
@Override
public void onRepeatModeChanged(@ExoPlayer.RepeatMode int repeatMode) {
mediaSession.setRepeatMode(repeatMode == ExoPlayer.REPEAT_MODE_ONE
? PlaybackStateCompat.REPEAT_MODE_ONE : repeatMode == ExoPlayer.REPEAT_MODE_ALL
public void onRepeatModeChanged(@Player.RepeatMode int repeatMode) {
mediaSession.setRepeatMode(repeatMode == Player.REPEAT_MODE_ONE
? PlaybackStateCompat.REPEAT_MODE_ONE : repeatMode == Player.REPEAT_MODE_ALL
? PlaybackStateCompat.REPEAT_MODE_ALL : PlaybackStateCompat.REPEAT_MODE_NONE);
updateMediaSessionPlaybackState();
}
......
......@@ -19,6 +19,7 @@ import android.content.Context;
import android.os.Bundle;
import android.support.v4.media.session.PlaybackStateCompat;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.util.RepeatModeUtil;
/**
......@@ -81,15 +82,15 @@ public final class RepeatModeActionProvider implements MediaSessionConnector.Cus
CharSequence actionLabel;
int iconResourceId;
switch (player.getRepeatMode()) {
case ExoPlayer.REPEAT_MODE_ONE:
case Player.REPEAT_MODE_ONE:
actionLabel = repeatOneDescription;
iconResourceId = R.drawable.exo_media_action_repeat_one;
break;
case ExoPlayer.REPEAT_MODE_ALL:
case Player.REPEAT_MODE_ALL:
actionLabel = repeatAllDescription;
iconResourceId = R.drawable.exo_media_action_repeat_all;
break;
case ExoPlayer.REPEAT_MODE_OFF:
case Player.REPEAT_MODE_OFF:
default:
actionLabel = repeatOffDescription;
iconResourceId = R.drawable.exo_media_action_repeat_off;
......
......@@ -23,6 +23,7 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.MediaSource.Listener;
import com.google.android.exoplayer2.testutil.FakeMediaSource;
......@@ -352,12 +353,12 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
}
@Override
public void addListener(EventListener listener) {
public void addListener(Player.EventListener listener) {
throw new UnsupportedOperationException();
}
@Override
public void removeListener(EventListener listener) {
public void removeListener(Player.EventListener listener) {
throw new UnsupportedOperationException();
}
......
......@@ -46,7 +46,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
private final TrackSelectionArray emptyTrackSelections;
private final Handler eventHandler;
private final ExoPlayerImplInternal internalPlayer;
private final CopyOnWriteArraySet<EventListener> listeners;
private final CopyOnWriteArraySet<Player.EventListener> listeners;
private final Timeline.Window window;
private final Timeline.Period period;
......@@ -114,12 +114,12 @@ import java.util.concurrent.CopyOnWriteArraySet;
}
@Override
public void addListener(EventListener listener) {
public void addListener(Player.EventListener listener) {
listeners.add(listener);
}
@Override
public void removeListener(EventListener listener) {
public void removeListener(Player.EventListener listener) {
listeners.remove(listener);
}
......@@ -139,7 +139,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
if (!timeline.isEmpty() || manifest != null) {
timeline = Timeline.EMPTY;
manifest = null;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onTimelineChanged(timeline, manifest);
}
}
......@@ -148,7 +148,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
trackGroups = TrackGroupArray.EMPTY;
trackSelections = emptyTrackSelections;
trackSelector.onSelectionActivated(null);
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onTracksChanged(trackGroups, trackSelections);
}
}
......@@ -162,7 +162,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
if (this.playWhenReady != playWhenReady) {
this.playWhenReady = playWhenReady;
internalPlayer.setPlayWhenReady(playWhenReady);
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPlayerStateChanged(playWhenReady, playbackState);
}
}
......@@ -178,7 +178,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
if (this.repeatMode != repeatMode) {
this.repeatMode = repeatMode;
internalPlayer.setRepeatMode(repeatMode);
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onRepeatModeChanged(repeatMode);
}
}
......@@ -238,7 +238,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
} else {
maskingWindowPositionMs = positionMs;
internalPlayer.seekTo(timeline, windowIndex, C.msToUs(positionMs));
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPositionDiscontinuity();
}
}
......@@ -420,14 +420,14 @@ import java.util.concurrent.CopyOnWriteArraySet;
}
case ExoPlayerImplInternal.MSG_STATE_CHANGED: {
playbackState = msg.arg1;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPlayerStateChanged(playWhenReady, playbackState);
}
break;
}
case ExoPlayerImplInternal.MSG_LOADING_CHANGED: {
isLoading = msg.arg1 != 0;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onLoadingChanged(isLoading);
}
break;
......@@ -439,7 +439,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
trackGroups = trackSelectorResult.groups;
trackSelections = trackSelectorResult.selections;
trackSelector.onSelectionActivated(trackSelectorResult.info);
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onTracksChanged(trackGroups, trackSelections);
}
}
......@@ -449,7 +449,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
if (--pendingSeekAcks == 0) {
playbackInfo = (ExoPlayerImplInternal.PlaybackInfo) msg.obj;
if (msg.arg1 != 0) {
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPositionDiscontinuity();
}
}
......@@ -459,7 +459,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
case ExoPlayerImplInternal.MSG_POSITION_DISCONTINUITY: {
if (pendingSeekAcks == 0) {
playbackInfo = (ExoPlayerImplInternal.PlaybackInfo) msg.obj;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPositionDiscontinuity();
}
}
......@@ -472,7 +472,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
timeline = sourceInfo.timeline;
manifest = sourceInfo.manifest;
playbackInfo = sourceInfo.playbackInfo;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onTimelineChanged(timeline, manifest);
}
}
......@@ -482,7 +482,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
PlaybackParameters playbackParameters = (PlaybackParameters) msg.obj;
if (!this.playbackParameters.equals(playbackParameters)) {
this.playbackParameters = playbackParameters;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPlaybackParametersChanged(playbackParameters);
}
}
......@@ -490,7 +490,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
}
case ExoPlayerImplInternal.MSG_ERROR: {
ExoPlaybackException exception = (ExoPlaybackException) msg.obj;
for (EventListener listener : listeners) {
for (Player.EventListener listener : listeners) {
listener.onPlayerError(exception);
}
break;
......
......@@ -16,8 +16,8 @@
package com.google.android.exoplayer2;
import android.util.Pair;
import com.google.android.exoplayer2.ExoPlayer.RepeatMode;
import com.google.android.exoplayer2.ExoPlayerImplInternal.PlaybackInfo;
import com.google.android.exoplayer2.Player.RepeatMode;
import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
......
......@@ -524,12 +524,12 @@ public class SimpleExoPlayer implements ExoPlayer {
}
@Override
public void addListener(EventListener listener) {
public void addListener(Player.EventListener listener) {
player.addListener(listener);
}
@Override
public void removeListener(EventListener listener) {
public void removeListener(Player.EventListener listener) {
player.removeListener(listener);
}
......
......@@ -17,7 +17,7 @@ package com.google.android.exoplayer2.source;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayer.RepeatMode;
import com.google.android.exoplayer2.Player.RepeatMode;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.util.Assertions;
......
......@@ -31,9 +31,10 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Player.RepeatMode;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
......@@ -45,7 +46,7 @@ import java.util.Formatter;
import java.util.Locale;
/**
* A view for controlling {@link ExoPlayer} instances.
* A view for controlling {@link Player} instances.
* <p>
* A PlaybackControlView can be customized by setting attributes (or calling corresponding methods),
* overriding the view's layout file or by specifying a custom view layout file, as outlined below.
......@@ -183,7 +184,7 @@ public class PlaybackControlView extends FrameLayout {
}
/**
* Dispatches operations to the player.
* Dispatches operations to the {@link Player}.
* <p>
* Implementations may choose to suppress (e.g. prevent playback from resuming if audio focus is
* denied) or modify (e.g. change the seek position to prevent a user from seeking past a
......@@ -192,33 +193,34 @@ public class PlaybackControlView extends FrameLayout {
public interface ControlDispatcher {
/**
* Dispatches a {@link ExoPlayer#setPlayWhenReady(boolean)} operation.
* Dispatches a {@link Player#setPlayWhenReady(boolean)} operation.
*
* @param player The player to which the operation should be dispatched.
* @param player The {@link Player} to which the operation should be dispatched.
* @param playWhenReady Whether playback should proceed when ready.
* @return True if the operation was dispatched. False if suppressed.
*/
boolean dispatchSetPlayWhenReady(ExoPlayer player, boolean playWhenReady);
boolean dispatchSetPlayWhenReady(Player player, boolean playWhenReady);
/**
* Dispatches a {@link ExoPlayer#seekTo(int, long)} operation.
* Dispatches a {@link Player#seekTo(int, long)} operation.
*
* @param player The player to which the operation should be dispatched.
* @param player The {@link Player} to which the operation should be dispatched.
* @param windowIndex The index of the window.
* @param positionMs The seek position in the specified window, or {@link C#TIME_UNSET} to seek
* to the window's default position.
* @return True if the operation was dispatched. False if suppressed.
*/
boolean dispatchSeekTo(ExoPlayer player, int windowIndex, long positionMs);
boolean dispatchSeekTo(Player player, int windowIndex, long positionMs);
/**
* Dispatches a {@link ExoPlayer#setRepeatMode(int)} operation.
* Dispatches a {@link Player#setRepeatMode(int)} operation.
*
* @param player The player to which the operation should be dispatched.
* @param player The {@link Player} to which the operation should be dispatched.
* @param repeatMode The repeat mode.
* @return True if the operation was dispatched. False if suppressed.
*/
boolean dispatchSetRepeatMode(ExoPlayer player, @ExoPlayer.RepeatMode int repeatMode);
boolean dispatchSetRepeatMode(Player player, @RepeatMode int repeatMode);
}
/**
......@@ -228,19 +230,19 @@ public class PlaybackControlView extends FrameLayout {
public static final ControlDispatcher DEFAULT_CONTROL_DISPATCHER = new ControlDispatcher() {
@Override
public boolean dispatchSetPlayWhenReady(ExoPlayer player, boolean playWhenReady) {
public boolean dispatchSetPlayWhenReady(Player player, boolean playWhenReady) {
player.setPlayWhenReady(playWhenReady);
return true;
}
@Override
public boolean dispatchSeekTo(ExoPlayer player, int windowIndex, long positionMs) {
public boolean dispatchSeekTo(Player player, int windowIndex, long positionMs) {
player.seekTo(windowIndex, positionMs);
return true;
}
@Override
public boolean dispatchSetRepeatMode(ExoPlayer player, @ExoPlayer.RepeatMode int repeatMode) {
public boolean dispatchSetRepeatMode(Player player, @RepeatMode int repeatMode) {
player.setRepeatMode(repeatMode);
return true;
}
......@@ -283,7 +285,7 @@ public class PlaybackControlView extends FrameLayout {
private final String repeatOneButtonContentDescription;
private final String repeatAllButtonContentDescription;
private ExoPlayer player;
private Player player;
private ControlDispatcher controlDispatcher;
private VisibilityListener visibilityListener;
......@@ -409,18 +411,19 @@ public class PlaybackControlView extends FrameLayout {
}
/**
* Returns the player currently being controlled by this view, or null if no player is set.
* Returns the {@link Player} currently being controlled by this view, or null if no player is
* set.
*/
public ExoPlayer getPlayer() {
public Player getPlayer() {
return player;
}
/**
* Sets the {@link ExoPlayer} to control.
* Sets the {@link Player} to control.
*
* @param player The {@code ExoPlayer} to control.
* @param player The {@link Player} to control.
*/
public void setPlayer(ExoPlayer player) {
public void setPlayer(Player player) {
if (this.player == player) {
return;
}
......@@ -528,16 +531,16 @@ public class PlaybackControlView extends FrameLayout {
public void setRepeatToggleModes(@RepeatModeUtil.RepeatToggleModes int repeatToggleModes) {
this.repeatToggleModes = repeatToggleModes;
if (player != null) {
@ExoPlayer.RepeatMode int currentMode = player.getRepeatMode();
@Player.RepeatMode int currentMode = player.getRepeatMode();
if (repeatToggleModes == RepeatModeUtil.REPEAT_TOGGLE_MODE_NONE
&& currentMode != ExoPlayer.REPEAT_MODE_OFF) {
controlDispatcher.dispatchSetRepeatMode(player, ExoPlayer.REPEAT_MODE_OFF);
&& currentMode != Player.REPEAT_MODE_OFF) {
controlDispatcher.dispatchSetRepeatMode(player, Player.REPEAT_MODE_OFF);
} else if (repeatToggleModes == RepeatModeUtil.REPEAT_TOGGLE_MODE_ONE
&& currentMode == ExoPlayer.REPEAT_MODE_ALL) {
controlDispatcher.dispatchSetRepeatMode(player, ExoPlayer.REPEAT_MODE_ONE);
&& currentMode == Player.REPEAT_MODE_ALL) {
controlDispatcher.dispatchSetRepeatMode(player, Player.REPEAT_MODE_ONE);
} else if (repeatToggleModes == RepeatModeUtil.REPEAT_TOGGLE_MODE_ALL
&& currentMode == ExoPlayer.REPEAT_MODE_ONE) {
controlDispatcher.dispatchSetRepeatMode(player, ExoPlayer.REPEAT_MODE_ALL);
&& currentMode == Player.REPEAT_MODE_ONE) {
controlDispatcher.dispatchSetRepeatMode(player, Player.REPEAT_MODE_ALL);
}
}
}
......@@ -658,15 +661,15 @@ public class PlaybackControlView extends FrameLayout {
return;
}
switch (player.getRepeatMode()) {
case ExoPlayer.REPEAT_MODE_OFF:
case Player.REPEAT_MODE_OFF:
repeatToggleButton.setImageDrawable(repeatOffButtonDrawable);
repeatToggleButton.setContentDescription(repeatOffButtonContentDescription);
break;
case ExoPlayer.REPEAT_MODE_ONE:
case Player.REPEAT_MODE_ONE:
repeatToggleButton.setImageDrawable(repeatOneButtonDrawable);
repeatToggleButton.setContentDescription(repeatOneButtonContentDescription);
break;
case ExoPlayer.REPEAT_MODE_ALL:
case Player.REPEAT_MODE_ALL:
repeatToggleButton.setImageDrawable(repeatAllButtonDrawable);
repeatToggleButton.setContentDescription(repeatAllButtonContentDescription);
break;
......@@ -765,10 +768,10 @@ public class PlaybackControlView extends FrameLayout {
// Cancel any pending updates and schedule a new one if necessary.
removeCallbacks(updateProgressAction);
int playbackState = player == null ? ExoPlayer.STATE_IDLE : player.getPlaybackState();
if (playbackState != ExoPlayer.STATE_IDLE && playbackState != ExoPlayer.STATE_ENDED) {
int playbackState = player == null ? Player.STATE_IDLE : player.getPlaybackState();
if (playbackState != Player.STATE_IDLE && playbackState != Player.STATE_ENDED) {
long delayMs;
if (player.getPlayWhenReady() && playbackState == ExoPlayer.STATE_READY) {
if (player.getPlayWhenReady() && playbackState == Player.STATE_READY) {
delayMs = 1000 - (position % 1000);
if (delayMs < 200) {
delayMs += 1000;
......@@ -995,7 +998,7 @@ public class PlaybackControlView extends FrameLayout {
return true;
}
private final class ComponentListener implements ExoPlayer.EventListener, TimeBar.OnScrubListener,
private final class ComponentListener implements Player.EventListener, TimeBar.OnScrubListener,
OnClickListener {
@Override
......
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