diff --git a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java index 191108f1c8..911dac1ff5 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/IntentUtil.java @@ -23,11 +23,13 @@ import android.net.Uri; import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.MediaItem; +import androidx.media3.common.MediaItem.ClippingConfiguration; +import androidx.media3.common.MediaItem.SubtitleConfiguration; import androidx.media3.common.MediaMetadata; import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Util; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -117,36 +119,46 @@ public class IntentUtil { @Nullable String mimeType = intent.getStringExtra(MIME_TYPE_EXTRA + extrasKeySuffix); @Nullable String title = intent.getStringExtra(TITLE_EXTRA + extrasKeySuffix); @Nullable String adTagUri = intent.getStringExtra(AD_TAG_URI_EXTRA + extrasKeySuffix); + @Nullable + SubtitleConfiguration subtitleConfiguration = + createSubtitleConfiguration(intent, extrasKeySuffix); MediaItem.Builder builder = new MediaItem.Builder() .setUri(uri) .setMimeType(mimeType) .setMediaMetadata(new MediaMetadata.Builder().setTitle(title).build()) - .setSubtitles(createSubtitlesFromIntent(intent, extrasKeySuffix)) - .setClipStartPositionMs( - intent.getLongExtra(CLIP_START_POSITION_MS_EXTRA + extrasKeySuffix, 0)) - .setClipEndPositionMs( - intent.getLongExtra( - CLIP_END_POSITION_MS_EXTRA + extrasKeySuffix, C.TIME_END_OF_SOURCE)); + .setClippingConfiguration( + new ClippingConfiguration.Builder() + .setStartPositionMs( + intent.getLongExtra(CLIP_START_POSITION_MS_EXTRA + extrasKeySuffix, 0)) + .setEndPositionMs( + intent.getLongExtra( + CLIP_END_POSITION_MS_EXTRA + extrasKeySuffix, C.TIME_END_OF_SOURCE)) + .build()); if (adTagUri != null) { builder.setAdsConfiguration( new MediaItem.AdsConfiguration.Builder(Uri.parse(adTagUri)).build()); } + if (subtitleConfiguration != null) { + builder.setSubtitleConfigurations(ImmutableList.of(subtitleConfiguration)); + } return populateDrmPropertiesFromIntent(builder, intent, extrasKeySuffix).build(); } - private static List createSubtitlesFromIntent( + @Nullable + private static MediaItem.SubtitleConfiguration createSubtitleConfiguration( Intent intent, String extrasKeySuffix) { if (!intent.hasExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix)) { - return Collections.emptyList(); + return null; } - return Collections.singletonList( - new MediaItem.Subtitle( - Uri.parse(intent.getStringExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix)), - checkNotNull(intent.getStringExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix)), - intent.getStringExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix), - C.SELECTION_FLAG_DEFAULT)); + return new MediaItem.SubtitleConfiguration.Builder( + Uri.parse(intent.getStringExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix))) + .setMimeType( + checkNotNull(intent.getStringExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix))) + .setLanguage(intent.getStringExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix)) + .setSelectionFlags(C.SELECTION_FLAG_DEFAULT) + .build(); } private static MediaItem.Builder populateDrmPropertiesFromIntent( diff --git a/demos/main/src/main/java/androidx/media3/demo/main/SampleChooserActivity.java b/demos/main/src/main/java/androidx/media3/demo/main/SampleChooserActivity.java index c0c9663a7b..7e5d4973df 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/SampleChooserActivity.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/SampleChooserActivity.java @@ -43,6 +43,7 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.media3.common.MediaItem; +import androidx.media3.common.MediaItem.ClippingConfiguration; import androidx.media3.common.MediaMetadata; import androidx.media3.common.ParserException; import androidx.media3.common.util.Log; @@ -53,6 +54,7 @@ import androidx.media3.datasource.DataSourceUtil; import androidx.media3.datasource.DataSpec; import androidx.media3.exoplayer.RenderersFactory; import androidx.media3.exoplayer.offline.DownloadService; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import java.io.IOException; import java.io.InputStream; @@ -351,6 +353,8 @@ public class SampleChooserActivity extends AppCompatActivity boolean drmSessionForClearContent = false; boolean drmMultiSession = false; boolean drmForceDefaultLicenseUri = false; + MediaItem.ClippingConfiguration.Builder clippingConfiguration = + new ClippingConfiguration.Builder(); MediaItem.Builder mediaItem = new MediaItem.Builder(); reader.beginObject(); @@ -367,10 +371,10 @@ public class SampleChooserActivity extends AppCompatActivity extension = reader.nextString(); break; case "clip_start_position_ms": - mediaItem.setClipStartPositionMs(reader.nextLong()); + clippingConfiguration.setStartPositionMs(reader.nextLong()); break; case "clip_end_position_ms": - mediaItem.setClipEndPositionMs(reader.nextLong()); + clippingConfiguration.setEndPositionMs(reader.nextLong()); break; case "ad_tag_uri": mediaItem.setAdsConfiguration( @@ -439,7 +443,8 @@ public class SampleChooserActivity extends AppCompatActivity mediaItem .setUri(uri) .setMediaMetadata(new MediaMetadata.Builder().setTitle(title).build()) - .setMimeType(adaptiveMimeType); + .setMimeType(adaptiveMimeType) + .setClippingConfiguration(clippingConfiguration.build()); if (drmUuid != null) { mediaItem.setDrmConfiguration( new MediaItem.DrmConfiguration.Builder(drmUuid) @@ -463,13 +468,15 @@ public class SampleChooserActivity extends AppCompatActivity "drm_uuid is required if drm_force_default_license_uri is set."); } if (subtitleUri != null) { - MediaItem.Subtitle subtitle = - new MediaItem.Subtitle( - subtitleUri, - checkNotNull( - subtitleMimeType, "subtitle_mime_type is required if subtitle_uri is set."), - subtitleLanguage); - mediaItem.setSubtitles(Collections.singletonList(subtitle)); + MediaItem.SubtitleConfiguration subtitleConfiguration = + new MediaItem.SubtitleConfiguration.Builder(subtitleUri) + .setMimeType( + checkNotNull( + subtitleMimeType, + "subtitle_mime_type is required if subtitle_uri is set.")) + .setLanguage(subtitleLanguage) + .build(); + mediaItem.setSubtitleConfigurations(ImmutableList.of(subtitleConfiguration)); } return new PlaylistHolder(title, Collections.singletonList(mediaItem.build())); }