Commit 52de36c5 by tonihei Committed by Oliver Woodman

Add abstract, default Player event listener.

This allows simplified listener implementations as most listeners
will not listen to all possible notifications.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170177821
parent 55f696e1
...@@ -37,11 +37,8 @@ import com.google.android.exoplayer2.C; ...@@ -37,11 +37,8 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.DefaultRenderersFactory; import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Player.EventListener;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager; import com.google.android.exoplayer2.drm.DefaultDrmSessionManager;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.drm.FrameworkMediaCrypto;
...@@ -83,7 +80,7 @@ import java.util.UUID; ...@@ -83,7 +80,7 @@ import java.util.UUID;
/** /**
* An activity that plays media using {@link SimpleExoPlayer}. * An activity that plays media using {@link SimpleExoPlayer}.
*/ */
public class PlayerActivity extends Activity implements OnClickListener, EventListener, public class PlayerActivity extends Activity implements OnClickListener,
PlaybackControlView.VisibilityListener { PlaybackControlView.VisibilityListener {
public static final String DRM_SCHEME_UUID_EXTRA = "drm_scheme_uuid"; public static final String DRM_SCHEME_UUID_EXTRA = "drm_scheme_uuid";
...@@ -294,7 +291,7 @@ public class PlayerActivity extends Activity implements OnClickListener, EventLi ...@@ -294,7 +291,7 @@ public class PlayerActivity extends Activity implements OnClickListener, EventLi
drmSessionManager, extensionRendererMode); drmSessionManager, extensionRendererMode);
player = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector); player = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);
player.addListener(this); player.addListener(new PlayerEventListener());
player.addListener(eventLogger); player.addListener(eventLogger);
player.addMetadataOutput(eventLogger); player.addMetadataOutput(eventLogger);
player.setAudioDebugListener(eventLogger); player.setAudioDebugListener(eventLogger);
...@@ -472,110 +469,6 @@ public class PlayerActivity extends Activity implements OnClickListener, EventLi ...@@ -472,110 +469,6 @@ public class PlayerActivity extends Activity implements OnClickListener, EventLi
} }
} }
// Player.EventListener implementation
@Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_ENDED) {
showControls();
}
updateButtonVisibilities();
}
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
if (inErrorState) {
// This will only occur if the user has performed a seek whilst in the error state. Update the
// resume position so that if the user then retries, playback will resume from the position to
// which they seeked.
updateResumePosition();
}
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException e) {
String errorString = null;
if (e.type == ExoPlaybackException.TYPE_RENDERER) {
Exception cause = e.getRendererException();
if (cause instanceof DecoderInitializationException) {
// Special case for decoder initialization failures.
DecoderInitializationException decoderInitializationException =
(DecoderInitializationException) cause;
if (decoderInitializationException.decoderName == null) {
if (decoderInitializationException.getCause() instanceof DecoderQueryException) {
errorString = getString(R.string.error_querying_decoders);
} else if (decoderInitializationException.secureDecoderRequired) {
errorString = getString(R.string.error_no_secure_decoder,
decoderInitializationException.mimeType);
} else {
errorString = getString(R.string.error_no_decoder,
decoderInitializationException.mimeType);
}
} else {
errorString = getString(R.string.error_instantiating_decoder,
decoderInitializationException.decoderName);
}
}
}
if (errorString != null) {
showToast(errorString);
}
inErrorState = true;
if (isBehindLiveWindow(e)) {
clearResumePosition();
initializePlayer();
} else {
updateResumePosition();
updateButtonVisibilities();
showControls();
}
}
@Override
@SuppressWarnings("ReferenceEquality")
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
updateButtonVisibilities();
if (trackGroups != lastSeenTrackGroupArray) {
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
if (mappedTrackInfo.getTrackTypeRendererSupport(C.TRACK_TYPE_VIDEO)
== MappedTrackInfo.RENDERER_SUPPORT_UNSUPPORTED_TRACKS) {
showToast(R.string.error_unsupported_video);
}
if (mappedTrackInfo.getTrackTypeRendererSupport(C.TRACK_TYPE_AUDIO)
== MappedTrackInfo.RENDERER_SUPPORT_UNSUPPORTED_TRACKS) {
showToast(R.string.error_unsupported_audio);
}
}
lastSeenTrackGroupArray = trackGroups;
}
}
// User controls // User controls
private void updateButtonVisibilities() { private void updateButtonVisibilities() {
...@@ -645,4 +538,85 @@ public class PlayerActivity extends Activity implements OnClickListener, EventLi ...@@ -645,4 +538,85 @@ public class PlayerActivity extends Activity implements OnClickListener, EventLi
return false; return false;
} }
private class PlayerEventListener extends Player.DefaultEventListener {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_ENDED) {
showControls();
}
updateButtonVisibilities();
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
if (inErrorState) {
// This will only occur if the user has performed a seek whilst in the error state. Update
// the resume position so that if the user then retries, playback will resume from the
// position to which they seeked.
updateResumePosition();
}
}
@Override
public void onPlayerError(ExoPlaybackException e) {
String errorString = null;
if (e.type == ExoPlaybackException.TYPE_RENDERER) {
Exception cause = e.getRendererException();
if (cause instanceof DecoderInitializationException) {
// Special case for decoder initialization failures.
DecoderInitializationException decoderInitializationException =
(DecoderInitializationException) cause;
if (decoderInitializationException.decoderName == null) {
if (decoderInitializationException.getCause() instanceof DecoderQueryException) {
errorString = getString(R.string.error_querying_decoders);
} else if (decoderInitializationException.secureDecoderRequired) {
errorString = getString(R.string.error_no_secure_decoder,
decoderInitializationException.mimeType);
} else {
errorString = getString(R.string.error_no_decoder,
decoderInitializationException.mimeType);
}
} else {
errorString = getString(R.string.error_instantiating_decoder,
decoderInitializationException.decoderName);
}
}
}
if (errorString != null) {
showToast(errorString);
}
inErrorState = true;
if (isBehindLiveWindow(e)) {
clearResumePosition();
initializePlayer();
} else {
updateResumePosition();
updateButtonVisibilities();
showControls();
}
}
@Override
@SuppressWarnings("ReferenceEquality")
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
updateButtonVisibilities();
if (trackGroups != lastSeenTrackGroupArray) {
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
if (mappedTrackInfo.getTrackTypeRendererSupport(C.TRACK_TYPE_VIDEO)
== MappedTrackInfo.RENDERER_SUPPORT_UNSUPPORTED_TRACKS) {
showToast(R.string.error_unsupported_video);
}
if (mappedTrackInfo.getTrackTypeRendererSupport(C.TRACK_TYPE_AUDIO)
== MappedTrackInfo.RENDERER_SUPPORT_UNSUPPORTED_TRACKS) {
showToast(R.string.error_unsupported_audio);
}
}
lastSeenTrackGroupArray = trackGroups;
}
}
}
} }
...@@ -22,15 +22,11 @@ import android.test.InstrumentationTestCase; ...@@ -22,15 +22,11 @@ import android.test.InstrumentationTestCase;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor; import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
/** /**
...@@ -45,20 +41,22 @@ public class FlacPlaybackTest extends InstrumentationTestCase { ...@@ -45,20 +41,22 @@ public class FlacPlaybackTest extends InstrumentationTestCase {
} }
private void playUri(String uri) throws ExoPlaybackException { private void playUri(String uri) throws ExoPlaybackException {
TestPlaybackThread thread = new TestPlaybackThread(Uri.parse(uri), TestPlaybackRunnable testPlaybackRunnable = new TestPlaybackRunnable(Uri.parse(uri),
getInstrumentation().getContext()); getInstrumentation().getContext());
Thread thread = new Thread(testPlaybackRunnable);
thread.start(); thread.start();
try { try {
thread.join(); thread.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
fail(); // Should never happen. fail(); // Should never happen.
} }
if (thread.playbackException != null) { if (testPlaybackRunnable.playbackException != null) {
throw thread.playbackException; throw testPlaybackRunnable.playbackException;
} }
} }
private static class TestPlaybackThread extends Thread implements Player.EventListener { private static class TestPlaybackRunnable extends Player.DefaultEventListener
implements Runnable {
private final Context context; private final Context context;
private final Uri uri; private final Uri uri;
...@@ -66,7 +64,7 @@ public class FlacPlaybackTest extends InstrumentationTestCase { ...@@ -66,7 +64,7 @@ public class FlacPlaybackTest extends InstrumentationTestCase {
private ExoPlayer player; private ExoPlayer player;
private ExoPlaybackException playbackException; private ExoPlaybackException playbackException;
public TestPlaybackThread(Uri uri, Context context) { public TestPlaybackRunnable(Uri uri, Context context) {
this.uri = uri; this.uri = uri;
this.context = context; this.context = context;
} }
...@@ -90,31 +88,6 @@ public class FlacPlaybackTest extends InstrumentationTestCase { ...@@ -90,31 +88,6 @@ public class FlacPlaybackTest extends InstrumentationTestCase {
} }
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
// Do nothing.
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) { public void onPlayerError(ExoPlaybackException error) {
playbackException = error; playbackException = error;
} }
...@@ -123,25 +96,11 @@ public class FlacPlaybackTest extends InstrumentationTestCase { ...@@ -123,25 +96,11 @@ public class FlacPlaybackTest extends InstrumentationTestCase {
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
|| (playbackState == Player.STATE_IDLE && playbackException != null)) { || (playbackState == Player.STATE_IDLE && playbackException != null)) {
releasePlayerAndQuitLooper(); player.release();
Looper.myLooper().quit();
} }
} }
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
private void releasePlayerAndQuitLooper() {
player.release();
Looper.myLooper().quit();
}
} }
} }
...@@ -43,13 +43,10 @@ import com.google.android.exoplayer2.C; ...@@ -43,13 +43,10 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.source.ads.AdPlaybackState; import com.google.android.exoplayer2.source.ads.AdPlaybackState;
import com.google.android.exoplayer2.source.ads.AdsLoader; import com.google.android.exoplayer2.source.ads.AdsLoader;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -59,8 +56,8 @@ import java.util.Map; ...@@ -59,8 +56,8 @@ import java.util.Map;
/** /**
* Loads ads using the IMA SDK. All methods are called on the main thread. * Loads ads using the IMA SDK. All methods are called on the main thread.
*/ */
public final class ImaAdsLoader implements AdsLoader, Player.EventListener, VideoAdPlayer, public final class ImaAdsLoader extends Player.DefaultEventListener implements AdsLoader,
ContentProgressProvider, AdErrorListener, AdsLoadedListener, AdEventListener { VideoAdPlayer, ContentProgressProvider, AdErrorListener, AdsLoadedListener, AdEventListener {
static { static {
ExoPlayerLibraryInfo.registerModule("goog.exo.ima"); ExoPlayerLibraryInfo.registerModule("goog.exo.ima");
...@@ -512,16 +509,6 @@ public final class ImaAdsLoader implements AdsLoader, Player.EventListener, Vide ...@@ -512,16 +509,6 @@ public final class ImaAdsLoader implements AdsLoader, Player.EventListener, Vide
} }
@Override @Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (adsManager == null) { if (adsManager == null) {
return; return;
...@@ -539,16 +526,6 @@ public final class ImaAdsLoader implements AdsLoader, Player.EventListener, Vide ...@@ -539,16 +526,6 @@ public final class ImaAdsLoader implements AdsLoader, Player.EventListener, Vide
} }
@Override @Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) { public void onPlayerError(ExoPlaybackException error) {
if (playingAd) { if (playingAd) {
for (int i = 0; i < adCallbacks.size(); i++) { for (int i = 0; i < adCallbacks.size(); i++) {
...@@ -584,11 +561,6 @@ public final class ImaAdsLoader implements AdsLoader, Player.EventListener, Vide ...@@ -584,11 +561,6 @@ public final class ImaAdsLoader implements AdsLoader, Player.EventListener, Vide
} }
} }
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
// Internal methods. // Internal methods.
private void requestAds() { private void requestAds() {
......
...@@ -30,13 +30,10 @@ import com.google.android.exoplayer2.ControlDispatcher; ...@@ -30,13 +30,10 @@ import com.google.android.exoplayer2.ControlDispatcher;
import com.google.android.exoplayer2.DefaultControlDispatcher; import com.google.android.exoplayer2.DefaultControlDispatcher;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Player.DiscontinuityReason; import com.google.android.exoplayer2.Player.DiscontinuityReason;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.util.ErrorMessageProvider; import com.google.android.exoplayer2.util.ErrorMessageProvider;
/** /**
...@@ -221,7 +218,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter { ...@@ -221,7 +218,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter {
} }
} }
private final class ComponentListener implements Player.EventListener, private final class ComponentListener extends Player.DefaultEventListener implements
SimpleExoPlayer.VideoListener, SurfaceHolder.Callback { SimpleExoPlayer.VideoListener, SurfaceHolder.Callback {
// SurfaceHolder.Callback implementation. // SurfaceHolder.Callback implementation.
...@@ -261,11 +258,6 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter { ...@@ -261,11 +258,6 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter {
} }
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) { public void onTimelineChanged(Timeline timeline, Object manifest) {
Callback callback = getCallback(); Callback callback = getCallback();
callback.onDurationChanged(LeanbackPlayerAdapter.this); callback.onDurationChanged(LeanbackPlayerAdapter.this);
...@@ -274,32 +266,12 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter { ...@@ -274,32 +266,12 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter {
} }
@Override @Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@DiscontinuityReason int reason) { public void onPositionDiscontinuity(@DiscontinuityReason int reason) {
Callback callback = getCallback(); Callback callback = getCallback();
callback.onCurrentPositionChanged(LeanbackPlayerAdapter.this); callback.onCurrentPositionChanged(LeanbackPlayerAdapter.this);
callback.onBufferedPositionChanged(LeanbackPlayerAdapter.this); callback.onBufferedPositionChanged(LeanbackPlayerAdapter.this);
} }
@Override
public void onPlaybackParametersChanged(PlaybackParameters params) {
// Do nothing.
}
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
// SimpleExoplayerView.Callback implementation. // SimpleExoplayerView.Callback implementation.
@Override @Override
......
...@@ -36,8 +36,6 @@ import com.google.android.exoplayer2.ExoPlayerLibraryInfo; ...@@ -36,8 +36,6 @@ import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.util.ErrorMessageProvider; import com.google.android.exoplayer2.util.ErrorMessageProvider;
import com.google.android.exoplayer2.util.RepeatModeUtil; import com.google.android.exoplayer2.util.RepeatModeUtil;
import java.util.Collections; import java.util.Collections;
...@@ -624,7 +622,7 @@ public final class MediaSessionConnector { ...@@ -624,7 +622,7 @@ public final class MediaSessionConnector {
& QueueEditor.ACTIONS & action) != 0; & QueueEditor.ACTIONS & action) != 0;
} }
private class ExoPlayerEventListener implements Player.EventListener { private class ExoPlayerEventListener extends Player.DefaultEventListener {
private int currentWindowIndex; private int currentWindowIndex;
private int currentWindowCount; private int currentWindowCount;
...@@ -650,16 +648,6 @@ public final class MediaSessionConnector { ...@@ -650,16 +648,6 @@ public final class MediaSessionConnector {
} }
@Override @Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
updateMediaSessionPlaybackState(); updateMediaSessionPlaybackState();
} }
......
...@@ -22,15 +22,11 @@ import android.test.InstrumentationTestCase; ...@@ -22,15 +22,11 @@ import android.test.InstrumentationTestCase;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor; import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
/** /**
...@@ -45,20 +41,22 @@ public class OpusPlaybackTest extends InstrumentationTestCase { ...@@ -45,20 +41,22 @@ public class OpusPlaybackTest extends InstrumentationTestCase {
} }
private void playUri(String uri) throws ExoPlaybackException { private void playUri(String uri) throws ExoPlaybackException {
TestPlaybackThread thread = new TestPlaybackThread(Uri.parse(uri), TestPlaybackRunnable testPlaybackRunnable = new TestPlaybackRunnable(Uri.parse(uri),
getInstrumentation().getContext()); getInstrumentation().getContext());
Thread thread = new Thread(testPlaybackRunnable);
thread.start(); thread.start();
try { try {
thread.join(); thread.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
fail(); // Should never happen. fail(); // Should never happen.
} }
if (thread.playbackException != null) { if (testPlaybackRunnable.playbackException != null) {
throw thread.playbackException; throw testPlaybackRunnable.playbackException;
} }
} }
private static class TestPlaybackThread extends Thread implements Player.EventListener { private static class TestPlaybackRunnable extends Player.DefaultEventListener
implements Runnable {
private final Context context; private final Context context;
private final Uri uri; private final Uri uri;
...@@ -66,7 +64,7 @@ public class OpusPlaybackTest extends InstrumentationTestCase { ...@@ -66,7 +64,7 @@ public class OpusPlaybackTest extends InstrumentationTestCase {
private ExoPlayer player; private ExoPlayer player;
private ExoPlaybackException playbackException; private ExoPlaybackException playbackException;
public TestPlaybackThread(Uri uri, Context context) { public TestPlaybackRunnable(Uri uri, Context context) {
this.uri = uri; this.uri = uri;
this.context = context; this.context = context;
} }
...@@ -90,31 +88,6 @@ public class OpusPlaybackTest extends InstrumentationTestCase { ...@@ -90,31 +88,6 @@ public class OpusPlaybackTest extends InstrumentationTestCase {
} }
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
// Do nothing.
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) { public void onPlayerError(ExoPlaybackException error) {
playbackException = error; playbackException = error;
} }
...@@ -123,25 +96,11 @@ public class OpusPlaybackTest extends InstrumentationTestCase { ...@@ -123,25 +96,11 @@ public class OpusPlaybackTest extends InstrumentationTestCase {
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
|| (playbackState == Player.STATE_IDLE && playbackException != null)) { || (playbackState == Player.STATE_IDLE && playbackException != null)) {
releasePlayerAndQuitLooper(); player.release();
Looper.myLooper().quit();
} }
} }
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
private void releasePlayerAndQuitLooper() {
player.release();
Looper.myLooper().quit();
}
} }
} }
...@@ -23,15 +23,11 @@ import android.util.Log; ...@@ -23,15 +23,11 @@ import android.util.Log;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor; import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
/** /**
...@@ -74,20 +70,22 @@ public class VpxPlaybackTest extends InstrumentationTestCase { ...@@ -74,20 +70,22 @@ public class VpxPlaybackTest extends InstrumentationTestCase {
} }
private void playUri(String uri) throws ExoPlaybackException { private void playUri(String uri) throws ExoPlaybackException {
TestPlaybackThread thread = new TestPlaybackThread(Uri.parse(uri), TestPlaybackRunnable testPlaybackRunnable = new TestPlaybackRunnable(Uri.parse(uri),
getInstrumentation().getContext()); getInstrumentation().getContext());
Thread thread = new Thread(testPlaybackRunnable);
thread.start(); thread.start();
try { try {
thread.join(); thread.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
fail(); // Should never happen. fail(); // Should never happen.
} }
if (thread.playbackException != null) { if (testPlaybackRunnable.playbackException != null) {
throw thread.playbackException; throw testPlaybackRunnable.playbackException;
} }
} }
private static class TestPlaybackThread extends Thread implements Player.EventListener { private static class TestPlaybackRunnable extends Player.DefaultEventListener
implements Runnable {
private final Context context; private final Context context;
private final Uri uri; private final Uri uri;
...@@ -95,7 +93,7 @@ public class VpxPlaybackTest extends InstrumentationTestCase { ...@@ -95,7 +93,7 @@ public class VpxPlaybackTest extends InstrumentationTestCase {
private ExoPlayer player; private ExoPlayer player;
private ExoPlaybackException playbackException; private ExoPlaybackException playbackException;
public TestPlaybackThread(Uri uri, Context context) { public TestPlaybackRunnable(Uri uri, Context context) {
this.uri = uri; this.uri = uri;
this.context = context; this.context = context;
} }
...@@ -122,31 +120,6 @@ public class VpxPlaybackTest extends InstrumentationTestCase { ...@@ -122,31 +120,6 @@ public class VpxPlaybackTest extends InstrumentationTestCase {
} }
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
// Do nothing.
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) { public void onPlayerError(ExoPlaybackException error) {
playbackException = error; playbackException = error;
} }
...@@ -155,25 +128,11 @@ public class VpxPlaybackTest extends InstrumentationTestCase { ...@@ -155,25 +128,11 @@ public class VpxPlaybackTest extends InstrumentationTestCase {
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
|| (playbackState == Player.STATE_IDLE && playbackException != null)) { || (playbackState == Player.STATE_IDLE && playbackException != null)) {
releasePlayerAndQuitLooper(); player.release();
Looper.myLooper().quit();
} }
} }
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
private void releasePlayerAndQuitLooper() {
player.release();
Looper.myLooper().quit();
}
} }
} }
...@@ -137,6 +137,58 @@ public interface Player { ...@@ -137,6 +137,58 @@ public interface Player {
} }
/** /**
* {@link EventListener} allowing selective overrides. All methods are implemented as no-ops.
*/
abstract class DefaultEventListener implements EventListener {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
// Do nothing.
}
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(int reason) {
// Do nothing.
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
}
/**
* The player does not have any media to play. * The player does not have any media to play.
*/ */
int STATE_IDLE = 1; int STATE_IDLE = 1;
......
...@@ -17,22 +17,17 @@ package com.google.android.exoplayer2.ui; ...@@ -17,22 +17,17 @@ package com.google.android.exoplayer2.ui;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.widget.TextView; import android.widget.TextView;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderCounters;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import java.util.Locale; import java.util.Locale;
/** /**
* A helper class for periodically updating a {@link TextView} with debug information obtained from * A helper class for periodically updating a {@link TextView} with debug information obtained from
* a {@link SimpleExoPlayer}. * a {@link SimpleExoPlayer}.
*/ */
public final class DebugTextViewHelper implements Runnable, Player.EventListener { public final class DebugTextViewHelper extends Player.DefaultEventListener implements Runnable {
private static final int REFRESH_INTERVAL_MS = 1000; private static final int REFRESH_INTERVAL_MS = 1000;
...@@ -79,50 +74,15 @@ public final class DebugTextViewHelper implements Runnable, Player.EventListener ...@@ -79,50 +74,15 @@ public final class DebugTextViewHelper implements Runnable, Player.EventListener
// Player.EventListener implementation. // Player.EventListener implementation.
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
updateAndPost(); updateAndPost();
} }
@Override @Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) { public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
updateAndPost(); updateAndPost();
} }
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray tracks, TrackSelectionArray selections) {
// Do nothing.
}
// Runnable implementation. // Runnable implementation.
@Override @Override
......
...@@ -30,13 +30,9 @@ import android.widget.FrameLayout; ...@@ -30,13 +30,9 @@ import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.RepeatModeUtil; import com.google.android.exoplayer2.util.RepeatModeUtil;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
...@@ -1046,8 +1042,8 @@ public class PlaybackControlView extends FrameLayout { ...@@ -1046,8 +1042,8 @@ public class PlaybackControlView extends FrameLayout {
return true; return true;
} }
private final class ComponentListener implements Player.EventListener, TimeBar.OnScrubListener, private final class ComponentListener extends Player.DefaultEventListener implements
OnClickListener { TimeBar.OnScrubListener, OnClickListener {
@Override @Override
public void onScrubStart(TimeBar timeBar, long position) { public void onScrubStart(TimeBar timeBar, long position) {
...@@ -1096,11 +1092,6 @@ public class PlaybackControlView extends FrameLayout { ...@@ -1096,11 +1092,6 @@ public class PlaybackControlView extends FrameLayout {
} }
@Override @Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) { public void onTimelineChanged(Timeline timeline, Object manifest) {
updateNavigation(); updateNavigation();
updateTimeBarMode(); updateTimeBarMode();
...@@ -1108,21 +1099,6 @@ public class PlaybackControlView extends FrameLayout { ...@@ -1108,21 +1099,6 @@ public class PlaybackControlView extends FrameLayout {
} }
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray tracks, TrackSelectionArray selections) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) {
// Do nothing.
}
@Override
public void onClick(View view) { public void onClick(View view) {
if (player != null) { if (player != null) {
if (nextButton == view) { if (nextButton == view) {
......
...@@ -36,11 +36,8 @@ import android.widget.ImageView; ...@@ -36,11 +36,8 @@ import android.widget.ImageView;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ControlDispatcher; import com.google.android.exoplayer2.ControlDispatcher;
import com.google.android.exoplayer2.DefaultControlDispatcher; import com.google.android.exoplayer2.DefaultControlDispatcher;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.metadata.id3.ApicFrame; import com.google.android.exoplayer2.metadata.id3.ApicFrame;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
...@@ -871,8 +868,8 @@ public final class SimpleExoPlayerView extends FrameLayout { ...@@ -871,8 +868,8 @@ public final class SimpleExoPlayerView extends FrameLayout {
aspectRatioFrame.setResizeMode(resizeMode); aspectRatioFrame.setResizeMode(resizeMode);
} }
private final class ComponentListener implements TextOutput, SimpleExoPlayer.VideoListener, private final class ComponentListener extends Player.DefaultEventListener implements TextOutput,
Player.EventListener { SimpleExoPlayer.VideoListener {
// TextOutput implementation // TextOutput implementation
...@@ -909,45 +906,10 @@ public final class SimpleExoPlayerView extends FrameLayout { ...@@ -909,45 +906,10 @@ public final class SimpleExoPlayerView extends FrameLayout {
// Player.EventListener implementation // Player.EventListener implementation
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
maybeShowController(false); maybeShowController(false);
} }
@Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException e) {
// Do nothing.
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
// Do nothing.
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
} }
} }
...@@ -18,17 +18,13 @@ package com.google.android.exoplayer2.testutil; ...@@ -18,17 +18,13 @@ package com.google.android.exoplayer2.testutil;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.Surface; import android.view.Surface;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.testutil.ActionSchedule.ActionNode; import com.google.android.exoplayer2.testutil.ActionSchedule.ActionNode;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector; import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
/** /**
* Base class for actions to perform during playback tests. * Base class for actions to perform during playback tests.
...@@ -326,7 +322,7 @@ public abstract class Action { ...@@ -326,7 +322,7 @@ public abstract class Action {
protected void doActionAndScheduleNextImpl(final SimpleExoPlayer player, protected void doActionAndScheduleNextImpl(final SimpleExoPlayer player,
final MappingTrackSelector trackSelector, final Surface surface, final Handler handler, final MappingTrackSelector trackSelector, final Surface surface, final Handler handler,
final ActionNode nextAction) { final ActionNode nextAction) {
PlayerListener listener = new PlayerListener() { Player.EventListener listener = new Player.DefaultEventListener() {
@Override @Override
public void onTimelineChanged(Timeline timeline, Object manifest) { public void onTimelineChanged(Timeline timeline, Object manifest) {
if (timeline.equals(expectedTimeline)) { if (timeline.equals(expectedTimeline)) {
...@@ -351,7 +347,7 @@ public abstract class Action { ...@@ -351,7 +347,7 @@ public abstract class Action {
} }
/** /**
* Waits for {@link Player.EventListener#onPositionDiscontinuity()}. * Waits for {@link Player.EventListener#onPositionDiscontinuity(int)}.
*/ */
public static final class WaitForPositionDiscontinuity extends Action { public static final class WaitForPositionDiscontinuity extends Action {
...@@ -366,7 +362,7 @@ public abstract class Action { ...@@ -366,7 +362,7 @@ public abstract class Action {
protected void doActionAndScheduleNextImpl(final SimpleExoPlayer player, protected void doActionAndScheduleNextImpl(final SimpleExoPlayer player,
final MappingTrackSelector trackSelector, final Surface surface, final Handler handler, final MappingTrackSelector trackSelector, final Surface surface, final Handler handler,
final ActionNode nextAction) { final ActionNode nextAction) {
player.addListener(new PlayerListener() { player.addListener(new Player.DefaultEventListener() {
@Override @Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) { public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
player.removeListener(this); player.removeListener(this);
...@@ -406,54 +402,4 @@ public abstract class Action { ...@@ -406,54 +402,4 @@ public abstract class Action {
} }
/** Listener implementation used for overriding. Does nothing. */
private static class PlayerListener implements Player.EventListener {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
}
@Override
public void onLoadingChanged(boolean isLoading) {
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
}
@Override
public void onRepeatModeChanged(@ExoPlayer.RepeatMode int repeatMode) {
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
}
@Override
public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
}
}
} }
...@@ -25,23 +25,19 @@ import com.google.android.exoplayer2.ExoPlaybackException; ...@@ -25,23 +25,19 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.RenderersFactory; import com.google.android.exoplayer2.RenderersFactory;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.AudioRendererEventListener;
import com.google.android.exoplayer2.audio.AudioTrack; import com.google.android.exoplayer2.audio.AudioTrack;
import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderCounters;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.drm.FrameworkMediaCrypto;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.testutil.HostActivity.HostedTest; import com.google.android.exoplayer2.testutil.HostActivity.HostedTest;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection; import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector; import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.upstream.BandwidthMeter; import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
...@@ -53,7 +49,7 @@ import junit.framework.Assert; ...@@ -53,7 +49,7 @@ import junit.framework.Assert;
/** /**
* A {@link HostedTest} for {@link ExoPlayer} playback tests. * A {@link HostedTest} for {@link ExoPlayer} playback tests.
*/ */
public abstract class ExoHostedTest implements HostedTest, Player.EventListener, public abstract class ExoHostedTest extends Player.DefaultEventListener implements HostedTest,
AudioRendererEventListener, VideoRendererEventListener { AudioRendererEventListener, VideoRendererEventListener {
static { static {
...@@ -204,16 +200,6 @@ public abstract class ExoHostedTest implements HostedTest, Player.EventListener, ...@@ -204,16 +200,6 @@ public abstract class ExoHostedTest implements HostedTest, Player.EventListener,
// Player.EventListener // Player.EventListener
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
// Do nothing.
}
@Override
public final void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public final void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
Log.d(tag, "state [" + playWhenReady + ", " + playbackState + "]"); Log.d(tag, "state [" + playWhenReady + ", " + playbackState + "]");
playerWasPrepared |= playbackState != Player.STATE_IDLE; playerWasPrepared |= playbackState != Player.STATE_IDLE;
...@@ -231,37 +217,12 @@ public abstract class ExoHostedTest implements HostedTest, Player.EventListener, ...@@ -231,37 +217,12 @@ public abstract class ExoHostedTest implements HostedTest, Player.EventListener,
} }
@Override @Override
public void onRepeatModeChanged(int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public final void onPlayerError(ExoPlaybackException error) { public final void onPlayerError(ExoPlaybackException error) {
playerWasPrepared = true; playerWasPrepared = true;
playerError = error; playerError = error;
onPlayerErrorInternal(error); onPlayerErrorInternal(error);
} }
@Override
public final void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) {
// Do nothing.
}
@Override
public final void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
@Override
public final void onTimelineChanged(Timeline timeline, Object manifest) {
// Do nothing.
}
// AudioRendererEventListener // AudioRendererEventListener
@Override @Override
......
...@@ -22,7 +22,6 @@ import com.google.android.exoplayer2.ExoPlaybackException; ...@@ -22,7 +22,6 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.LoadControl; import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.RenderersFactory; import com.google.android.exoplayer2.RenderersFactory;
...@@ -49,7 +48,7 @@ import junit.framework.Assert; ...@@ -49,7 +48,7 @@ import junit.framework.Assert;
/** /**
* Helper class to run an ExoPlayer test. * Helper class to run an ExoPlayer test.
*/ */
public final class ExoPlayerTestRunner implements Player.EventListener { public final class ExoPlayerTestRunner extends Player.DefaultEventListener {
/** /**
* Builder to set-up a {@link ExoPlayerTestRunner}. Default fake implementations will be used for * Builder to set-up a {@link ExoPlayerTestRunner}. Default fake implementations will be used for
...@@ -342,11 +341,6 @@ public final class ExoPlayerTestRunner implements Player.EventListener { ...@@ -342,11 +341,6 @@ public final class ExoPlayerTestRunner implements Player.EventListener {
} }
@Override @Override
public void onLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (periodIndices.isEmpty() && playbackState == Player.STATE_READY) { if (periodIndices.isEmpty() && playbackState == Player.STATE_READY) {
periodIndices.add(player.getCurrentPeriodIndex()); periodIndices.add(player.getCurrentPeriodIndex());
...@@ -359,16 +353,6 @@ public final class ExoPlayerTestRunner implements Player.EventListener { ...@@ -359,16 +353,6 @@ public final class ExoPlayerTestRunner implements Player.EventListener {
} }
@Override @Override
public void onRepeatModeChanged(@Player.RepeatMode int repeatMode) {
// Do nothing.
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
}
@Override
public void onPlayerError(ExoPlaybackException error) { public void onPlayerError(ExoPlaybackException error) {
handleException(exception); handleException(exception);
} }
...@@ -379,9 +363,4 @@ public final class ExoPlayerTestRunner implements Player.EventListener { ...@@ -379,9 +363,4 @@ public final class ExoPlayerTestRunner implements Player.EventListener {
periodIndices.add(player.getCurrentPeriodIndex()); periodIndices.add(player.getCurrentPeriodIndex());
} }
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
// Do nothing.
}
} }
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