mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Fix TrackSelectionView selection/deselection again.
There are 6 different situations which are now more explicitly covered to ensure we handle them correctly: 1. Radio button (non-adaptive, single group only) Selected -> Do nothing. Unselected -> Replace override with selected track. 2. Check box (non-adaptive, but multi-group allowed) Selected -> Remove track (and override). If last one, set isDisabled flag. Unselected -> Replace override with selected track. 3. Check box (adaptive allowed, single or multi group) Selected -> Remove track. If last, remove override and maybe set isDisabled. Unselected -> Add track to override. PiperOrigin-RevId: 236668642
This commit is contained in:
parent
641c1d2af4
commit
36060e36cb
@ -254,8 +254,7 @@ public class TrackSelectionView extends LinearLayout {
|
||||
|
||||
// Add per-track views.
|
||||
trackViews = new CheckedTextView[trackGroups.length][];
|
||||
boolean enableMultipleChoiceForMultipleOverrides =
|
||||
allowMultipleOverrides && trackGroups.length > 1;
|
||||
boolean enableMultipleChoiceForMultipleOverrides = shouldEnableMultiGroupSelection();
|
||||
for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) {
|
||||
TrackGroup group = trackGroups.get(groupIndex);
|
||||
boolean enableMultipleChoiceForAdaptiveSelections = shouldEnableAdaptiveSelection(groupIndex);
|
||||
@ -332,19 +331,21 @@ public class TrackSelectionView extends LinearLayout {
|
||||
int trackIndex = tag.second;
|
||||
SelectionOverride override = overrides.get(groupIndex);
|
||||
Assertions.checkNotNull(mappedTrackInfo);
|
||||
boolean adaptiveSelectionsEnabled = shouldEnableAdaptiveSelection(groupIndex);
|
||||
if (!allowMultipleOverrides && override == null && overrides.size() > 0) {
|
||||
// A new override is being started and we don't allow multiple overrides.
|
||||
overrides.clear();
|
||||
}
|
||||
if (override == null || !adaptiveSelectionsEnabled) {
|
||||
// Set new override for current group.
|
||||
if (override == null) {
|
||||
// Start new override.
|
||||
if (!allowMultipleOverrides && overrides.size() > 0) {
|
||||
// Removed other overrides if we don't allow multiple overrides.
|
||||
overrides.clear();
|
||||
}
|
||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, trackIndex));
|
||||
} else {
|
||||
// An existing override is being modified.
|
||||
int overrideLength = override.length;
|
||||
int[] overrideTracks = override.tracks;
|
||||
if (((CheckedTextView) view).isChecked()) {
|
||||
boolean isCurrentlySelected = ((CheckedTextView) view).isChecked();
|
||||
boolean isAdaptiveAllowed = shouldEnableAdaptiveSelection(groupIndex);
|
||||
boolean isUsingCheckBox = isAdaptiveAllowed || shouldEnableMultiGroupSelection();
|
||||
if (isCurrentlySelected && isUsingCheckBox) {
|
||||
// Remove the track from the override.
|
||||
if (overrideLength == 1) {
|
||||
// The last track is being removed, so the override becomes empty.
|
||||
@ -356,9 +357,15 @@ public class TrackSelectionView extends LinearLayout {
|
||||
int[] tracks = getTracksRemoving(overrideTracks, trackIndex);
|
||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, tracks));
|
||||
}
|
||||
} else {
|
||||
int[] tracks = getTracksAdding(overrideTracks, trackIndex);
|
||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, tracks));
|
||||
} else if (!isCurrentlySelected) {
|
||||
if (isAdaptiveAllowed) {
|
||||
// Add new track to adaptive override.
|
||||
int[] tracks = getTracksAdding(overrideTracks, trackIndex);
|
||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, tracks));
|
||||
} else {
|
||||
// Replace existing track in override.
|
||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, trackIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -371,6 +378,10 @@ public class TrackSelectionView extends LinearLayout {
|
||||
!= RendererCapabilities.ADAPTIVE_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
private boolean shouldEnableMultiGroupSelection() {
|
||||
return allowMultipleOverrides && trackGroups.length > 1;
|
||||
}
|
||||
|
||||
private static int[] getTracksAdding(int[] tracks, int addedTrack) {
|
||||
tracks = Arrays.copyOf(tracks, tracks.length + 1);
|
||||
tracks[tracks.length - 1] = addedTrack;
|
||||
|
Loading…
x
Reference in New Issue
Block a user