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
45b0c981
authored
Feb 23, 2021
by
bachinger
Committed by
marcbaechinger
Feb 23, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Make media session extension depend on common module only
PiperOrigin-RevId: 359001281
parent
95fcfdd7
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
35 deletions
RELEASENOTES.md
extensions/mediasession/build.gradle
extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/TimelineQueueEditor.java
RELEASENOTES.md
View file @
45b0c981
...
...
@@ -46,6 +46,9 @@
(
[
#8581
](
https://github.com/google/ExoPlayer/issues/8581
)
).
*
FFmpeg extension: Update to use NDK r22
(
[
#8581
](
https://github.com/google/ExoPlayer/issues/8581
)
).
*
MediaSession extension: Remove dependency to core module and rely on common
only. The
`TimelineQueueEditor`
uses a new
`MediaDescriptionConverter`
for
this purpose and does not rely on the
`ConcatenatingMediaSource`
anymore.
### 2.13.1 (2021-02-12)
...
...
extensions/mediasession/build.gradle
View file @
45b0c981
...
...
@@ -14,7 +14,7 @@
apply
from:
"$gradle.ext.exoplayerSettingsDir/common_library_config.gradle"
dependencies
{
implementation
project
(
modulePrefix
+
'library-co
re
'
)
implementation
project
(
modulePrefix
+
'library-co
mmon
'
)
api
'androidx.media:media:'
+
androidxMediaVersion
compileOnly
'org.checkerframework:checker-qual:'
+
checkerframeworkVersion
compileOnly
'org.jetbrains.kotlin:kotlin-annotations-jvm:'
+
kotlinAnnotationsVersion
...
...
extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/TimelineQueueEditor.java
View file @
45b0c981
...
...
@@ -23,15 +23,13 @@ import android.support.v4.media.session.MediaSessionCompat;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.ControlDispatcher
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.source.ConcatenatingMediaSource
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.util.Util
;
import
java.util.List
;
/**
* A {@link MediaSessionConnector.QueueEditor} implementation based on the {@link
* ConcatenatingMediaSource}.
* A {@link MediaSessionConnector.QueueEditor} implementation.
*
* <p>This class implements the {@link MediaSessionConnector.CommandReceiver} interface and handles
* the {@link #COMMAND_MOVE_QUEUE_ITEM} to move a queue item instead of removing and inserting it.
...
...
@@ -44,18 +42,17 @@ public final class TimelineQueueEditor
public
static
final
String
EXTRA_FROM_INDEX
=
"from_index"
;
public
static
final
String
EXTRA_TO_INDEX
=
"to_index"
;
/**
* Factory to create {@link MediaSource}s.
*/
public
interface
MediaSourceFactory
{
/** Converts a {@link MediaDescriptionCompat} to a {@link MediaItem}. */
public
interface
MediaDescriptionConverter
{
/**
* Creates a {@link MediaSource} for the given {@link MediaDescriptionCompat}.
* Returns a {@link MediaItem} for the given {@link MediaDescriptionCompat} or null if the
* description can't be converted.
*
* @param description The {@link MediaDescriptionCompat} to create a media source for.
* @return A {@link MediaSource} or {@code null} if no source can be created for the given
* description.
* <p>If not null, the media item that is returned will be used to call {@link
* Player#addMediaItem(MediaItem)}.
*/
@Nullable
MediaSource
createMediaSource
(
MediaDescriptionCompat
description
);
@Nullable
MediaItem
convert
(
MediaDescriptionCompat
description
);
}
/**
...
...
@@ -110,51 +107,46 @@ public final class TimelineQueueEditor
public
boolean
equals
(
MediaDescriptionCompat
d1
,
MediaDescriptionCompat
d2
)
{
return
Util
.
areEqual
(
d1
.
getMediaId
(),
d2
.
getMediaId
());
}
}
private
final
MediaControllerCompat
mediaController
;
private
final
QueueDataAdapter
queueDataAdapter
;
private
final
Media
SourceFactory
sourceFactory
;
private
final
Media
DescriptionConverter
mediaDescriptionConverter
;
private
final
MediaDescriptionEqualityChecker
equalityChecker
;
private
final
ConcatenatingMediaSource
queueMediaSource
;
/**
* Creates a new {@link TimelineQueueEditor} with a given mediaSourceFactory.
*
* @param mediaController A {@link MediaControllerCompat} to read the current queue.
* @param queueMediaSource The {@link ConcatenatingMediaSource} to manipulate.
* @param queueDataAdapter A {@link QueueDataAdapter} to change the backing data.
* @param sourceFactory The {@link MediaSourceFactory} to build media sources.
* @param mediaDescriptionConverter The {@link MediaDescriptionConverter} for converting media
* descriptions to {@link MediaItem MediaItems}.
*/
public
TimelineQueueEditor
(
MediaControllerCompat
mediaController
,
ConcatenatingMediaSource
queueMediaSource
,
QueueDataAdapter
queueDataAdapter
,
Media
SourceFactory
sourceFactory
)
{
this
(
mediaController
,
queueMediaSource
,
queueDataAdapter
,
sourceFactory
,
new
MediaIdEqualityChecker
());
Media
DescriptionConverter
mediaDescriptionConverter
)
{
this
(
mediaController
,
queueDataAdapter
,
mediaDescriptionConverter
,
new
MediaIdEqualityChecker
());
}
/**
* Creates a new {@link TimelineQueueEditor} with a given mediaSourceFactory.
*
* @param mediaController A {@link MediaControllerCompat} to read the current queue.
* @param queueMediaSource The {@link ConcatenatingMediaSource} to manipulate.
* @param queueDataAdapter A {@link QueueDataAdapter} to change the backing data.
* @param sourceFactory The {@link MediaSourceFactory} to build media sources.
* @param mediaDescriptionConverter The {@link MediaDescriptionConverter} for converting media
* descriptions to {@link MediaItem MediaItems}.
* @param equalityChecker The {@link MediaDescriptionEqualityChecker} to match queue items.
*/
public
TimelineQueueEditor
(
MediaControllerCompat
mediaController
,
ConcatenatingMediaSource
queueMediaSource
,
QueueDataAdapter
queueDataAdapter
,
Media
SourceFactory
sourceFactory
,
Media
DescriptionConverter
mediaDescriptionConverter
,
MediaDescriptionEqualityChecker
equalityChecker
)
{
this
.
mediaController
=
mediaController
;
this
.
queueMediaSource
=
queueMediaSource
;
this
.
queueDataAdapter
=
queueDataAdapter
;
this
.
sourceFactory
=
sourceFactory
;
this
.
mediaDescriptionConverter
=
mediaDescriptionConverter
;
this
.
equalityChecker
=
equalityChecker
;
}
...
...
@@ -165,10 +157,10 @@ public final class TimelineQueueEditor
@Override
public
void
onAddQueueItem
(
Player
player
,
MediaDescriptionCompat
description
,
int
index
)
{
@Nullable
Media
Source
mediaSource
=
sourceFactory
.
createMediaSource
(
description
);
if
(
media
Source
!=
null
)
{
@Nullable
Media
Item
mediaItem
=
mediaDescriptionConverter
.
convert
(
description
);
if
(
media
Item
!=
null
)
{
queueDataAdapter
.
add
(
index
,
description
);
queueMediaSource
.
addMediaSource
(
index
,
mediaSource
);
player
.
addMediaItem
(
index
,
mediaItem
);
}
}
...
...
@@ -178,7 +170,7 @@ public final class TimelineQueueEditor
for
(
int
i
=
0
;
i
<
queue
.
size
();
i
++)
{
if
(
equalityChecker
.
equals
(
queue
.
get
(
i
).
getDescription
(),
description
))
{
queueDataAdapter
.
remove
(
i
);
queueMediaSource
.
removeMediaSource
(
i
);
player
.
removeMediaItem
(
i
);
return
;
}
}
...
...
@@ -200,9 +192,8 @@ public final class TimelineQueueEditor
int
to
=
extras
.
getInt
(
EXTRA_TO_INDEX
,
C
.
INDEX_UNSET
);
if
(
from
!=
C
.
INDEX_UNSET
&&
to
!=
C
.
INDEX_UNSET
)
{
queueDataAdapter
.
move
(
from
,
to
);
queueMediaSource
.
moveMediaSource
(
from
,
to
);
player
.
moveMediaItem
(
from
,
to
);
}
return
true
;
}
}
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