diff --git a/library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java b/library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java index d650ee8930..e07ceb7641 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java @@ -98,6 +98,7 @@ public class TrackSelectionParameters implements Bundleable { // Text private ImmutableList preferredTextLanguages; private @C.RoleFlags int preferredTextRoleFlags; + private @C.SelectionFlags int ignoredTextSelectionFlags; private boolean selectUndeterminedTextLanguage; // General private boolean forceLowestBitrate; @@ -130,6 +131,7 @@ public class TrackSelectionParameters implements Bundleable { // Text preferredTextLanguages = ImmutableList.of(); preferredTextRoleFlags = 0; + ignoredTextSelectionFlags = 0; selectUndeterminedTextLanguage = false; // General forceLowestBitrate = false; @@ -228,6 +230,10 @@ public class TrackSelectionParameters implements Bundleable { bundle.getInt( keyForField(FIELD_PREFERRED_TEXT_ROLE_FLAGS), DEFAULT_WITHOUT_CONTEXT.preferredTextRoleFlags); + ignoredTextSelectionFlags = + bundle.getInt( + keyForField(FIELD_IGNORED_TEXT_SELECTION_FLAGS), + DEFAULT_WITHOUT_CONTEXT.ignoredTextSelectionFlags); selectUndeterminedTextLanguage = bundle.getBoolean( keyForField(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE), @@ -291,6 +297,7 @@ public class TrackSelectionParameters implements Bundleable { // Text preferredTextLanguages = parameters.preferredTextLanguages; preferredTextRoleFlags = parameters.preferredTextRoleFlags; + ignoredTextSelectionFlags = parameters.ignoredTextSelectionFlags; selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage; // General forceLowestBitrate = parameters.forceLowestBitrate; @@ -613,6 +620,18 @@ public class TrackSelectionParameters implements Bundleable { return this; } + /** + * Sets a bitmask of selection flags that are ignored for text track selections. + * + * @param ignoredTextSelectionFlags A bitmask of {@link C.SelectionFlags} that are ignored for + * text track selections. + * @return This builder. + */ + public Builder setIgnoredTextSelectionFlags(@C.SelectionFlags int ignoredTextSelectionFlags) { + this.ignoredTextSelectionFlags = ignoredTextSelectionFlags; + return this; + } + /** * Sets whether a text track with undetermined language should be selected if no track with * {@link #setPreferredTextLanguages(String...) a preferred language} is available, or if the @@ -895,6 +914,11 @@ public class TrackSelectionParameters implements Bundleable { * is enabled. */ public final @C.RoleFlags int preferredTextRoleFlags; + /** + * Bitmask of selection flags that are ignored for text track selections. See {@link + * C.SelectionFlags}. The default value is {@code 0} (i.e., no flags are ignored). + */ + public final @C.SelectionFlags int ignoredTextSelectionFlags; /** * Whether a text track with undetermined language should be selected if no track with {@link * #preferredTextLanguages} is available, or if {@link #preferredTextLanguages} is unset. The @@ -947,6 +971,7 @@ public class TrackSelectionParameters implements Bundleable { // Text this.preferredTextLanguages = builder.preferredTextLanguages; this.preferredTextRoleFlags = builder.preferredTextRoleFlags; + this.ignoredTextSelectionFlags = builder.ignoredTextSelectionFlags; this.selectUndeterminedTextLanguage = builder.selectUndeterminedTextLanguage; // General this.forceLowestBitrate = builder.forceLowestBitrate; @@ -990,8 +1015,10 @@ public class TrackSelectionParameters implements Bundleable { && maxAudioChannelCount == other.maxAudioChannelCount && maxAudioBitrate == other.maxAudioBitrate && preferredAudioMimeTypes.equals(other.preferredAudioMimeTypes) + // Text && preferredTextLanguages.equals(other.preferredTextLanguages) && preferredTextRoleFlags == other.preferredTextRoleFlags + && ignoredTextSelectionFlags == other.ignoredTextSelectionFlags && selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage // General && forceLowestBitrate == other.forceLowestBitrate @@ -1026,6 +1053,7 @@ public class TrackSelectionParameters implements Bundleable { // Text result = 31 * result + preferredTextLanguages.hashCode(); result = 31 * result + preferredTextRoleFlags; + result = 31 * result + ignoredTextSelectionFlags; result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0); // General result = 31 * result + (forceLowestBitrate ? 1 : 0); @@ -1040,11 +1068,7 @@ public class TrackSelectionParameters implements Bundleable { @Documented @Retention(RetentionPolicy.SOURCE) @IntDef({ - FIELD_PREFERRED_AUDIO_LANGUAGES, - FIELD_PREFERRED_AUDIO_ROLE_FLAGS, - FIELD_PREFERRED_TEXT_LANGUAGES, - FIELD_PREFERRED_TEXT_ROLE_FLAGS, - FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, + // Video FIELD_MAX_VIDEO_WIDTH, FIELD_MAX_VIDEO_HEIGHT, FIELD_MAX_VIDEO_FRAMERATE, @@ -1057,14 +1081,23 @@ public class TrackSelectionParameters implements Bundleable { FIELD_VIEWPORT_HEIGHT, FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE, FIELD_PREFERRED_VIDEO_MIMETYPES, + FIELD_PREFERRED_VIDEO_ROLE_FLAGS, + // Audio + FIELD_PREFERRED_AUDIO_LANGUAGES, + FIELD_PREFERRED_AUDIO_ROLE_FLAGS, FIELD_MAX_AUDIO_CHANNEL_COUNT, FIELD_MAX_AUDIO_BITRATE, FIELD_PREFERRED_AUDIO_MIME_TYPES, + // Text + FIELD_PREFERRED_TEXT_LANGUAGES, + FIELD_PREFERRED_TEXT_ROLE_FLAGS, + FIELD_IGNORED_TEXT_SELECTION_FLAGS, + FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, + // General FIELD_FORCE_LOWEST_BITRATE, FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE, FIELD_SELECTION_OVERRIDES, FIELD_DISABLED_TRACK_TYPE, - FIELD_PREFERRED_VIDEO_ROLE_FLAGS }) private @interface FieldNumber {} @@ -1093,6 +1126,7 @@ public class TrackSelectionParameters implements Bundleable { private static final int FIELD_SELECTION_OVERRIDES = 23; private static final int FIELD_DISABLED_TRACK_TYPE = 24; private static final int FIELD_PREFERRED_VIDEO_ROLE_FLAGS = 25; + private static final int FIELD_IGNORED_TEXT_SELECTION_FLAGS = 26; @Override public Bundle toBundle() { @@ -1129,6 +1163,7 @@ public class TrackSelectionParameters implements Bundleable { bundle.putStringArray( keyForField(FIELD_PREFERRED_TEXT_LANGUAGES), preferredTextLanguages.toArray(new String[0])); bundle.putInt(keyForField(FIELD_PREFERRED_TEXT_ROLE_FLAGS), preferredTextRoleFlags); + bundle.putInt(keyForField(FIELD_IGNORED_TEXT_SELECTION_FLAGS), ignoredTextSelectionFlags); bundle.putBoolean( keyForField(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE), selectUndeterminedTextLanguage); // General diff --git a/library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java b/library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java index 64c7646e16..ec47628a0d 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java @@ -60,6 +60,7 @@ public final class TrackSelectionParametersTest { assertThat(parameters.preferredAudioMimeTypes).isEmpty(); assertThat(parameters.preferredTextLanguages).isEmpty(); assertThat(parameters.preferredTextRoleFlags).isEqualTo(0); + assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(0); assertThat(parameters.selectUndeterminedTextLanguage).isFalse(); // General assertThat(parameters.forceLowestBitrate).isFalse(); @@ -102,6 +103,7 @@ public final class TrackSelectionParametersTest { // Text .setPreferredTextLanguages("de", "en") .setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION) + .setIgnoredTextSelectionFlags(C.SELECTION_FLAG_AUTOSELECT) .setSelectUndeterminedTextLanguage(true) // General .setForceLowestBitrate(false) @@ -145,6 +147,7 @@ public final class TrackSelectionParametersTest { // Text assertThat(parameters.preferredTextLanguages).containsExactly("de", "en").inOrder(); assertThat(parameters.preferredTextRoleFlags).isEqualTo(C.ROLE_FLAG_CAPTION); + assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(C.SELECTION_FLAG_AUTOSELECT); assertThat(parameters.selectUndeterminedTextLanguage).isTrue(); // General assertThat(parameters.forceLowestBitrate).isFalse(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java index 43a3998d50..a509b63e8b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java @@ -114,13 +114,11 @@ public class DefaultTrackSelector extends MappingTrackSelector { private boolean allowAudioMixedSampleRateAdaptiveness; private boolean allowAudioMixedChannelCountAdaptiveness; private boolean allowAudioMixedDecoderSupportAdaptiveness; - // Text - private @C.SelectionFlags int disabledTextTrackSelectionFlags; // General private boolean exceedRendererCapabilitiesIfNecessary; private boolean tunnelingEnabled; private boolean allowMultipleAdaptiveSelections; - + // Overrides private final SparseArray> selectionOverrides; private final SparseBooleanArray rendererDisabledFlags; @@ -156,8 +154,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { */ private ParametersBuilder(Parameters initialValues) { super(initialValues); - // Text - disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags; // Video exceedVideoConstraintsIfNecessary = initialValues.exceedVideoConstraintsIfNecessary; allowVideoMixedMimeTypeAdaptiveness = initialValues.allowVideoMixedMimeTypeAdaptiveness; @@ -225,11 +221,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { Parameters.keyForField( Parameters.FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS), defaultValue.allowAudioMixedDecoderSupportAdaptiveness)); - // Text - setDisabledTextTrackSelectionFlags( - bundle.getInt( - Parameters.keyForField(Parameters.FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS), - defaultValue.disabledTextTrackSelectionFlags)); // General setExceedRendererCapabilitiesIfNecessary( bundle.getBoolean( @@ -243,10 +234,9 @@ public class DefaultTrackSelector extends MappingTrackSelector { bundle.getBoolean( Parameters.keyForField(Parameters.FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS), defaultValue.allowMultipleAdaptiveSelections)); - + // Overrides selectionOverrides = new SparseArray<>(); setSelectionOverridesFromBundle(bundle); - rendererDisabledFlags = makeSparseBooleanArrayFromTrueKeys( bundle.getIntArray( @@ -555,6 +545,13 @@ public class DefaultTrackSelector extends MappingTrackSelector { return this; } + @Override + public ParametersBuilder setIgnoredTextSelectionFlags( + @C.SelectionFlags int ignoredTextSelectionFlags) { + super.setIgnoredTextSelectionFlags(ignoredTextSelectionFlags); + return this; + } + @Override public ParametersBuilder setSelectUndeterminedTextLanguage( boolean selectUndeterminedTextLanguage) { @@ -563,16 +560,12 @@ public class DefaultTrackSelector extends MappingTrackSelector { } /** - * Sets a bitmask of selection flags that are disabled for text track selections. - * - * @param disabledTextTrackSelectionFlags A bitmask of {@link C.SelectionFlags} that are - * disabled for text track selections. - * @return This builder. + * @deprecated Use {@link #setIgnoredTextSelectionFlags}. */ + @Deprecated public ParametersBuilder setDisabledTextTrackSelectionFlags( @C.SelectionFlags int disabledTextTrackSelectionFlags) { - this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags; - return this; + return setIgnoredTextSelectionFlags(disabledTextTrackSelectionFlags); } // General @@ -824,8 +817,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { allowAudioMixedSampleRateAdaptiveness = false; allowAudioMixedChannelCountAdaptiveness = false; allowAudioMixedDecoderSupportAdaptiveness = false; - // Text - disabledTextTrackSelectionFlags = 0; // General exceedRendererCapabilitiesIfNecessary = true; tunnelingEnabled = false; @@ -913,12 +904,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { */ @Deprecated public static final Parameters DEFAULT = DEFAULT_WITHOUT_CONTEXT; - /** - * Bitmask of selection flags that are disabled for text track selections. See {@link - * C.SelectionFlags}. The default value is {@code 0} (i.e. no flags). - */ - public final @C.SelectionFlags int disabledTextTrackSelectionFlags; - /** Returns an instance configured with default values. */ public static Parameters getDefaults(Context context) { return new ParametersBuilder(context).build(); @@ -1016,8 +1001,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { allowAudioMixedSampleRateAdaptiveness = builder.allowAudioMixedSampleRateAdaptiveness; allowAudioMixedChannelCountAdaptiveness = builder.allowAudioMixedChannelCountAdaptiveness; allowAudioMixedDecoderSupportAdaptiveness = builder.allowAudioMixedDecoderSupportAdaptiveness; - // Text - disabledTextTrackSelectionFlags = builder.disabledTextTrackSelectionFlags; // General exceedRendererCapabilitiesIfNecessary = builder.exceedRendererCapabilitiesIfNecessary; tunnelingEnabled = builder.tunnelingEnabled; @@ -1105,8 +1088,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { == other.allowAudioMixedChannelCountAdaptiveness && allowAudioMixedDecoderSupportAdaptiveness == other.allowAudioMixedDecoderSupportAdaptiveness - // Text - && disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags // General && exceedRendererCapabilitiesIfNecessary == other.exceedRendererCapabilitiesIfNecessary && tunnelingEnabled == other.tunnelingEnabled @@ -1131,8 +1112,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { result = 31 * result + (allowAudioMixedSampleRateAdaptiveness ? 1 : 0); result = 31 * result + (allowAudioMixedChannelCountAdaptiveness ? 1 : 0); result = 31 * result + (allowAudioMixedDecoderSupportAdaptiveness ? 1 : 0); - // Text - result = 31 * result + disabledTextTrackSelectionFlags; // General result = 31 * result + (exceedRendererCapabilitiesIfNecessary ? 1 : 0); result = 31 * result + (tunnelingEnabled ? 1 : 0); @@ -1147,23 +1126,26 @@ public class DefaultTrackSelector extends MappingTrackSelector { @Retention(RetentionPolicy.SOURCE) @Target(TYPE_USE) @IntDef({ + // Video FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY, FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS, FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS, + FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS, + // Audio FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY, FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS, FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS, FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS, - FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS, + FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS, + // General FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY, FIELD_TUNNELING_ENABLED, FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS, + // Overrides FIELD_SELECTION_OVERRIDES_RENDERER_INDICES, FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS, FIELD_SELECTION_OVERRIDES, FIELD_RENDERER_DISABLED_INDICES, - FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS, - FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS }) private @interface FieldNumber {} @@ -1175,16 +1157,15 @@ public class DefaultTrackSelector extends MappingTrackSelector { private static final int FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS = 1004; private static final int FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS = 1005; private static final int FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS = 1006; - private static final int FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS = 1007; - private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY = 1008; - private static final int FIELD_TUNNELING_ENABLED = 1009; - private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = 1010; - private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = 1011; - private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS = 1012; - private static final int FIELD_SELECTION_OVERRIDES = 1013; - private static final int FIELD_RENDERER_DISABLED_INDICES = 1014; - private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1015; - private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1016; + private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY = 1007; + private static final int FIELD_TUNNELING_ENABLED = 1008; + private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = 1009; + private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = 1010; + private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS = 1011; + private static final int FIELD_SELECTION_OVERRIDES = 1012; + private static final int FIELD_RENDERER_DISABLED_INDICES = 1013; + private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1014; + private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1015; @Override public Bundle toBundle() { @@ -1219,9 +1200,6 @@ public class DefaultTrackSelector extends MappingTrackSelector { bundle.putBoolean( keyForField(FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS), allowAudioMixedDecoderSupportAdaptiveness); - // Text - bundle.putInt( - keyForField(FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS), disabledTextTrackSelectionFlags); // General bundle.putBoolean( keyForField(FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY), @@ -2738,8 +2716,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { super(rendererIndex, trackGroup, trackIndex); isWithinRendererCapabilities = isSupported(trackFormatSupport, /* allowExceedsCapabilities= */ false); - int maskedSelectionFlags = - format.selectionFlags & ~parameters.disabledTextTrackSelectionFlags; + int maskedSelectionFlags = format.selectionFlags & ~parameters.ignoredTextSelectionFlags; isDefault = (maskedSelectionFlags & C.SELECTION_FLAG_DEFAULT) != 0; isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0; int bestLanguageIndex = Integer.MAX_VALUE; diff --git a/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java b/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java index d7edf1790f..9e4391653d 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java @@ -1129,7 +1129,7 @@ public final class DefaultTrackSelectorTest { // selected. trackGroups = wrapFormats(defaultOnly, noFlag, forcedOnly, forcedDefault); trackSelector.setParameters( - defaultParameters.buildUpon().setDisabledTextTrackSelectionFlags(C.SELECTION_FLAG_DEFAULT)); + defaultParameters.buildUpon().setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT)); result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE); assertNoSelection(result.selections[0]); @@ -1140,8 +1140,7 @@ public final class DefaultTrackSelectorTest { trackSelector .getParameters() .buildUpon() - .setDisabledTextTrackSelectionFlags( - C.SELECTION_FLAG_DEFAULT | C.SELECTION_FLAG_FORCED)); + .setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT | C.SELECTION_FLAG_FORCED)); result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE); assertNoSelection(result.selections[0]); @@ -1159,7 +1158,7 @@ public final class DefaultTrackSelectorTest { trackSelector .getParameters() .buildUpon() - .setDisabledTextTrackSelectionFlags(C.SELECTION_FLAG_DEFAULT)); + .setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT)); result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE); assertFixedSelection(result.selections[0], trackGroups, noFlag); } @@ -2370,7 +2369,7 @@ public final class DefaultTrackSelectorTest { .setPreferredTextLanguages("de", "en") .setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION) .setSelectUndeterminedTextLanguage(true) - .setDisabledTextTrackSelectionFlags(C.SELECTION_FLAG_AUTOSELECT) + .setIgnoredTextSelectionFlags(C.SELECTION_FLAG_AUTOSELECT) // General .setForceLowestBitrate(false) .setForceHighestSupportedBitrate(true) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java index 7cd646772f..11b06e1d1f 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java @@ -59,6 +59,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayerLibraryInfo; +import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.ForwardingPlayer; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player.Events; @@ -1130,8 +1131,11 @@ public class StyledPlayerControlView extends FrameLayout { if (!trackGroupInfo.isTrackSupported(trackIndex)) { continue; } - String trackName = - trackNameProvider.getTrackName(trackGroupInfo.getTrackFormat(trackIndex)); + Format trackFormat = trackGroupInfo.getTrackFormat(trackIndex); + if ((trackFormat.selectionFlags & C.SELECTION_FLAG_FORCED) != 0) { + continue; + } + String trackName = trackNameProvider.getTrackName(trackFormat); tracks.add(new TrackInformation(tracksInfo, trackGroupIndex, trackIndex, trackName)); } } @@ -1870,7 +1874,8 @@ public class StyledPlayerControlView extends FrameLayout { player.setTrackSelectionParameters( trackSelectionParameters .buildUpon() - .setTrackTypeDisabled(C.TRACK_TYPE_TEXT, /* disabled= */ true) + .clearOverridesOfType(C.TRACK_TYPE_TEXT) + .setIgnoredTextSelectionFlags(~C.SELECTION_FLAG_FORCED) .build()); settingsWindow.dismiss(); }