Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
3dc6cf6b
authored
Apr 30, 2021
by
krocard
Committed by
bachinger
Apr 30, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Deprecate EventListener in favor of Listener
#minor-release PiperOrigin-RevId: 371348520
parent
4bf7477e
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
230 additions
and
227 deletions
RELEASENOTES.md
docs/dash.md
docs/hls.md
docs/listening-to-player-events.md
docs/live-streaming.md
docs/playlists.md
docs/smoothstreaming.md
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
extensions/flac/src/androidTest/java/com/google/android/exoplayer2/ext/flac/FlacPlaybackTest.java
extensions/ima/src/androidTest/java/com/google/android/exoplayer2/ext/ima/ImaPlaybackTest.java
extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/AdTagLoader.java
extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java
extensions/ima/src/test/java/com/google/android/exoplayer2/ext/ima/FakePlayer.java
extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java
extensions/opus/src/androidTest/java/com/google/android/exoplayer2/ext/opus/OpusPlaybackTest.java
extensions/vp9/src/androidTest/java/com/google/android/exoplayer2/ext/vp9/VpxPlaybackTest.java
library/common/src/main/java/com/google/android/exoplayer2/Player.java
library/core/src/androidTest/java/com/google/android/exoplayer2/ClippedPlaybackTest.java
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsCollector.java
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
library/core/src/main/java/com/google/android/exoplayer2/util/DebugTextViewHelper.java
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java
robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/TestPlayerRunHelper.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/Action.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java
RELEASENOTES.md
View file @
3dc6cf6b
...
...
@@ -30,7 +30,8 @@
`ExoPlayer`
.
*
Add
`getMediaMetadata`
to
`Player`
interface.
*
Add a
`Listener`
interface to receive all player events in a single
object. Component Listeners have been deprecated in its favor.
object. Component Listeners and
`EventListener`
have been deprecated in
its favor.
*
`Player.setPlaybackParameters`
no longer accepts null, use
`PlaybackParameters.DEFAULT`
instead.
*
Use an empty string instead of the URI if the media ID is not explicitly
...
...
docs/dash.md
View file @
3dc6cf6b
...
...
@@ -57,14 +57,14 @@ player.prepare();
You can retrieve the current manifest by calling
`Player.getCurrentManifest`
.
For DASH you should cast the returned object to
`DashManifest`
. The
`onTimelineChanged`
callback of
`Player.
Event
Listener`
is also called whenever
`onTimelineChanged`
callback of
`Player.Listener`
is also called whenever
the manifest is loaded. This will happen once for a on-demand content, and
possibly many times for live content. The code snippet below shows how an app
can do something whenever the manifest is loaded.
~~~
player.addListener(
new Player.
Event
Listener() {
new Player.Listener() {
@Override
public void onTimelineChanged(
Timeline timeline, @Player.TimelineChangeReason int reason) {
...
...
docs/hls.md
View file @
3dc6cf6b
...
...
@@ -60,14 +60,14 @@ player.prepare();
You can retrieve the current manifest by calling
`Player.getCurrentManifest`
.
For HLS you should cast the returned object to
`HlsManifest`
. The
`onTimelineChanged`
callback of
`Player.
Event
Listener`
is also called whenever
`onTimelineChanged`
callback of
`Player.Listener`
is also called whenever
the manifest is loaded. This will happen once for a on-demand content, and
possibly many times for live content. The code snippet below shows how an app
can do something whenever the manifest is loaded.
~~~
player.addListener(
new Player.
Event
Listener() {
new Player.Listener() {
@Override
public void onTimelineChanged(
Timeline timeline, @Player.TimelineChangeReason int reason) {
...
...
docs/listening-to-player-events.md
View file @
3dc6cf6b
...
...
@@ -5,16 +5,16 @@ title: Player events
## Listening to playback events ##
Events such as changes in state and playback errors are reported to registered
[
`Player.
Event
Listener`
][]
instances. Registering a listener to receive such
[
`Player.Listener`
][]
instances. Registering a listener to receive such
events is easy:
~~~
// Add a listener to receive events from the player.
player.addListener(
eventL
istener);
player.addListener(
l
istener);
~~~
{: .language-java}
`Player.
Event
Listener`
has empty default methods, so you only need to implement
`Player.Listener`
has empty default methods, so you only need to implement
the methods you're interested in. See the
[
Javadoc
][]
for a full description of
the methods and when they're called. Some of the most important methods are
described in more detail below.
...
...
@@ -28,7 +28,7 @@ should be preferred for different use cases.
Changes in player state can be received by implementing
`onPlaybackStateChanged(@State int state)`
in a registered
`Player.
Event
Listener`
. The player can be in one of four playback states:
`Player.Listener`
. The player can be in one of four playback states:
*
`Player.STATE_IDLE`
: This is the initial state, the state when the player is
stopped, and when playback failed.
...
...
@@ -68,7 +68,7 @@ public void onIsPlayingChanged(boolean isPlaying) {
Errors that cause playback to fail can be received by implementing
`onPlayerError(ExoPlaybackException error)`
in a registered
`Player.
Event
Listener`
. When a failure occurs, this method will be called
`Player.Listener`
. When a failure occurs, this method will be called
immediately before the playback state transitions to
`Player.STATE_IDLE`
.
Failed or stopped playbacks can be retried by calling
`ExoPlayer.retry`
.
...
...
@@ -107,7 +107,7 @@ public void onPlayerError(ExoPlaybackException error) {
Whenever the player changes to a new media item in the playlist
`onMediaItemTransition(MediaItem mediaItem,
@MediaItemTransitionReason int reason)`
is called on registered
`Player.
Event
Listener`
s. The reason indicates whether this was an automatic
`Player.Listener`
s. The reason indicates whether this was an automatic
transition, a seek (for example after calling
`player.next()`
), a repetition of
the same item, or caused by a playlist change (e.g., if the currently playing
item is removed).
...
...
@@ -115,7 +115,7 @@ item is removed).
### Seeking ###
Calling
`Player.seekTo`
methods results in a series of callbacks to registered
`Player.
Event
Listener`
instances:
`Player.Listener`
instances:
1.
`onPositionDiscontinuity`
with
`reason=DISCONTINUITY_REASON_SEEK`
. This is
the direct result of calling
`Player.seekTo`
.
...
...
@@ -232,8 +232,8 @@ player
~~~
{: .language-java }
[
`Player.
EventListener`
]:
{{
site.exo_sdk }}/Player.Event
Listener.html
[
Javadoc
]:
{{
site.exo_sdk }}/Player.
Event
Listener.html
[
`Player.
Listener`
]:
{{
site.exo_sdk }}/Player.
Listener.html
[
Javadoc
]:
{{
site.exo_sdk }}/Player.Listener.html
[
`Individual callbacks vs onEvents`
]:
#individual-callbacks-vs-onevents
[
`ExoPlaybackException`
]:
{{
site.exo_sdk }}/ExoPlaybackException.html
[
log output
]:
event-logger.html
...
...
docs/live-streaming.md
View file @
3dc6cf6b
...
...
@@ -25,7 +25,7 @@ closer to the live edge again.
## Detecting and monitoring live playbacks ##
Every time a live window is updated, registered
`Player.
Event
Listener`
instances
Every time a live window is updated, registered
`Player.Listener`
instances
will receive an
`onTimelineChanged`
event. You can retrieve details about the
current live playback by querying various
`Player`
and
`Timeline.Window`
methods, as listed below and shown in the following figure.
...
...
@@ -135,7 +135,7 @@ setting `minPlaybackSpeed` and `maxPlaybackSpeed` to `1.0f`.
The playback position may fall behind the live window, for example if the player
is paused or buffering for a long enough period of time. If this happens then
playback will fail and a
`BehindLiveWindowException`
will be reported via
`Player.
Event
Listener.onPlayerError`
. Application code may wish to handle such
`Player.Listener.onPlayerError`
. Application code may wish to handle such
errors by resuming playback at the default position. The
[
PlayerActivity
][]
of
the demo app exemplifies this approach.
...
...
docs/playlists.md
View file @
3dc6cf6b
...
...
@@ -101,7 +101,7 @@ MediaItem mediaItem =
## Detecting when playback transitions to another media item ##
When playback transitions to another media item, or starts repeating the same
media item,
`
Event
Listener.onMediaItemTransition(MediaItem,
media item,
`Listener.onMediaItemTransition(MediaItem,
@MediaItemTransitionReason)`
is called. This callback receives the new media
item, along with a
`@MediaItemTransitionReason`
indicating why the transition
occurred. A common use case for
`onMediaItemTransition`
is to update the
...
...
@@ -135,7 +135,7 @@ public void onMediaItemTransition(
## Detecting when the playlist changes ##
When a media item is added, removed or moved,
`
Event
Listener.onTimelineChanged(Timeline, @TimelineChangeReason)`
is called
`Listener.onTimelineChanged(Timeline, @TimelineChangeReason)`
is called
immediately with
`TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED`
. This callback is
called even when the player has not yet been prepared.
...
...
docs/smoothstreaming.md
View file @
3dc6cf6b
...
...
@@ -59,14 +59,14 @@ player.prepare();
You can retrieve the current manifest by calling
`Player.getCurrentManifest`
.
For SmoothStreaming you should cast the returned object to
`SsManifest`
. The
`onTimelineChanged`
callback of
`Player.
Event
Listener`
is also called whenever
`onTimelineChanged`
callback of
`Player.Listener`
is also called whenever
the manifest is loaded. This will happen once for a on-demand content, and
possibly many times for live content. The code snippet below shows how an app
can do something whenever the manifest is loaded.
~~~
player.addListener(
new Player.
Event
Listener() {
new Player.Listener() {
@Override
public void onTimelineChanged(
Timeline timeline, @Player.TimelineChangeReason int reason) {
...
...
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
View file @
3dc6cf6b
...
...
@@ -97,7 +97,7 @@ public class CastPlayerTest {
@Mock
private
CastContext
mockCastContext
;
@Mock
private
SessionManager
mockSessionManager
;
@Mock
private
CastSession
mockCastSession
;
@Mock
private
Player
.
Event
Listener
mockListener
;
@Mock
private
Player
.
Listener
mockListener
;
@Mock
private
PendingResult
<
RemoteMediaClient
.
MediaChannelResult
>
mockPendingResult
;
@Captor
...
...
extensions/flac/src/androidTest/java/com/google/android/exoplayer2/ext/flac/FlacPlaybackTest.java
View file @
3dc6cf6b
...
...
@@ -89,7 +89,7 @@ public class FlacPlaybackTest {
"audiosinkdumps/"
+
fileName
+
".audiosink.dump"
);
}
private
static
class
TestPlaybackRunnable
implements
Player
.
Event
Listener
,
Runnable
{
private
static
class
TestPlaybackRunnable
implements
Player
.
Listener
,
Runnable
{
private
final
Context
context
;
private
final
Uri
uri
;
...
...
extensions/ima/src/androidTest/java/com/google/android/exoplayer2/ext/ima/ImaPlaybackTest.java
View file @
3dc6cf6b
...
...
@@ -28,7 +28,6 @@ import com.google.android.exoplayer2.C;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player.DiscontinuityReason
;
import
com.google.android.exoplayer2.Player.EventListener
;
import
com.google.android.exoplayer2.Player.TimelineChangeReason
;
import
com.google.android.exoplayer2.SimpleExoPlayer
;
import
com.google.android.exoplayer2.Timeline.Window
;
...
...
@@ -186,7 +185,7 @@ public final class ImaPlaybackTest {
}
}
private
static
final
class
ImaHostedTest
extends
ExoHostedTest
implements
Event
Listener
{
private
static
final
class
ImaHostedTest
extends
ExoHostedTest
implements
Player
.
Listener
{
private
final
Uri
contentUri
;
private
final
DataSpec
adTagDataSpec
;
...
...
extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/AdTagLoader.java
View file @
3dc6cf6b
...
...
@@ -76,7 +76,7 @@ import java.util.List;
import
java.util.Map
;
/** Handles loading and playback of a single ad tag. */
/* package */
final
class
AdTagLoader
implements
Player
.
Event
Listener
{
/* package */
final
class
AdTagLoader
implements
Player
.
Listener
{
private
static
final
String
TAG
=
"AdTagLoader"
;
...
...
extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java
View file @
3dc6cf6b
...
...
@@ -85,7 +85,7 @@ import java.util.Set;
* href="https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/omsdk">IMA
* SDK Open Measurement documentation</a> for more information.
*/
public
final
class
ImaAdsLoader
implements
Player
.
Event
Listener
,
AdsLoader
{
public
final
class
ImaAdsLoader
implements
Player
.
Listener
,
AdsLoader
{
static
{
ExoPlayerLibraryInfo
.
registerModule
(
"goog.exo.ima"
);
...
...
@@ -601,7 +601,7 @@ public final class ImaAdsLoader implements Player.EventListener, AdsLoader {
.
handlePrepareError
(
adGroupIndex
,
adIndexInAdGroup
,
exception
);
}
// Player.
Event
Listener implementation.
// Player.Listener implementation.
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
@Player
.
TimelineChangeReason
int
reason
)
{
...
...
extensions/ima/src/test/java/com/google/android/exoplayer2/ext/ima/FakePlayer.java
View file @
3dc6cf6b
...
...
@@ -27,7 +27,7 @@ import com.google.android.exoplayer2.util.ListenerSet;
/** A fake player for testing content/ad playback. */
/* package */
final
class
FakePlayer
extends
StubExoPlayer
{
private
final
ListenerSet
<
Event
Listener
>
listeners
;
private
final
ListenerSet
<
Listener
>
listeners
;
private
final
Timeline
.
Period
period
;
private
final
Object
windowUid
=
new
Object
();
private
final
Object
periodUid
=
new
Object
();
...
...
@@ -185,12 +185,12 @@ import com.google.android.exoplayer2.util.ListenerSet;
}
@Override
public
void
addListener
(
Player
.
Event
Listener
listener
)
{
public
void
addListener
(
Player
.
Listener
listener
)
{
listeners
.
add
(
listener
);
}
@Override
public
void
removeListener
(
Player
.
Event
Listener
listener
)
{
public
void
removeListener
(
Player
.
Listener
listener
)
{
listeners
.
remove
(
listener
);
}
...
...
extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java
View file @
3dc6cf6b
...
...
@@ -1085,13 +1085,12 @@ public final class MediaSessionConnector {
}
}
private
class
ComponentListener
extends
MediaSessionCompat
.
Callback
implements
Player
.
EventListener
{
private
class
ComponentListener
extends
MediaSessionCompat
.
Callback
implements
Player
.
Listener
{
private
int
currentWindowIndex
;
private
int
currentWindowCount
;
// Player.
Event
Listener implementation.
// Player.Listener implementation.
@Override
public
void
onEvents
(
Player
player
,
Player
.
Events
events
)
{
...
...
extensions/opus/src/androidTest/java/com/google/android/exoplayer2/ext/opus/OpusPlaybackTest.java
View file @
3dc6cf6b
...
...
@@ -73,7 +73,7 @@ public class OpusPlaybackTest {
}
}
private
static
class
TestPlaybackRunnable
implements
Player
.
Event
Listener
,
Runnable
{
private
static
class
TestPlaybackRunnable
implements
Player
.
Listener
,
Runnable
{
private
final
Context
context
;
private
final
Uri
uri
;
...
...
extensions/vp9/src/androidTest/java/com/google/android/exoplayer2/ext/vp9/VpxPlaybackTest.java
View file @
3dc6cf6b
...
...
@@ -101,7 +101,7 @@ public class VpxPlaybackTest {
}
}
private
static
class
TestPlaybackRunnable
implements
Player
.
Event
Listener
,
Runnable
{
private
static
class
TestPlaybackRunnable
implements
Player
.
Listener
,
Runnable
{
private
final
Context
context
;
private
final
Uri
uri
;
...
...
library/common/src/main/java/com/google/android/exoplayer2/Player.java
View file @
3dc6cf6b
...
...
@@ -74,7 +74,10 @@ public interface Player {
* <p>Listeners can choose to implement individual events (e.g. {@link
* #onIsPlayingChanged(boolean)}) or {@link #onEvents(Player, Events)}, which is called after one
* or more events occurred together.
*
* @deprecated Use {@link Player.Listener}.
*/
@Deprecated
interface
EventListener
{
/**
...
...
@@ -1040,7 +1043,9 @@ public interface Player {
* the player does not have a {@link Looper}, then the listener will be called on the main thread.
*
* @param listener The listener to register.
* @deprecated Use {@link #addListener(Listener)} instead.
*/
@Deprecated
void
addListener
(
EventListener
listener
);
/**
...
...
@@ -1055,7 +1060,9 @@ public interface Player {
* no longer receive events from the player.
*
* @param listener The listener to unregister.
* @deprecated Use {@link #addListener(Listener)} instead.
*/
@Deprecated
void
removeListener
(
EventListener
listener
);
/**
...
...
library/core/src/androidTest/java/com/google/android/exoplayer2/ClippedPlaybackTest.java
View file @
3dc6cf6b
...
...
@@ -66,7 +66,7 @@ public final class ClippedPlaybackTest {
player
.
get
()
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
state
)
{
if
(
state
==
Player
.
STATE_ENDED
)
{
...
...
@@ -120,7 +120,7 @@ public final class ClippedPlaybackTest {
player
.
get
()
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
state
)
{
if
(
state
==
Player
.
STATE_ENDED
)
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsCollector.java
View file @
3dc6cf6b
...
...
@@ -66,7 +66,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
* Data collector that forwards analytics events to {@link AnalyticsListener AnalyticsListeners}.
*/
public
class
AnalyticsCollector
implements
Player
.
Event
Listener
,
implements
Player
.
Listener
,
AudioRendererEventListener
,
VideoRendererEventListener
,
MediaSourceEventListener
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
View file @
3dc6cf6b
...
...
@@ -105,10 +105,10 @@ import org.checkerframework.checker.nullness.qual.EnsuresNonNull;
* }</pre>
*
* If {@code rendererTrackGroups} is null then there aren't any currently mapped tracks, and so
* setting an override isn't possible. Note that a {@link Player.
EventListener} registered on the
*
player can be used to determine when the current tracks (and therefore the mapping) changes. If
*
{@code rendererTrackGroups} is non-null then an override can be set. The next step is to query
*
the
properties of the available tracks to determine the {@code groupIndex} and the {@code
* setting an override isn't possible. Note that a {@link Player.
Listener} registered on the player
*
can be used to determine when the current tracks (and therefore the mapping) changes. If {@code
*
rendererTrackGroups} is non-null then an override can be set. The next step is to query the
* properties of the available tracks to determine the {@code groupIndex} and the {@code
* trackIndices} within the group it that should be selected. The override can then be specified
* using {@link ParametersBuilder#setSelectionOverride}:
*
...
...
library/core/src/main/java/com/google/android/exoplayer2/util/DebugTextViewHelper.java
View file @
3dc6cf6b
...
...
@@ -28,7 +28,7 @@ import java.util.Locale;
* A helper class for periodically updating a {@link TextView} with debug information obtained from
* a {@link SimpleExoPlayer}.
*/
public
class
DebugTextViewHelper
implements
Player
.
Event
Listener
,
Runnable
{
public
class
DebugTextViewHelper
implements
Player
.
Listener
,
Runnable
{
private
static
final
int
REFRESH_INTERVAL_MS
=
1000
;
...
...
@@ -75,7 +75,7 @@ public class DebugTextViewHelper implements Player.EventListener, Runnable {
textView
.
removeCallbacks
(
this
);
}
// Player.
Event
Listener implementation.
// Player.Listener implementation.
@Override
public
final
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
...
...
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
View file @
3dc6cf6b
...
...
@@ -75,8 +75,6 @@ import androidx.annotation.Nullable;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.Player.DiscontinuityReason
;
import
com.google.android.exoplayer2.Player.EventListener
;
import
com.google.android.exoplayer2.Player.Listener
;
import
com.google.android.exoplayer2.Timeline.Window
;
import
com.google.android.exoplayer2.analytics.AnalyticsListener
;
import
com.google.android.exoplayer2.audio.AudioAttributes
;
...
...
@@ -193,7 +191,7 @@ public final class ExoPlayerTest {
FakeRenderer
renderer
=
new
FakeRenderer
(
C
.
TRACK_TYPE_UNKNOWN
);
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setRenderers
(
renderer
).
build
();
Listener
mockListener
=
mock
(
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
,
ExoPlayerTestRunner
.
VIDEO_FORMAT
));
...
...
@@ -224,7 +222,7 @@ public final class ExoPlayerTest {
Timeline
timeline
=
new
FakeTimeline
();
FakeRenderer
renderer
=
new
FakeRenderer
(
C
.
TRACK_TYPE_VIDEO
);
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setRenderers
(
renderer
).
build
();
Listener
mockListener
=
mock
(
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
,
ExoPlayerTestRunner
.
VIDEO_FORMAT
));
...
...
@@ -259,26 +257,26 @@ public final class ExoPlayerTest {
Timeline
timeline
=
new
FakeTimeline
(
/* windowCount= */
3
);
FakeRenderer
renderer
=
new
FakeRenderer
(
C
.
TRACK_TYPE_VIDEO
);
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setRenderers
(
renderer
).
build
();
EventListener
mockEventListener
=
mock
(
Event
Listener
.
class
);
player
.
addListener
(
mock
Event
Listener
);
Player
.
Listener
mockPlayerListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mock
Player
Listener
);
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
,
ExoPlayerTestRunner
.
VIDEO_FORMAT
));
player
.
prepare
();
player
.
play
();
runUntilPlaybackState
(
player
,
Player
.
STATE_ENDED
);
InOrder
inOrder
=
Mockito
.
inOrder
(
mock
Event
Listener
);
InOrder
inOrder
=
Mockito
.
inOrder
(
mock
Player
Listener
);
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
new
FakeMediaSource
.
InitialTimeline
(
timeline
))),
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
timeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
));
inOrder
.
verify
(
mock
Event
Listener
,
times
(
2
))
.
verify
(
mock
Player
Listener
,
times
(
2
))
.
onPositionDiscontinuity
(
any
(),
any
(),
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
assertThat
(
renderer
.
getFormatsRead
())
.
containsExactly
(
...
...
@@ -297,26 +295,26 @@ public final class ExoPlayerTest {
new
FakeTimeline
(
new
TimelineWindowDefinition
(
/* periodCount= */
100
,
/* id= */
0
));
FakeRenderer
renderer
=
new
FakeRenderer
(
C
.
TRACK_TYPE_VIDEO
);
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setRenderers
(
renderer
).
build
();
EventListener
mockEventListener
=
mock
(
Event
Listener
.
class
);
player
.
addListener
(
mock
Event
Listener
);
Player
.
Listener
mockPlayerListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mock
Player
Listener
);
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
,
ExoPlayerTestRunner
.
VIDEO_FORMAT
));
player
.
prepare
();
player
.
play
();
runUntilPlaybackState
(
player
,
Player
.
STATE_ENDED
);
InOrder
inOrder
=
inOrder
(
mock
Event
Listener
);
InOrder
inOrder
=
inOrder
(
mock
Player
Listener
);
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
placeholderTimeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
timeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
));
inOrder
.
verify
(
mock
Event
Listener
,
times
(
99
))
.
verify
(
mock
Player
Listener
,
times
(
99
))
.
onPositionDiscontinuity
(
any
(),
any
(),
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
assertThat
(
renderer
.
getFormatsRead
()).
hasSize
(
100
);
assertThat
(
renderer
.
sampleBufferReadCount
).
isEqualTo
(
100
);
...
...
@@ -379,8 +377,8 @@ public final class ExoPlayerTest {
};
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setRenderers
(
videoRenderer
,
audioRenderer
).
build
();
EventListener
mockEventListener
=
mock
(
Event
Listener
.
class
);
player
.
addListener
(
mock
Event
Listener
);
Player
.
Listener
mockPlayerListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mock
Player
Listener
);
player
.
setMediaSource
(
new
FakeMediaSource
(
...
...
@@ -389,18 +387,18 @@ public final class ExoPlayerTest {
player
.
play
();
runUntilPlaybackState
(
player
,
Player
.
STATE_ENDED
);
InOrder
inOrder
=
inOrder
(
mock
Event
Listener
);
InOrder
inOrder
=
inOrder
(
mock
Player
Listener
);
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
new
FakeMediaSource
.
InitialTimeline
(
timeline
))),
eq
(
Player
.
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
timeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
));
inOrder
.
verify
(
mock
Event
Listener
,
times
(
2
))
.
verify
(
mock
Player
Listener
,
times
(
2
))
.
onPositionDiscontinuity
(
any
(),
any
(),
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
assertThat
(
audioRenderer
.
positionResetCount
).
isEqualTo
(
1
);
assertThat
(
videoRenderer
.
isEnded
).
isTrue
();
...
...
@@ -428,8 +426,8 @@ public final class ExoPlayerTest {
Timeline
thirdTimeline
=
new
FakeTimeline
();
MediaSource
thirdSource
=
new
FakeMediaSource
(
thirdTimeline
,
ExoPlayerTestRunner
.
VIDEO_FORMAT
);
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setRenderers
(
renderer
).
build
();
EventListener
mockEventListener
=
mock
(
Event
Listener
.
class
);
player
.
addListener
(
mock
Event
Listener
);
Player
.
Listener
mockPlayerListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mock
Player
Listener
);
player
.
setMediaSource
(
firstSource
);
player
.
prepare
();
...
...
@@ -444,38 +442,38 @@ public final class ExoPlayerTest {
// prepared, it immediately exposed a placeholder timeline, but the source info refresh from the
// second source was suppressed as we replace it with the third source before the update
// arrives.
InOrder
inOrder
=
inOrder
(
mock
Event
Listener
);
InOrder
inOrder
=
inOrder
(
mock
Player
Listener
);
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
placeholderTimeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
firstTimeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
placeholderTimeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onPositionDiscontinuity
(
any
(),
any
(),
eq
(
Player
.
DISCONTINUITY_REASON_REMOVE
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
placeholderTimeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onPositionDiscontinuity
(
any
(),
any
(),
eq
(
Player
.
DISCONTINUITY_REASON_REMOVE
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTimelineChanged
(
argThat
(
noUid
(
thirdTimeline
)),
eq
(
Player
.
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
));
inOrder
.
verify
(
mock
Event
Listener
)
.
verify
(
mock
Player
Listener
)
.
onTracksChanged
(
eq
(
new
TrackGroupArray
(
new
TrackGroup
(
ExoPlayerTestRunner
.
VIDEO_FORMAT
))),
any
());
assertThat
(
renderer
.
isEnded
).
isTrue
();
...
...
@@ -1691,7 +1689,7 @@ public final class ExoPlayerTest {
@Test
public
void
seekAndReprepareAfterPlaybackError_keepsSeekPositionAndTimeline
()
throws
Exception
{
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
FakeMediaSource
fakeMediaSource
=
new
FakeMediaSource
();
player
.
setMediaSource
(
fakeMediaSource
);
...
...
@@ -2853,23 +2851,23 @@ public final class ExoPlayerTest {
// We add two listeners to the player. The first stops the player as soon as it's ready and both
// record the state change events they receive.
final
AtomicReference
<
Player
>
playerReference
=
new
AtomicReference
<>();
final
List
<
Integer
>
event
Listener1States
=
new
ArrayList
<>();
final
List
<
Integer
>
event
Listener2States
=
new
ArrayList
<>();
final
EventListener
event
Listener1
=
new
Event
Listener
()
{
final
List
<
Integer
>
player
Listener1States
=
new
ArrayList
<>();
final
List
<
Integer
>
player
Listener2States
=
new
ArrayList
<>();
final
Player
.
Listener
player
Listener1
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
event
Listener1States
.
add
(
playbackState
);
player
Listener1States
.
add
(
playbackState
);
if
(
playbackState
==
Player
.
STATE_READY
)
{
playerReference
.
get
().
stop
(
/* reset= */
true
);
}
}
};
final
EventListener
event
Listener2
=
new
Event
Listener
()
{
final
Player
.
Listener
player
Listener2
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
event
Listener2States
.
add
(
playbackState
);
player
Listener2States
.
add
(
playbackState
);
}
};
ActionSchedule
actionSchedule
=
...
...
@@ -2879,8 +2877,8 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener1
);
player
.
addListener
(
event
Listener2
);
player
.
addListener
(
player
Listener1
);
player
.
addListener
(
player
Listener2
);
}
})
.
build
();
...
...
@@ -2890,10 +2888,10 @@ public final class ExoPlayerTest {
.
start
()
.
blockUntilEnded
(
TIMEOUT_MS
);
assertThat
(
event
Listener1States
)
assertThat
(
player
Listener1States
)
.
containsExactly
(
Player
.
STATE_BUFFERING
,
Player
.
STATE_READY
,
Player
.
STATE_IDLE
)
.
inOrder
();
assertThat
(
event
Listener2States
)
assertThat
(
player
Listener2States
)
.
containsExactly
(
Player
.
STATE_BUFFERING
,
Player
.
STATE_READY
,
Player
.
STATE_IDLE
)
.
inOrder
();
}
...
...
@@ -2903,15 +2901,15 @@ public final class ExoPlayerTest {
// The listener stops the player as soon as it's ready (which should report a timeline and state
// change) and sets playWhenReady to false when the timeline callback is received.
final
AtomicReference
<
Player
>
playerReference
=
new
AtomicReference
<>();
final
List
<
Boolean
>
event
ListenerPlayWhenReady
=
new
ArrayList
<>();
final
List
<
Integer
>
event
ListenerStates
=
new
ArrayList
<>();
final
List
<
Boolean
>
player
ListenerPlayWhenReady
=
new
ArrayList
<>();
final
List
<
Integer
>
player
ListenerStates
=
new
ArrayList
<>();
List
<
Integer
>
sequence
=
new
ArrayList
<>();
final
EventListener
event
Listener
=
new
Event
Listener
()
{
final
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
event
ListenerStates
.
add
(
playbackState
);
player
ListenerStates
.
add
(
playbackState
);
if
(
playbackState
==
Player
.
STATE_READY
)
{
playerReference
.
get
().
stop
(
/* reset= */
true
);
sequence
.
add
(
0
);
...
...
@@ -2929,7 +2927,7 @@ public final class ExoPlayerTest {
@Override
public
void
onPlayWhenReadyChanged
(
boolean
playWhenReady
,
@Player
.
PlayWhenReadyChangeReason
int
reason
)
{
event
ListenerPlayWhenReady
.
add
(
playWhenReady
);
player
ListenerPlayWhenReady
.
add
(
playWhenReady
);
sequence
.
add
(
2
);
}
};
...
...
@@ -2940,7 +2938,7 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
}
})
.
build
();
...
...
@@ -2950,10 +2948,10 @@ public final class ExoPlayerTest {
.
start
()
.
blockUntilEnded
(
TIMEOUT_MS
);
assertThat
(
event
ListenerStates
)
assertThat
(
player
ListenerStates
)
.
containsExactly
(
Player
.
STATE_BUFFERING
,
Player
.
STATE_READY
,
Player
.
STATE_IDLE
)
.
inOrder
();
assertThat
(
event
ListenerPlayWhenReady
).
containsExactly
(
false
).
inOrder
();
assertThat
(
player
ListenerPlayWhenReady
).
containsExactly
(
false
).
inOrder
();
assertThat
(
sequence
).
containsExactly
(
0
,
1
,
2
).
inOrder
();
}
...
...
@@ -2963,8 +2961,8 @@ public final class ExoPlayerTest {
Timeline
secondTimeline
=
new
FakeTimeline
(
/* windowCount= */
3
);
final
AtomicReference
<
ExoPlayer
>
playerReference
=
new
AtomicReference
<>();
FakeMediaSource
secondMediaSource
=
new
FakeMediaSource
(
secondTimeline
);
final
EventListener
event
Listener
=
new
Event
Listener
()
{
final
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
int
state
)
{
if
(
state
==
Player
.
STATE_IDLE
)
{
...
...
@@ -2979,7 +2977,7 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
}
})
// Ensure there are no further pending callbacks.
...
...
@@ -3023,8 +3021,8 @@ public final class ExoPlayerTest {
AtomicLong
positionAtDiscontinuityMs
=
new
AtomicLong
(
C
.
TIME_UNSET
);
AtomicLong
clockAtStartMs
=
new
AtomicLong
(
C
.
TIME_UNSET
);
AtomicLong
clockAtDiscontinuityMs
=
new
AtomicLong
(
C
.
TIME_UNSET
);
EventListener
event
Listener
=
new
Event
Listener
()
{
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
if
(
playbackState
==
Player
.
STATE_READY
&&
clockAtStartMs
.
get
()
==
C
.
TIME_UNSET
)
{
...
...
@@ -3047,7 +3045,7 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
}
})
.
pause
()
...
...
@@ -3099,8 +3097,8 @@ public final class ExoPlayerTest {
.
setMediaSources
(
mediaSource
)
.
setSupportedFormats
(
ExoPlayerTestRunner
.
VIDEO_FORMAT
,
ExoPlayerTestRunner
.
AUDIO_FORMAT
)
.
setActionSchedule
(
actionSchedule
)
.
set
Event
Listener
(
new
Event
Listener
()
{
.
set
Player
Listener
(
new
Player
.
Listener
()
{
@Override
public
void
onTracksChanged
(
TrackGroupArray
trackGroups
,
TrackSelectionArray
trackSelections
)
{
...
...
@@ -3253,8 +3251,8 @@ public final class ExoPlayerTest {
windowDurationUs
));
AtomicReference
<
Player
>
playerReference
=
new
AtomicReference
<>();
AtomicLong
bufferedPositionAtFirstDiscontinuityMs
=
new
AtomicLong
(
C
.
TIME_UNSET
);
EventListener
event
Listener
=
new
Event
Listener
()
{
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPositionDiscontinuity
(
@DiscontinuityReason
int
reason
)
{
if
(
reason
==
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
)
{
...
...
@@ -3272,7 +3270,7 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
}
})
.
pause
()
...
...
@@ -3307,8 +3305,8 @@ public final class ExoPlayerTest {
FakeMediaSource
fakeMediaSource
=
new
FakeMediaSource
(
/* timeline= */
null
);
AtomicReference
<
Player
>
playerReference
=
new
AtomicReference
<>();
AtomicLong
contentStartPositionMs
=
new
AtomicLong
(
C
.
TIME_UNSET
);
EventListener
event
Listener
=
new
Event
Listener
()
{
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPositionDiscontinuity
(
@DiscontinuityReason
int
reason
)
{
if
(
reason
==
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
)
{
...
...
@@ -3323,7 +3321,7 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
}
})
.
seek
(
/* positionMs= */
5_000
)
...
...
@@ -3360,8 +3358,8 @@ public final class ExoPlayerTest {
FakeMediaSource
fakeMediaSource
=
new
FakeMediaSource
(
/* timeline= */
null
);
AtomicReference
<
Player
>
playerReference
=
new
AtomicReference
<>();
AtomicLong
contentStartPositionMs
=
new
AtomicLong
(
C
.
TIME_UNSET
);
EventListener
event
Listener
=
new
Event
Listener
()
{
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPositionDiscontinuity
(
@DiscontinuityReason
int
reason
)
{
if
(
reason
==
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
)
{
...
...
@@ -3376,7 +3374,7 @@ public final class ExoPlayerTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
playerReference
.
set
(
player
);
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
}
})
.
waitForPlaybackState
(
Player
.
STATE_BUFFERING
)
...
...
@@ -3419,8 +3417,8 @@ public final class ExoPlayerTest {
.
play
()
.
build
();
List
<
Float
>
reportedPlaybackSpeeds
=
new
ArrayList
<>();
Event
Listener
listener
=
new
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackParametersChanged
(
PlaybackParameters
playbackParameters
)
{
reportedPlaybackSpeeds
.
add
(
playbackParameters
.
speed
);
...
...
@@ -3428,7 +3426,7 @@ public final class ExoPlayerTest {
};
new
ExoPlayerTestRunner
.
Builder
(
context
)
.
setActionSchedule
(
actionSchedule
)
.
set
Event
Listener
(
listener
)
.
set
Player
Listener
(
listener
)
.
build
()
.
start
()
.
blockUntilEnded
(
TIMEOUT_MS
);
...
...
@@ -3466,8 +3464,8 @@ public final class ExoPlayerTest {
.
play
()
.
build
();
List
<
PlaybackParameters
>
reportedPlaybackParameters
=
new
ArrayList
<>();
Event
Listener
listener
=
new
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackParametersChanged
(
PlaybackParameters
playbackParameters
)
{
reportedPlaybackParameters
.
add
(
playbackParameters
);
...
...
@@ -3477,7 +3475,7 @@ public final class ExoPlayerTest {
.
setSupportedFormats
(
ExoPlayerTestRunner
.
AUDIO_FORMAT
)
.
setRenderers
(
renderer
)
.
setActionSchedule
(
actionSchedule
)
.
set
Event
Listener
(
listener
)
.
set
Player
Listener
(
listener
)
.
build
()
.
start
()
.
blockUntilEnded
(
TIMEOUT_MS
);
...
...
@@ -3501,8 +3499,8 @@ public final class ExoPlayerTest {
.
play
()
.
build
();
AtomicBoolean
seenPlaybackSuppression
=
new
AtomicBoolean
();
Event
Listener
listener
=
new
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackSuppressionReasonChanged
(
@Player
.
PlaybackSuppressionReason
int
playbackSuppressionReason
)
{
...
...
@@ -3511,7 +3509,7 @@ public final class ExoPlayerTest {
};
new
ExoPlayerTestRunner
.
Builder
(
context
)
.
setActionSchedule
(
actionSchedule
)
.
set
Event
Listener
(
listener
)
.
set
Player
Listener
(
listener
)
.
build
()
.
start
()
.
blockUntilEnded
(
TIMEOUT_MS
);
...
...
@@ -3533,8 +3531,8 @@ public final class ExoPlayerTest {
.
executeRunnable
(
playerStateGrabber
)
.
build
();
AtomicBoolean
seenPlaybackSuppression
=
new
AtomicBoolean
();
Event
Listener
listener
=
new
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackSuppressionReasonChanged
(
@Player
.
PlaybackSuppressionReason
int
playbackSuppressionReason
)
{
...
...
@@ -3543,7 +3541,7 @@ public final class ExoPlayerTest {
};
new
ExoPlayerTestRunner
.
Builder
(
context
)
.
setActionSchedule
(
actionSchedule
)
.
set
Event
Listener
(
listener
)
.
set
Player
Listener
(
listener
)
.
build
()
.
start
()
.
blockUntilActionScheduleFinished
(
TIMEOUT_MS
);
...
...
@@ -7443,15 +7441,15 @@ public final class ExoPlayerTest {
.
waitForPlaybackState
(
Player
.
STATE_ENDED
)
.
build
();
List
<
Boolean
>
onIsPlayingChanges
=
new
ArrayList
<>();
Player
.
EventListener
event
Listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onIsPlayingChanged
(
boolean
isPlaying
)
{
onIsPlayingChanges
.
add
(
isPlaying
);
}
};
new
ExoPlayerTestRunner
.
Builder
(
context
)
.
set
EventListener
(
event
Listener
)
.
set
PlayerListener
(
player
Listener
)
.
setActionSchedule
(
actionSchedule
)
.
build
()
.
start
()
...
...
@@ -7468,8 +7466,8 @@ public final class ExoPlayerTest {
String
isPlayingChange1
=
"isPlayingChange1"
;
String
isPlayingChange2
=
"isPlayingChange2"
;
ArrayList
<
String
>
events
=
new
ArrayList
<>();
Player
.
EventListener
event
Listener1
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
player
Listener1
=
new
Player
.
Listener
()
{
@Override
public
void
onPlayWhenReadyChanged
(
boolean
playWhenReady
,
int
reason
)
{
events
.
add
(
playWhenReadyChange1
);
...
...
@@ -7480,8 +7478,8 @@ public final class ExoPlayerTest {
events
.
add
(
isPlayingChange1
);
}
};
Player
.
EventListener
event
Listener2
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
player
Listener2
=
new
Player
.
Listener
()
{
@Override
public
void
onPlayWhenReadyChanged
(
boolean
playWhenReady
,
int
reason
)
{
events
.
add
(
playWhenReadyChange2
);
...
...
@@ -7499,8 +7497,8 @@ public final class ExoPlayerTest {
new
PlayerRunnable
()
{
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
player
.
addListener
(
event
Listener1
);
player
.
addListener
(
event
Listener2
);
player
.
addListener
(
player
Listener1
);
player
.
addListener
(
player
Listener2
);
}
})
.
waitForPlaybackState
(
Player
.
STATE_READY
)
...
...
@@ -7677,8 +7675,8 @@ public final class ExoPlayerTest {
.
build
();
List
<
MediaItem
>
currentMediaItems
=
new
ArrayList
<>();
List
<
MediaItem
>
mediaItemsInTimeline
=
new
ArrayList
<>();
Player
.
EventListener
event
Listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
player
Listener
=
new
Player
.
Listener
()
{
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
int
reason
)
{
if
(
reason
!=
Player
.
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
)
{
...
...
@@ -7699,7 +7697,7 @@ public final class ExoPlayerTest {
}
};
new
ExoPlayerTestRunner
.
Builder
(
context
)
.
set
EventListener
(
event
Listener
)
.
set
PlayerListener
(
player
Listener
)
.
setActionSchedule
(
actionSchedule
)
.
setMediaSources
(
fakeMediaSource1
,
fakeMediaSource2
,
fakeMediaSource3
)
.
build
()
...
...
@@ -8154,7 +8152,7 @@ public final class ExoPlayerTest {
Player
.
Commands
commandsWithSeekToNextAndPrevious
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8189,7 +8187,7 @@ public final class ExoPlayerTest {
Player
.
Commands
commandsWithSeekToNextAndPrevious
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8218,7 +8216,7 @@ public final class ExoPlayerTest {
@Test
public
void
seekTo_sameWindow_doesNotNotifyAvailableCommandsChanged
()
{
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8243,7 +8241,7 @@ public final class ExoPlayerTest {
COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM
,
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8281,7 +8279,7 @@ public final class ExoPlayerTest {
public
void
addMediaSource_atTheEnd_notifiesAvailableCommandsChanged
()
{
Player
.
Commands
commandsWithSeekToNext
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8301,7 +8299,7 @@ public final class ExoPlayerTest {
public
void
addMediaSource_atTheStart_notifiesAvailableCommandsChanged
()
{
Player
.
Commands
commandsWithSeekToPrevious
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8322,7 +8320,7 @@ public final class ExoPlayerTest {
Player
.
Commands
commandsWithSeekToNext
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
);
Player
.
Commands
commandsWithoutSeek
=
createWithDefaultCommands
();
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8348,7 +8346,7 @@ public final class ExoPlayerTest {
Player
.
Commands
commandsWithSeekToPrevious
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
Commands
commandsWithoutSeek
=
createWithDefaultCommands
();
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8375,7 +8373,7 @@ public final class ExoPlayerTest {
Player
.
Commands
commandsWithSeekToNext
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
);
Player
.
Commands
commandsWithoutSeek
=
createWithDefaultCommands
();
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8394,7 +8392,7 @@ public final class ExoPlayerTest {
Player
.
Commands
commandsWithSeekToNextAndPrevious
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8409,7 +8407,7 @@ public final class ExoPlayerTest {
@Test
public
void
setRepeatMode_one_doesNotNotifyAvailableCommandsChanged
()
{
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
...
...
@@ -8424,7 +8422,7 @@ public final class ExoPlayerTest {
createWithDefaultCommands
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
);
Player
.
Commands
commandsWithSeekToPrevious
=
createWithDefaultCommands
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
);
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
addListener
(
mockListener
);
MediaSource
mediaSource
=
...
...
@@ -8739,7 +8737,7 @@ public final class ExoPlayerTest {
/* description= */
"Audio"
,
/* value= */
"Audio track name"
)))
.
build
();
EventListener
eventListener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
playerListener
=
mock
(
Player
.
Listener
.
class
);
Timeline
fakeTimeline
=
new
FakeTimeline
(
new
TimelineWindowDefinition
(
...
...
@@ -8747,7 +8745,7 @@ public final class ExoPlayerTest {
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
setMediaSource
(
new
FakeMediaSource
(
fakeTimeline
,
videoFormat
,
audioFormat
));
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
player
.
prepare
();
player
.
play
();
runUntilPlaybackState
(
player
,
Player
.
STATE_ENDED
);
...
...
@@ -8755,7 +8753,7 @@ public final class ExoPlayerTest {
player
.
release
();
assertThat
(
metadata
).
containsExactly
(
videoFormat
.
metadata
,
audioFormat
.
metadata
).
inOrder
();
verify
(
event
Listener
)
verify
(
player
Listener
)
.
onStaticMetadataChanged
(
ImmutableList
.
of
(
videoFormat
.
metadata
,
audioFormat
.
metadata
));
}
...
...
@@ -8764,7 +8762,7 @@ public final class ExoPlayerTest {
throws
Exception
{
Format
videoFormat
=
new
Format
.
Builder
().
setSampleMimeType
(
MimeTypes
.
VIDEO_H264
).
build
();
Format
audioFormat
=
new
Format
.
Builder
().
setSampleMimeType
(
MimeTypes
.
AUDIO_AAC
).
build
();
EventListener
eventListener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
playerListener
=
mock
(
Player
.
Listener
.
class
);
Timeline
fakeTimeline
=
new
FakeTimeline
(
new
TimelineWindowDefinition
(
...
...
@@ -8772,7 +8770,7 @@ public final class ExoPlayerTest {
SimpleExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
setMediaSource
(
new
FakeMediaSource
(
fakeTimeline
,
videoFormat
,
audioFormat
));
player
.
addListener
(
event
Listener
);
player
.
addListener
(
player
Listener
);
player
.
prepare
();
player
.
play
();
runUntilPlaybackState
(
player
,
Player
.
STATE_ENDED
);
...
...
@@ -8780,7 +8778,7 @@ public final class ExoPlayerTest {
player
.
release
();
assertThat
(
metadata
).
isEmpty
();
verify
(
event
Listener
,
never
()).
onStaticMetadataChanged
(
any
());
verify
(
player
Listener
,
never
()).
onStaticMetadataChanged
(
any
());
}
@Test
...
...
@@ -8806,7 +8804,7 @@ public final class ExoPlayerTest {
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
pause
();
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
));
...
...
@@ -8975,7 +8973,7 @@ public final class ExoPlayerTest {
public
void
playerIdle_withSetPlaybackSpeed_usesPlaybackParameterSpeedWithPitchUnchanged
()
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
player
.
setPlaybackParameters
(
new
PlaybackParameters
(
/* speed= */
1
,
/* pitch= */
2
));
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
prepare
();
...
...
@@ -9009,7 +9007,7 @@ public final class ExoPlayerTest {
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
Player
.
EventListener
mockListener
=
mock
(
Player
.
Event
Listener
.
class
);
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
pause
();
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
));
...
...
@@ -9269,7 +9267,7 @@ public final class ExoPlayerTest {
@Test
public
void
onEvents_correspondToListenerCalls
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
Format
formatWithStaticMetadata
=
new
Format
.
Builder
()
...
...
@@ -9297,7 +9295,7 @@ public final class ExoPlayerTest {
// Set values recursively.
player
.
addListener
(
new
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onRepeatModeChanged
(
int
repeatMode
)
{
player
.
setShuffleModeEnabled
(
true
);
...
...
@@ -9359,7 +9357,7 @@ public final class ExoPlayerTest {
@Test
public
void
play_withPreMidAndPostRollAd_callsOnDiscontinuityCorrectly
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
AdPlaybackState
adPlaybackState
=
FakeTimeline
.
createAdPlaybackState
(
...
...
@@ -9497,7 +9495,7 @@ public final class ExoPlayerTest {
@Test
public
void
seekTo_seekOverMidRoll_callsOnDiscontinuityCorrectly
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
AdPlaybackState
adPlaybackState
=
FakeTimeline
.
createAdPlaybackState
(
...
...
@@ -9586,7 +9584,7 @@ public final class ExoPlayerTest {
@Test
public
void
play_multiItemPlaylistWidthAds_callsOnDiscontinuityCorrectly
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
AdPlaybackState
postRollAdPlaybackState
=
FakeTimeline
.
createAdPlaybackState
(
...
...
@@ -9744,7 +9742,7 @@ public final class ExoPlayerTest {
/* isDynamic= */
false
,
/* durationUs= */
15
*
C
.
MICROS_PER_SECOND
)));
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
setMediaSource
(
new
FakeMediaSource
(
...
...
@@ -9790,7 +9788,7 @@ public final class ExoPlayerTest {
public
void
removeMediaItems_removesPlayingPeriod_callsOnPositionDiscontinuity
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
setMediaSources
(
Lists
.
newArrayList
(
...
...
@@ -9870,7 +9868,7 @@ public final class ExoPlayerTest {
concatenatingMediaSourceRemoveMediaSource_removesPlayingPeriod_callsOnPositionDiscontinuity
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
ConcatenatingMediaSource
concatenatingMediaSource
=
new
ConcatenatingMediaSource
(
...
...
@@ -9943,7 +9941,7 @@ public final class ExoPlayerTest {
concatenatingMediaSourceRemoveMediaSourceWithSeek_overridesRemoval_callsOnPositionDiscontinuity
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
ConcatenatingMediaSource
concatenatingMediaSource
=
new
ConcatenatingMediaSource
(
...
...
@@ -10023,7 +10021,7 @@ public final class ExoPlayerTest {
@Test
public
void
seekTo_callsOnPositionDiscontinuity
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
setMediaSources
(
Lists
.
newArrayList
(
new
FakeMediaSource
(),
new
FakeMediaSource
()));
...
...
@@ -10066,7 +10064,7 @@ public final class ExoPlayerTest {
@Test
public
void
seekTo_whenTimelineEmpty_callsOnPositionDiscontinuity
()
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
seekTo
(
/* positionMs= */
7
*
C
.
MILLIS_PER_SECOND
);
...
...
@@ -10117,7 +10115,7 @@ public final class ExoPlayerTest {
@Test
public
void
stop_doesNotCallOnPositionDiscontinuity
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
setMediaSource
(
new
FakeMediaSource
());
...
...
@@ -10135,7 +10133,7 @@ public final class ExoPlayerTest {
@Test
public
void
stop_withResetRemovesPlayingPeriod_callsOnPositionDiscontinuity
()
throws
Exception
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
setMediaSource
(
new
FakeMediaSource
());
...
...
@@ -10178,7 +10176,7 @@ public final class ExoPlayerTest {
final
FakeMediaSource
mediaSource
=
new
FakeMediaSource
(
timeline1
,
ExoPlayerTestRunner
.
VIDEO_FORMAT
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
EventListener
listener
=
mock
(
Event
Listener
.
class
);
Player
.
Listener
listener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
listener
);
player
.
setMediaSource
(
mediaSource
);
...
...
library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java
View file @
3dc6cf6b
...
...
@@ -1041,7 +1041,7 @@ public final class AnalyticsCollectorTest {
@Override
public
void
run
(
SimpleExoPlayer
player
)
{
player
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onPositionDiscontinuity
(
Player
.
PositionInfo
oldPosition
,
...
...
robolectricutils/src/main/java/com/google/android/exoplayer2/robolectric/TestPlayerRunHelper.java
View file @
3dc6cf6b
...
...
@@ -58,8 +58,8 @@ public class TestPlayerRunHelper {
return
;
}
AtomicBoolean
receivedExpectedState
=
new
AtomicBoolean
(
false
);
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
int
state
)
{
if
(
state
==
expectedState
)
{
...
...
@@ -88,8 +88,8 @@ public class TestPlayerRunHelper {
return
;
}
AtomicBoolean
receivedExpectedPlayWhenReady
=
new
AtomicBoolean
(
false
);
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlayWhenReadyChanged
(
boolean
playWhenReady
,
int
reason
)
{
if
(
playWhenReady
==
expectedPlayWhenReady
)
{
...
...
@@ -118,8 +118,8 @@ public class TestPlayerRunHelper {
return
;
}
AtomicBoolean
receivedExpectedTimeline
=
new
AtomicBoolean
(
false
);
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
int
reason
)
{
if
(
expectedTimeline
.
equals
(
timeline
))
{
...
...
@@ -143,8 +143,8 @@ public class TestPlayerRunHelper {
public
static
Timeline
runUntilTimelineChanged
(
Player
player
)
throws
TimeoutException
{
verifyMainTestThread
(
player
);
AtomicReference
<
Timeline
>
receivedTimeline
=
new
AtomicReference
<>();
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
int
reason
)
{
receivedTimeline
.
set
(
timeline
);
...
...
@@ -158,7 +158,7 @@ public class TestPlayerRunHelper {
/**
* Runs tasks of the main {@link Looper} until a {@link
* Player.
Event
Listener#onPositionDiscontinuity(Player.PositionInfo, Player.PositionInfo, int)}
* Player.Listener#onPositionDiscontinuity(Player.PositionInfo, Player.PositionInfo, int)}
* callback with the specified {@link Player.DiscontinuityReason} occurred.
*
* @param player The {@link Player}.
...
...
@@ -170,8 +170,8 @@ public class TestPlayerRunHelper {
Player
player
,
@Player
.
DiscontinuityReason
int
expectedReason
)
throws
TimeoutException
{
verifyMainTestThread
(
player
);
AtomicBoolean
receivedCallback
=
new
AtomicBoolean
(
false
);
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPositionDiscontinuity
(
Player
.
PositionInfo
oldPosition
,
Player
.
PositionInfo
newPosition
,
int
reason
)
{
...
...
@@ -196,8 +196,8 @@ public class TestPlayerRunHelper {
public
static
ExoPlaybackException
runUntilError
(
Player
player
)
throws
TimeoutException
{
verifyMainTestThread
(
player
);
AtomicReference
<
ExoPlaybackException
>
receivedError
=
new
AtomicReference
<>();
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onPlayerError
(
ExoPlaybackException
error
)
{
receivedError
.
set
(
error
);
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/Action.java
View file @
3dc6cf6b
...
...
@@ -729,7 +729,7 @@ public abstract class Action {
}
}
/** Waits for {@link Player.
Event
Listener#onTimelineChanged(Timeline, int)}. */
/** Waits for {@link Player.Listener#onTimelineChanged(Timeline, int)}. */
public
static
final
class
WaitForTimelineChanged
extends
Action
{
@Nullable
private
final
Timeline
expectedTimeline
;
...
...
@@ -776,8 +776,8 @@ public abstract class Action {
if
(
nextAction
==
null
)
{
return
;
}
Player
.
Event
Listener
listener
=
new
Player
.
Event
Listener
()
{
Player
.
Listener
listener
=
new
Player
.
Listener
()
{
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
@Player
.
TimelineChangeReason
int
reason
)
{
...
...
@@ -804,7 +804,7 @@ public abstract class Action {
}
/**
* Waits for {@link Player.
Event
Listener#onPositionDiscontinuity(Player.PositionInfo,
* Waits for {@link Player.Listener#onPositionDiscontinuity(Player.PositionInfo,
* Player.PositionInfo, int)}.
*/
public
static
final
class
WaitForPositionDiscontinuity
extends
Action
{
...
...
@@ -825,7 +825,7 @@ public abstract class Action {
return
;
}
player
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onPositionDiscontinuity
(
Player
.
PositionInfo
oldPosition
,
...
...
@@ -846,7 +846,7 @@ public abstract class Action {
/**
* Waits for a specified playWhenReady value, returning either immediately or after a call to
* {@link Player.
Event
Listener#onPlayWhenReadyChanged(boolean, int)}.
* {@link Player.Listener#onPlayWhenReadyChanged(boolean, int)}.
*/
public
static
final
class
WaitForPlayWhenReady
extends
Action
{
...
...
@@ -875,7 +875,7 @@ public abstract class Action {
nextAction
.
schedule
(
player
,
trackSelector
,
surface
,
handler
);
}
else
{
player
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onPlayWhenReadyChanged
(
boolean
playWhenReady
,
@Player
.
PlayWhenReadyChangeReason
int
reason
)
{
...
...
@@ -897,7 +897,7 @@ public abstract class Action {
/**
* Waits for a specified playback state, returning either immediately or after a call to {@link
* Player.
Event
Listener#onPlaybackStateChanged(int)}.
* Player.Listener#onPlaybackStateChanged(int)}.
*/
public
static
final
class
WaitForPlaybackState
extends
Action
{
...
...
@@ -926,7 +926,7 @@ public abstract class Action {
nextAction
.
schedule
(
player
,
trackSelector
,
surface
,
handler
);
}
else
{
player
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
if
(
targetPlaybackState
==
playbackState
)
{
...
...
@@ -987,7 +987,7 @@ public abstract class Action {
/**
* Waits for a specified loading state, returning either immediately or after a call to {@link
* Player.
Event
Listener#onIsLoadingChanged(boolean)}.
* Player.Listener#onIsLoadingChanged(boolean)}.
*/
public
static
final
class
WaitForIsLoading
extends
Action
{
...
...
@@ -1016,7 +1016,7 @@ public abstract class Action {
nextAction
.
schedule
(
player
,
trackSelector
,
surface
,
handler
);
}
else
{
player
.
addListener
(
new
Player
.
Event
Listener
()
{
new
Player
.
Listener
()
{
@Override
public
void
onIsLoadingChanged
(
boolean
isLoading
)
{
if
(
targetIsLoading
==
isLoading
)
{
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java
View file @
3dc6cf6b
...
...
@@ -50,7 +50,7 @@ import java.util.concurrent.CountDownLatch;
import
java.util.concurrent.TimeoutException
;
/** Helper class to run an ExoPlayer test. */
public
final
class
ExoPlayerTestRunner
implements
Player
.
Event
Listener
,
ActionSchedule
.
Callback
{
public
final
class
ExoPlayerTestRunner
implements
Player
.
Listener
,
ActionSchedule
.
Callback
{
/** A generic video {@link Format} which can be used to set up a {@link FakeMediaSource}. */
public
static
final
Format
VIDEO_FORMAT
=
...
...
@@ -82,7 +82,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
private
Object
manifest
;
private
ActionSchedule
actionSchedule
;
private
Surface
surface
;
private
Player
.
EventListener
event
Listener
;
private
Player
.
Listener
player
Listener
;
private
AnalyticsListener
analyticsListener
;
private
Integer
expectedPlayerEndedCount
;
private
boolean
pauseAtEndOfMediaItems
;
...
...
@@ -290,14 +290,14 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
}
/**
* Sets an {@link Player.
Event
Listener} to be registered to listen to player events.
* Sets an {@link Player.Listener} to be registered to listen to player events.
*
* @param
eventListener A {@link Player.EventListener} to be registered by the test runner to
*
listen
to player events.
* @param
playerListener A {@link Player.Listener} to be registered by the test runner to listen
* to player events.
* @return This builder.
*/
public
Builder
set
EventListener
(
Player
.
EventListener
event
Listener
)
{
this
.
eventListener
=
event
Listener
;
public
Builder
set
PlayerListener
(
Player
.
Listener
player
Listener
)
{
this
.
playerListener
=
player
Listener
;
return
this
;
}
...
...
@@ -349,7 +349,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
initialPositionMs
,
surface
,
actionSchedule
,
event
Listener
,
player
Listener
,
analyticsListener
,
expectedPlayerEndedCount
,
pauseAtEndOfMediaItems
);
...
...
@@ -363,7 +363,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
private
final
long
initialPositionMs
;
@Nullable
private
final
Surface
surface
;
@Nullable
private
final
ActionSchedule
actionSchedule
;
@Nullable
private
final
Player
.
EventListener
event
Listener
;
@Nullable
private
final
Player
.
Listener
player
Listener
;
@Nullable
private
final
AnalyticsListener
analyticsListener
;
private
final
Clock
clock
;
...
...
@@ -393,7 +393,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
long
initialPositionMs
,
@Nullable
Surface
surface
,
@Nullable
ActionSchedule
actionSchedule
,
@Nullable
Player
.
EventListener
event
Listener
,
@Nullable
Player
.
Listener
player
Listener
,
@Nullable
AnalyticsListener
analyticsListener
,
int
expectedPlayerEndedCount
,
boolean
pauseAtEndOfMediaItems
)
{
...
...
@@ -404,7 +404,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
this
.
initialPositionMs
=
initialPositionMs
;
this
.
surface
=
surface
;
this
.
actionSchedule
=
actionSchedule
;
this
.
eventListener
=
event
Listener
;
this
.
playerListener
=
player
Listener
;
this
.
analyticsListener
=
analyticsListener
;
this
.
clock
=
playerBuilder
.
getClock
();
timelines
=
new
ArrayList
<>();
...
...
@@ -454,8 +454,8 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
player
.
setPauseAtEndOfMediaItems
(
true
);
}
player
.
addListener
(
ExoPlayerTestRunner
.
this
);
if
(
event
Listener
!=
null
)
{
player
.
addListener
(
event
Listener
);
if
(
player
Listener
!=
null
)
{
player
.
addListener
(
player
Listener
);
}
if
(
analyticsListener
!=
null
)
{
player
.
addAnalyticsListener
(
analyticsListener
);
...
...
@@ -530,8 +530,8 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
// Assertions called on the test thread after test finished.
/**
* Asserts that the timelines reported by {@link Player.
EventListener#onTimelineChanged(Timeline,
*
int)}
are the same to the provided timelines. This assert differs from testing equality by not
* Asserts that the timelines reported by {@link Player.
Listener#onTimelineChanged(Timeline, int)}
* are the same to the provided timelines. This assert differs from testing equality by not
* comparing period ids which may be different due to id mapping of child source period ids.
*
* @param timelines A list of expected {@link Timeline}s.
...
...
@@ -546,8 +546,8 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/**
* Asserts that the timeline change reasons reported by {@link
* Player.
EventListener#onTimelineChanged(Timeline, int)} are equal to the provided timelin
e
*
change
reasons.
* Player.
Listener#onTimelineChanged(Timeline, int)} are equal to the provided timeline chang
e
* reasons.
*/
public
void
assertTimelineChangeReasonsEqual
(
Integer
...
reasons
)
{
assertThat
(
timelineChangeReasons
).
containsExactlyElementsIn
(
Arrays
.
asList
(
reasons
)).
inOrder
();
...
...
@@ -555,7 +555,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/**
* Asserts that the media items reported by {@link
* Player.
Event
Listener#onMediaItemTransition(MediaItem, int)} are the same as the provided media
* Player.Listener#onMediaItemTransition(MediaItem, int)} are the same as the provided media
* items.
*
* @param mediaItems A list of expected {@link MediaItem media items}.
...
...
@@ -566,8 +566,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/**
* Asserts that the media item transition reasons reported by {@link
* Player.EventListener#onMediaItemTransition(MediaItem, int)} are the same as the provided
* reasons.
* Player.Listener#onMediaItemTransition(MediaItem, int)} are the same as the provided reasons.
*
* @param reasons A list of expected transition reasons.
*/
...
...
@@ -577,7 +576,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/**
* Asserts that the playback states reported by {@link
* Player.
Event
Listener#onPlaybackStateChanged(int)} are equal to the provided playback states.
* Player.Listener#onPlaybackStateChanged(int)} are equal to the provided playback states.
*/
public
void
assertPlaybackStatesEqual
(
Integer
...
states
)
{
assertThat
(
playbackStates
).
containsExactlyElementsIn
(
states
).
inOrder
();
...
...
@@ -585,8 +584,8 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/**
* Asserts that the last track group array reported by {@link
* Player.
EventListener#onTracksChanged(TrackGroupArray, TrackSelectionArray)} is equal to the
*
provided
track group array.
* Player.
Listener#onTracksChanged(TrackGroupArray, TrackSelectionArray)} is equal to the provided
* track group array.
*
* @param trackGroupArray The expected {@link TrackGroupArray}.
*/
...
...
@@ -595,7 +594,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
}
/**
* Asserts that {@link Player.
Event
Listener#onPositionDiscontinuity(Player.PositionInfo,
* Asserts that {@link Player.Listener#onPositionDiscontinuity(Player.PositionInfo,
* Player.PositionInfo, int)} was not called.
*/
public
void
assertNoPositionDiscontinuities
()
{
...
...
@@ -604,8 +603,8 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/**
* Asserts that the discontinuity reasons reported by {@link
* Player.
EventListener#onPositionDiscontinuity(Player.PositionInfo, Player.PositionInfo, int)}
*
are
equal to the provided values.
* Player.
Listener#onPositionDiscontinuity(Player.PositionInfo, Player.PositionInfo, int)} are
* equal to the provided values.
*
* @param discontinuityReasons The expected discontinuity reasons.
*/
...
...
@@ -657,7 +656,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
}
}
// Player.
Event
Listener
// Player.Listener
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
@Player
.
TimelineChangeReason
int
reason
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment