diff --git a/libraries/ui/src/main/java/androidx/media3/ui/StyledPlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/StyledPlayerControlView.java index 11d1a3da24b..c863b762ae3 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/StyledPlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/StyledPlayerControlView.java @@ -80,8 +80,10 @@ import java.util.Arrays; import java.util.Collections; import java.util.Formatter; +import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; /** @@ -1936,19 +1938,13 @@ public int getItemCount() { private static final class TrackInformation { - private TracksInfo tracksInfo; - private int trackGroupIndex; public final TrackGroupInfo trackGroupInfo; - public final TrackGroup trackGroup; public final int trackIndex; public final String trackName; public TrackInformation( TracksInfo tracksInfo, int trackGroupIndex, int trackIndex, String trackName) { - this.tracksInfo = tracksInfo; - this.trackGroupIndex = trackGroupIndex; this.trackGroupInfo = tracksInfo.getTrackGroupInfos().get(trackGroupIndex); - this.trackGroup = trackGroupInfo.getTrackGroup(); this.trackIndex = trackIndex; this.trackName = trackName; } @@ -2047,11 +2043,15 @@ public void onBindViewHolderAtZeroPosition(SubSettingViewHolder holder) { .buildUpon() .clearOverridesOfType(C.TRACK_TYPE_AUDIO) .build(); + Set<@C.TrackType Integer> disabledTrackTypes = + new HashSet<>(trackSelectionParameters.disabledTrackTypes); + disabledTrackTypes.remove(C.TRACK_TYPE_AUDIO); castNonNull(player) .setTrackSelectionParameters( trackSelectionParameters .buildUpon() .setTrackSelectionOverrides(trackSelectionOverrides) + .setDisabledTrackTypes(disabledTrackTypes) .build()); settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, @@ -2061,16 +2061,11 @@ public void onBindViewHolderAtZeroPosition(SubSettingViewHolder holder) { } private boolean hasSelectionOverride(TrackSelectionOverrides trackSelectionOverrides) { - int previousTrackGroupIndex = C.INDEX_UNSET; for (int i = 0; i < tracks.size(); i++) { - TrackInformation track = tracks.get(i); - if (track.trackGroupIndex == previousTrackGroupIndex) { - continue; - } - if (trackSelectionOverrides.getOverride(track.trackGroup) != null) { + TrackGroup trackGroup = tracks.get(i).trackGroupInfo.getTrackGroup(); + if (trackSelectionOverrides.getOverride(trackGroup) != null) { return true; } - previousTrackGroupIndex = track.trackGroupIndex; } return false; } @@ -2083,24 +2078,14 @@ public void onTrackSelection(String subtext) { @Override public void init(List trackInformations) { // Update subtext in settings menu with current audio track selection. - boolean hasSelectionOverride = false; - for (int i = 0; i < trackInformations.size(); i++) { - if (checkNotNull(player) - .getTrackSelectionParameters() - .trackSelectionOverrides - .getOverride(trackInformations.get(i).trackGroup) - != null) { - hasSelectionOverride = true; - break; - } - } + TrackSelectionParameters params = checkNotNull(player).getTrackSelectionParameters(); if (trackInformations.isEmpty()) { settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, getResources().getString(R.string.exo_track_selection_none)); // TODO(insun) : Make the audio item in main settings (settingsAdapater) // to be non-clickable. - } else if (!hasSelectionOverride) { + } else if (!hasSelectionOverride(params.trackSelectionOverrides)) { settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, getResources().getString(R.string.exo_track_selection_auto)); @@ -2150,13 +2135,10 @@ public void onBindViewHolder(SubSettingViewHolder holder, int position) { onBindViewHolderAtZeroPosition(holder); } else { TrackInformation track = tracks.get(position - 1); + TrackGroup trackGroup = track.trackGroupInfo.getTrackGroup(); + TrackSelectionParameters params = checkNotNull(player).getTrackSelectionParameters(); boolean explicitlySelected = - checkNotNull(player) - .getTrackSelectionParameters() - .trackSelectionOverrides - .getOverride(track.trackGroup) - != null - && track.isSelected(); + params.trackSelectionOverrides.getOverride(trackGroup) != null && track.isSelected(); holder.textView.setText(track.trackName); holder.checkView.setVisibility(explicitlySelected ? VISIBLE : INVISIBLE); holder.itemView.setOnClickListener( @@ -2172,13 +2154,17 @@ public void onBindViewHolder(SubSettingViewHolder holder, int position) { .buildUpon() .setOverrideForType( new TrackSelectionOverride( - track.trackGroup, ImmutableList.of(track.trackIndex))) + trackGroup, ImmutableList.of(track.trackIndex))) .build(); + Set<@C.TrackType Integer> disabledTrackTypes = + new HashSet<>(trackSelectionParameters.disabledTrackTypes); + disabledTrackTypes.remove(track.trackGroupInfo.getTrackType()); checkNotNull(player) .setTrackSelectionParameters( trackSelectionParameters .buildUpon() .setTrackSelectionOverrides(overrides) + .setDisabledTrackTypes(disabledTrackTypes) .build()); onTrackSelection(track.trackName); settingsWindow.dismiss();