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
58e01671
authored
Nov 24, 2020
by
bachinger
Committed by
Andrew Lewis
Nov 27, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Use onEvents in MediaSessionConnector to avoid multiple updates.
#exofixit PiperOrigin-RevId: 344065556
parent
c17d1091
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
56 deletions
extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java
extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java
View file @
58e01671
...
...
@@ -15,6 +15,13 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
ext
.
mediasession
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
EVENT_IS_PLAYING_CHANGED
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
EVENT_PLAYBACK_PARAMETERS_CHANGED
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
EVENT_PLAYBACK_STATE_CHANGED
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
EVENT_PLAY_WHEN_READY_CHANGED
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
EVENT_REPEAT_MODE_CHANGED
;
import
static
com
.
google
.
android
.
exoplayer2
.
Player
.
EVENT_SHUFFLE_MODE_ENABLED_CHANGED
;
import
android.content.Intent
;
import
android.graphics.Bitmap
;
import
android.net.Uri
;
...
...
@@ -38,7 +45,6 @@ import com.google.android.exoplayer2.ControlDispatcher;
import
com.google.android.exoplayer2.DefaultControlDispatcher
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.ExoPlayerLibraryInfo
;
import
com.google.android.exoplayer2.PlaybackParameters
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.util.Assertions
;
...
...
@@ -1074,69 +1080,59 @@ public final class MediaSessionConnector {
// Player.EventListener implementation.
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
@Player
.
TimelineChangeReason
int
reason
)
{
Player
player
=
Assertions
.
checkNotNull
(
MediaSessionConnector
.
this
.
player
);
int
windowCount
=
player
.
getCurrentTimeline
().
getWindowCount
();
int
windowIndex
=
player
.
getCurrentWindowIndex
();
if
(
queueNavigator
!=
null
)
{
queueNavigator
.
onTimelineChanged
(
player
);
invalidateMediaSessionPlaybackState
();
}
else
if
(
currentWindowCount
!=
windowCount
||
currentWindowIndex
!=
windowIndex
)
{
// active queue item and queue navigation actions may need to be updated
invalidateMediaSessionPlaybackState
();
public
void
onEvents
(
Player
player
,
Player
.
Events
events
)
{
boolean
invalidatePlaybackState
=
false
;
boolean
invalidateMetadata
=
false
;
if
(
events
.
contains
(
Player
.
EVENT_POSITION_DISCONTINUITY
))
{
if
(
currentWindowIndex
!=
player
.
getCurrentWindowIndex
())
{
if
(
queueNavigator
!=
null
)
{
queueNavigator
.
onCurrentWindowIndexChanged
(
player
);
}
invalidateMetadata
=
true
;
}
invalidatePlaybackState
=
true
;
}
currentWindowCount
=
windowCount
;
currentWindowIndex
=
windowIndex
;
invalidateMediaSessionMetadata
();
}
@Override
public
void
onPlaybackStateChanged
(
@Player
.
State
int
playbackState
)
{
invalidateMediaSessionPlaybackState
();
}
@Override
public
void
onPlayWhenReadyChanged
(
boolean
playWhenReady
,
@Player
.
PlayWhenReadyChangeReason
int
reason
)
{
invalidateMediaSessionPlaybackState
();
}
@Override
public
void
onIsPlayingChanged
(
boolean
isPlaying
)
{
invalidateMediaSessionPlaybackState
();
}
if
(
events
.
contains
(
Player
.
EVENT_TIMELINE_CHANGED
))
{
int
windowCount
=
player
.
getCurrentTimeline
().
getWindowCount
();
int
windowIndex
=
player
.
getCurrentWindowIndex
();
if
(
queueNavigator
!=
null
)
{
queueNavigator
.
onTimelineChanged
(
player
);
invalidatePlaybackState
=
true
;
}
else
if
(
currentWindowCount
!=
windowCount
||
currentWindowIndex
!=
windowIndex
)
{
// active queue item and queue navigation actions may need to be updated
invalidatePlaybackState
=
true
;
}
currentWindowCount
=
windowCount
;
invalidateMetadata
=
true
;
}
@Override
public
void
onRepeatModeChanged
(
@Player
.
RepeatMode
int
repeatMode
)
{
invalidateMediaSessionPlaybackState
();
}
// Update currentWindowIndex after comparisons above.
currentWindowIndex
=
player
.
getCurrentWindowIndex
();
@Override
public
void
onShuffleModeEnabledChanged
(
boolean
shuffleModeEnabled
)
{
invalidateMediaSessionPlaybackState
();
invalidateMediaSessionQueue
();
}
if
(
events
.
containsAny
(
EVENT_PLAYBACK_STATE_CHANGED
,
EVENT_PLAY_WHEN_READY_CHANGED
,
EVENT_IS_PLAYING_CHANGED
,
EVENT_REPEAT_MODE_CHANGED
,
EVENT_PLAYBACK_PARAMETERS_CHANGED
))
{
invalidatePlaybackState
=
true
;
}
@Override
public
void
onPositionDiscontinuity
(
@Player
.
DiscontinuityReason
int
reason
)
{
Player
player
=
Assertions
.
checkNotNull
(
MediaSessionConnector
.
this
.
player
);
if
(
currentWindowIndex
!=
player
.
getCurrentWindowIndex
())
{
if
(
queueNavigator
!=
null
)
{
queueNavigator
.
onCurrentWindowIndexChanged
(
player
);
}
currentWindowIndex
=
player
.
getCurrentWindowIndex
();
// Update playback state after queueNavigator.onCurrentWindowIndexChanged has been called
// and before updating metadata.
// The queue needs to be updated by the queue navigator first. The queue navigator also
// delivers the active queue item that is used to update the playback state.
if
(
events
.
containsAny
(
EVENT_SHUFFLE_MODE_ENABLED_CHANGED
))
{
invalidateMediaSessionQueue
();
invalidatePlaybackState
=
true
;
}
// Invalidate the playback state before invalidating metadata because the active queue item of
// the session playback state needs to be updated before the MediaMetadataProvider uses it.
if
(
invalidatePlaybackState
)
{
invalidateMediaSessionPlaybackState
();
}
if
(
invalidateMetadata
)
{
invalidateMediaSessionMetadata
();
return
;
}
invalidateMediaSessionPlaybackState
();
}
@Override
public
void
onPlaybackParametersChanged
(
PlaybackParameters
playbackParameters
)
{
invalidateMediaSessionPlaybackState
();
}
// MediaSessionCompat.Callback implementation.
...
...
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