mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00: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
1 changed files with 24 additions and 13 deletions
|
|
@ -254,8 +254,7 @@ public class TrackSelectionView extends LinearLayout {
|
||||||
|
|
||||||
// Add per-track views.
|
// Add per-track views.
|
||||||
trackViews = new CheckedTextView[trackGroups.length][];
|
trackViews = new CheckedTextView[trackGroups.length][];
|
||||||
boolean enableMultipleChoiceForMultipleOverrides =
|
boolean enableMultipleChoiceForMultipleOverrides = shouldEnableMultiGroupSelection();
|
||||||
allowMultipleOverrides && trackGroups.length > 1;
|
|
||||||
for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) {
|
for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) {
|
||||||
TrackGroup group = trackGroups.get(groupIndex);
|
TrackGroup group = trackGroups.get(groupIndex);
|
||||||
boolean enableMultipleChoiceForAdaptiveSelections = shouldEnableAdaptiveSelection(groupIndex);
|
boolean enableMultipleChoiceForAdaptiveSelections = shouldEnableAdaptiveSelection(groupIndex);
|
||||||
|
|
@ -332,19 +331,21 @@ public class TrackSelectionView extends LinearLayout {
|
||||||
int trackIndex = tag.second;
|
int trackIndex = tag.second;
|
||||||
SelectionOverride override = overrides.get(groupIndex);
|
SelectionOverride override = overrides.get(groupIndex);
|
||||||
Assertions.checkNotNull(mappedTrackInfo);
|
Assertions.checkNotNull(mappedTrackInfo);
|
||||||
boolean adaptiveSelectionsEnabled = shouldEnableAdaptiveSelection(groupIndex);
|
if (override == null) {
|
||||||
if (!allowMultipleOverrides && override == null && overrides.size() > 0) {
|
// Start new override.
|
||||||
// A new override is being started and we don't allow multiple overrides.
|
if (!allowMultipleOverrides && overrides.size() > 0) {
|
||||||
|
// Removed other overrides if we don't allow multiple overrides.
|
||||||
overrides.clear();
|
overrides.clear();
|
||||||
}
|
}
|
||||||
if (override == null || !adaptiveSelectionsEnabled) {
|
|
||||||
// Set new override for current group.
|
|
||||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, trackIndex));
|
overrides.put(groupIndex, new SelectionOverride(groupIndex, trackIndex));
|
||||||
} else {
|
} else {
|
||||||
// An existing override is being modified.
|
// An existing override is being modified.
|
||||||
int overrideLength = override.length;
|
int overrideLength = override.length;
|
||||||
int[] overrideTracks = override.tracks;
|
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.
|
// Remove the track from the override.
|
||||||
if (overrideLength == 1) {
|
if (overrideLength == 1) {
|
||||||
// The last track is being removed, so the override becomes empty.
|
// 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);
|
int[] tracks = getTracksRemoving(overrideTracks, trackIndex);
|
||||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, tracks));
|
overrides.put(groupIndex, new SelectionOverride(groupIndex, tracks));
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!isCurrentlySelected) {
|
||||||
|
if (isAdaptiveAllowed) {
|
||||||
|
// Add new track to adaptive override.
|
||||||
int[] tracks = getTracksAdding(overrideTracks, trackIndex);
|
int[] tracks = getTracksAdding(overrideTracks, trackIndex);
|
||||||
overrides.put(groupIndex, new SelectionOverride(groupIndex, tracks));
|
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;
|
!= RendererCapabilities.ADAPTIVE_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean shouldEnableMultiGroupSelection() {
|
||||||
|
return allowMultipleOverrides && trackGroups.length > 1;
|
||||||
|
}
|
||||||
|
|
||||||
private static int[] getTracksAdding(int[] tracks, int addedTrack) {
|
private static int[] getTracksAdding(int[] tracks, int addedTrack) {
|
||||||
tracks = Arrays.copyOf(tracks, tracks.length + 1);
|
tracks = Arrays.copyOf(tracks, tracks.length + 1);
|
||||||
tracks[tracks.length - 1] = addedTrack;
|
tracks[tracks.length - 1] = addedTrack;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue