Make SelectionOverride parcelable

Issue: #3915

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=193494016
This commit is contained in:
olly 2018-04-19 04:05:34 -07:00 committed by Oliver Woodman
parent 5fe0b0a13b
commit cdb13dd548
2 changed files with 73 additions and 1 deletions

View file

@ -37,6 +37,7 @@ import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@ -630,7 +631,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
}
/** A track selection override. */
public static class SelectionOverride {
public static final class SelectionOverride implements Parcelable {
public final int groupIndex;
public final int[] tracks;
@ -646,6 +647,13 @@ public class DefaultTrackSelector extends MappingTrackSelector {
this.length = tracks.length;
}
/* package */ SelectionOverride(Parcel in) {
groupIndex = in.readInt();
length = in.readByte();
tracks = new int[length];
in.readIntArray(tracks);
}
/** Returns whether this override contains the specified track index. */
public boolean containsTrack(int track) {
for (int overrideTrack : tracks) {
@ -655,6 +663,51 @@ public class DefaultTrackSelector extends MappingTrackSelector {
}
return false;
}
@Override
public int hashCode() {
return 31 * groupIndex + Arrays.hashCode(tracks);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
SelectionOverride other = (SelectionOverride) obj;
return groupIndex == other.groupIndex && Arrays.equals(tracks, other.tracks);
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(groupIndex);
dest.writeInt(tracks.length);
dest.writeIntArray(tracks);
}
public static final Parcelable.Creator<SelectionOverride> CREATOR =
new Parcelable.Creator<SelectionOverride>() {
@Override
public SelectionOverride createFromParcel(Parcel in) {
return new SelectionOverride(in);
}
@Override
public SelectionOverride[] newArray(int size) {
return new SelectionOverride[size];
}
};
}
/**

View file

@ -34,6 +34,7 @@ import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
import com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener;
import com.google.android.exoplayer2.util.MimeTypes;
import java.util.HashMap;
@ -147,6 +148,24 @@ public final class DefaultTrackSelectorTest {
parcel.recycle();
}
/** Tests {@link SelectionOverride}'s {@link android.os.Parcelable} implementation. */
@Test
public void testSelectionOverrideParcelable() {
int[] tracks = new int[] {2, 3};
SelectionOverride selectionOverrideToParcel =
new SelectionOverride(/* groupIndex= */ 1, tracks);
Parcel parcel = Parcel.obtain();
selectionOverrideToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
SelectionOverride selectionOverrideFromParcel =
SelectionOverride.CREATOR.createFromParcel(parcel);
assertThat(selectionOverrideFromParcel).isEqualTo(selectionOverrideToParcel);
parcel.recycle();
}
/** Tests that a null override clears a track selection. */
@Test
public void testSelectTracksWithNullOverride() throws ExoPlaybackException {