mirror of
https://github.com/androidx/media.git
synced 2025-05-03 21:57:46 +08:00
Extend TrackSelectionDialog for usage in PlayerActivity.
We need additional initial selection settings and a configurable title. The update logic for the track selection parameters moved to a static helper method in TrackSelectionDialog. PiperOrigin-RevId: 233713788
This commit is contained in:
parent
d6b6063798
commit
ca67c0c2e5
@ -241,12 +241,14 @@ public class DownloadTracker implements DownloadManager.Listener {
|
|||||||
mappedTrackInfo = downloadHelper.getMappedTrackInfo(/* periodIndex= */ 0);
|
mappedTrackInfo = downloadHelper.getMappedTrackInfo(/* periodIndex= */ 0);
|
||||||
trackSelectionDialog = new TrackSelectionDialog();
|
trackSelectionDialog = new TrackSelectionDialog();
|
||||||
trackSelectionDialog.init(
|
trackSelectionDialog.init(
|
||||||
|
/* titleId= */ R.string.exo_download_description,
|
||||||
mappedTrackInfo,
|
mappedTrackInfo,
|
||||||
|
/* initialSelection= */ DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
/* allowAdaptiveSelections =*/ false,
|
/* allowAdaptiveSelections =*/ false,
|
||||||
/* allowMultipleOverrides= */ true,
|
/* allowMultipleOverrides= */ true,
|
||||||
/* onClickListener= */ this,
|
/* onClickListener= */ this,
|
||||||
/* onDismissListener= */ this);
|
/* onDismissListener= */ this);
|
||||||
trackSelectionDialog.show(fragmentManager, "download");
|
trackSelectionDialog.show(fragmentManager, /* tag= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -15,13 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.demo;
|
package com.google.android.exoplayer2.demo;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -65,7 +65,6 @@ import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
|||||||
import com.google.android.exoplayer2.ui.DebugTextViewHelper;
|
import com.google.android.exoplayer2.ui.DebugTextViewHelper;
|
||||||
import com.google.android.exoplayer2.ui.PlayerControlView;
|
import com.google.android.exoplayer2.ui.PlayerControlView;
|
||||||
import com.google.android.exoplayer2.ui.PlayerView;
|
import com.google.android.exoplayer2.ui.PlayerView;
|
||||||
import com.google.android.exoplayer2.ui.TrackSelectionDialogBuilder;
|
|
||||||
import com.google.android.exoplayer2.ui.spherical.SphericalSurfaceView;
|
import com.google.android.exoplayer2.ui.spherical.SphericalSurfaceView;
|
||||||
import com.google.android.exoplayer2.upstream.DataSource;
|
import com.google.android.exoplayer2.upstream.DataSource;
|
||||||
import com.google.android.exoplayer2.upstream.HttpDataSource;
|
import com.google.android.exoplayer2.upstream.HttpDataSource;
|
||||||
@ -80,7 +79,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/** An activity that plays media using {@link SimpleExoPlayer}. */
|
/** An activity that plays media using {@link SimpleExoPlayer}. */
|
||||||
public class PlayerActivity extends Activity
|
public class PlayerActivity extends AppCompatActivity
|
||||||
implements OnClickListener, PlaybackPreparer, PlayerControlView.VisibilityListener {
|
implements OnClickListener, PlaybackPreparer, PlayerControlView.VisibilityListener {
|
||||||
|
|
||||||
public static final String DRM_SCHEME_EXTRA = "drm_scheme";
|
public static final String DRM_SCHEME_EXTRA = "drm_scheme";
|
||||||
@ -125,6 +124,7 @@ public class PlayerActivity extends Activity
|
|||||||
|
|
||||||
private PlayerView playerView;
|
private PlayerView playerView;
|
||||||
private LinearLayout debugRootView;
|
private LinearLayout debugRootView;
|
||||||
|
private Button selectTracksButton;
|
||||||
private TextView debugTextView;
|
private TextView debugTextView;
|
||||||
|
|
||||||
private DataSource.Factory dataSourceFactory;
|
private DataSource.Factory dataSourceFactory;
|
||||||
@ -160,10 +160,10 @@ public class PlayerActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
setContentView(R.layout.player_activity);
|
setContentView(R.layout.player_activity);
|
||||||
View rootView = findViewById(R.id.root);
|
|
||||||
rootView.setOnClickListener(this);
|
|
||||||
debugRootView = findViewById(R.id.controls_root);
|
debugRootView = findViewById(R.id.controls_root);
|
||||||
debugTextView = findViewById(R.id.debug_text_view);
|
debugTextView = findViewById(R.id.debug_text_view);
|
||||||
|
selectTracksButton = findViewById(R.id.select_tracks_button);
|
||||||
|
selectTracksButton.setOnClickListener(this);
|
||||||
|
|
||||||
playerView = findViewById(R.id.player_view);
|
playerView = findViewById(R.id.player_view);
|
||||||
playerView.setControllerVisibilityListener(this);
|
playerView.setControllerVisibilityListener(this);
|
||||||
@ -272,6 +272,7 @@ public class PlayerActivity extends Activity
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
updateTrackSelectorParameters();
|
updateTrackSelectorParameters();
|
||||||
updateStartPosition();
|
updateStartPosition();
|
||||||
outState.putParcelable(KEY_TRACK_SELECTOR_PARAMETERS, trackSelectorParameters);
|
outState.putParcelable(KEY_TRACK_SELECTOR_PARAMETERS, trackSelectorParameters);
|
||||||
@ -292,23 +293,9 @@ public class PlayerActivity extends Activity
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if (view.getParent() == debugRootView) {
|
if (view == selectTracksButton) {
|
||||||
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
|
TrackSelectionDialog dialog = TrackSelectionDialog.createForTrackSelector(trackSelector);
|
||||||
if (mappedTrackInfo != null) {
|
dialog.show(getSupportFragmentManager(), /* tag= */ null);
|
||||||
CharSequence title = ((Button) view).getText();
|
|
||||||
int rendererIndex = (int) view.getTag();
|
|
||||||
int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
|
|
||||||
boolean allowAdaptiveSelections =
|
|
||||||
rendererType == C.TRACK_TYPE_VIDEO
|
|
||||||
|| (rendererType == C.TRACK_TYPE_AUDIO
|
|
||||||
&& mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
|
|
||||||
== MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
|
|
||||||
new TrackSelectionDialogBuilder(/* context= */ this, title, trackSelector, rendererIndex)
|
|
||||||
.setShowDisableOption(true)
|
|
||||||
.setAllowAdaptiveSelections(allowAdaptiveSelections)
|
|
||||||
.build()
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +441,7 @@ public class PlayerActivity extends Activity
|
|||||||
player.seekTo(startWindow, startPosition);
|
player.seekTo(startWindow, startPosition);
|
||||||
}
|
}
|
||||||
player.prepare(mediaSource, !haveStartPosition, false);
|
player.prepare(mediaSource, !haveStartPosition, false);
|
||||||
updateButtonVisibilities();
|
updateButtonVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
private MediaSource buildMediaSource(Uri uri) {
|
private MediaSource buildMediaSource(Uri uri) {
|
||||||
@ -605,41 +592,9 @@ public class PlayerActivity extends Activity
|
|||||||
|
|
||||||
// User controls
|
// User controls
|
||||||
|
|
||||||
private void updateButtonVisibilities() {
|
private void updateButtonVisibility() {
|
||||||
debugRootView.removeAllViews();
|
selectTracksButton.setEnabled(
|
||||||
if (player == null) {
|
player != null && trackSelector.getCurrentMappedTrackInfo() != null);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
|
|
||||||
if (mappedTrackInfo == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
|
|
||||||
TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
|
|
||||||
if (trackGroups.length != 0) {
|
|
||||||
Button button = new Button(this);
|
|
||||||
int label;
|
|
||||||
switch (player.getRendererType(i)) {
|
|
||||||
case C.TRACK_TYPE_AUDIO:
|
|
||||||
label = R.string.exo_track_selection_title_audio;
|
|
||||||
break;
|
|
||||||
case C.TRACK_TYPE_VIDEO:
|
|
||||||
label = R.string.exo_track_selection_title_video;
|
|
||||||
break;
|
|
||||||
case C.TRACK_TYPE_TEXT:
|
|
||||||
label = R.string.exo_track_selection_title_text;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
button.setText(label);
|
|
||||||
button.setTag(i);
|
|
||||||
button.setOnClickListener(this);
|
|
||||||
debugRootView.addView(button);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showControls() {
|
private void showControls() {
|
||||||
@ -675,7 +630,7 @@ public class PlayerActivity extends Activity
|
|||||||
if (playbackState == Player.STATE_ENDED) {
|
if (playbackState == Player.STATE_ENDED) {
|
||||||
showControls();
|
showControls();
|
||||||
}
|
}
|
||||||
updateButtonVisibilities();
|
updateButtonVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -694,7 +649,7 @@ public class PlayerActivity extends Activity
|
|||||||
initializePlayer();
|
initializePlayer();
|
||||||
} else {
|
} else {
|
||||||
updateStartPosition();
|
updateStartPosition();
|
||||||
updateButtonVisibilities();
|
updateButtonVisibility();
|
||||||
showControls();
|
showControls();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -702,7 +657,7 @@ public class PlayerActivity extends Activity
|
|||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("ReferenceEquality")
|
@SuppressWarnings("ReferenceEquality")
|
||||||
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
|
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
|
||||||
updateButtonVisibilities();
|
updateButtonVisibility();
|
||||||
if (trackGroups != lastSeenTrackGroupArray) {
|
if (trackGroups != lastSeenTrackGroupArray) {
|
||||||
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
|
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
|
||||||
if (mappedTrackInfo != null) {
|
if (mappedTrackInfo != null) {
|
||||||
|
@ -33,9 +33,11 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.source.TrackGroupArray;
|
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.DefaultTrackSelector.SelectionOverride;
|
||||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
||||||
import com.google.android.exoplayer2.ui.TrackSelectionView;
|
import com.google.android.exoplayer2.ui.TrackSelectionView;
|
||||||
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -46,12 +48,54 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
private final SparseArray<TrackSelectionViewFragment> tabFragments;
|
private final SparseArray<TrackSelectionViewFragment> tabFragments;
|
||||||
private final List<CharSequence> tabTitles;
|
private final List<CharSequence> tabTitles;
|
||||||
|
|
||||||
|
private int titleId;
|
||||||
private MappedTrackInfo mappedTrackInfo;
|
private MappedTrackInfo mappedTrackInfo;
|
||||||
|
private DefaultTrackSelector.Parameters initialSelection;
|
||||||
private boolean allowAdaptiveSelections;
|
private boolean allowAdaptiveSelections;
|
||||||
private boolean allowMultipleOverrides;
|
private boolean allowMultipleOverrides;
|
||||||
private DialogInterface.OnClickListener onClickListener;
|
private DialogInterface.OnClickListener onClickListener;
|
||||||
private DialogInterface.OnDismissListener onDismissListener;
|
private DialogInterface.OnDismissListener onDismissListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and initialized a dialog with a {@link DefaultTrackSelector} and automatically updates
|
||||||
|
* the track selector's parameters when tracks are selected.
|
||||||
|
*
|
||||||
|
* @param trackSelector A {@link DefaultTrackSelector}.
|
||||||
|
*/
|
||||||
|
public static TrackSelectionDialog createForTrackSelector(DefaultTrackSelector trackSelector) {
|
||||||
|
MappedTrackInfo mappedTrackInfo =
|
||||||
|
Assertions.checkNotNull(trackSelector.getCurrentMappedTrackInfo());
|
||||||
|
TrackSelectionDialog trackSelectionDialog = new TrackSelectionDialog();
|
||||||
|
DefaultTrackSelector.Parameters parameters = trackSelector.getParameters();
|
||||||
|
trackSelectionDialog.init(
|
||||||
|
/* titleId= */ R.string.track_selection_title,
|
||||||
|
mappedTrackInfo,
|
||||||
|
/* initialSelection = */ parameters,
|
||||||
|
/* allowAdaptiveSelections =*/ true,
|
||||||
|
/* allowMultipleOverrides= */ false,
|
||||||
|
/* onClickListener= */ (dialog, which) -> {
|
||||||
|
DefaultTrackSelector.ParametersBuilder builder = parameters.buildUpon();
|
||||||
|
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
|
||||||
|
builder
|
||||||
|
.clearSelectionOverrides(/* rendererIndex= */ i)
|
||||||
|
.setRendererDisabled(
|
||||||
|
/* rendererIndex= */ i,
|
||||||
|
trackSelectionDialog.getIsDisabled(/* rendererIndex= */ i));
|
||||||
|
List<SelectionOverride> overrides =
|
||||||
|
trackSelectionDialog.getOverrides(/* rendererIndex= */ i);
|
||||||
|
if (!overrides.isEmpty()) {
|
||||||
|
builder.setSelectionOverride(
|
||||||
|
/* rendererIndex= */ i,
|
||||||
|
mappedTrackInfo.getTrackGroups(/* rendererIndex= */ i),
|
||||||
|
overrides.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trackSelector.setParameters(builder);
|
||||||
|
},
|
||||||
|
/* onDismissListener= */ (dialog) -> {});
|
||||||
|
return trackSelectionDialog;
|
||||||
|
}
|
||||||
|
|
||||||
/** Creates the dialog. */
|
/** Creates the dialog. */
|
||||||
public TrackSelectionDialog() {
|
public TrackSelectionDialog() {
|
||||||
tabFragments = new SparseArray<>();
|
tabFragments = new SparseArray<>();
|
||||||
@ -63,7 +107,10 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
/**
|
/**
|
||||||
* Initializes the dialog.
|
* Initializes the dialog.
|
||||||
*
|
*
|
||||||
|
* @param titleId The resource id of the dialog title.
|
||||||
* @param mappedTrackInfo The {@link MappedTrackInfo} to display.
|
* @param mappedTrackInfo The {@link MappedTrackInfo} to display.
|
||||||
|
* @param initialSelection The {@link DefaultTrackSelector.Parameters} describing the initial
|
||||||
|
* track selection.
|
||||||
* @param allowAdaptiveSelections Whether adaptive selections (consisting of more than one track)
|
* @param allowAdaptiveSelections Whether adaptive selections (consisting of more than one track)
|
||||||
* can be made.
|
* can be made.
|
||||||
* @param allowMultipleOverrides Whether tracks from multiple track groups can be selected.
|
* @param allowMultipleOverrides Whether tracks from multiple track groups can be selected.
|
||||||
@ -72,12 +119,16 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
* dismissed.
|
* dismissed.
|
||||||
*/
|
*/
|
||||||
public void init(
|
public void init(
|
||||||
|
int titleId,
|
||||||
MappedTrackInfo mappedTrackInfo,
|
MappedTrackInfo mappedTrackInfo,
|
||||||
|
DefaultTrackSelector.Parameters initialSelection,
|
||||||
boolean allowAdaptiveSelections,
|
boolean allowAdaptiveSelections,
|
||||||
boolean allowMultipleOverrides,
|
boolean allowMultipleOverrides,
|
||||||
DialogInterface.OnClickListener onClickListener,
|
DialogInterface.OnClickListener onClickListener,
|
||||||
DialogInterface.OnDismissListener onDismissListener) {
|
DialogInterface.OnDismissListener onDismissListener) {
|
||||||
|
this.titleId = titleId;
|
||||||
this.mappedTrackInfo = mappedTrackInfo;
|
this.mappedTrackInfo = mappedTrackInfo;
|
||||||
|
this.initialSelection = initialSelection;
|
||||||
this.allowAdaptiveSelections = allowAdaptiveSelections;
|
this.allowAdaptiveSelections = allowAdaptiveSelections;
|
||||||
this.allowMultipleOverrides = allowMultipleOverrides;
|
this.allowMultipleOverrides = allowMultipleOverrides;
|
||||||
this.onClickListener = onClickListener;
|
this.onClickListener = onClickListener;
|
||||||
@ -112,7 +163,7 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
return new AlertDialog.Builder(getActivity())
|
return new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.exo_download_description)
|
.setTitle(titleId)
|
||||||
.setPositiveButton(android.R.string.ok, onClickListener)
|
.setPositiveButton(android.R.string.ok, onClickListener)
|
||||||
.setNegativeButton(android.R.string.cancel, /* listener= */ null)
|
.setNegativeButton(android.R.string.cancel, /* listener= */ null)
|
||||||
.create();
|
.create();
|
||||||
@ -140,7 +191,12 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
}
|
}
|
||||||
TrackSelectionViewFragment tabFragment = new TrackSelectionViewFragment();
|
TrackSelectionViewFragment tabFragment = new TrackSelectionViewFragment();
|
||||||
tabFragment.init(
|
tabFragment.init(
|
||||||
mappedTrackInfo, /* rendererIndex= */ i, allowAdaptiveSelections, allowMultipleOverrides);
|
mappedTrackInfo,
|
||||||
|
/* rendererIndex= */ i,
|
||||||
|
initialSelection.getRendererDisabled(/* rendererIndex= */ i),
|
||||||
|
initialSelection.getSelectionOverride(/* rendererIndex= */ i, trackGroupArray),
|
||||||
|
allowAdaptiveSelections,
|
||||||
|
allowMultipleOverrides);
|
||||||
tabFragments.put(i, tabFragment);
|
tabFragments.put(i, tabFragment);
|
||||||
tabTitles.add(trackTypeString);
|
tabTitles.add(trackTypeString);
|
||||||
}
|
}
|
||||||
@ -196,6 +252,8 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
|
|
||||||
private MappedTrackInfo mappedTrackInfo;
|
private MappedTrackInfo mappedTrackInfo;
|
||||||
private int rendererIndex;
|
private int rendererIndex;
|
||||||
|
private boolean initialIsDisabled;
|
||||||
|
@Nullable private SelectionOverride initialOverride;
|
||||||
private boolean allowAdaptiveSelections;
|
private boolean allowAdaptiveSelections;
|
||||||
private boolean allowMultipleOverrides;
|
private boolean allowMultipleOverrides;
|
||||||
|
|
||||||
@ -204,10 +262,14 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
public void init(
|
public void init(
|
||||||
MappedTrackInfo mappedTrackInfo,
|
MappedTrackInfo mappedTrackInfo,
|
||||||
int rendererIndex,
|
int rendererIndex,
|
||||||
|
boolean initialIsDisabled,
|
||||||
|
@Nullable SelectionOverride initialOverride,
|
||||||
boolean allowAdaptiveSelections,
|
boolean allowAdaptiveSelections,
|
||||||
boolean allowMultipleOverrides) {
|
boolean allowMultipleOverrides) {
|
||||||
this.mappedTrackInfo = mappedTrackInfo;
|
this.mappedTrackInfo = mappedTrackInfo;
|
||||||
this.rendererIndex = rendererIndex;
|
this.rendererIndex = rendererIndex;
|
||||||
|
this.initialIsDisabled = initialIsDisabled;
|
||||||
|
this.initialOverride = initialOverride;
|
||||||
this.allowAdaptiveSelections = allowAdaptiveSelections;
|
this.allowAdaptiveSelections = allowAdaptiveSelections;
|
||||||
this.allowMultipleOverrides = allowMultipleOverrides;
|
this.allowMultipleOverrides = allowMultipleOverrides;
|
||||||
}
|
}
|
||||||
@ -227,8 +289,10 @@ public final class TrackSelectionDialog extends DialogFragment {
|
|||||||
trackSelectionView.init(
|
trackSelectionView.init(
|
||||||
mappedTrackInfo,
|
mappedTrackInfo,
|
||||||
rendererIndex,
|
rendererIndex,
|
||||||
/* isDisabled= */ false,
|
initialIsDisabled,
|
||||||
/* overrides= */ Collections.emptyList());
|
initialOverride == null
|
||||||
|
? Collections.emptyList()
|
||||||
|
: Collections.singletonList(initialOverride));
|
||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,15 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:visibility="gone"/>
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<Button android:id="@+id/select_tracks_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/track_selection_title"
|
||||||
|
android:enabled="false"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
<string name="application_name">ExoPlayer</string>
|
<string name="application_name">ExoPlayer</string>
|
||||||
|
|
||||||
|
<string name="track_selection_title">Select tracks</string>
|
||||||
|
|
||||||
<string name="unexpected_intent_action">Unexpected intent action: <xliff:g id="action">%1$s</xliff:g></string>
|
<string name="unexpected_intent_action">Unexpected intent action: <xliff:g id="action">%1$s</xliff:g></string>
|
||||||
|
|
||||||
<string name="error_cleartext_not_permitted">Cleartext traffic not permitted</string>
|
<string name="error_cleartext_not_permitted">Cleartext traffic not permitted</string>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<style name="PlayerTheme" parent="android:Theme.Holo">
|
<style name="PlayerTheme" parent="Theme.AppCompat.NoActionBar">
|
||||||
<item name="android:windowNoTitle">true</item>
|
<item name="android:windowNoTitle">true</item>
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
<item name="android:windowBackground">@android:color/black</item>
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user