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
46aab922
authored
Mar 15, 2021
by
kimvde
Committed by
Oliver Woodman
Mar 15, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add permanently available commands
PiperOrigin-RevId: 362906290
parent
10de7b2a
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
85 additions
and
25 deletions
extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
library/common/src/main/java/com/google/android/exoplayer2/BasePlayer.java
library/common/src/main/java/com/google/android/exoplayer2/Player.java
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java
View file @
46aab922
...
...
@@ -19,6 +19,7 @@ import static java.lang.Math.min;
import
android.os.Looper
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.VisibleForTesting
;
import
com.google.android.exoplayer2.BasePlayer
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
...
...
@@ -73,6 +74,18 @@ public final class CastPlayer extends BasePlayer {
ExoPlayerLibraryInfo
.
registerModule
(
"goog.exo.cast"
);
}
@VisibleForTesting
/* package */
static
final
int
[]
PERMANENT_AVAILABLE_COMMANDS
=
new
int
[]
{
COMMAND_PLAY_PAUSE
,
COMMAND_PREPARE_STOP_RELEASE
,
COMMAND_SET_REPEAT_MODE
,
COMMAND_GET_CURRENT_MEDIA_ITEM
,
COMMAND_GET_MEDIA_ITEMS
,
COMMAND_GET_MEDIA_ITEMS_METADATA
,
COMMAND_CHANGE_MEDIA_ITEMS
};
private
static
final
String
TAG
=
"CastPlayer"
;
private
static
final
int
RENDERER_COUNT
=
3
;
...
...
@@ -795,7 +808,7 @@ public final class CastPlayer extends BasePlayer {
private
void
updateAvailableCommandsAndNotifyIfChanged
()
{
Commands
previousAvailableCommands
=
availableCommands
;
availableCommands
=
getAvailableCommands
();
availableCommands
=
getAvailableCommands
(
PERMANENT_AVAILABLE_COMMANDS
);
if
(!
availableCommands
.
equals
(
previousAvailableCommands
))
{
listeners
.
queueEvent
(
Player
.
EVENT_AVAILABLE_COMMANDS_CHANGED
,
...
...
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
View file @
46aab922
...
...
@@ -15,10 +15,17 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
ext
.
cast
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_CHANGE_MEDIA_ITEMS
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_GET_CURRENT_MEDIA_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_GET_MEDIA_ITEMS
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_GET_MEDIA_ITEMS_METADATA
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_PLAY_PAUSE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_PREPARE_STOP_RELEASE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SET_REPEAT_MODE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SET_SHUFFLE_MODE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SET_SPEED_AND_PITCH
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyInt
;
...
...
@@ -590,14 +597,17 @@ public class CastPlayerTest {
castPlayer
.
addMediaItems
(
mediaItems
);
updateTimeLine
(
mediaItems
,
mediaQueueItemIds
,
/* currentItemId= */
1
);
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
)).
isFalse
();
}
@Test
public
void
isCommandAvailable_containsPermanentCommands
()
{
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_PLAY_PAUSE
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_PREPARE_STOP_RELEASE
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
)).
isFalse
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SET_SPEED_AND_PITCH
)).
isFalse
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SET_SHUFFLE_MODE
)).
isFalse
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_SET_REPEAT_MODE
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_GET_CURRENT_MEDIA_ITEM
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_GET_MEDIA_ITEMS
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_GET_MEDIA_ITEMS_METADATA
)).
isTrue
();
assertThat
(
castPlayer
.
isCommandAvailable
(
COMMAND_CHANGE_MEDIA_ITEMS
)).
isTrue
();
}
@Test
...
...
@@ -923,7 +933,7 @@ public class CastPlayerTest {
private
static
Player
.
Commands
createCommands
(
@Player
.
Command
int
...
commands
)
{
Player
.
Commands
.
Builder
builder
=
new
Player
.
Commands
.
Builder
();
builder
.
addAll
(
C
OMMAND_PLAY_PAUSE
,
COMMAND_PREPARE_STOP_RELEASE
);
builder
.
addAll
(
C
astPlayer
.
PERMANENT_AVAILABLE_COMMANDS
);
for
(
int
command
:
commands
)
{
builder
.
add
(
command
);
}
...
...
library/common/src/main/java/com/google/android/exoplayer2/BasePlayer.java
View file @
46aab922
...
...
@@ -24,9 +24,6 @@ import java.util.List;
/** Abstract base {@link Player} which implements common implementation independent methods. */
public
abstract
class
BasePlayer
implements
Player
{
protected
static
final
int
[]
PERMANENT_AVAILABLE_COMMANDS
=
new
int
[]
{
COMMAND_PLAY_PAUSE
,
COMMAND_PREPARE_STOP_RELEASE
};
protected
final
Timeline
.
Window
window
;
public
BasePlayer
()
{
...
...
@@ -323,9 +320,9 @@ public abstract class BasePlayer implements Player {
return
repeatMode
==
REPEAT_MODE_ONE
?
REPEAT_MODE_OFF
:
repeatMode
;
}
protected
Commands
getAvailableCommands
()
{
protected
Commands
getAvailableCommands
(
@Command
int
[]
permanentAvailableCommands
)
{
return
new
Commands
.
Builder
()
.
addAll
(
PERMANENT_AVAILABLE_COMMANDS
)
.
addAll
(
permanentAvailableCommands
)
.
addIf
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
,
hasNext
()
&&
!
isPlayingAd
())
.
addIf
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
,
hasPrevious
()
&&
!
isPlayingAd
())
.
build
();
...
...
library/common/src/main/java/com/google/android/exoplayer2/Player.java
View file @
46aab922
...
...
@@ -1029,8 +1029,11 @@ public interface Player {
/**
* Commands that can be executed on a {@code Player}. One of {@link #COMMAND_PLAY_PAUSE}, {@link
* #COMMAND_PREPARE_STOP_RELEASE}, {@link #COMMAND_SEEK_TO_NEXT_MEDIA_ITEM} or {@link
* #COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM}.
* #COMMAND_PREPARE_STOP_RELEASE}, {@link #COMMAND_SEEK_TO_NEXT_MEDIA_ITEM}, {@link
* #COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM}, {@link #COMMAND_SET_SPEED_AND_PITCH}, {@link
* #COMMAND_SET_SHUFFLE_MODE}, {@link #COMMAND_SET_REPEAT_MODE}, {@link
* #COMMAND_GET_CURRENT_MEDIA_ITEM}, {@link #COMMAND_GET_MEDIA_ITEMS}, {@link
* #COMMAND_GET_MEDIA_ITEMS_METADATA} or {@link #COMMAND_CHANGE_MEDIA_ITEMS}.
*/
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
...
...
@@ -1049,6 +1052,20 @@ public interface Player {
int
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
=
3
;
/** Command to seek to the previous {@link MediaItem} in the playlist. */
int
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
=
4
;
/** Command to set the playback speed and pitch. */
int
COMMAND_SET_SPEED_AND_PITCH
=
5
;
/** Command to enable shuffling. */
int
COMMAND_SET_SHUFFLE_MODE
=
6
;
/** Command to set the repeat mode. */
int
COMMAND_SET_REPEAT_MODE
=
7
;
/** Command to get the current {@link MediaItem}. */
int
COMMAND_GET_CURRENT_MEDIA_ITEM
=
8
;
/** Command to get the {@link MediaItem MediaItems} in the playlist. */
int
COMMAND_GET_MEDIA_ITEMS
=
9
;
/** Command to get the {@link MediaItem MediaItems} metadata. */
int
COMMAND_GET_MEDIA_ITEMS_METADATA
=
10
;
/** Command to change the {@link MediaItem MediaItems} in the playlist. */
int
COMMAND_CHANGE_MEDIA_ITEMS
=
11
;
/** Returns the component of this player for audio output, or null if audio is not supported. */
@Nullable
...
...
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java
View file @
46aab922
...
...
@@ -26,6 +26,7 @@ import android.os.Handler;
import
android.os.Looper
;
import
android.util.Pair
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.VisibleForTesting
;
import
com.google.android.exoplayer2.PlayerMessage.Target
;
import
com.google.android.exoplayer2.analytics.AnalyticsCollector
;
import
com.google.android.exoplayer2.metadata.Metadata
;
...
...
@@ -56,6 +57,20 @@ import java.util.concurrent.CopyOnWriteArraySet;
*/
/* package */
final
class
ExoPlayerImpl
extends
BasePlayer
implements
ExoPlayer
{
@VisibleForTesting
/* package */
static
final
int
[]
PERMANENT_AVAILABLE_COMMANDS
=
new
int
[]
{
COMMAND_PLAY_PAUSE
,
COMMAND_PREPARE_STOP_RELEASE
,
COMMAND_SET_SPEED_AND_PITCH
,
COMMAND_SET_SHUFFLE_MODE
,
COMMAND_SET_REPEAT_MODE
,
COMMAND_GET_CURRENT_MEDIA_ITEM
,
COMMAND_GET_MEDIA_ITEMS
,
COMMAND_GET_MEDIA_ITEMS_METADATA
,
COMMAND_CHANGE_MEDIA_ITEMS
};
private
static
final
String
TAG
=
"ExoPlayerImpl"
;
/**
...
...
@@ -1176,7 +1191,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
private
void
updateAvailableCommands
()
{
Commands
previousAvailableCommands
=
availableCommands
;
availableCommands
=
getAvailableCommands
();
availableCommands
=
getAvailableCommands
(
PERMANENT_AVAILABLE_COMMANDS
);
if
(!
availableCommands
.
equals
(
previousAvailableCommands
))
{
listeners
.
queueEvent
(
Player
.
EVENT_AVAILABLE_COMMANDS_CHANGED
,
...
...
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
View file @
46aab922
...
...
@@ -15,10 +15,17 @@
*/
package
com
.
google
.
android
.
exoplayer2
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_CHANGE_MEDIA_ITEMS
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_GET_CURRENT_MEDIA_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_GET_MEDIA_ITEMS
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_GET_MEDIA_ITEMS_METADATA
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_PLAY_PAUSE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_PREPARE_STOP_RELEASE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SET_REPEAT_MODE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SET_SHUFFLE_MODE
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
COMMAND_SET_SPEED_AND_PITCH
;
import
static
com
.
google
.
android
.
exoplayer2
.
robolectric
.
RobolectricUtil
.
runMainLooperUntil
;
import
static
com
.
google
.
android
.
exoplayer2
.
robolectric
.
TestPlayerRunHelper
.
playUntilStartOfWindow
;
import
static
com
.
google
.
android
.
exoplayer2
.
robolectric
.
TestPlayerRunHelper
.
runUntilPendingCommandsAreFullyHandled
;
...
...
@@ -8078,16 +8085,17 @@ public final class ExoPlayerTest {
player
.
addMediaSources
(
ImmutableList
.
of
(
new
FakeMediaSource
(),
new
FakeMediaSource
()));
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
)).
isFalse
();
}
@Test
public
void
isCommandAvailable_containsPermanentCommands
()
{
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
build
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_PLAY_PAUSE
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_PREPARE_STOP_RELEASE
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
)).
isFalse
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SET_SPEED_AND_PITCH
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SET_SHUFFLE_MODE
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_SET_REPEAT_MODE
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_GET_CURRENT_MEDIA_ITEM
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_GET_MEDIA_ITEMS
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_GET_MEDIA_ITEMS_METADATA
)).
isTrue
();
assertThat
(
player
.
isCommandAvailable
(
COMMAND_CHANGE_MEDIA_ITEMS
)).
isTrue
();
}
@Test
...
...
@@ -9326,7 +9334,7 @@ public final class ExoPlayerTest {
private
static
Player
.
Commands
createCommands
(
@Player
.
Command
int
...
commands
)
{
Player
.
Commands
.
Builder
builder
=
new
Player
.
Commands
.
Builder
();
builder
.
addAll
(
COMMAND_PLAY_PAUSE
,
COMMAND_PREPARE_STOP_RELEASE
);
builder
.
addAll
(
ExoPlayerImpl
.
PERMANENT_AVAILABLE_COMMANDS
);
for
(
int
command
:
commands
)
{
builder
.
add
(
command
);
}
...
...
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