From ed5b7004b435f71c5a37f5db12c3641fbba9be48 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 26 Jan 2024 10:03:55 -0800 Subject: [PATCH] Replace or suppress deprecated usages Many usages are needed to support other deprecations and some can be replaced by the recommended direct alternative. Also replace links to deprecated/redirected dev site PiperOrigin-RevId: 601795998 --- .../media3/demo/cast/MainActivity.java | 3 +- .../media3/demo/main/DownloadTracker.java | 68 ++++++++++++------- .../demo/main/SampleChooserActivity.java | 59 +++++++++------- demos/transformer/README.md | 2 +- .../androidx/media3/common/AdOverlayInfo.java | 1 + .../media3/common/AdPlaybackState.java | 4 +- .../java/androidx/media3/common/Format.java | 4 +- .../media3/common/ForwardingPlayer.java | 5 ++ .../androidx/media3/common/MediaItem.java | 45 +++++++++--- .../androidx/media3/common/MimeTypes.java | 1 + .../java/androidx/media3/common/Player.java | 2 + .../media3/common/SimpleBasePlayer.java | 4 ++ .../common/util/NetworkTypeObserver.java | 1 + .../media3/common/util/NonNullApi.java | 2 + .../androidx/media3/common/util/Util.java | 2 +- .../datasource/cronet/CronetDataSource.java | 2 + .../cronet/CronetDataSourceFactory.java | 12 ++++ .../datasource/okhttp/OkHttpDataSource.java | 4 +- libraries/decoder_av1/README.md | 2 +- libraries/decoder_ffmpeg/README.md | 4 +- libraries/decoder_flac/README.md | 2 +- libraries/decoder_opus/README.md | 2 +- libraries/decoder_vp9/README.md | 2 +- .../effect/AlphaScaleShaderProgram.java | 4 +- .../media3/exoplayer/DefaultMediaClock.java | 4 +- .../androidx/media3/exoplayer/ExoPlayer.java | 20 +++--- .../media3/exoplayer/ExoPlayerImpl.java | 1 + .../media3/exoplayer/LoadControl.java | 2 + .../media3/exoplayer/SimpleExoPlayer.java | 1 + .../audio/MediaCodecAudioRenderer.java | 16 ++--- .../media3/exoplayer/image/ImageRenderer.java | 1 + .../exoplayer/scheduler/Requirements.java | 1 + .../source/DefaultMediaSourceFactory.java | 6 +- .../exoplayer/source/MediaSourceFactory.java | 1 + .../media3/exoplayer/text/TextRenderer.java | 1 + .../trackselection/DefaultTrackSelector.java | 61 ++++++++++++++++- .../trackselection/TrackSelectionUtil.java | 12 +--- libraries/exoplayer_dash/README.md | 2 +- .../media3/exoplayer/dash/DashUtil.java | 9 ++- libraries/exoplayer_hls/README.md | 2 +- .../MediaParserHlsMediaChunkExtractor.java | 9 ++- libraries/exoplayer_ima/README.md | 5 +- .../ImaServerSideAdInsertionMediaSource.java | 1 + libraries/exoplayer_rtsp/README.md | 2 +- libraries/exoplayer_smoothstreaming/README.md | 2 +- .../metadata/flac/VorbisComment.java | 1 + .../metadata/id3/TextInformationFrame.java | 1 + .../extractor/mkv/MatroskaExtractor.java | 16 +++-- .../extractor/mp4/FragmentedMp4Extractor.java | 18 +++-- .../media3/extractor/mp4/Mp4Extractor.java | 16 +++-- .../media3/extractor/ts/TsExtractor.java | 16 +++-- .../media3/session/LegacyConversions.java | 8 +-- .../media3/session/MediaButtonReceiver.java | 2 +- .../session/MediaControllerImplBase.java | 4 ++ .../androidx/media3/session/MediaSession.java | 10 +-- .../session/MediaSessionLegacyStub.java | 14 ---- .../media3/session/MediaSessionService.java | 8 +-- .../media3/session/MediaSessionStub.java | 10 ++- .../session/MediaStyleNotificationHelper.java | 6 +- .../media3/session/PlayerWrapper.java | 11 +++ .../MediaControllerProviderService.java | 4 ++ .../media3/test/utils/FakeExoMediaDrm.java | 6 +- .../media3/test/utils/StubExoPlayer.java | 4 ++ .../utils/robolectric/PlaybackOutput.java | 1 + libraries/transformer/README.md | 2 +- .../transformer/DefaultEncoderFactory.java | 2 +- .../media3/transformer/ImageAssetLoader.java | 2 +- .../androidx/media3/transformer/Mp4Info.java | 5 +- .../transformer/TransformationException.java | 1 + .../transformer/TransformationResult.java | 1 + .../media3/transformer/Transformer.java | 3 + libraries/ui/README.md | 2 +- .../androidx/media3/ui/PlayerControlView.java | 7 +- .../java/androidx/media3/ui/PlayerView.java | 18 ++--- ...utPlaybackSuppressionResolverListener.java | 4 +- 75 files changed, 400 insertions(+), 199 deletions(-) diff --git a/demos/cast/src/main/java/androidx/media3/demo/cast/MainActivity.java b/demos/cast/src/main/java/androidx/media3/demo/cast/MainActivity.java index aa9bd9f08e..ae49a6f45a 100644 --- a/demos/cast/src/main/java/androidx/media3/demo/cast/MainActivity.java +++ b/demos/cast/src/main/java/androidx/media3/demo/cast/MainActivity.java @@ -44,6 +44,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.google.android.gms.cast.framework.CastButtonFactory; import com.google.android.gms.cast.framework.CastContext; import com.google.android.gms.dynamite.DynamiteModule; +import com.google.common.util.concurrent.MoreExecutors; /** * An activity that plays video using {@link ExoPlayer} and supports casting using ExoPlayer's Cast @@ -65,7 +66,7 @@ public class MainActivity extends AppCompatActivity super.onCreate(savedInstanceState); // Getting the cast context later than onStart can cause device discovery not to take place. try { - castContext = CastContext.getSharedInstance(this); + castContext = CastContext.getSharedInstance(this, MoreExecutors.directExecutor()).getResult(); } catch (RuntimeException e) { Throwable cause = e.getCause(); while (cause != null) { diff --git a/demos/main/src/main/java/androidx/media3/demo/main/DownloadTracker.java b/demos/main/src/main/java/androidx/media3/demo/main/DownloadTracker.java index af32eb7065..a82ebb006d 100644 --- a/demos/main/src/main/java/androidx/media3/demo/main/DownloadTracker.java +++ b/demos/main/src/main/java/androidx/media3/demo/main/DownloadTracker.java @@ -20,7 +20,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import android.content.Context; import android.content.DialogInterface; import android.net.Uri; -import android.os.AsyncTask; +import android.os.Handler; +import android.os.Looper; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.annotation.OptIn; @@ -54,6 +55,9 @@ import java.io.IOException; import java.util.HashMap; import java.util.UUID; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; /** Tracks media that has been downloaded. */ @OptIn(markerClass = androidx.media3.common.util.UnstableApi.class) @@ -182,7 +186,7 @@ public class DownloadTracker { trackSelectionDialog.dismiss(); } if (widevineOfflineLicenseFetchTask != null) { - widevineOfflineLicenseFetchTask.cancel(false); + widevineOfflineLicenseFetchTask.cancel(); } } @@ -358,14 +362,16 @@ public class DownloadTracker { /** Downloads a Widevine offline license in a background thread. */ @RequiresApi(18) - private static final class WidevineOfflineLicenseFetchTask extends AsyncTask { + private static final class WidevineOfflineLicenseFetchTask { private final Format format; private final MediaItem.DrmConfiguration drmConfiguration; private final DataSource.Factory dataSourceFactory; private final StartDownloadDialogHelper dialogHelper; private final DownloadHelper downloadHelper; + private final ExecutorService executorService; + @Nullable Future future; @Nullable private byte[] keySetId; @Nullable private DrmSession.DrmSessionException drmSessionException; @@ -375,6 +381,7 @@ public class DownloadTracker { DataSource.Factory dataSourceFactory, StartDownloadDialogHelper dialogHelper, DownloadHelper downloadHelper) { + this.executorService = Executors.newSingleThreadExecutor(); this.format = format; this.drmConfiguration = drmConfiguration; this.dataSourceFactory = dataSourceFactory; @@ -382,32 +389,41 @@ public class DownloadTracker { this.downloadHelper = downloadHelper; } - @Override - protected Void doInBackground(Void... voids) { - OfflineLicenseHelper offlineLicenseHelper = - OfflineLicenseHelper.newWidevineInstance( - drmConfiguration.licenseUri.toString(), - drmConfiguration.forceDefaultLicenseUri, - dataSourceFactory, - drmConfiguration.licenseRequestHeaders, - new DrmSessionEventListener.EventDispatcher()); - try { - keySetId = offlineLicenseHelper.downloadLicense(format); - } catch (DrmSession.DrmSessionException e) { - drmSessionException = e; - } finally { - offlineLicenseHelper.release(); + public void cancel() { + if (future != null) { + future.cancel(/* mayInterruptIfRunning= */ false); } - return null; } - @Override - protected void onPostExecute(Void aVoid) { - if (drmSessionException != null) { - dialogHelper.onOfflineLicenseFetchedError(drmSessionException); - } else { - dialogHelper.onOfflineLicenseFetched(downloadHelper, checkNotNull(keySetId)); - } + public void execute() { + future = + executorService.submit( + () -> { + OfflineLicenseHelper offlineLicenseHelper = + OfflineLicenseHelper.newWidevineInstance( + drmConfiguration.licenseUri.toString(), + drmConfiguration.forceDefaultLicenseUri, + dataSourceFactory, + drmConfiguration.licenseRequestHeaders, + new DrmSessionEventListener.EventDispatcher()); + try { + keySetId = offlineLicenseHelper.downloadLicense(format); + } catch (DrmSession.DrmSessionException e) { + drmSessionException = e; + } finally { + offlineLicenseHelper.release(); + new Handler(Looper.getMainLooper()) + .post( + () -> { + if (drmSessionException != null) { + dialogHelper.onOfflineLicenseFetchedError(drmSessionException); + } else { + dialogHelper.onOfflineLicenseFetched( + downloadHelper, checkNotNull(keySetId)); + } + }); + } + }); } } } 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 7d10a65966..496722701f 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 @@ -26,9 +26,10 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.net.Uri; -import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.text.TextUtils; import android.util.JsonReader; import android.view.Menu; @@ -72,6 +73,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** An activity for selecting from a list of media samples. */ public class SampleChooserActivity extends AppCompatActivity @@ -282,34 +285,42 @@ public class SampleChooserActivity extends AppCompatActivity return menuItem != null && menuItem.isChecked(); } - private final class SampleListLoader extends AsyncTask> { + private final class SampleListLoader { + + private final ExecutorService executorService; private boolean sawError; - @OptIn(markerClass = androidx.media3.common.util.UnstableApi.class) - @Override - protected List doInBackground(String... uris) { - List result = new ArrayList<>(); - Context context = getApplicationContext(); - DataSource dataSource = DemoUtil.getDataSourceFactory(context).createDataSource(); - for (String uri : uris) { - DataSpec dataSpec = new DataSpec(Uri.parse(uri)); - InputStream inputStream = new DataSourceInputStream(dataSource, dataSpec); - try { - readPlaylistGroups(new JsonReader(new InputStreamReader(inputStream, "UTF-8")), result); - } catch (Exception e) { - Log.e(TAG, "Error loading sample list: " + uri, e); - sawError = true; - } finally { - DataSourceUtil.closeQuietly(dataSource); - } - } - return result; + public SampleListLoader() { + executorService = Executors.newSingleThreadExecutor(); } - @Override - protected void onPostExecute(List result) { - onPlaylistGroups(result, sawError); + @OptIn(markerClass = androidx.media3.common.util.UnstableApi.class) + public void execute(String... uris) { + executorService.execute( + () -> { + List result = new ArrayList<>(); + Context context = getApplicationContext(); + DataSource dataSource = DemoUtil.getDataSourceFactory(context).createDataSource(); + for (String uri : uris) { + DataSpec dataSpec = new DataSpec(Uri.parse(uri)); + InputStream inputStream = new DataSourceInputStream(dataSource, dataSpec); + try { + readPlaylistGroups( + new JsonReader(new InputStreamReader(inputStream, "UTF-8")), result); + } catch (Exception e) { + Log.e(TAG, "Error loading sample list: " + uri, e); + sawError = true; + } finally { + DataSourceUtil.closeQuietly(dataSource); + } + } + new Handler(Looper.getMainLooper()) + .post( + () -> { + onPlaylistGroups(result, sawError); + }); + }); } private void readPlaylistGroups(JsonReader reader, List groups) diff --git a/demos/transformer/README.md b/demos/transformer/README.md index 9733337292..58b44d210f 100644 --- a/demos/transformer/README.md +++ b/demos/transformer/README.md @@ -61,6 +61,6 @@ manual steps. (this will only appear if the AAR is present), then build and run the demo app and select a MediaPipe-based effect. -[Transformer]: https://developer.android.com/guide/topics/media/transforming-media +[Transformer]: https://developer.android.com/media/media3/transformer [MediaPipe]: https://google.github.io/mediapipe/ [build an AAR]: https://google.github.io/mediapipe/getting_started/android_archive_library.html diff --git a/libraries/common/src/main/java/androidx/media3/common/AdOverlayInfo.java b/libraries/common/src/main/java/androidx/media3/common/AdOverlayInfo.java index 268ce25be7..98b2b81d57 100644 --- a/libraries/common/src/main/java/androidx/media3/common/AdOverlayInfo.java +++ b/libraries/common/src/main/java/androidx/media3/common/AdOverlayInfo.java @@ -109,6 +109,7 @@ public final class AdOverlayInfo { * @deprecated Use {@link Builder} instead. */ @UnstableApi + @SuppressWarnings("deprecation") // Intentionally using deprecated constructor @Deprecated public AdOverlayInfo(View view, @Purpose int purpose) { this(view, purpose, /* detailedReason= */ null); diff --git a/libraries/common/src/main/java/androidx/media3/common/AdPlaybackState.java b/libraries/common/src/main/java/androidx/media3/common/AdPlaybackState.java index e65c7fec89..2edff13870 100644 --- a/libraries/common/src/main/java/androidx/media3/common/AdPlaybackState.java +++ b/libraries/common/src/main/java/androidx/media3/common/AdPlaybackState.java @@ -117,6 +117,7 @@ public final class AdPlaybackState implements Bundleable { /* isServerSideInserted= */ false); } + @SuppressWarnings("deprecation") // Intentionally assigning deprecated field private AdGroup( long timeUs, int count, @@ -502,8 +503,9 @@ public final class AdPlaybackState implements Bundleable { private static final String FIELD_ORIGINAL_COUNT = Util.intToStringMaxRadix(7); @VisibleForTesting static final String FIELD_MEDIA_ITEMS = Util.intToStringMaxRadix(8); + // Intentionally assigning deprecated field. // putParcelableArrayList actually supports null elements. - @SuppressWarnings("nullness:argument") + @SuppressWarnings({"deprecation", "nullness:argument"}) @Override public Bundle toBundle() { Bundle bundle = new Bundle(); diff --git a/libraries/common/src/main/java/androidx/media3/common/Format.java b/libraries/common/src/main/java/androidx/media3/common/Format.java index a8522ef63d..1a9a77a214 100644 --- a/libraries/common/src/main/java/androidx/media3/common/Format.java +++ b/libraries/common/src/main/java/androidx/media3/common/Format.java @@ -42,8 +42,8 @@ import java.util.UUID; * *

When building formats, populate all fields whose values are known and relevant to the type of * format being constructed. For information about different types of format, see ExoPlayer's Supported - * formats page. + * href="https://developer.android.com/media/media3/exoplayer/supported-formats">Supported formats + * page. * *

Fields commonly relevant to all formats

* diff --git a/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java b/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java index 645c30277d..4092cc15a9 100644 --- a/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java +++ b/libraries/common/src/main/java/androidx/media3/common/ForwardingPlayer.java @@ -860,6 +860,7 @@ public class ForwardingPlayer implements Player { /** * @deprecated Use {@link #setDeviceVolume(int, int)} instead. */ + @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method @Deprecated @Override public void setDeviceVolume(int volume) { @@ -875,6 +876,7 @@ public class ForwardingPlayer implements Player { /** * @deprecated Use {@link #increaseDeviceVolume(int)} instead. */ + @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method @Deprecated @Override public void increaseDeviceVolume() { @@ -890,6 +892,7 @@ public class ForwardingPlayer implements Player { /** * @deprecated Use {@link #decreaseDeviceVolume(int)} instead. */ + @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method @Deprecated @Override public void decreaseDeviceVolume() { @@ -905,6 +908,7 @@ public class ForwardingPlayer implements Player { /** * @deprecated Use {@link #setDeviceMuted(boolean, int)} instead. */ + @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method @Deprecated @Override public void setDeviceMuted(boolean muted) { @@ -1106,6 +1110,7 @@ public class ForwardingPlayer implements Player { listener.onSkipSilenceEnabledChanged(skipSilenceEnabled); } + @SuppressWarnings("deprecation") // Intentionally forwarding deprecated method @Override public void onCues(List cues) { listener.onCues(cues); diff --git a/libraries/common/src/main/java/androidx/media3/common/MediaItem.java b/libraries/common/src/main/java/androidx/media3/common/MediaItem.java index aaa6478295..1bc3289afd 100644 --- a/libraries/common/src/main/java/androidx/media3/common/MediaItem.java +++ b/libraries/common/src/main/java/androidx/media3/common/MediaItem.java @@ -100,6 +100,8 @@ public final class MediaItem implements Bundleable { imageDurationMs = C.TIME_UNSET; } + // Using deprecated DrmConfiguration.Builder to support deprecated methods. + @SuppressWarnings("deprecation") private Builder(MediaItem mediaItem) { this(); clippingConfiguration = mediaItem.clippingConfiguration.buildUpon(); @@ -243,6 +245,8 @@ public final class MediaItem implements Bundleable { } /** Sets the optional DRM configuration. */ + // Using deprecated DrmConfiguration.Builder to support deprecated methods. + @SuppressWarnings("deprecation") @CanIgnoreReturnValue public Builder setDrmConfiguration(@Nullable DrmConfiguration drmConfiguration) { this.drmConfiguration = @@ -294,6 +298,7 @@ public final class MediaItem implements Bundleable { * @deprecated Use {@link #setDrmConfiguration(DrmConfiguration)} and pass the {@code uuid} to * {@link DrmConfiguration.Builder#Builder(UUID)} instead. */ + @SuppressWarnings("deprecation") // Forwarding deprecated call @CanIgnoreReturnValue @UnstableApi @Deprecated @@ -414,6 +419,7 @@ public final class MediaItem implements Bundleable { * #setSubtitleConfigurations(List)} doesn't accept null, use an empty list to clear the * contents. */ + @SuppressWarnings("deprecation") // Supporting deprecated type @CanIgnoreReturnValue @UnstableApi @Deprecated @@ -450,6 +456,7 @@ public final class MediaItem implements Bundleable { * with {@link Uri#parse(String)} and pass the result to {@link * AdsConfiguration.Builder#Builder(Uri)} instead. */ + @SuppressWarnings("deprecation") // Forwarding to other deprecated setter @CanIgnoreReturnValue @UnstableApi @Deprecated @@ -461,6 +468,7 @@ public final class MediaItem implements Bundleable { * @deprecated Use {@link #setAdsConfiguration(AdsConfiguration)} and pass the {@code adTagUri} * to {@link AdsConfiguration.Builder#Builder(Uri)} instead. */ + @SuppressWarnings("deprecation") // Forwarding to other deprecated setter @CanIgnoreReturnValue @UnstableApi @Deprecated @@ -593,6 +601,7 @@ public final class MediaItem implements Bundleable { } /** Returns a new {@link MediaItem} instance with the current builder values. */ + @SuppressWarnings("deprecation") // Building deprecated ClippingProperties type public MediaItem build() { // TODO: remove this check once all the deprecated individual DRM setters are removed. checkState(drmConfiguration.licenseUri == null || drmConfiguration.scheme != null); @@ -1172,7 +1181,10 @@ public final class MediaItem implements Bundleable { /** * @deprecated Use {@link #subtitleConfigurations} instead. */ - @UnstableApi @Deprecated public final List subtitles; + @SuppressWarnings("deprecation") // Using deprecated type in deprecated field + @UnstableApi + @Deprecated + public final List subtitles; /** * Optional tag for custom attributes. The tag for the media source which will be published in @@ -1577,12 +1589,18 @@ public final class MediaItem implements Bundleable { /** Restores a {@code LiveConfiguration} from a {@link Bundle}. */ @UnstableApi public static LiveConfiguration fromBundle(Bundle bundle) { - return new LiveConfiguration( - bundle.getLong(FIELD_TARGET_OFFSET_MS, /* defaultValue= */ UNSET.targetOffsetMs), - bundle.getLong(FIELD_MIN_OFFSET_MS, /* defaultValue= */ UNSET.minOffsetMs), - bundle.getLong(FIELD_MAX_OFFSET_MS, /* defaultValue= */ UNSET.maxOffsetMs), - bundle.getFloat(FIELD_MIN_PLAYBACK_SPEED, /* defaultValue= */ UNSET.minPlaybackSpeed), - bundle.getFloat(FIELD_MAX_PLAYBACK_SPEED, /* defaultValue= */ UNSET.maxPlaybackSpeed)); + return new LiveConfiguration.Builder() + .setTargetOffsetMs( + bundle.getLong(FIELD_TARGET_OFFSET_MS, /* defaultValue= */ UNSET.targetOffsetMs)) + .setMinOffsetMs( + bundle.getLong(FIELD_MIN_OFFSET_MS, /* defaultValue= */ UNSET.minOffsetMs)) + .setMaxOffsetMs( + bundle.getLong(FIELD_MAX_OFFSET_MS, /* defaultValue= */ UNSET.maxOffsetMs)) + .setMinPlaybackSpeed( + bundle.getFloat(FIELD_MIN_PLAYBACK_SPEED, /* defaultValue= */ UNSET.minPlaybackSpeed)) + .setMaxPlaybackSpeed( + bundle.getFloat(FIELD_MAX_PLAYBACK_SPEED, /* defaultValue= */ UNSET.maxPlaybackSpeed)) + .build(); } } @@ -1673,6 +1691,7 @@ public final class MediaItem implements Bundleable { return new SubtitleConfiguration(this); } + @SuppressWarnings("deprecation") // Building deprecated type to support deprecated builder private Subtitle buildSubtitle() { return new Subtitle(this); } @@ -1845,6 +1864,7 @@ public final class MediaItem implements Bundleable { /** * @deprecated Use {@link Builder} instead. */ + @SuppressWarnings("deprecation") // Forwarding to other deprecated constructor @UnstableApi @Deprecated public Subtitle(Uri uri, String mimeType, @Nullable String language) { @@ -1854,6 +1874,7 @@ public final class MediaItem implements Bundleable { /** * @deprecated Use {@link Builder} instead. */ + @SuppressWarnings("deprecation") // Forwarding to other deprecated constructor @UnstableApi @Deprecated public Subtitle( @@ -1989,12 +2010,13 @@ public final class MediaItem implements Bundleable { * builder. */ public ClippingConfiguration build() { - return buildClippingProperties(); + return new ClippingConfiguration(this); } /** * @deprecated Use {@link #build()} instead. */ + @SuppressWarnings("deprecation") // Building deprecated type to support deprecated methods @UnstableApi @Deprecated public ClippingProperties buildClippingProperties() { @@ -2130,6 +2152,7 @@ public final class MediaItem implements Bundleable { public static final Creator CREATOR = ClippingConfiguration::fromBundle; /** Restores a {@code ClippingProperties} from a {@link Bundle}. */ + @SuppressWarnings("deprecation") // Building deprecated type for backwards compatibility @UnstableApi public static ClippingProperties fromBundle(Bundle bundle) { ClippingConfiguration.Builder clippingConfiguration = @@ -2170,6 +2193,7 @@ public final class MediaItem implements Bundleable { @UnstableApi @Deprecated public static final class ClippingProperties extends ClippingConfiguration { + @SuppressWarnings("deprecation") // Using deprecated type public static final ClippingProperties UNSET = new ClippingConfiguration.Builder().buildClippingProperties(); @@ -2356,7 +2380,10 @@ public final class MediaItem implements Bundleable { /** * @deprecated Use {@link #clippingConfiguration} instead. */ - @UnstableApi @Deprecated public final ClippingProperties clippingProperties; + @SuppressWarnings("deprecation") // Keeping deprecated field with deprecated type + @UnstableApi + @Deprecated + public final ClippingProperties clippingProperties; /** The media {@link RequestMetadata}. */ public final RequestMetadata requestMetadata; diff --git a/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java b/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java index 54a08b6f94..bd2052f610 100644 --- a/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java +++ b/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java @@ -219,6 +219,7 @@ public final class MimeTypes { * Returns whether the given string is a text MIME type, including known text types that use * "application" as their base type. */ + @SuppressWarnings("deprecation") // Supporting deprecated MIME types @UnstableApi @Pure public static boolean isText(@Nullable String mimeType) { diff --git a/libraries/common/src/main/java/androidx/media3/common/Player.java b/libraries/common/src/main/java/androidx/media3/common/Player.java index 0577caf85a..0bcece4ea5 100644 --- a/libraries/common/src/main/java/androidx/media3/common/Player.java +++ b/libraries/common/src/main/java/androidx/media3/common/Player.java @@ -520,6 +520,7 @@ public interface Player { @UnstableApi public static final class Builder { + @SuppressWarnings("deprecation") // Includes deprecated commands private static final @Command int[] SUPPORTED_COMMANDS = { COMMAND_PLAY_PAUSE, COMMAND_PREPARE, @@ -1315,6 +1316,7 @@ public interface Player { */ // @Target list includes both 'default' targets and TYPE_USE, to ensure backwards compatibility // with Kotlin usages from before TYPE_USE was added. + @SuppressWarnings("deprecation") // Includes deprecated command @Documented @Retention(RetentionPolicy.SOURCE) @Target({FIELD, METHOD, PARAMETER, LOCAL_VARIABLE, TYPE_USE}) diff --git a/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java b/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java index 70a3f78541..a46ff5ddba 100644 --- a/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java +++ b/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java @@ -2767,6 +2767,7 @@ public abstract class SimpleBasePlayer extends BasePlayer { /** * @deprecated Use {@link #setDeviceVolume(int, int)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated command code @Deprecated @Override public final void setDeviceVolume(int volume) { @@ -2797,6 +2798,7 @@ public abstract class SimpleBasePlayer extends BasePlayer { /** * @deprecated Use {@link #increaseDeviceVolume(int)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated command code @Deprecated @Override public final void increaseDeviceVolume() { @@ -2829,6 +2831,7 @@ public abstract class SimpleBasePlayer extends BasePlayer { /** * @deprecated Use {@link #decreaseDeviceVolume(int)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated command code @Deprecated @Override public final void decreaseDeviceVolume() { @@ -2861,6 +2864,7 @@ public abstract class SimpleBasePlayer extends BasePlayer { /** * @deprecated Use {@link #setDeviceMuted(boolean, int)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated command code @Deprecated @Override public final void setDeviceMuted(boolean muted) { diff --git a/libraries/common/src/main/java/androidx/media3/common/util/NetworkTypeObserver.java b/libraries/common/src/main/java/androidx/media3/common/util/NetworkTypeObserver.java index 7b64795466..ec89d03867 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/NetworkTypeObserver.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/NetworkTypeObserver.java @@ -144,6 +144,7 @@ public final class NetworkTypeObserver { } } + @SuppressWarnings("deprecation") // Using deprecated NetworkInfo for compatibility to older APIs private static @C.NetworkType int getNetworkTypeFromConnectivityManager(Context context) { NetworkInfo networkInfo; @Nullable diff --git a/libraries/common/src/main/java/androidx/media3/common/util/NonNullApi.java b/libraries/common/src/main/java/androidx/media3/common/util/NonNullApi.java index 623fdb234f..703919e061 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/NonNullApi.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/NonNullApi.java @@ -27,6 +27,8 @@ import kotlin.annotations.jvm.UnderMigration; * Annotation to declare all type usages in the annotated instance as {@link Nonnull}, unless * explicitly marked with a nullable annotation. */ +// MigrationStatus.STRICT is marked as deprecated because it's considered experimental +@SuppressWarnings("deprecation") @Nonnull @TypeQualifierDefault(ElementType.TYPE_USE) @UnderMigration(status = MigrationStatus.STRICT) diff --git a/libraries/common/src/main/java/androidx/media3/common/util/Util.java b/libraries/common/src/main/java/androidx/media3/common/util/Util.java index 914bcdb410..a22a32ac2e 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/Util.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/Util.java @@ -2558,7 +2558,7 @@ public final class Util { return C.CONTENT_TYPE_HLS; case "ism": case "isml": - return C.TYPE_SS; + return C.CONTENT_TYPE_SS; default: return C.CONTENT_TYPE_OTHER; } diff --git a/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSource.java b/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSource.java index a5ed7457b2..11376d9cbe 100644 --- a/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSource.java +++ b/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSource.java @@ -133,6 +133,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { * CronetEngineWrapper#getCronetEngine()} would have returned {@code null}. */ @UnstableApi + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter @Deprecated public Factory(CronetEngineWrapper cronetEngineWrapper, Executor executor) { this.cronetEngine = cronetEngineWrapper.getCronetEngine(); @@ -325,6 +326,7 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { * {@link CronetEngine} is not available. Use the fallback factory directly in such cases. */ @CanIgnoreReturnValue + @SuppressWarnings("deprecation") // Intentionally referring to deprecated parameter @UnstableApi @Deprecated public Factory setFallbackFactory(@Nullable HttpDataSource.Factory fallbackFactory) { diff --git a/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSourceFactory.java b/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSourceFactory.java index 03d4a1914b..b38c35ddfb 100644 --- a/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSourceFactory.java +++ b/libraries/datasource_cronet/src/main/java/androidx/media3/datasource/cronet/CronetDataSourceFactory.java @@ -41,7 +41,9 @@ public final class CronetDataSourceFactory extends BaseFactory { public static final int DEFAULT_READ_TIMEOUT_MILLIS = CronetDataSource.DEFAULT_READ_TIMEOUT_MILLIS; + @SuppressWarnings("deprecation") // Intentionally using deprecated type private final CronetEngineWrapper cronetEngineWrapper; + private final Executor executor; @Nullable private final TransferListener transferListener; private final int connectTimeoutMs; @@ -63,6 +65,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * @param fallbackFactory A {@link HttpDataSource.Factory} which is used as a fallback in case no * suitable CronetEngine can be build. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -89,6 +92,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * @param cronetEngineWrapper A {@link CronetEngineWrapper}. * @param executor The {@link java.util.concurrent.Executor} that will perform the requests. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory(CronetEngineWrapper cronetEngineWrapper, Executor executor) { this(cronetEngineWrapper, executor, /* userAgent= */ (String) null); } @@ -108,6 +112,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * needed, or {@code null} for the fallback to use the default user agent of the underlying * platform. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @Nullable String userAgent) { this( @@ -135,6 +140,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * needed, or {@code null} for the fallback to use the default user agent of the underlying * platform. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -169,6 +175,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * @param fallbackFactory A {@link HttpDataSource.Factory} which is used as a fallback in case no * suitable CronetEngine can be build. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -201,6 +208,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * @param fallbackFactory A {@link HttpDataSource.Factory} which is used as a fallback in case no * suitable CronetEngine can be build. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -229,6 +237,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * @param executor The {@link java.util.concurrent.Executor} that will perform the requests. * @param transferListener An optional listener. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -252,6 +261,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * needed, or {@code null} for the fallback to use the default user agent of the underlying * platform. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -285,6 +295,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * needed, or {@code null} for the fallback to use the default user agent of the underlying * platform. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, @@ -322,6 +333,7 @@ public final class CronetDataSourceFactory extends BaseFactory { * @param fallbackFactory A {@link HttpDataSource.Factory} which is used as a fallback in case no * suitable CronetEngine can be build. */ + @SuppressWarnings("deprecation") // Intentionally using deprecated parameter public CronetDataSourceFactory( CronetEngineWrapper cronetEngineWrapper, Executor executor, diff --git a/libraries/datasource_okhttp/src/main/java/androidx/media3/datasource/okhttp/OkHttpDataSource.java b/libraries/datasource_okhttp/src/main/java/androidx/media3/datasource/okhttp/OkHttpDataSource.java index 0ae8d58c07..e360989db8 100644 --- a/libraries/datasource_okhttp/src/main/java/androidx/media3/datasource/okhttp/OkHttpDataSource.java +++ b/libraries/datasource_okhttp/src/main/java/androidx/media3/datasource/okhttp/OkHttpDataSource.java @@ -452,10 +452,10 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource { @Nullable RequestBody requestBody = null; if (dataSpec.httpBody != null) { - requestBody = RequestBody.create(null, dataSpec.httpBody); + requestBody = RequestBody.create(dataSpec.httpBody); } else if (dataSpec.httpMethod == DataSpec.HTTP_METHOD_POST) { // OkHttp requires a non-null body for POST requests. - requestBody = RequestBody.create(null, Util.EMPTY_BYTE_ARRAY); + requestBody = RequestBody.create(Util.EMPTY_BYTE_ARRAY); } builder.method(dataSpec.getHttpMethodString(), requestBody); return builder.build(); diff --git a/libraries/decoder_av1/README.md b/libraries/decoder_av1/README.md index c85350595b..9b27d47def 100644 --- a/libraries/decoder_av1/README.md +++ b/libraries/decoder_av1/README.md @@ -128,4 +128,4 @@ GL rendering mode has better performance, so should be preferred * [Troubleshooting using decoding extensions][] -[Troubleshooting using decoding extensions]: https://developer.android.com/guide/topics/media/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playbacks +[Troubleshooting using decoding extensions]: https://developer.android.com/media/media3/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback diff --git a/libraries/decoder_ffmpeg/README.md b/libraries/decoder_ffmpeg/README.md index 4f87e308e1..1d39442f0a 100644 --- a/libraries/decoder_ffmpeg/README.md +++ b/libraries/decoder_ffmpeg/README.md @@ -124,10 +124,10 @@ then implement your own logic to use the renderer for a given track. [top level README]: ../../README.md [Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html [ExoPlayer issue 2781]: https://github.com/google/ExoPlayer/issues/2781 -[Supported formats]: https://developer.android.com/guide/topics/media/exoplayer/supported-formats#ffmpeg-library +[Supported formats]: https://developer.android.com/media/media3/exoplayer/supported-formats#ffmpeg-library ## Links * [Troubleshooting using decoding extensions][] -[Troubleshooting using decoding extensions]: https://developer.android.com/guide/topics/media/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback +[Troubleshooting using decoding extensions]: https://developer.android.com/media/media3/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback diff --git a/libraries/decoder_flac/README.md b/libraries/decoder_flac/README.md index 9db717585a..3e9ea9ae2f 100644 --- a/libraries/decoder_flac/README.md +++ b/libraries/decoder_flac/README.md @@ -100,4 +100,4 @@ player, then implement your own logic to use the renderer for a given track. * [Troubleshooting using decoding extensions][] -[Troubleshooting using decoding extensions]: https://developer.android.com/guide/topics/media/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback +[Troubleshooting using decoding extensions]: https://developer.android.com/media/media3/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback diff --git a/libraries/decoder_opus/README.md b/libraries/decoder_opus/README.md index dcbfd5b77d..2456081e67 100644 --- a/libraries/decoder_opus/README.md +++ b/libraries/decoder_opus/README.md @@ -104,4 +104,4 @@ player, then implement your own logic to use the renderer for a given track. * [Troubleshooting using decoding extensions][] -[Troubleshooting using decoding extensions]: https://developer.android.com/guide/topics/media/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback +[Troubleshooting using decoding extensions]: https://developer.android.com/media/media3/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback diff --git a/libraries/decoder_vp9/README.md b/libraries/decoder_vp9/README.md index 1995fe55fd..5c5bc02551 100644 --- a/libraries/decoder_vp9/README.md +++ b/libraries/decoder_vp9/README.md @@ -141,4 +141,4 @@ GL rendering mode has better performance, so should be preferred. * [Troubleshooting using decoding extensions][] -[Troubleshooting using decoding extensions]: https://developer.android.com/guide/topics/media/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback +[Troubleshooting using decoding extensions]: https://developer.android.com/media/media3/exoplayer/troubleshooting#how-can-i-get-a-decoding-library-to-load-and-be-used-for-playback diff --git a/libraries/effect/src/main/java/androidx/media3/effect/AlphaScaleShaderProgram.java b/libraries/effect/src/main/java/androidx/media3/effect/AlphaScaleShaderProgram.java index b9d1667181..601e09cab2 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/AlphaScaleShaderProgram.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/AlphaScaleShaderProgram.java @@ -25,7 +25,7 @@ import androidx.media3.common.util.Size; import java.io.IOException; /** Scales the alpha value for each pixel in the fragment shader. */ -/* package */ final class AlphaScaleShaderProgram extends SingleFrameGlShaderProgram { +/* package */ final class AlphaScaleShaderProgram extends BaseGlShaderProgram { private static final String VERTEX_SHADER_PATH = "shaders/vertex_shader_transformation_es2.glsl"; private static final String FRAGMENT_SHADER_PATH = "shaders/fragment_shader_alpha_scale_es2.glsl"; @@ -42,7 +42,7 @@ import java.io.IOException; */ public AlphaScaleShaderProgram(Context context, boolean useHdr, float alphaScale) throws VideoFrameProcessingException { - super(/* useHighPrecisionColorComponents= */ useHdr); + super(/* useHighPrecisionColorComponents= */ useHdr, /* texturePoolCapacity= */ 1); try { glProgram = new GlProgram(context, VERTEX_SHADER_PATH, FRAGMENT_SHADER_PATH); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultMediaClock.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultMediaClock.java index 7b60f5835d..7677a0c5e6 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultMediaClock.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultMediaClock.java @@ -16,6 +16,7 @@ package androidx.media3.exoplayer; import androidx.annotation.Nullable; +import androidx.media3.common.PlaybackException; import androidx.media3.common.PlaybackParameters; import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Clock; @@ -93,7 +94,8 @@ import androidx.media3.common.util.Clock; if (rendererMediaClock != null && rendererMediaClock != rendererClock) { if (rendererClock != null) { throw ExoPlaybackException.createForUnexpected( - new IllegalStateException("Multiple renderer media clocks enabled.")); + new IllegalStateException("Multiple renderer media clocks enabled."), + PlaybackException.ERROR_CODE_UNSPECIFIED); } this.rendererClock = rendererMediaClock; this.rendererClockSource = renderer; diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java index 2982d9f299..9c822adc38 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayer.java @@ -166,8 +166,7 @@ import java.util.List; public interface ExoPlayer extends Player { /** - * @deprecated Use {@link ExoPlayer}, as the {@link AudioComponent} methods are defined by that - * interface. + * @deprecated Use {@link ExoPlayer}, as all methods are defined by that interface. */ @UnstableApi @Deprecated @@ -235,8 +234,7 @@ public interface ExoPlayer extends Player { } /** - * @deprecated Use {@link ExoPlayer}, as the {@link VideoComponent} methods are defined by that - * interface. + * @deprecated Use {@link ExoPlayer}, as all methods are defined by that interface. */ @UnstableApi @Deprecated @@ -357,8 +355,7 @@ public interface ExoPlayer extends Player { } /** - * @deprecated Use {@link Player}, as the {@link TextComponent} methods are defined by that - * interface. + * @deprecated Use {@link Player}, as all methods are defined by that interface. */ @UnstableApi @Deprecated @@ -372,8 +369,7 @@ public interface ExoPlayer extends Player { } /** - * @deprecated Use {@link Player}, as the {@link DeviceComponent} methods are defined by that - * interface. + * @deprecated Use {@link Player}, as all methods are defined by that interface. */ @UnstableApi @Deprecated @@ -905,8 +901,8 @@ public interface ExoPlayer extends Player { /** * Sets whether the player should pause automatically when audio is rerouted from a headset to * device speakers. See the - * audio becoming noisy documentation for more information. + * href="https://developer.android.com/media/platform/output#becoming-noisy">audio becoming + * noisy documentation for more information. * * @param handleAudioBecomingNoisy Whether the player should pause automatically when audio is * rerouted from a headset to device speakers. @@ -1230,6 +1226,7 @@ public interface ExoPlayer extends Player { * @deprecated Use {@link ExoPlayer}, as the {@link AudioComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @UnstableApi @Nullable @Deprecated @@ -1239,6 +1236,7 @@ public interface ExoPlayer extends Player { * @deprecated Use {@link ExoPlayer}, as the {@link VideoComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @UnstableApi @Nullable @Deprecated @@ -1248,6 +1246,7 @@ public interface ExoPlayer extends Player { * @deprecated Use {@link Player}, as the {@link TextComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @UnstableApi @Nullable @Deprecated @@ -1257,6 +1256,7 @@ public interface ExoPlayer extends Player { * @deprecated Use {@link Player}, as the {@link DeviceComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @UnstableApi @Nullable @Deprecated diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java index 7c32751027..5a747ebfbe 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java @@ -3150,6 +3150,7 @@ import java.util.concurrent.TimeoutException; } // TextOutput implementation + @SuppressWarnings("deprecation") // Intentionally forwarding deprecating callback @Override public void onCues(List cues) { listeners.sendEvent(EVENT_CUES, listener -> listener.onCues(cues)); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/LoadControl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/LoadControl.java index cdf68c2f82..f66303a292 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/LoadControl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/LoadControl.java @@ -66,6 +66,7 @@ public interface LoadControl { * @deprecated Implement {@link #onTracksSelected(Timeline, MediaPeriodId, Renderer[], * TrackGroupArray, ExoTrackSelection[])} instead. */ + @SuppressWarnings("deprecation") // Intentionally referencing deprecated constant @Deprecated default void onTracksSelected( Renderer[] renderers, TrackGroupArray trackGroups, ExoTrackSelection[] trackSelections) { @@ -168,6 +169,7 @@ public interface LoadControl { * @deprecated Implement {@link #shouldStartPlayback(Timeline, MediaPeriodId, long, float, * boolean, long)} instead. */ + @SuppressWarnings("deprecation") // Intentionally referencing deprecated constant @Deprecated default boolean shouldStartPlayback( long bufferedDurationUs, float playbackSpeed, boolean rebuffering, long targetLiveOffsetUs) { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java index 353ab3f7af..79c370c20e 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/SimpleExoPlayer.java @@ -70,6 +70,7 @@ import java.util.List; */ @UnstableApi @Deprecated +@SuppressWarnings("deprecation") // Supporting deprecated base classes public class SimpleExoPlayer extends BasePlayer implements ExoPlayer, ExoPlayer.AudioComponent, diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/MediaCodecAudioRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/MediaCodecAudioRenderer.java index 32d74fe6df..4a861e45e5 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/MediaCodecAudioRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/MediaCodecAudioRenderer.java @@ -147,21 +147,15 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media mediaCodecSelector, eventHandler, eventListener, - AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES); + new DefaultAudioSink.Builder(context).build()); } /** - * @param context A context. - * @param mediaCodecSelector A decoder selector. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param audioCapabilities The audio capabilities for playback on this device. Use {@link - * AudioCapabilities#DEFAULT_AUDIO_CAPABILITIES} if default capabilities (no encoded audio - * passthrough support) should be assumed. - * @param audioProcessors Optional {@link AudioProcessor}s that will process PCM audio before - * output. + * @deprecated Use a constructor without {@link AudioCapabilities}. These are obtained + * automatically from the {@link Context}. */ + @SuppressWarnings("deprecation") // Calling deprecated method for compatibility + @Deprecated public MediaCodecAudioRenderer( Context context, MediaCodecSelector mediaCodecSelector, diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java index d9a56733cb..a37c40f000 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java @@ -424,6 +424,7 @@ public class ImageRenderer extends BaseRenderer { * current iteration of the rendering loop. * @return Whether we can feed more input data to the decoder. */ + @SuppressWarnings("deprecation") // Clearing C.BUFFER_FLAG_DECODE_ONLY for compatibility private boolean feedInputBuffer(long positionUs) throws ImageDecoderException { if (readyToOutputTiles && tileInfo != null) { return false; diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/scheduler/Requirements.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/scheduler/Requirements.java index cd503ba09f..a537bd4866 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/scheduler/Requirements.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/scheduler/Requirements.java @@ -163,6 +163,7 @@ public final class Requirements implements Parcelable { return notMetRequirements; } + @SuppressWarnings("deprecation") // Using deprecated NetworkInfo for compatibility with older APIs private @RequirementFlags int getNotMetNetworkRequirements(Context context) { if (!isNetworkRequired()) { return 0; diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java index a3cad75df2..c582e9977a 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java @@ -76,17 +76,17 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; *
  • {@code DashMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri} * ends in '.mpd' or if its {@link MediaItem.LocalConfiguration#mimeType mimeType field} is * explicitly set to {@link MimeTypes#APPLICATION_MPD} (Requires the exoplayer-dash + * href="https://developer.android.com/media/media3/exoplayer/hello-world#add-exoplayer-modules">exoplayer-dash * module to be added to the app). *
  • {@code HlsMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri} * ends in '.m3u8' or if its {@link MediaItem.LocalConfiguration#mimeType mimeType field} is * explicitly set to {@link MimeTypes#APPLICATION_M3U8} (Requires the exoplayer-hls + * href="https://developer.android.com/media/media3/exoplayer/hello-world#add-exoplayer-modules">exoplayer-hls * module to be added to the app). *
  • {@code SsMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri} * ends in '.ism', '.ism/Manifest' or if its {@link MediaItem.LocalConfiguration#mimeType * mimeType field} is explicitly set to {@link MimeTypes#APPLICATION_SS} (Requires the + * href="https://developer.android.com/media/media3/exoplayer/hello-world#add-exoplayer-modules"> * exoplayer-smoothstreaming module to be added to the app). *
  • {@link ProgressiveMediaSource.Factory} serves as a fallback if the item's {@link * MediaItem.LocalConfiguration#uri uri} doesn't match one of the above. It tries to infer the diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaSourceFactory.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaSourceFactory.java index 5a46691c99..22f3b66ef3 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaSourceFactory.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaSourceFactory.java @@ -33,6 +33,7 @@ public interface MediaSourceFactory extends MediaSource.Factory { * An instance that throws {@link UnsupportedOperationException} from {@link #createMediaSource} * and {@link #getSupportedTypes()}. */ + @SuppressWarnings("deprecation") // Creating instance of deprecated type @UnstableApi MediaSourceFactory UNSUPPORTED = new MediaSourceFactory() { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java index 70959aa7c1..8fde25bef6 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java @@ -347,6 +347,7 @@ public final class TextRenderer extends BaseRenderer implements Callback { } } + @SuppressWarnings("deprecation") // Using deprecated C.BUFFER_FLAG_DECODE_ONLY for compatibility private void renderFromSubtitles(long positionUs) { lastRendererPositionUs = positionUs; if (nextSubtitle == null) { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java index 1f9bcd14be..6282275c48 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java @@ -151,10 +151,12 @@ public class DefaultTrackSelector extends MappingTrackSelector * * @param context Any context. */ + @SuppressWarnings({"deprecation"}) // Supporting deprecated builder pattern public ParametersBuilder(Context context) { delegate = new Parameters.Builder(context); } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override protected ParametersBuilder set(TrackSelectionParameters parameters) { @@ -164,6 +166,7 @@ public class DefaultTrackSelector extends MappingTrackSelector // Video + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMaxVideoSizeSd() { @@ -171,6 +174,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder clearVideoSizeConstraints() { @@ -178,6 +182,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMaxVideoSize( @@ -186,6 +191,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMaxVideoFrameRate(int maxVideoFrameRate) { @@ -193,6 +199,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMaxVideoBitrate(int maxVideoBitrate) { @@ -200,6 +207,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMinVideoSize( @@ -208,6 +216,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMinVideoFrameRate(int minVideoFrameRate) { @@ -215,6 +224,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setMinVideoBitrate(int minVideoBitrate) { @@ -230,6 +240,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * selection can be made otherwise. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setExceedVideoConstraintsIfNecessary( boolean exceedVideoConstraintsIfNecessary) { @@ -248,6 +259,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * containing mixed MIME types. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowVideoMixedMimeTypeAdaptiveness( boolean allowVideoMixedMimeTypeAdaptiveness) { @@ -263,6 +275,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * adaptation may not be completely seamless. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowVideoNonSeamlessAdaptiveness( boolean allowVideoNonSeamlessAdaptiveness) { @@ -279,6 +292,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * with mixed levels of decoder and hardware acceleration support. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowVideoMixedDecoderSupportAdaptiveness( boolean allowVideoMixedDecoderSupportAdaptiveness) { @@ -287,6 +301,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setViewportSizeToPhysicalDisplaySize( @@ -295,6 +310,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder clearViewportSizeConstraints() { @@ -302,6 +318,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setViewportSize( @@ -310,6 +327,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredVideoMimeType(@Nullable String mimeType) { @@ -317,6 +335,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredVideoMimeTypes(String... mimeTypes) { @@ -324,6 +343,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public DefaultTrackSelector.ParametersBuilder setPreferredVideoRoleFlags( @@ -334,6 +354,7 @@ public class DefaultTrackSelector extends MappingTrackSelector // Audio + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredAudioLanguage(@Nullable String preferredAudioLanguage) { @@ -341,6 +362,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredAudioLanguages(String... preferredAudioLanguages) { @@ -348,6 +370,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredAudioRoleFlags(@C.RoleFlags int preferredAudioRoleFlags) { @@ -355,6 +378,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setMaxAudioChannelCount(int maxAudioChannelCount) { @@ -362,6 +386,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setMaxAudioBitrate(int maxAudioBitrate) { @@ -377,6 +402,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * selection can be made otherwise. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setExceedAudioConstraintsIfNecessary( boolean exceedAudioConstraintsIfNecessary) { @@ -395,6 +421,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * containing mixed MIME types. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowAudioMixedMimeTypeAdaptiveness( boolean allowAudioMixedMimeTypeAdaptiveness) { @@ -411,6 +438,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * containing mixed sample rates. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowAudioMixedSampleRateAdaptiveness( boolean allowAudioMixedSampleRateAdaptiveness) { @@ -427,6 +455,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * containing mixed channel counts. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowAudioMixedChannelCountAdaptiveness( boolean allowAudioMixedChannelCountAdaptiveness) { @@ -443,6 +472,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * with mixed levels of decoder and hardware acceleration support. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowAudioMixedDecoderSupportAdaptiveness( boolean allowAudioMixedDecoderSupportAdaptiveness) { @@ -451,6 +481,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredAudioMimeType(@Nullable String mimeType) { @@ -458,6 +489,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredAudioMimeTypes(String... mimeTypes) { @@ -465,6 +497,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setAudioOffloadPreferences( @@ -475,6 +508,7 @@ public class DefaultTrackSelector extends MappingTrackSelector // Text + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings( @@ -483,6 +517,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredTextLanguage(@Nullable String preferredTextLanguage) { @@ -490,6 +525,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredTextLanguages(String... preferredTextLanguages) { @@ -497,6 +533,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) { @@ -504,6 +541,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setIgnoredTextSelectionFlags( @@ -512,6 +550,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setSelectUndeterminedTextLanguage( @@ -523,6 +562,7 @@ public class DefaultTrackSelector extends MappingTrackSelector /** * @deprecated Use {@link #setIgnoredTextSelectionFlags}. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Deprecated public ParametersBuilder setDisabledTextTrackSelectionFlags( @@ -532,7 +572,7 @@ public class DefaultTrackSelector extends MappingTrackSelector } // Image - + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setPrioritizeImageOverVideoEnabled( @@ -543,6 +583,7 @@ public class DefaultTrackSelector extends MappingTrackSelector // General + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setForceLowestBitrate(boolean forceLowestBitrate) { @@ -550,6 +591,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setForceHighestSupportedBitrate(boolean forceHighestSupportedBitrate) { @@ -557,6 +599,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder addOverride(TrackSelectionOverride override) { @@ -564,6 +607,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder clearOverride(TrackGroup trackGroup) { @@ -571,6 +615,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setOverrideForType(TrackSelectionOverride override) { @@ -578,6 +623,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder clearOverridesOfType(@C.TrackType int trackType) { @@ -585,6 +631,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder clearOverrides() { @@ -598,12 +645,13 @@ public class DefaultTrackSelector extends MappingTrackSelector @CanIgnoreReturnValue @Override @Deprecated - @SuppressWarnings("deprecation") + @SuppressWarnings("deprecation") // Intentionally returning deprecated type public ParametersBuilder setDisabledTrackTypes(Set<@C.TrackType Integer> disabledTrackTypes) { delegate.setDisabledTrackTypes(disabledTrackTypes); return this; } + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Override public ParametersBuilder setTrackTypeDisabled(@C.TrackType int trackType, boolean disabled) { @@ -623,6 +671,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * selection can be made otherwise. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setExceedRendererCapabilitiesIfNecessary( boolean exceedRendererCapabilitiesIfNecessary) { @@ -644,6 +693,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @param tunnelingEnabled Whether to enable tunneling if possible. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setTunnelingEnabled(boolean tunnelingEnabled) { delegate.setTunnelingEnabled(tunnelingEnabled); @@ -656,6 +706,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @param allowMultipleAdaptiveSelections Whether multiple adaptive selections are allowed. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setAllowMultipleAdaptiveSelections( boolean allowMultipleAdaptiveSelections) { @@ -673,6 +724,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @param disabled Whether the renderer is disabled. * @return This builder. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue public ParametersBuilder setRendererDisabled(int rendererIndex, boolean disabled) { delegate.setRendererDisabled(rendererIndex, disabled); @@ -703,6 +755,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @return This builder. * @deprecated Use {@link TrackSelectionParameters.Builder#addOverride(TrackSelectionOverride)}. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Deprecated public ParametersBuilder setSelectionOverride( @@ -719,6 +772,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @return This builder. * @deprecated Use {@link TrackSelectionParameters.Builder#clearOverride(TrackGroup)}. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Deprecated public ParametersBuilder clearSelectionOverride(int rendererIndex, TrackGroupArray groups) { @@ -733,6 +787,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @return This builder. * @deprecated Use {@link TrackSelectionParameters.Builder#clearOverridesOfType(int)}. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Deprecated public ParametersBuilder clearSelectionOverrides(int rendererIndex) { @@ -746,6 +801,7 @@ public class DefaultTrackSelector extends MappingTrackSelector * @return This builder. * @deprecated Use {@link TrackSelectionParameters.Builder#clearOverrides()}. */ + @SuppressWarnings("deprecation") // Intentionally returning deprecated type @CanIgnoreReturnValue @Deprecated public ParametersBuilder clearSelectionOverrides() { @@ -1637,6 +1693,7 @@ public class DefaultTrackSelector extends MappingTrackSelector return clone; } + @SuppressWarnings("deprecation") // Filling deprecated field from Bundle private void setSelectionOverridesFromBundle(Bundle bundle) { @Nullable int[] rendererIndices = diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/TrackSelectionUtil.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/TrackSelectionUtil.java index 1dbb0a4e4f..6dd1a62e90 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/TrackSelectionUtil.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/TrackSelectionUtil.java @@ -82,16 +82,10 @@ public final class TrackSelectionUtil { } /** - * Updates {@link DefaultTrackSelector.Parameters} with an override. - * - * @param parameters The current {@link DefaultTrackSelector.Parameters} to build upon. - * @param rendererIndex The renderer index to update. - * @param trackGroupArray The {@link TrackGroupArray} of the renderer. - * @param isDisabled Whether the renderer should be set disabled. - * @param override An optional override for the renderer. If null, no override will be set and an - * existing override for this renderer will be cleared. - * @return The updated {@link DefaultTrackSelector.Parameters}. + * @deprecated Use {@link DefaultTrackSelector.Parameters.Builder#addOverride} instead. */ + @SuppressWarnings("deprecation") // Forwarding to deprecated methods + @Deprecated public static DefaultTrackSelector.Parameters updateParametersWithOverride( DefaultTrackSelector.Parameters parameters, int rendererIndex, diff --git a/libraries/exoplayer_dash/README.md b/libraries/exoplayer_dash/README.md index f6614a0bb5..49c13a01a3 100644 --- a/libraries/exoplayer_dash/README.md +++ b/libraries/exoplayer_dash/README.md @@ -39,5 +39,5 @@ instances and pass them directly to the player. For advanced download use cases, * [Developer Guide][] * [Javadoc][] -[Developer Guide]: https://developer.android.com/guide/topics/media/exoplayer/dash +[Developer Guide]: https://developer.android.com/media/media3/exoplayer/dash [Javadoc]: https://developer.android.com/reference/androidx/media3/exoplayer/dash/package-summary diff --git a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashUtil.java b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashUtil.java index 17b36c658f..c0b46e8cb9 100644 --- a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashUtil.java +++ b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashUtil.java @@ -37,6 +37,7 @@ import androidx.media3.extractor.ChunkIndex; import androidx.media3.extractor.Extractor; import androidx.media3.extractor.mkv.MatroskaExtractor; import androidx.media3.extractor.mp4.FragmentedMp4Extractor; +import androidx.media3.extractor.text.SubtitleParser; import com.google.common.collect.ImmutableMap; import java.io.IOException; import java.util.List; @@ -342,7 +343,13 @@ public final class DashUtil { mimeType != null && (mimeType.startsWith(MimeTypes.VIDEO_WEBM) || mimeType.startsWith(MimeTypes.AUDIO_WEBM)); - Extractor extractor = isWebm ? new MatroskaExtractor() : new FragmentedMp4Extractor(); + Extractor extractor = + isWebm + ? new MatroskaExtractor( + SubtitleParser.Factory.UNSUPPORTED, MatroskaExtractor.FLAG_EMIT_RAW_SUBTITLE_DATA) + : new FragmentedMp4Extractor( + SubtitleParser.Factory.UNSUPPORTED, + FragmentedMp4Extractor.FLAG_EMIT_RAW_SUBTITLE_DATA); return new BundledChunkExtractor(extractor, trackType, format); } diff --git a/libraries/exoplayer_hls/README.md b/libraries/exoplayer_hls/README.md index 39af71b53c..7c026ec8c4 100644 --- a/libraries/exoplayer_hls/README.md +++ b/libraries/exoplayer_hls/README.md @@ -38,5 +38,5 @@ instances and pass them directly to the player. For advanced download use cases, * [Developer Guide][] * [Javadoc][] -[Developer Guide]: https://developer.android.com/guide/topics/media/exoplayer/hls +[Developer Guide]: https://developer.android.com/media/media3/exoplayer/hls [Javadoc]: https://developer.android.com/reference/androidx/media3/exoplayer/hls/package-summary diff --git a/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/MediaParserHlsMediaChunkExtractor.java b/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/MediaParserHlsMediaChunkExtractor.java index 744dea5bec..3a9f277c26 100644 --- a/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/MediaParserHlsMediaChunkExtractor.java +++ b/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/MediaParserHlsMediaChunkExtractor.java @@ -45,6 +45,7 @@ import androidx.media3.exoplayer.source.mediaparser.MediaParserUtil; import androidx.media3.exoplayer.source.mediaparser.OutputConsumerAdapterV30; import androidx.media3.extractor.ExtractorInput; import androidx.media3.extractor.ExtractorOutput; +import androidx.media3.extractor.text.SubtitleParser; import com.google.common.collect.ImmutableList; import java.io.IOException; @@ -70,7 +71,13 @@ public final class MediaParserHlsMediaChunkExtractor implements HlsMediaChunkExt // The segment contains WebVTT. MediaParser does not support WebVTT parsing, so we use the // bundled extractor. return new BundledHlsMediaChunkExtractor( - new WebvttExtractor(format.language, timestampAdjuster), format, timestampAdjuster); + new WebvttExtractor( + format.language, + timestampAdjuster, + SubtitleParser.Factory.UNSUPPORTED, + /* parseSubtitlesDuringExtraction= */ false), + format, + timestampAdjuster); } boolean overrideInBandCaptionDeclarations = muxedCaptionFormats != null; diff --git a/libraries/exoplayer_ima/README.md b/libraries/exoplayer_ima/README.md index c8f27829a0..a11c189214 100644 --- a/libraries/exoplayer_ima/README.md +++ b/libraries/exoplayer_ima/README.md @@ -26,7 +26,7 @@ locally. Instructions for doing this can be found in the [top level README][]. ## Using the module To use the module, follow the instructions on the -[Ad insertion page](https://developer.android.com/guide/topics/media/exoplayer/ad-insertion#declarative-ad-support) +[Ad insertion page](https://developer.android.com/media/media3/exoplayer/ad-insertion#declarative-ad-support) of the developer guide. The `AdsLoaderProvider` passed to the player's `DefaultMediaSourceFactory` should return an `ImaAdsLoader`. Note that the IMA module only supports players that are accessed on the application's main thread. @@ -56,7 +56,6 @@ player position when backgrounded during ad playback. * [Javadoc][] * [Supported platforms][] -[Developer Guide]: https://developer.android.com/guide/topics/media/exoplayer/ad-insertion +[Developer Guide]: https://developer.android.com/media/media3/exoplayer/ad-insertion [Javadoc]: https://developer.android.com/reference/androidx/media3/exoplayer/ima/package-summary [Supported platforms]: https://developers.google.com/interactive-media-ads/docs/sdks/other - diff --git a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java index f7676ce6a4..e47ccf32ee 100644 --- a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java +++ b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java @@ -823,6 +823,7 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou // Static methods. + @SuppressWarnings("deprecation") // b/192231683 prevents using non-deprecated method private static AdPlaybackState setVodAdGroupPlaceholders( List cuePoints, AdPlaybackState adPlaybackState) { // TODO(b/192231683) Use getEndTimeMs()/getStartTimeMs() after jar target was removed diff --git a/libraries/exoplayer_rtsp/README.md b/libraries/exoplayer_rtsp/README.md index cd0780cf71..d368409949 100644 --- a/libraries/exoplayer_rtsp/README.md +++ b/libraries/exoplayer_rtsp/README.md @@ -33,5 +33,5 @@ instances and pass them directly to the player. * [Developer Guide][] * [Javadoc][] -[Developer Guide]: https://developer.android.com/guide/topics/media/exoplayer/rtsp +[Developer Guide]: https://developer.android.com/media/media3/exoplayer/rtsp [Javadoc]: https://developer.android.com/reference/androidx/media3/exoplayer/rtsp/package-summary diff --git a/libraries/exoplayer_smoothstreaming/README.md b/libraries/exoplayer_smoothstreaming/README.md index c888ff6c80..5d3d6f3740 100644 --- a/libraries/exoplayer_smoothstreaming/README.md +++ b/libraries/exoplayer_smoothstreaming/README.md @@ -38,5 +38,5 @@ instances and pass them directly to the player. For advanced download use cases, * [Developer Guide][] * [Javadoc][] -[Developer Guide]: https://developer.android.com/guide/topics/media/exoplayer/smoothstreaming +[Developer Guide]: https://developer.android.com/media/media3/exoplayer/smoothstreaming [Javadoc]: https://developer.android.com/reference/androidx/media3/exoplayer/smoothstreaming/package-summary diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/flac/VorbisComment.java b/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/flac/VorbisComment.java index 1036f875c4..ace57cc4c4 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/flac/VorbisComment.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/flac/VorbisComment.java @@ -28,6 +28,7 @@ import com.google.common.base.Ascii; /** * @deprecated Use {@link androidx.media3.extractor.metadata.vorbis.VorbisComment} instead. */ +@SuppressWarnings("deprecation") // Internal references to own class @Deprecated @UnstableApi public class VorbisComment implements Metadata.Entry { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/id3/TextInformationFrame.java b/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/id3/TextInformationFrame.java index 04d3d17463..81384dbf67 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/id3/TextInformationFrame.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/metadata/id3/TextInformationFrame.java @@ -43,6 +43,7 @@ public final class TextInformationFrame extends Id3Frame { /** The text values of this frame. Will always have at least one element. */ public final ImmutableList values; + @SuppressWarnings("deprecation") // Assigning deprecated public field public TextInformationFrame(String id, @Nullable String description, List values) { super(id); checkArgument(!values.isEmpty()); diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java index 3dc2e5999e..34bafec956 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mkv/MatroskaExtractor.java @@ -82,12 +82,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @UnstableApi public class MatroskaExtractor implements Extractor { - /** - * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. - */ - @Deprecated - public static final ExtractorsFactory FACTORY = () -> new Extractor[] {new MatroskaExtractor()}; - /** * Creates a factory for {@link MatroskaExtractor} instances with the provided {@link * SubtitleParser.Factory}. @@ -124,6 +118,16 @@ public class MatroskaExtractor implements Extractor { */ public static final int FLAG_EMIT_RAW_SUBTITLE_DATA = 1 << 1; // 2 + /** + * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. + */ + @Deprecated + public static final ExtractorsFactory FACTORY = + () -> + new Extractor[] { + new MatroskaExtractor(SubtitleParser.Factory.UNSUPPORTED, FLAG_EMIT_RAW_SUBTITLE_DATA) + }; + private static final String TAG = "MatroskaExtractor"; private static final int UNSET_ENTRY_ID = -1; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java index cde4f8ab2e..3cc1ec8b1a 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java @@ -74,13 +74,6 @@ import java.util.UUID; @UnstableApi public class FragmentedMp4Extractor implements Extractor { - /** - * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. - */ - @Deprecated - public static final ExtractorsFactory FACTORY = - () -> new Extractor[] {new FragmentedMp4Extractor()}; - /** * Creates a factory for {@link FragmentedMp4Extractor} instances with the provided {@link * SubtitleParser.Factory}. @@ -135,6 +128,17 @@ public class FragmentedMp4Extractor implements Extractor { */ public static final int FLAG_EMIT_RAW_SUBTITLE_DATA = 1 << 5; // 32 + /** + * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. + */ + @Deprecated + public static final ExtractorsFactory FACTORY = + () -> + new Extractor[] { + new FragmentedMp4Extractor( + SubtitleParser.Factory.UNSUPPORTED, /* flags= */ FLAG_EMIT_RAW_SUBTITLE_DATA) + }; + private static final String TAG = "FragmentedMp4Extractor"; @SuppressWarnings("ConstantCaseForConstants") diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java index 7960c743dd..486a79f7cf 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Mp4Extractor.java @@ -66,12 +66,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @UnstableApi public final class Mp4Extractor implements Extractor, SeekMap { - /** - * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. - */ - @Deprecated - public static final ExtractorsFactory FACTORY = () -> new Extractor[] {new Mp4Extractor()}; - /** * Creates a factory for {@link Mp4Extractor} instances with the provided {@link * SubtitleParser.Factory}. @@ -125,6 +119,16 @@ public final class Mp4Extractor implements Extractor, SeekMap { public static final int FLAG_EMIT_RAW_SUBTITLE_DATA = 1 << 4; + /** + * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. + */ + @Deprecated + public static final ExtractorsFactory FACTORY = + () -> + new Extractor[] { + new Mp4Extractor(SubtitleParser.Factory.UNSUPPORTED, FLAG_EMIT_RAW_SUBTITLE_DATA) + }; + /** Parser states. */ @Documented @Retention(RetentionPolicy.SOURCE) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java index 14c6dce942..bc9f8a5548 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java @@ -61,12 +61,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @UnstableApi public final class TsExtractor implements Extractor { - /** - * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. - */ - @Deprecated - public static final ExtractorsFactory FACTORY = () -> new Extractor[] {new TsExtractor()}; - /** * Creates a factory for {@link TsExtractor} instances with the provided {@link * SubtitleParser.Factory}. @@ -115,6 +109,16 @@ public final class TsExtractor implements Extractor { */ public static final int FLAG_EMIT_RAW_SUBTITLE_DATA = 1; + /** + * @deprecated Use {@link #newFactory(SubtitleParser.Factory)} instead. + */ + @Deprecated + public static final ExtractorsFactory FACTORY = + () -> + new Extractor[] { + new TsExtractor(FLAG_EMIT_RAW_SUBTITLE_DATA, SubtitleParser.Factory.UNSUPPORTED) + }; + public static final int TS_PACKET_SIZE = 188; public static final int DEFAULT_TIMESTAMP_SEARCH_BYTES = 600 * TS_PACKET_SIZE; diff --git a/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java b/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java index b6fc7da1e6..c846da41f0 100644 --- a/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java +++ b/libraries/session/src/main/java/androidx/media3/session/LegacyConversions.java @@ -17,7 +17,6 @@ package androidx.media3.session; import static android.support.v4.media.session.MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS; import static androidx.media.utils.MediaConstants.BROWSER_ROOT_HINTS_KEY_ROOT_CHILDREN_SUPPORTED_FLAGS; -import static androidx.media3.common.Player.COMMAND_ADJUST_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS; import static androidx.media3.common.Player.COMMAND_CHANGE_MEDIA_ITEMS; import static androidx.media3.common.Player.COMMAND_GET_AUDIO_ATTRIBUTES; @@ -36,7 +35,6 @@ import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT; import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; -import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE; @@ -1169,12 +1167,12 @@ import java.util.concurrent.TimeoutException; } if (volumeControlType == VolumeProviderCompat.VOLUME_CONTROL_RELATIVE) { playerCommandsBuilder.addAll( - COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS); + Player.COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS); } else if (volumeControlType == VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE) { playerCommandsBuilder.addAll( - COMMAND_ADJUST_DEVICE_VOLUME, + Player.COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS, - COMMAND_SET_DEVICE_VOLUME, + Player.COMMAND_SET_DEVICE_VOLUME, COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS); } playerCommandsBuilder.addAll( diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java b/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java index 40749f9bf6..815e9c2898 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java @@ -129,7 +129,7 @@ public class MediaButtonReceiver extends BroadcastReceiver { // button intents to this receiver only when the session is released or not active, meaning // the service is not running. Hence we only accept a PLAY command here that ensures that // playback is started and the MediaSessionService/MediaLibraryService is put into the - // foreground (see https://developer.android.com/guide/topics/media-apps/mediabuttons and + // foreground (see https://developer.android.com/media/legacy/media-buttons and // https://developer.android.com/about/versions/oreo/android-8.0-changes#back-all). android.util.Log.w( TAG, diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java index 7c94e1ee29..e4c5cfcae8 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java @@ -1525,6 +1525,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; /** * @deprecated Use {@link #setDeviceVolume(int, int)} instead. */ + @SuppressWarnings("deprecation") // Checking deprecated command codes @Deprecated @Override public void setDeviceVolume(int volume) { @@ -1573,6 +1574,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; /** * @deprecated Use {@link #increaseDeviceVolume(int)} instead. */ + @SuppressWarnings("deprecation") // Checking deprecated command codes @Deprecated @Override public void increaseDeviceVolume() { @@ -1617,6 +1619,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; /** * @deprecated Use {@link #decreaseDeviceVolume(int)} instead. */ + @SuppressWarnings("deprecation") // Checking deprecated command codes @Deprecated @Override public void decreaseDeviceVolume() { @@ -1659,6 +1662,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; /** * @deprecated Use {@link #setDeviceMuted(boolean, int)} instead. */ + @SuppressWarnings("deprecation") // Checking deprecated command codes @Deprecated @Override public void setDeviceMuted(boolean muted) { diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java index 013c3c5c34..b81d3217e8 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java @@ -202,10 +202,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; *

    Generally, multiple sessions aren't necessary for most media apps. One exception is if your * app can play multiple media content at the same time, but only for the playback of video-only * media or remote playback, since the audio focus policy - * recommends not playing multiple audio content at the same time. Also, keep in mind that multiple - * media sessions would make Android Auto and Bluetooth devices with display to show your app - * multiple times, because they list up media sessions, not media apps. + * href="https://developer.android.com/media/optimize/audio-focus">audio focus policy recommends + * not playing multiple audio content at the same time. Also, keep in mind that multiple media + * sessions would make Android Auto and Bluetooth devices with display to show your app multiple + * times, because they list up media sessions, not media apps. * *

    Backward Compatibility with Legacy Session APIs

    * @@ -1328,7 +1328,7 @@ public class MediaSession { /** * Called when a controller requested to add new {@linkplain MediaItem media items} to the - * playlist via one of the {@code Player.addMediaItem(s)} methods. Unless overriden, {@link + * playlist via one of the {@code Player.addMediaItem(s)} methods. Unless overridden, {@link * Callback#onSetMediaItems} will direct {@code Player.setMediaItem(s)} to this method as well. * *

    In addition, unless {@link Callback#onSetMediaItems} is overridden, this callback is also diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java index 1717fad622..9d3f380908 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -598,20 +598,6 @@ import org.checkerframework.checker.initialization.qual.Initialized; sessionCompat.getCurrentControllerInfo()); } - @Override - public void onRemoveQueueItemAt(int index) { - dispatchSessionTaskWithPlayerCommand( - COMMAND_CHANGE_MEDIA_ITEMS, - controller -> { - if (index < 0) { - Log.w(TAG, "onRemoveQueueItem(): index shouldn't be negative"); - return; - } - sessionImpl.getPlayerWrapper().removeMediaItem(index); - }, - sessionCompat.getCurrentControllerInfo()); - } - public ControllerCb getControllerLegacyCbForBroadcast() { return controllerLegacyCbForBroadcast; } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionService.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionService.java index 4bd2315c8b..beb6e71e8b 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionService.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionService.java @@ -124,10 +124,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; *

    Generally, multiple sessions aren't necessary for most media apps. One exception is if your * app can play multiple media contents at the same time, but only for playback of video-only media * or remote playback, since the audio focus policy - * recommends not playing multiple audio contents at the same time. Also, keep in mind that multiple - * media sessions would make Android Auto and Bluetooth devices with a display to show your apps - * multiple times, because they list up media sessions, not media apps. + * href="https://developer.android.com/media/optimize/audio-focus">audio focus policy recommends + * not playing multiple audio contents at the same time. Also, keep in mind that multiple media + * sessions would make Android Auto and Bluetooth devices with a display to show your apps multiple + * times, because they list up media sessions, not media apps. * *

    However, if you're capable of handling multiple playbacks and want to keep their sessions * while the app is in the background, create multiple sessions and add them to this service with diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java index 1e09988851..48c0e2d124 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java @@ -15,7 +15,6 @@ */ package androidx.media3.session; -import static androidx.media3.common.Player.COMMAND_ADJUST_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS; import static androidx.media3.common.Player.COMMAND_CHANGE_MEDIA_ITEMS; import static androidx.media3.common.Player.COMMAND_PLAY_PAUSE; @@ -30,7 +29,6 @@ import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SET_AUDIO_ATTRIBUTES; -import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SET_PLAYLIST_METADATA; @@ -1529,7 +1527,7 @@ import java.util.concurrent.ExecutionException; queueSessionTaskWithPlayerCommand( caller, sequenceNumber, - COMMAND_SET_DEVICE_VOLUME, + Player.COMMAND_SET_DEVICE_VOLUME, sendSessionResultSuccess(player -> player.setDeviceVolume(volume))); } @@ -1555,7 +1553,7 @@ import java.util.concurrent.ExecutionException; queueSessionTaskWithPlayerCommand( caller, sequenceNumber, - COMMAND_ADJUST_DEVICE_VOLUME, + Player.COMMAND_ADJUST_DEVICE_VOLUME, sendSessionResultSuccess(player -> player.increaseDeviceVolume())); } @@ -1581,7 +1579,7 @@ import java.util.concurrent.ExecutionException; queueSessionTaskWithPlayerCommand( caller, sequenceNumber, - COMMAND_ADJUST_DEVICE_VOLUME, + Player.COMMAND_ADJUST_DEVICE_VOLUME, sendSessionResultSuccess(player -> player.decreaseDeviceVolume())); } @@ -1607,7 +1605,7 @@ import java.util.concurrent.ExecutionException; queueSessionTaskWithPlayerCommand( caller, sequenceNumber, - COMMAND_ADJUST_DEVICE_VOLUME, + Player.COMMAND_ADJUST_DEVICE_VOLUME, sendSessionResultSuccess(player -> player.setDeviceMuted(muted))); } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java b/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java index 0623064635..0163f3d19e 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java @@ -34,6 +34,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.RequiresPermission; import androidx.core.app.NotificationBuilderWithBuilderAccessor; +import androidx.core.graphics.drawable.IconCompat; import androidx.media3.common.util.NullableType; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; @@ -303,7 +304,10 @@ public class MediaStyleNotificationHelper { new RemoteViews( mBuilder.mContext.getPackageName(), androidx.media.R.layout.notification_media_action); - button.setImageViewResource(androidx.media.R.id.action0, action.getIcon()); + IconCompat iconCompat = action.getIconCompat(); + if (iconCompat != null) { + button.setImageViewResource(androidx.media.R.id.action0, iconCompat.getResId()); + } if (!tombstone) { button.setOnClickPendingIntent(androidx.media.R.id.action0, action.getActionIntent()); } diff --git a/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java b/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java index 07478bc845..4bf0142d81 100644 --- a/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java +++ b/libraries/session/src/main/java/androidx/media3/session/PlayerWrapper.java @@ -526,6 +526,7 @@ import java.util.List; super.replaceMediaItems(fromIndex, toIndex, mediaItems); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public boolean hasPrevious() { @@ -533,6 +534,7 @@ import java.util.List; return super.hasPrevious(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public boolean hasNext() { @@ -540,6 +542,7 @@ import java.util.List; return super.hasNext(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public boolean hasPreviousWindow() { @@ -547,6 +550,7 @@ import java.util.List; return super.hasPreviousWindow(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public boolean hasNextWindow() { @@ -566,6 +570,7 @@ import java.util.List; return super.hasNextMediaItem(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public void previous() { @@ -573,6 +578,7 @@ import java.util.List; super.previous(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public void next() { @@ -580,6 +586,7 @@ import java.util.List; super.next(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public void seekToPreviousWindow() { @@ -587,6 +594,7 @@ import java.util.List; super.seekToPreviousWindow(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public void seekToNextWindow() { @@ -687,6 +695,7 @@ import java.util.List; return super.getMediaItemAt(index); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public int getCurrentWindowIndex() { @@ -700,6 +709,7 @@ import java.util.List; return super.getCurrentMediaItemIndex(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public int getPreviousWindowIndex() { @@ -713,6 +723,7 @@ import java.util.List; return super.getPreviousMediaItemIndex(); } + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @Override public int getNextWindowIndex() { diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/MediaControllerProviderService.java b/libraries/test_session_current/src/main/java/androidx/media3/session/MediaControllerProviderService.java index 9067a45506..5c17cc70b5 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/MediaControllerProviderService.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/MediaControllerProviderService.java @@ -630,6 +630,7 @@ public class MediaControllerProviderService extends Service { }); } + @SuppressWarnings("deprecation") // Forwarding deprecated method call @Override public void setDeviceVolume(String controllerId, int volume) throws RemoteException { runOnHandler( @@ -649,6 +650,7 @@ public class MediaControllerProviderService extends Service { }); } + @SuppressWarnings("deprecation") // Forwarding deprecated method call @Override public void increaseDeviceVolume(String controllerId) throws RemoteException { runOnHandler( @@ -668,6 +670,7 @@ public class MediaControllerProviderService extends Service { }); } + @SuppressWarnings("deprecation") // Forwarding deprecated method call @Override public void decreaseDeviceVolume(String controllerId) throws RemoteException { runOnHandler( @@ -687,6 +690,7 @@ public class MediaControllerProviderService extends Service { }); } + @SuppressWarnings("deprecation") // Forwarding deprecated method call @Override public void setDeviceMuted(String controllerId, boolean muted) throws RemoteException { runOnHandler( diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeExoMediaDrm.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeExoMediaDrm.java index 4f802f073a..6e07539c96 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeExoMediaDrm.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeExoMediaDrm.java @@ -185,7 +185,11 @@ public final class FakeExoMediaDrm implements ExoMediaDrm { */ @Deprecated public FakeExoMediaDrm() { - this(/* maxConcurrentSessions= */ Integer.MAX_VALUE); + this( + /* enforceValidKeyResponses= */ true, + /* provisionsRequired= */ 0, + /* throwNotProvisionedExceptionFromGetKeyRequest= */ false, + /* maxConcurrentSessions= */ Integer.MAX_VALUE); } /** diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java index 2b800baa20..8a6301530d 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java @@ -55,6 +55,7 @@ public class StubExoPlayer extends StubPlayer implements ExoPlayer { * @deprecated Use {@link ExoPlayer}, as the {@link AudioComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Returning deprecated type @Override @Deprecated public AudioComponent getAudioComponent() { @@ -65,6 +66,7 @@ public class StubExoPlayer extends StubPlayer implements ExoPlayer { * @deprecated Use {@link ExoPlayer}, as the {@link VideoComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Returning deprecated type @Override @Deprecated public VideoComponent getVideoComponent() { @@ -75,6 +77,7 @@ public class StubExoPlayer extends StubPlayer implements ExoPlayer { * @deprecated Use {@link Player}, as the {@link TextComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Returning deprecated type @Override @Deprecated public TextComponent getTextComponent() { @@ -85,6 +88,7 @@ public class StubExoPlayer extends StubPlayer implements ExoPlayer { * @deprecated Use {@link Player}, as the {@link DeviceComponent} methods are defined by that * interface. */ + @SuppressWarnings("deprecation") // Returning deprecated type @Override @Deprecated public DeviceComponent getDeviceComponent() { diff --git a/libraries/test_utils_robolectric/src/main/java/androidx/media3/test/utils/robolectric/PlaybackOutput.java b/libraries/test_utils_robolectric/src/main/java/androidx/media3/test/utils/robolectric/PlaybackOutput.java index 4e22bf88c9..cf615274d5 100644 --- a/libraries/test_utils_robolectric/src/main/java/androidx/media3/test/utils/robolectric/PlaybackOutput.java +++ b/libraries/test_utils_robolectric/src/main/java/androidx/media3/test/utils/robolectric/PlaybackOutput.java @@ -77,6 +77,7 @@ public final class PlaybackOutput implements Dumper.Dumpable { metadatas.add(metadata); } + @SuppressWarnings("deprecation") // Intentionally testing deprecated output @Override public void onCues(List cues) { subtitlesFromDeprecatedTextOutput.add(cues); diff --git a/libraries/transformer/README.md b/libraries/transformer/README.md index c77c33c036..60a7cedd09 100644 --- a/libraries/transformer/README.md +++ b/libraries/transformer/README.md @@ -23,5 +23,5 @@ locally. Instructions for doing this can be found in the [top level README][]. * [Developer Guide][] * [Javadoc][] -[Developer Guide]: https://developer.android.com/guide/topics/media/transformer +[Developer Guide]: https://developer.android.com/media/media3/transformer [Javadoc]: https://developer.android.com/reference/androidx/media3/transformer/package-summary diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java index 904f803399..ef0df8570f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java @@ -541,7 +541,7 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { /** * Applying suggested profile/level settings from - * https://developer.android.com/guide/topics/media/sharing-video#b-frames_and_encoding_profiles + * https://developer.android.com/media/optimize/sharing#b-frames_and_encoding_profiles * *

    The adjustment is applied in-place to {@code mediaFormat}. */ diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ImageAssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ImageAssetLoader.java index ce81d8371a..9b1d446351 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ImageAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ImageAssetLoader.java @@ -50,7 +50,7 @@ import java.util.concurrent.ScheduledExecutorService; * An {@link AssetLoader} implementation that loads images into {@link Bitmap} instances. * *

    Supports the image formats listed here + * href="https://developer.android.com/media/platform/supported-formats#image-formats">here * except from GIFs, which could exhibit unexpected behavior. */ @UnstableApi diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Mp4Info.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Mp4Info.java index 53ac41b701..394e228fee 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Mp4Info.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Mp4Info.java @@ -34,6 +34,7 @@ import androidx.media3.extractor.PositionHolder; import androidx.media3.extractor.SeekMap; import androidx.media3.extractor.TrackOutput; import androidx.media3.extractor.mp4.Mp4Extractor; +import androidx.media3.extractor.text.SubtitleParser; import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -104,7 +105,9 @@ import org.checkerframework.checker.nullness.qual.Nullable; * @throws IOException If an error occurs during metadata extraction. */ public static Mp4Info create(Context context, String filePath, long timeUs) throws IOException { - Mp4Extractor mp4Extractor = new Mp4Extractor(); + Mp4Extractor mp4Extractor = + new Mp4Extractor( + SubtitleParser.Factory.UNSUPPORTED, Mp4Extractor.FLAG_EMIT_RAW_SUBTITLE_DATA); ExtractorOutputImpl extractorOutput = new ExtractorOutputImpl(); DefaultDataSource dataSource = new DefaultDataSource(context, /* allowCrossProtocolRedirects= */ false); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java index b9e2a4a28b..73636d07f8 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java @@ -36,6 +36,7 @@ import java.lang.annotation.Target; /** * @deprecated Use {@link ExportException} instead. */ +@SuppressWarnings("deprecation") // Deprecated usages of own type @Deprecated @UnstableApi public final class TransformationException extends Exception { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationResult.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationResult.java index 9037261262..3f1134da0f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationResult.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationResult.java @@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /** * @deprecated Use {@link ExportResult} instead. */ +@SuppressWarnings("deprecation") // Deprecated usages of own type @Deprecated @UnstableApi public final class TransformationResult { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index a87bb40322..cf99fc5d69 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -597,6 +597,7 @@ public final class Transformer { /** * @deprecated Use {@link #onCompleted(Composition, ExportResult)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated type in callback @Deprecated default void onTransformationCompleted(MediaItem inputMediaItem, TransformationResult result) { onTransformationCompleted(inputMediaItem); @@ -623,6 +624,7 @@ public final class Transformer { /** * @deprecated Use {@link #onError(Composition, ExportResult, ExportException)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated type in callback @Deprecated default void onTransformationError( MediaItem inputMediaItem, TransformationException exception) { @@ -632,6 +634,7 @@ public final class Transformer { /** * @deprecated Use {@link #onError(Composition, ExportResult, ExportException)} instead. */ + @SuppressWarnings("deprecation") // Using deprecated type in callback @Deprecated default void onTransformationError( MediaItem inputMediaItem, TransformationResult result, TransformationException exception) { diff --git a/libraries/ui/README.md b/libraries/ui/README.md index 16baae8ebf..5eb75c9e31 100644 --- a/libraries/ui/README.md +++ b/libraries/ui/README.md @@ -23,5 +23,5 @@ locally. Instructions for doing this can be found in the [top level README][]. * [Developer Guide][] * [Javadoc][] -[Developer Guide]: https://developer.android.com/guide/topics/media/ui/playerview +[Developer Guide]: https://developer.android.com/media/media3/ui/playerview [Javadoc]: https://developer.android.com/reference/androidx/media3/ui/package-summary diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java index 3fd19a0c8f..3bcb03083b 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerControlView.java @@ -331,7 +331,10 @@ public class PlayerControlView extends FrameLayout { @Nullable private Player player; @Nullable private ProgressUpdateListener progressUpdateListener; - @Nullable private OnFullScreenModeChangedListener onFullScreenModeChangedListener; + @SuppressWarnings("deprecation") // Supporting deprecated listener + @Nullable + private OnFullScreenModeChangedListener onFullScreenModeChangedListener; + private boolean isFullScreen; private boolean isAttachedToWindow; private boolean showMultiWindowTimeBar; @@ -1847,7 +1850,7 @@ public class PlayerControlView extends FrameLayout { mainTextView = itemView.findViewById(R.id.exo_main_text); subTextView = itemView.findViewById(R.id.exo_sub_text); iconView = itemView.findViewById(R.id.exo_icon); - itemView.setOnClickListener(v -> onSettingViewClicked(getAdapterPosition())); + itemView.setOnClickListener(v -> onSettingViewClicked(getBindingAdapterPosition())); } } diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java index 5b6e962b63..e3721d8adb 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerView.java @@ -147,8 +147,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * {@code video_decoder_gl_surface_view} and {@code none}. Using {@code none} is recommended * for audio only applications, since creating the surface can be expensive. Using {@code * surface_view} is recommended for video applications. See Choosing - * a surface type for more information. + * href="https://developer.android.com/media/media3/ui/playerview#surfacetype">Choosing a + * surface type for more information. *

      *
    • Corresponding method: None *
    • Default: {@code surface_view} @@ -306,7 +306,8 @@ public class PlayerView extends FrameLayout implements AdViewProvider { this(context, attrs, /* defStyleAttr= */ 0); } - @SuppressWarnings({"nullness:argument", "nullness:method.invocation"}) + // Using deprecated PlayerControlView.VisibilityListener internally + @SuppressWarnings({"nullness:argument", "nullness:method.invocation", "deprecation"}) public PlayerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); @@ -1021,6 +1022,7 @@ public class PlayerView extends FrameLayout implements AdViewProvider { * @deprecated Use {@link #setFullscreenButtonClickListener(FullscreenButtonClickListener)} * instead. */ + @SuppressWarnings("deprecation") // Forwarding deprecated call @Deprecated @UnstableApi public void setControllerOnFullScreenModeChangedListener( @@ -1292,13 +1294,13 @@ public class PlayerView extends FrameLayout implements AdViewProvider { List overlayViews = new ArrayList<>(); if (overlayFrameLayout != null) { overlayViews.add( - new AdOverlayInfo( - overlayFrameLayout, - AdOverlayInfo.PURPOSE_NOT_VISIBLE, - /* detailedReason= */ "Transparent overlay does not impact viewability")); + new AdOverlayInfo.Builder(overlayFrameLayout, AdOverlayInfo.PURPOSE_NOT_VISIBLE) + .setDetailedReason("Transparent overlay does not impact viewability") + .build()); } if (controller != null) { - overlayViews.add(new AdOverlayInfo(controller, AdOverlayInfo.PURPOSE_CONTROLS)); + overlayViews.add( + new AdOverlayInfo.Builder(controller, AdOverlayInfo.PURPOSE_CONTROLS).build()); } return ImmutableList.copyOf(overlayViews); } diff --git a/libraries/ui/src/main/java/androidx/media3/ui/WearUnsuitableOutputPlaybackSuppressionResolverListener.java b/libraries/ui/src/main/java/androidx/media3/ui/WearUnsuitableOutputPlaybackSuppressionResolverListener.java index b06397eb36..63c1cbcf80 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/WearUnsuitableOutputPlaybackSuppressionResolverListener.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/WearUnsuitableOutputPlaybackSuppressionResolverListener.java @@ -50,8 +50,8 @@ import java.util.List; * for non-Wear OS devices. * *

      The system dialog will be the Media - * Output Switcher if it is available on the device, or otherwise the Bluetooth settings screen. + * href="https://developer.android.com/media/routing#output-switcher">Media Output Switcher if + * it is available on the device, or otherwise the Bluetooth settings screen. * *

      This implementation also pauses playback when launching the system dialog. The underlying * {@link Player} implementation (e.g. ExoPlayer) is expected to resume playback automatically when