Fix detection of current window index in CastPlayer

Issue:#5955
PiperOrigin-RevId: 251616118
This commit is contained in:
aquilescanta 2019-06-05 12:14:14 +01:00 committed by Oliver Woodman
parent e4feaa68f2
commit 8bd2b5b3d7
2 changed files with 13 additions and 12 deletions

View file

@ -55,6 +55,8 @@
* Fix bug caused by parallel adaptive track selection using `Format`s without * Fix bug caused by parallel adaptive track selection using `Format`s without
bitrate information bitrate information
([#5971](https://github.com/google/ExoPlayer/issues/5971)). ([#5971](https://github.com/google/ExoPlayer/issues/5971)).
* Fix bug in `CastPlayer.getCurrentWindowIndex()`
([#5955](https://github.com/google/ExoPlayer/issues/5955)).
### 2.10.1 ### ### 2.10.1 ###

View file

@ -552,7 +552,17 @@ public final class CastPlayer extends BasePlayer {
notificationsBatch.add( notificationsBatch.add(
new ListenerNotificationTask(listener -> listener.onRepeatModeChanged(this.repeatMode))); new ListenerNotificationTask(listener -> listener.onRepeatModeChanged(this.repeatMode)));
} }
int currentWindowIndex = fetchCurrentWindowIndex(getMediaStatus()); maybeUpdateTimelineAndNotify();
int currentWindowIndex = C.INDEX_UNSET;
MediaQueueItem currentItem = remoteMediaClient.getCurrentItem();
if (currentItem != null) {
currentWindowIndex = currentTimeline.getIndexOfPeriod(currentItem.getItemId());
}
if (currentWindowIndex == C.INDEX_UNSET) {
// The timeline is empty. Fall back to index 0, which is what ExoPlayer would do.
currentWindowIndex = 0;
}
if (this.currentWindowIndex != currentWindowIndex && pendingSeekCount == 0) { if (this.currentWindowIndex != currentWindowIndex && pendingSeekCount == 0) {
this.currentWindowIndex = currentWindowIndex; this.currentWindowIndex = currentWindowIndex;
notificationsBatch.add( notificationsBatch.add(
@ -565,7 +575,6 @@ public final class CastPlayer extends BasePlayer {
new ListenerNotificationTask( new ListenerNotificationTask(
listener -> listener.onTracksChanged(currentTrackGroups, currentTrackSelection))); listener -> listener.onTracksChanged(currentTrackGroups, currentTrackSelection)));
} }
maybeUpdateTimelineAndNotify();
flushNotifications(); flushNotifications();
} }
@ -715,16 +724,6 @@ public final class CastPlayer extends BasePlayer {
} }
} }
/**
* Retrieves the current item index from {@code mediaStatus} and maps it into a window index. If
* there is no media session, returns 0.
*/
private static int fetchCurrentWindowIndex(@Nullable MediaStatus mediaStatus) {
Integer currentItemId = mediaStatus != null
? mediaStatus.getIndexById(mediaStatus.getCurrentItemId()) : null;
return currentItemId != null ? currentItemId : 0;
}
private static boolean isTrackActive(long id, long[] activeTrackIds) { private static boolean isTrackActive(long id, long[] activeTrackIds) {
for (long activeTrackId : activeTrackIds) { for (long activeTrackId : activeTrackIds) {
if (activeTrackId == id) { if (activeTrackId == id) {