Add convenience method to DownloadHelper to add selection for single renderer.

This simplifies the DownloadHelper code in the demo app and is generally
useful for more specific updates with SelectionOverrides.

PiperOrigin-RevId: 238228276
This commit is contained in:
tonihei 2019-03-13 15:16:03 +00:00 committed by Oliver Woodman
parent 8e80acd18f
commit d93ee00d19
2 changed files with 42 additions and 32 deletions

View File

@ -36,9 +36,6 @@ import com.google.android.exoplayer2.offline.DownloadState;
import com.google.android.exoplayer2.offline.DownloadStateCursor;
import com.google.android.exoplayer2.offline.StreamKey;
import com.google.android.exoplayer2.scheduler.Requirements;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.util.Log;
@ -290,37 +287,17 @@ public class DownloadTracker implements DownloadManager.Listener {
@Override
public void onClick(DialogInterface dialog, int which) {
DefaultTrackSelector.ParametersBuilder builder =
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ true);
}
for (int i = 0; i < downloadHelper.getPeriodCount(); i++) {
downloadHelper.clearTrackSelections(/* periodIndex = */ i);
}
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
if (trackSelectionDialog.getIsDisabled(/* rendererIndex= */ i)) {
continue;
}
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ false);
List<SelectionOverride> overrides =
trackSelectionDialog.getOverrides(/* rendererIndex= */ i);
if (overrides.isEmpty()) {
for (int j = 0; j < downloadHelper.getPeriodCount(); j++) {
downloadHelper.addTrackSelection(/* periodIndex = */ j, builder.build());
for (int periodIndex = 0; periodIndex < downloadHelper.getPeriodCount(); periodIndex++) {
downloadHelper.clearTrackSelections(periodIndex);
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
if (!trackSelectionDialog.getIsDisabled(/* rendererIndex= */ i)) {
downloadHelper.addTrackSelectionForSingleRenderer(
periodIndex,
/* rendererIndex= */ i,
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
trackSelectionDialog.getOverrides(/* rendererIndex= */ i));
}
} else {
TrackGroupArray trackGroupArray = mappedTrackInfo.getTrackGroups(/* rendererIndex= */ i);
for (int overrideIndex = 0; overrideIndex < overrides.size(); overrideIndex++) {
builder.setSelectionOverride(
/* rendererIndex= */ i, trackGroupArray, overrides.get(overrideIndex));
for (int j = 0; j < downloadHelper.getPeriodCount(); j++) {
downloadHelper.addTrackSelection(/* periodIndex = */ j, builder.build());
}
}
builder.clearSelectionOverrides();
}
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ true);
}
DownloadAction downloadAction = downloadHelper.getDownloadAction(Util.getUtf8Bytes(name));
startDownload(downloadAction);

View File

@ -38,6 +38,7 @@ import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.BaseTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
@ -546,6 +547,38 @@ public final class DownloadHelper {
}
}
/**
* Convenience method to add a selection of tracks to be downloaded for a single renderer. Must
* not be called until after preparation completes.
*
* @param periodIndex The period index the track selection is added for.
* @param rendererIndex The renderer index the track selection is added for.
* @param trackSelectorParameters The {@link DefaultTrackSelector.Parameters} to obtain the new
* selection of tracks.
* @param overrides A list of {@link SelectionOverride SelectionOverrides} to apply to the {@code
* trackSelectorParameters}. If empty, {@code trackSelectorParameters} are used as they are.
*/
public void addTrackSelectionForSingleRenderer(
int periodIndex,
int rendererIndex,
DefaultTrackSelector.Parameters trackSelectorParameters,
List<SelectionOverride> overrides) {
assertPreparedWithMedia();
DefaultTrackSelector.ParametersBuilder builder = trackSelectorParameters.buildUpon();
for (int i = 0; i < mappedTrackInfos[periodIndex].getRendererCount(); i++) {
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ i != rendererIndex);
}
if (overrides.isEmpty()) {
addTrackSelection(periodIndex, builder.build());
} else {
TrackGroupArray trackGroupArray = mappedTrackInfos[periodIndex].getTrackGroups(rendererIndex);
for (int i = 0; i < overrides.size(); i++) {
builder.setSelectionOverride(rendererIndex, trackGroupArray, overrides.get(i));
addTrackSelection(periodIndex, builder.build());
}
}
}
/**
* Builds a {@link DownloadAction} for downloading the selected tracks. Must not be called until
* after preparation completes.