Add two helpful methods to FakeMediaSource for testing

PiperOrigin-RevId: 566636545
This commit is contained in:
tianyifeng 2023-09-19 08:12:06 -07:00 committed by Copybara-Service
parent 39c1ac7f3a
commit ceac1f458f

View File

@ -49,6 +49,7 @@ import androidx.media3.exoplayer.source.TrackGroupArray;
import androidx.media3.exoplayer.upstream.Allocator; import androidx.media3.exoplayer.upstream.Allocator;
import androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory; import androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -106,6 +107,7 @@ public class FakeMediaSource extends BaseMediaSource {
private boolean releasedSource; private boolean releasedSource;
@Nullable private Handler sourceInfoRefreshHandler; @Nullable private Handler sourceInfoRefreshHandler;
@Nullable private TransferListener transferListener; @Nullable private TransferListener transferListener;
private boolean periodDefersOnPreparedCallback;
/** Creates a {@link FakeMediaSource} with a default {@link FakeTimeline}. */ /** Creates a {@link FakeMediaSource} with a default {@link FakeTimeline}. */
public FakeMediaSource() { public FakeMediaSource() {
@ -359,6 +361,27 @@ public class FakeMediaSource extends BaseMediaSource {
return createdMediaPeriods; return createdMediaPeriods;
} }
/**
* Sets whether the created {@link FakeMediaPeriod period} should defer to call {@link
* MediaPeriod.Callback#onPrepared(MediaPeriod)}. If set to true, {@link
* MediaPeriod.Callback#onPrepared(MediaPeriod)} should be called only after {@link
* FakeMediaPeriod#setPreparationComplete()} has been called, otherwise the preparation completes
* immediately.
*/
public void setPeriodDefersOnPreparedCallback(boolean periodDefersOnPreparedCallback) {
this.periodDefersOnPreparedCallback = periodDefersOnPreparedCallback;
}
/**
* Returns the last created active {@link MediaPeriod}.
*
* <p>Must only be called if the source has created at least one period and it hasn't been
* released.
*/
public MediaPeriod getLastCreatedActiveMediaPeriod() {
return Iterables.getLast(activeMediaPeriods);
}
/** /**
* Creates a {@link MediaPeriod} for this media source. * Creates a {@link MediaPeriod} for this media source.
* *
@ -372,7 +395,7 @@ public class FakeMediaSource extends BaseMediaSource {
* events. * events.
* @param transferListener The transfer listener which should be informed of any data transfers. * @param transferListener The transfer listener which should be informed of any data transfers.
* May be null if no listener is available. * May be null if no listener is available.
* @return A new {@link FakeMediaPeriod}. * @return A new {@link MediaPeriod}.
*/ */
@RequiresNonNull("this.timeline") @RequiresNonNull("this.timeline")
protected MediaPeriod createMediaPeriod( protected MediaPeriod createMediaPeriod(
@ -395,7 +418,7 @@ public class FakeMediaSource extends BaseMediaSource {
mediaSourceEventDispatcher, mediaSourceEventDispatcher,
drmSessionManager, drmSessionManager,
drmEventDispatcher, drmEventDispatcher,
/* deferOnPrepared= */ false); periodDefersOnPreparedCallback);
} }
/** /**