|
116 | 116 | import androidx.appcompat.view.ContextThemeWrapper; |
117 | 117 | import androidx.appcompat.widget.AppCompatImageButton; |
118 | 118 | import androidx.appcompat.widget.PopupMenu; |
119 | | -import androidx.collection.ArraySet; |
120 | 119 | import androidx.core.content.ContextCompat; |
121 | 120 | import androidx.core.graphics.Insets; |
122 | 121 | import androidx.core.view.ViewCompat; |
|
135 | 134 | import com.google.android.exoplayer2.Player.PositionInfo; |
136 | 135 | import com.google.android.exoplayer2.RenderersFactory; |
137 | 136 | import com.google.android.exoplayer2.Timeline; |
138 | | -import com.google.android.exoplayer2.TracksInfo; |
| 137 | +import com.google.android.exoplayer2.Tracks; |
139 | 138 | import com.google.android.exoplayer2.source.MediaSource; |
140 | | -import com.google.android.exoplayer2.text.Cue; |
| 139 | +import com.google.android.exoplayer2.text.CueGroup; |
141 | 140 | import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; |
142 | 141 | import com.google.android.exoplayer2.trackselection.MappingTrackSelector; |
143 | 142 | import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; |
@@ -513,6 +512,7 @@ private void initPlayer(final boolean playOnReady) { |
513 | 512 | simpleExoPlayer = new ExoPlayer.Builder(context, renderFactory) |
514 | 513 | .setTrackSelector(trackSelector) |
515 | 514 | .setLoadControl(loadController) |
| 515 | + .setUsePlatformDiagnostics(false) |
516 | 516 | .build(); |
517 | 517 | simpleExoPlayer.addListener(this); |
518 | 518 | simpleExoPlayer.setPlayWhenReady(playOnReady); |
@@ -2515,12 +2515,12 @@ public void onEvents(@NonNull final com.google.android.exoplayer2.Player player, |
2515 | 2515 | } |
2516 | 2516 |
|
2517 | 2517 | @Override |
2518 | | - public void onTracksInfoChanged(@NonNull final TracksInfo tracksInfo) { |
| 2518 | + public void onTracksChanged(@NonNull final Tracks tracks) { |
2519 | 2519 | if (DEBUG) { |
2520 | 2520 | Log.d(TAG, "ExoPlayer - onTracksChanged(), " |
2521 | | - + "track group size = " + tracksInfo.getTrackGroupInfos().size()); |
| 2521 | + + "track group size = " + tracks.getGroups().size()); |
2522 | 2522 | } |
2523 | | - onTextTracksChanged(tracksInfo); |
| 2523 | + onTextTracksChanged(tracks); |
2524 | 2524 | } |
2525 | 2525 |
|
2526 | 2526 | @Override |
@@ -2586,8 +2586,8 @@ public void onRenderedFirstFrame() { |
2586 | 2586 | } |
2587 | 2587 |
|
2588 | 2588 | @Override |
2589 | | - public void onCues(@NonNull final List<Cue> cues) { |
2590 | | - binding.subtitleView.onCues(cues); |
| 2589 | + public void onCues(@NonNull final CueGroup cueGroup) { |
| 2590 | + binding.subtitleView.setCues(cueGroup.cues); |
2591 | 2591 | } |
2592 | 2592 | //endregion |
2593 | 2593 |
|
@@ -3674,34 +3674,35 @@ private void setupSubtitleView() { |
3674 | 3674 | binding.subtitleView.setStyle(captionStyle); |
3675 | 3675 | } |
3676 | 3676 |
|
3677 | | - private void onTextTracksChanged(@NonNull final TracksInfo currentTrackInfo) { |
| 3677 | + private void onTextTracksChanged(@NonNull final Tracks currentTrack) { |
3678 | 3678 | if (binding == null) { |
3679 | 3679 | return; |
3680 | 3680 | } |
3681 | 3681 |
|
3682 | | - if (trackSelector.getCurrentMappedTrackInfo() == null |
3683 | | - || !currentTrackInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_TEXT)) { |
| 3682 | + final boolean trackTypeTextSupported = !currentTrack.containsType(C.TRACK_TYPE_TEXT) |
| 3683 | + || currentTrack.isTypeSupported(C.TRACK_TYPE_TEXT, false); |
| 3684 | + if (trackSelector.getCurrentMappedTrackInfo() == null || !trackTypeTextSupported) { |
3684 | 3685 | binding.captionTextView.setVisibility(View.GONE); |
3685 | 3686 | return; |
3686 | 3687 | } |
3687 | 3688 |
|
3688 | 3689 | // Extract all loaded languages |
3689 | | - final List<TracksInfo.TrackGroupInfo> textTracks = currentTrackInfo |
3690 | | - .getTrackGroupInfos() |
| 3690 | + final List<Tracks.Group> textTracks = currentTrack |
| 3691 | + .getGroups() |
3691 | 3692 | .stream() |
3692 | | - .filter(trackGroupInfo -> C.TRACK_TYPE_TEXT == trackGroupInfo.getTrackType()) |
| 3693 | + .filter(trackGroupInfo -> C.TRACK_TYPE_TEXT == trackGroupInfo.getType()) |
3693 | 3694 | .collect(Collectors.toList()); |
3694 | 3695 | final List<String> availableLanguages = textTracks.stream() |
3695 | | - .map(TracksInfo.TrackGroupInfo::getTrackGroup) |
| 3696 | + .map(Tracks.Group::getMediaTrackGroup) |
3696 | 3697 | .filter(textTrack -> textTrack.length > 0) |
3697 | 3698 | .map(textTrack -> textTrack.getFormat(0).language) |
3698 | 3699 | .collect(Collectors.toList()); |
3699 | 3700 |
|
3700 | 3701 | // Find selected text track |
3701 | 3702 | final Optional<Format> selectedTracks = textTracks.stream() |
3702 | | - .filter(TracksInfo.TrackGroupInfo::isSelected) |
3703 | | - .filter(info -> info.getTrackGroup().length >= 1) |
3704 | | - .map(info -> info.getTrackGroup().getFormat(0)) |
| 3703 | + .filter(Tracks.Group::isSelected) |
| 3704 | + .filter(info -> info.getMediaTrackGroup().length >= 1) |
| 3705 | + .map(info -> info.getMediaTrackGroup().getFormat(0)) |
3705 | 3706 | .findFirst(); |
3706 | 3707 |
|
3707 | 3708 | // Build UI |
@@ -4249,20 +4250,12 @@ private void useVideoSource(final boolean videoEnabled) { |
4249 | 4250 | return; |
4250 | 4251 | } |
4251 | 4252 |
|
4252 | | - final DefaultTrackSelector.ParametersBuilder parametersBuilder = |
| 4253 | + final DefaultTrackSelector.Parameters.Builder parametersBuilder = |
4253 | 4254 | trackSelector.buildUponParameters(); |
4254 | 4255 |
|
4255 | | - if (videoEnabled) { |
4256 | | - // Enable again the video track and the subtitles, if there is one selected |
4257 | | - parametersBuilder.setDisabledTrackTypes(Collections.emptySet()); |
4258 | | - } else { |
4259 | | - // Disable the video track and the ability to select subtitles |
4260 | | - // Use an ArraySet because we can't use Set.of() on all supported APIs by the app |
4261 | | - final ArraySet<Integer> disabledTracks = new ArraySet<>(); |
4262 | | - disabledTracks.add(C.TRACK_TYPE_TEXT); |
4263 | | - disabledTracks.add(C.TRACK_TYPE_VIDEO); |
4264 | | - parametersBuilder.setDisabledTrackTypes(disabledTracks); |
4265 | | - } |
| 4256 | + // Enable/disable the video track and the ability to select subtitles |
| 4257 | + parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, !videoEnabled); |
| 4258 | + parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, !videoEnabled); |
4266 | 4259 |
|
4267 | 4260 | trackSelector.setParameters(parametersBuilder); |
4268 | 4261 | } |
|
0 commit comments