Add Context to SimpleExoPlayer factory methods
This is needed for implementing (optional) support for audio focus handling in a later change. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=206899837
This commit is contained in:
parent
429bf4d099
commit
5715960304
@ -115,7 +115,7 @@ import java.util.ArrayList;
|
||||
|
||||
DefaultTrackSelector trackSelector = new DefaultTrackSelector();
|
||||
RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
|
||||
exoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);
|
||||
exoPlayer = ExoPlayerFactory.newSimpleInstance(context, renderersFactory, trackSelector);
|
||||
exoPlayer.addListener(this);
|
||||
localPlayerView.setPlayer(exoPlayer);
|
||||
|
||||
|
@ -424,7 +424,8 @@ public class PlayerActivity extends Activity
|
||||
lastSeenTrackGroupArray = null;
|
||||
|
||||
player =
|
||||
ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, drmSessionManager);
|
||||
ExoPlayerFactory.newSimpleInstance(
|
||||
/* context= */ this, renderersFactory, trackSelector, drmSessionManager);
|
||||
player.addListener(new PlayerEventListener());
|
||||
player.setPlayWhenReady(startAutoPlay);
|
||||
player.addAnalyticsListener(new EventLogger(trackSelector));
|
||||
|
@ -42,13 +42,14 @@ public final class ExoPlayerFactory {
|
||||
* @param context A {@link Context}.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
* @deprecated Use {@link #newSimpleInstance(RenderersFactory, TrackSelector, LoadControl)}.
|
||||
* @deprecated Use {@link #newSimpleInstance(Context, RenderersFactory, TrackSelector,
|
||||
* LoadControl)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
|
||||
LoadControl loadControl) {
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context, TrackSelector trackSelector, LoadControl loadControl) {
|
||||
RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
|
||||
return newSimpleInstance(renderersFactory, trackSelector, loadControl);
|
||||
return newSimpleInstance(context, renderersFactory, trackSelector, loadControl);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,14 +60,18 @@ public final class ExoPlayerFactory {
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the instance
|
||||
* will not be used for DRM protected playbacks.
|
||||
* @deprecated Use {@link #newSimpleInstance(RenderersFactory, TrackSelector, LoadControl)}.
|
||||
* @deprecated Use {@link #newSimpleInstance(Context, RenderersFactory, TrackSelector,
|
||||
* LoadControl)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
|
||||
RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
|
||||
return newSimpleInstance(renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||
return newSimpleInstance(
|
||||
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,14 +85,19 @@ public final class ExoPlayerFactory {
|
||||
* @param extensionRendererMode The extension renderer mode, which determines if and how available
|
||||
* extension renderers are used. Note that extensions must be included in the application
|
||||
* build for them to be considered available.
|
||||
* @deprecated Use {@link #newSimpleInstance(RenderersFactory, TrackSelector, LoadControl)}.
|
||||
* @deprecated Use {@link #newSimpleInstance(Context, RenderersFactory, TrackSelector,
|
||||
* LoadControl)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
|
||||
LoadControl loadControl, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode) {
|
||||
RenderersFactory renderersFactory = new DefaultRenderersFactory(context, extensionRendererMode);
|
||||
return newSimpleInstance(renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||
return newSimpleInstance(
|
||||
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,16 +113,21 @@ public final class ExoPlayerFactory {
|
||||
* build for them to be considered available.
|
||||
* @param allowedVideoJoiningTimeMs The maximum duration for which a video renderer can attempt to
|
||||
* seamlessly join an ongoing playback.
|
||||
* @deprecated Use {@link #newSimpleInstance(RenderersFactory, TrackSelector, LoadControl)}.
|
||||
* @deprecated Use {@link #newSimpleInstance(Context, RenderersFactory, TrackSelector,
|
||||
* LoadControl)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
|
||||
LoadControl loadControl, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
|
||||
long allowedVideoJoiningTimeMs) {
|
||||
RenderersFactory renderersFactory =
|
||||
new DefaultRenderersFactory(context, extensionRendererMode, allowedVideoJoiningTimeMs);
|
||||
return newSimpleInstance(renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||
return newSimpleInstance(
|
||||
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,7 +137,7 @@ public final class ExoPlayerFactory {
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector) {
|
||||
return newSimpleInstance(new DefaultRenderersFactory(context), trackSelector);
|
||||
return newSimpleInstance(context, new DefaultRenderersFactory(context), trackSelector);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -130,38 +145,61 @@ public final class ExoPlayerFactory {
|
||||
*
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @deprecated Use {@link #newSimpleInstance(Context, RenderersFactory, TrackSelector)}.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector) {
|
||||
return newSimpleInstance(renderersFactory, trackSelector, new DefaultLoadControl());
|
||||
@Deprecated
|
||||
@SuppressWarnings("nullness:argument.type.incompatible")
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
RenderersFactory renderersFactory, TrackSelector trackSelector) {
|
||||
return newSimpleInstance(
|
||||
/* context= */ null, renderersFactory, trackSelector, new DefaultLoadControl());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context, RenderersFactory renderersFactory, TrackSelector trackSelector) {
|
||||
return newSimpleInstance(context, renderersFactory, trackSelector, new DefaultLoadControl());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the instance
|
||||
* will not be used for DRM protected playbacks.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
|
||||
return newSimpleInstance(
|
||||
renderersFactory, trackSelector, new DefaultLoadControl(), drmSessionManager);
|
||||
context, renderersFactory, trackSelector, new DefaultLoadControl(), drmSessionManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector, LoadControl loadControl) {
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl) {
|
||||
return newSimpleInstance(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -172,6 +210,7 @@ public final class ExoPlayerFactory {
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -179,17 +218,19 @@ public final class ExoPlayerFactory {
|
||||
* will not be used for DRM protected playbacks.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
|
||||
return newSimpleInstance(
|
||||
renderersFactory, trackSelector, loadControl, drmSessionManager, Util.getLooper());
|
||||
context, renderersFactory, trackSelector, loadControl, drmSessionManager, Util.getLooper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -198,12 +239,14 @@ public final class ExoPlayerFactory {
|
||||
* @param bandwidthMeter The {@link BandwidthMeter} that will be used by the instance.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
BandwidthMeter bandwidthMeter) {
|
||||
return newSimpleInstance(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -216,6 +259,7 @@ public final class ExoPlayerFactory {
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -225,12 +269,14 @@ public final class ExoPlayerFactory {
|
||||
* will collect and forward all player events.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
AnalyticsCollector.Factory analyticsCollectorFactory) {
|
||||
return newSimpleInstance(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -242,6 +288,7 @@ public final class ExoPlayerFactory {
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -251,12 +298,14 @@ public final class ExoPlayerFactory {
|
||||
* used to call listeners on.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
Looper looper) {
|
||||
return newSimpleInstance(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -268,6 +317,7 @@ public final class ExoPlayerFactory {
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -279,6 +329,7 @@ public final class ExoPlayerFactory {
|
||||
* used to call listeners on.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@ -286,6 +337,7 @@ public final class ExoPlayerFactory {
|
||||
AnalyticsCollector.Factory analyticsCollectorFactory,
|
||||
Looper looper) {
|
||||
return newSimpleInstance(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -298,6 +350,7 @@ public final class ExoPlayerFactory {
|
||||
/**
|
||||
* Creates a {@link SimpleExoPlayer} instance.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -309,6 +362,7 @@ public final class ExoPlayerFactory {
|
||||
* used to call listeners on.
|
||||
*/
|
||||
public static SimpleExoPlayer newSimpleInstance(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@ -317,6 +371,7 @@ public final class ExoPlayerFactory {
|
||||
AnalyticsCollector.Factory analyticsCollectorFactory,
|
||||
Looper looper) {
|
||||
return new SimpleExoPlayer(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
|
@ -16,8 +16,10 @@
|
||||
package com.google.android.exoplayer2;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.SurfaceTexture;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaCodec;
|
||||
import android.media.PlaybackParams;
|
||||
import android.os.Handler;
|
||||
@ -83,6 +85,9 @@ public class SimpleExoPlayer
|
||||
private final BandwidthMeter bandwidthMeter;
|
||||
private final AnalyticsCollector analyticsCollector;
|
||||
|
||||
@SuppressWarnings({"unused", "FieldCanBeLocal"})
|
||||
private final @Nullable AudioManager audioManager;
|
||||
|
||||
private Format videoFormat;
|
||||
private Format audioFormat;
|
||||
|
||||
@ -110,7 +115,10 @@ public class SimpleExoPlayer
|
||||
* will not be used for DRM protected playbacks.
|
||||
* @param looper The {@link Looper} which must be used for all calls to the player and which is
|
||||
* used to call listeners on.
|
||||
* @deprecated Use {@link #SimpleExoPlayer(Context, RenderersFactory, TrackSelector, LoadControl,
|
||||
* BandwidthMeter, DrmSessionManager, Looper)}.
|
||||
*/
|
||||
@Deprecated
|
||||
protected SimpleExoPlayer(
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
@ -119,6 +127,7 @@ public class SimpleExoPlayer
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
Looper looper) {
|
||||
this(
|
||||
/* context= */ null,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -129,6 +138,37 @@ public class SimpleExoPlayer
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
* @param bandwidthMeter The {@link BandwidthMeter} that will be used by the instance.
|
||||
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the instance
|
||||
* will not be used for DRM protected playbacks.
|
||||
* @param looper The {@link Looper} which must be used for all calls to the player and which is
|
||||
* used to call listeners on.
|
||||
*/
|
||||
protected SimpleExoPlayer(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
BandwidthMeter bandwidthMeter,
|
||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||
Looper looper) {
|
||||
this(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
drmSessionManager,
|
||||
bandwidthMeter,
|
||||
new AnalyticsCollector.Factory(),
|
||||
looper);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -141,6 +181,7 @@ public class SimpleExoPlayer
|
||||
* used to call listeners on.
|
||||
*/
|
||||
protected SimpleExoPlayer(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@ -149,6 +190,7 @@ public class SimpleExoPlayer
|
||||
AnalyticsCollector.Factory analyticsCollectorFactory,
|
||||
Looper looper) {
|
||||
this(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
@ -160,6 +202,7 @@ public class SimpleExoPlayer
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context A {@link Context}.
|
||||
* @param renderersFactory A factory for creating {@link Renderer}s to be used by the instance.
|
||||
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
|
||||
* @param loadControl The {@link LoadControl} that will be used by the instance.
|
||||
@ -174,6 +217,7 @@ public class SimpleExoPlayer
|
||||
* used to call listeners on.
|
||||
*/
|
||||
protected SimpleExoPlayer(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
@ -221,6 +265,13 @@ public class SimpleExoPlayer
|
||||
if (drmSessionManager instanceof DefaultDrmSessionManager) {
|
||||
((DefaultDrmSessionManager) drmSessionManager).addListener(eventHandler, analyticsCollector);
|
||||
}
|
||||
// TODO: Remove null check once the deprecated factory method and constructor that don't take
|
||||
// Contexts have been removed.
|
||||
audioManager =
|
||||
context == null
|
||||
? null
|
||||
: (AudioManager)
|
||||
context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.Surface;
|
||||
import com.google.android.exoplayer2.Player.DiscontinuityReason;
|
||||
@ -58,9 +59,11 @@ import java.util.List;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
/** Unit test for {@link ExoPlayer}. */
|
||||
@ -75,6 +78,13 @@ public final class ExoPlayerTest {
|
||||
*/
|
||||
private static final int TIMEOUT_MS = 10000;
|
||||
|
||||
private Context context;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
context = RuntimeEnvironment.application;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests playback of a source that exposes an empty timeline. Playback is expected to end without
|
||||
* error.
|
||||
@ -87,7 +97,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setRenderers(renderer)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertNoPositionDiscontinuities();
|
||||
@ -108,7 +118,7 @@ public final class ExoPlayerTest {
|
||||
.setTimeline(timeline)
|
||||
.setManifest(manifest)
|
||||
.setRenderers(renderer)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertNoPositionDiscontinuities();
|
||||
@ -130,7 +140,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setRenderers(renderer)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPositionDiscontinuityReasonsEqual(
|
||||
@ -154,7 +164,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setRenderers(renderer)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
Integer[] expectedReasons = new Integer[99];
|
||||
@ -211,7 +221,7 @@ public final class ExoPlayerTest {
|
||||
.setTimeline(timeline)
|
||||
.setRenderers(videoRenderer, audioRenderer)
|
||||
.setSupportedFormats(Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPositionDiscontinuityReasonsEqual(
|
||||
@ -288,7 +298,7 @@ public final class ExoPlayerTest {
|
||||
.setMediaSource(firstSource)
|
||||
.setRenderers(renderer)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertNoPositionDiscontinuities();
|
||||
@ -333,7 +343,7 @@ public final class ExoPlayerTest {
|
||||
.setTimeline(timeline)
|
||||
.setRenderers(renderer)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPlayedPeriodIndices(0, 1, 1, 2, 2, 0, 0, 0, 1, 2);
|
||||
@ -380,7 +390,7 @@ public final class ExoPlayerTest {
|
||||
.setMediaSource(mediaSource)
|
||||
.setRenderers(renderer)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPlayedPeriodIndices(0, 1, 0, 2, 1, 2);
|
||||
@ -437,7 +447,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(fakeMediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
// There is still one discontinuity from content to content for the failed ad insertion.
|
||||
@ -458,7 +468,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setRenderers(renderer)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(renderer.isEnded).isTrue();
|
||||
@ -509,7 +519,7 @@ public final class ExoPlayerTest {
|
||||
.setTimeline(timeline)
|
||||
.setEventListener(eventListener)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPositionDiscontinuityReasonsEqual(
|
||||
@ -550,7 +560,7 @@ public final class ExoPlayerTest {
|
||||
}
|
||||
};
|
||||
ExoPlayerTestRunner testRunner =
|
||||
new Builder().setActionSchedule(actionSchedule).setEventListener(listener).build();
|
||||
new Builder().setActionSchedule(actionSchedule).setEventListener(listener).build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -570,7 +580,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPositionDiscontinuityReasonsEqual(Player.DISCONTINUITY_REASON_SEEK);
|
||||
@ -604,7 +614,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPositionDiscontinuityReasonsEqual(
|
||||
@ -631,7 +641,7 @@ public final class ExoPlayerTest {
|
||||
ExoPlayerTestRunner testRunner =
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPositionDiscontinuityReasonsEqual(Player.DISCONTINUITY_REASON_INTERNAL);
|
||||
@ -657,7 +667,7 @@ public final class ExoPlayerTest {
|
||||
ExoPlayerTestRunner testRunner =
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
// If the position is unchanged we do not expect the discontinuity to be reported externally.
|
||||
@ -677,7 +687,7 @@ public final class ExoPlayerTest {
|
||||
.setMediaSource(mediaSource)
|
||||
.setRenderers(videoRenderer, audioRenderer)
|
||||
.setTrackSelector(trackSelector)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -706,7 +716,7 @@ public final class ExoPlayerTest {
|
||||
.setMediaSource(mediaSource)
|
||||
.setRenderers(videoRenderer, audioRenderer)
|
||||
.setTrackSelector(trackSelector)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -744,7 +754,7 @@ public final class ExoPlayerTest {
|
||||
.setRenderers(videoRenderer, audioRenderer)
|
||||
.setTrackSelector(trackSelector)
|
||||
.setActionSchedule(disableTrackAction)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -783,7 +793,7 @@ public final class ExoPlayerTest {
|
||||
.setRenderers(videoRenderer, audioRenderer)
|
||||
.setTrackSelector(trackSelector)
|
||||
.setActionSchedule(disableTrackAction)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -824,7 +834,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertTimelinesEqual(timeline1, timeline2);
|
||||
@ -865,7 +875,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(firstMediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPlayedPeriodIndices(0, 1, 0);
|
||||
@ -922,7 +932,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
}
|
||||
@ -949,7 +959,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -981,7 +991,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -1013,7 +1023,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -1038,7 +1048,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS);
|
||||
mediaSource.assertReleased();
|
||||
@ -1059,7 +1069,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS);
|
||||
mediaSource.assertReleased();
|
||||
@ -1082,7 +1092,7 @@ public final class ExoPlayerTest {
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.setExpectedPlayerEndedCount(2)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertTimelinesEqual(timeline, Timeline.EMPTY, timeline);
|
||||
@ -1112,7 +1122,7 @@ public final class ExoPlayerTest {
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.setExpectedPlayerEndedCount(2)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertTimelinesEqual(timeline, Timeline.EMPTY, secondTimeline);
|
||||
@ -1138,7 +1148,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -1164,7 +1174,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -1191,7 +1201,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build();
|
||||
.build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -1240,7 +1250,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build();
|
||||
.build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -1280,7 +1290,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build();
|
||||
.build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -1327,7 +1337,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(concatenatingMediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build();
|
||||
.build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -1369,7 +1379,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(concatenatingMediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -1427,7 +1437,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build();
|
||||
.build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -1462,7 +1472,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build();
|
||||
.build(context);
|
||||
try {
|
||||
testRunner.start().blockUntilActionScheduleFinished(TIMEOUT_MS).blockUntilEnded(TIMEOUT_MS);
|
||||
fail();
|
||||
@ -1488,7 +1498,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1508,7 +1518,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1530,7 +1540,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target50.positionMs).isAtLeast(50L);
|
||||
@ -1554,7 +1564,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target1.positionMs).isAtLeast(50L);
|
||||
@ -1576,7 +1586,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1613,7 +1623,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -1640,7 +1650,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1660,7 +1670,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1681,7 +1691,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isEqualTo(C.POSITION_UNSET);
|
||||
@ -1702,7 +1712,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isEqualTo(C.POSITION_UNSET);
|
||||
@ -1725,7 +1735,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.messageCount).isEqualTo(1);
|
||||
@ -1754,7 +1764,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.messageCount).isEqualTo(2);
|
||||
@ -1789,7 +1799,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1810,7 +1820,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.windowIndex).isEqualTo(2);
|
||||
@ -1831,7 +1841,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.windowIndex).isEqualTo(2);
|
||||
@ -1869,7 +1879,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target.positionMs).isAtLeast(50L);
|
||||
@ -1903,7 +1913,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(target1.windowIndex).isEqualTo(0);
|
||||
@ -1942,7 +1952,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(message.get().isCanceled()).isTrue();
|
||||
@ -1986,7 +1996,7 @@ public final class ExoPlayerTest {
|
||||
new Builder()
|
||||
.setTimeline(timeline)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
assertThat(message.get().isCanceled()).isTrue();
|
||||
@ -2009,7 +2019,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setRenderers(videoRenderer)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -2025,7 +2035,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setTimeline(Timeline.EMPTY)
|
||||
.setActionSchedule(waitForEndedAndSwitchSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
@ -2065,7 +2075,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
testRunner.assertPlayedPeriodIndices(0, 1);
|
||||
@ -2103,7 +2113,7 @@ public final class ExoPlayerTest {
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -2154,7 +2164,7 @@ public final class ExoPlayerTest {
|
||||
.build();
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -2204,7 +2214,7 @@ public final class ExoPlayerTest {
|
||||
.build();
|
||||
new ExoPlayerTestRunner.Builder()
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
@ -2269,7 +2279,7 @@ public final class ExoPlayerTest {
|
||||
.setClock(clock)
|
||||
.setMediaSource(mediaSource)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(context)
|
||||
.start()
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
||||
|
@ -711,7 +711,7 @@ public final class AnalyticsCollectorTest {
|
||||
.setRenderersFactory(renderersFactory)
|
||||
.setAnalyticsListener(listener)
|
||||
.setActionSchedule(actionSchedule)
|
||||
.build()
|
||||
.build(RuntimeEnvironment.application)
|
||||
.start()
|
||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||
.blockUntilEnded(TIMEOUT_MS);
|
||||
|
@ -301,7 +301,7 @@ public final class DashTestRunner {
|
||||
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
|
||||
SimpleExoPlayer player =
|
||||
ExoPlayerFactory.newSimpleInstance(
|
||||
new DebugRenderersFactory(host), trackSelector, drmSessionManager);
|
||||
host, new DebugRenderersFactory(host), trackSelector, drmSessionManager);
|
||||
player.setVideoSurface(surface);
|
||||
return player;
|
||||
}
|
||||
|
@ -370,7 +370,8 @@ public abstract class ExoHostedTest
|
||||
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
|
||||
RenderersFactory renderersFactory = new DefaultRenderersFactory(host, drmSessionManager,
|
||||
DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF, 0);
|
||||
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);
|
||||
SimpleExoPlayer player =
|
||||
ExoPlayerFactory.newSimpleInstance(host, renderersFactory, trackSelector);
|
||||
player.setVideoSurface(surface);
|
||||
return player;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ package com.google.android.exoplayer2.testutil;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.Looper;
|
||||
import android.support.annotation.Nullable;
|
||||
@ -291,9 +292,10 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
/**
|
||||
* Builds an {@link ExoPlayerTestRunner} using the provided values or their defaults.
|
||||
*
|
||||
* @param context The context.
|
||||
* @return The built {@link ExoPlayerTestRunner}.
|
||||
*/
|
||||
public ExoPlayerTestRunner build() {
|
||||
public ExoPlayerTestRunner build(Context context) {
|
||||
if (supportedFormats == null) {
|
||||
supportedFormats = new Format[] {VIDEO_FORMAT};
|
||||
}
|
||||
@ -334,6 +336,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
expectedPlayerEndedCount = 1;
|
||||
}
|
||||
return new ExoPlayerTestRunner(
|
||||
context,
|
||||
clock,
|
||||
mediaSource,
|
||||
renderersFactory,
|
||||
@ -348,6 +351,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
}
|
||||
}
|
||||
|
||||
private final Context context;
|
||||
private final Clock clock;
|
||||
private final MediaSource mediaSource;
|
||||
private final RenderersFactory renderersFactory;
|
||||
@ -375,6 +379,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
private boolean playerWasPrepared;
|
||||
|
||||
private ExoPlayerTestRunner(
|
||||
Context context,
|
||||
Clock clock,
|
||||
MediaSource mediaSource,
|
||||
RenderersFactory renderersFactory,
|
||||
@ -386,6 +391,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
@Nullable AudioRendererEventListener audioRendererEventListener,
|
||||
@Nullable AnalyticsListener analyticsListener,
|
||||
int expectedPlayerEndedCount) {
|
||||
this.context = context;
|
||||
this.clock = clock;
|
||||
this.mediaSource = mediaSource;
|
||||
this.renderersFactory = renderersFactory;
|
||||
@ -423,7 +429,9 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
player = new TestSimpleExoPlayer(renderersFactory, trackSelector, loadControl, clock);
|
||||
player =
|
||||
new TestSimpleExoPlayer(
|
||||
context, renderersFactory, trackSelector, loadControl, clock);
|
||||
player.addListener(ExoPlayerTestRunner.this);
|
||||
if (eventListener != null) {
|
||||
player.addListener(eventListener);
|
||||
@ -652,11 +660,13 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
|
||||
private static final class TestSimpleExoPlayer extends SimpleExoPlayer {
|
||||
|
||||
public TestSimpleExoPlayer(
|
||||
Context context,
|
||||
RenderersFactory renderersFactory,
|
||||
TrackSelector trackSelector,
|
||||
LoadControl loadControl,
|
||||
Clock clock) {
|
||||
super(
|
||||
context,
|
||||
renderersFactory,
|
||||
trackSelector,
|
||||
loadControl,
|
||||
|
Loading…
x
Reference in New Issue
Block a user