From b30b7863503cc739c4acf9d1840f29bf460c21c2 Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 14 Nov 2017 06:17:02 -0800 Subject: [PATCH] Avoid track group array error-prone reference quality check in CastPlayer. Also replaced the duplicated EMPTY track group array with the one already defined in TrackGroupArray. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=175670266 --- .../google/android/exoplayer2/ext/cast/CastPlayer.java | 7 +++---- .../android/exoplayer2/source/TrackGroupArray.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java index ffb06ed232..9a8986409a 100644 --- a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java +++ b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java @@ -86,7 +86,6 @@ public final class CastPlayer implements Player { private static final int RENDERER_INDEX_AUDIO = 1; private static final int RENDERER_INDEX_TEXT = 2; private static final long PROGRESS_REPORT_PERIOD_MS = 1000; - private static final TrackGroupArray EMPTY_TRACK_GROUP_ARRAY = new TrackGroupArray(); private static final TrackSelectionArray EMPTY_TRACK_SELECTION_ARRAY = new TrackSelectionArray(null, null, null); private static final long[] EMPTY_TRACK_ID_ARRAY = new long[0]; @@ -137,7 +136,7 @@ public final class CastPlayer implements Player { playbackState = STATE_IDLE; repeatMode = REPEAT_MODE_OFF; currentTimeline = CastTimeline.EMPTY_CAST_TIMELINE; - currentTrackGroups = EMPTY_TRACK_GROUP_ARRAY; + currentTrackGroups = TrackGroupArray.EMPTY; currentTrackSelection = EMPTY_TRACK_SELECTION_ARRAY; pendingSeekWindowIndex = C.INDEX_UNSET; pendingSeekPositionMs = C.TIME_UNSET; @@ -596,8 +595,8 @@ public final class CastPlayer implements Player { MediaInfo mediaInfo = mediaStatus != null ? mediaStatus.getMediaInfo() : null; List castMediaTracks = mediaInfo != null ? mediaInfo.getMediaTracks() : null; if (castMediaTracks == null || castMediaTracks.isEmpty()) { - boolean hasChanged = currentTrackGroups != EMPTY_TRACK_GROUP_ARRAY; - currentTrackGroups = EMPTY_TRACK_GROUP_ARRAY; + boolean hasChanged = !currentTrackGroups.isEmpty(); + currentTrackGroups = TrackGroupArray.EMPTY; currentTrackSelection = EMPTY_TRACK_SELECTION_ARRAY; return hasChanged; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/TrackGroupArray.java b/library/core/src/main/java/com/google/android/exoplayer2/source/TrackGroupArray.java index 394cec891b..fb28da581c 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/TrackGroupArray.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/TrackGroupArray.java @@ -62,8 +62,11 @@ public final class TrackGroupArray { * @param group The group. * @return The index of the group, or {@link C#INDEX_UNSET} if no such group exists. */ + @SuppressWarnings("ReferenceEquality") public int indexOf(TrackGroup group) { for (int i = 0; i < length; i++) { + // Suppressed reference equality warning because this is looking for the index of a specific + // TrackGroup object, not the index of a potential equal TrackGroup. if (trackGroups[i] == group) { return i; } @@ -71,6 +74,13 @@ public final class TrackGroupArray { return C.INDEX_UNSET; } + /** + * Returns whether this track group array is empty. + */ + public boolean isEmpty() { + return length == 0; + } + @Override public int hashCode() { if (hashCode == 0) {