From 755f5b7d761e097a3125d0d49caf26a4c2d0dcb4 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 18 Nov 2020 04:04:17 +0000 Subject: [PATCH] Suppress warnings in preparation for Checker Framework 3.7.1 upgrade. PiperOrigin-RevId: 342999709 --- .../exoplayer2/drm/DefaultDrmSession.java | 14 +++++++- .../drm/DefaultDrmSessionManager.java | 15 +++++++- .../android/exoplayer2/drm/DrmSession.java | 6 ++++ .../exoplayer2/drm/DrmSessionManager.java | 4 +++ .../exoplayer2/drm/DummyExoMediaDrm.java | 2 ++ .../exoplayer2/drm/ErrorStateDrmSession.java | 6 ++++ .../android/exoplayer2/drm/ExoMediaDrm.java | 4 +++ .../exoplayer2/drm/FrameworkMediaDrm.java | 6 ++++ .../exoplayer2/drm/HttpMediaDrmCallback.java | 2 ++ .../exoplayer2/drm/OfflineLicenseHelper.java | 4 +++ .../android/exoplayer2/ui/DefaultTimeBar.java | 16 ++++++--- .../exoplayer2/ui/PlayerControlView.java | 2 ++ .../ui/PlayerNotificationManager.java | 16 +++++++-- .../android/exoplayer2/ui/PlayerView.java | 32 ++++++++++++++--- .../ui/StyledPlayerControlView.java | 2 ++ .../exoplayer2/ui/StyledPlayerView.java | 34 ++++++++++++++++--- .../google/android/exoplayer2/ui/TimeBar.java | 6 ++-- .../exoplayer2/ui/WebViewSubtitleOutput.java | 2 ++ .../testutil/CapturingAudioSink.java | 2 ++ .../exoplayer2/testutil/DownloadBuilder.java | 8 ++++- .../android/exoplayer2/testutil/Dumper.java | 2 ++ .../exoplayer2/testutil/FakeDataSet.java | 8 ++++- .../exoplayer2/testutil/FakeExoMediaDrm.java | 7 +++- .../exoplayer2/testutil/FakeMediaSource.java | 10 +++++- .../exoplayer2/testutil/FakeSampleStream.java | 8 ++++- 25 files changed, 193 insertions(+), 25 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java index 0cec4ab789..d8ab32f945 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java @@ -139,7 +139,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Nullable private RequestHandler requestHandler; @Nullable private ExoMediaCrypto mediaCrypto; @Nullable private DrmSessionException lastException; - @Nullable private byte[] sessionId; + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + private byte[] sessionId; + private byte @MonotonicNonNull [] offlineLicenseKeySetId; @Nullable private KeyRequest currentKeyRequest; @@ -164,6 +168,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * @param loadErrorHandlingPolicy The {@link LoadErrorHandlingPolicy} for key and provisioning * requests. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public DefaultDrmSession( UUID uuid, ExoMediaDrm mediaDrm, @@ -272,12 +278,16 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; return sessionId == null ? null : mediaDrm.queryKeyStatus(sessionId); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override @Nullable public byte[] getOfflineLicenseKeySetId() { return offlineLicenseKeySetId; } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override public void acquire(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) { checkState(referenceCount >= 0); @@ -301,6 +311,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; referenceCountListener.onReferenceCountIncremented(this, referenceCount); } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override public void release(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) { checkState(referenceCount > 0); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java index be02faeba8..4aa15774d3 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java @@ -290,7 +290,10 @@ public class DefaultDrmSessionManager implements DrmSessionManager { @Nullable private Looper playbackLooper; private @MonotonicNonNull Handler sessionReleasingHandler; private int mode; - @Nullable private byte[] offlineLicenseKeySetId; + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + private byte[] offlineLicenseKeySetId; /* package */ volatile @Nullable MediaDrmHandler mediaDrmHandler; @@ -430,6 +433,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager { * @param mode The mode to be set. * @param offlineLicenseKeySetId The key set id of the license to be used with the given mode. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public void setMode(@Mode int mode, @Nullable byte[] offlineLicenseKeySetId) { Assertions.checkState(sessions.isEmpty()); if (mode == MODE_QUERY || mode == MODE_RELEASE) { @@ -467,6 +472,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager { exoMediaDrm = null; } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override @Nullable public DrmSession acquireSession( @@ -618,6 +625,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager { } } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") private DefaultDrmSession createAndAcquireSessionWithRetry( @Nullable List schemeDatas, boolean isPlaceholderSession, @@ -657,6 +666,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager { *

If {@link #sessionKeepaliveMs} != {@link C#TIME_UNSET} then acquires it again to allow the * manager to keep it alive (passing in {@code eventDispatcher=null}. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") private DefaultDrmSession createAndAcquireSession( @Nullable List schemeDatas, boolean isPlaceholderSession, @@ -817,6 +828,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager { private class MediaDrmEventListener implements OnEventListener { + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override public void onEvent( ExoMediaDrm md, @Nullable byte[] sessionId, int event, int extra, @Nullable byte[] data) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java index e72d552a68..ac2e1febce 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java @@ -131,6 +131,8 @@ public interface DrmSession { * Returns the key set id of the offline license loaded into this session, or null if there isn't * one. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Nullable byte[] getOfflineLicenseKeySetId(); @@ -142,6 +144,8 @@ public interface DrmSession { * @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} used to route * DRM-related events dispatched from this session, or null if no event handling is needed. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") void acquire(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher); /** @@ -152,5 +156,7 @@ public interface DrmSession { * the session is released (the same instance (possibly null) that was passed by the caller to * {@link #acquire(DrmSessionEventListener.EventDispatcher)}). */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") void release(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java index 1168884d76..397fb8bfb1 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java @@ -31,6 +31,8 @@ public interface DrmSessionManager { DrmSessionManager DUMMY = new DrmSessionManager() { + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override @Nullable public DrmSession acquireSession( @@ -89,6 +91,8 @@ public interface DrmSessionManager { * @param format The {@link Format} for which to acquire a {@link DrmSession}. * @return The DRM session. May be null if the given {@link Format#drmInitData} is null. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Nullable DrmSession acquireSession( Looper playbackLooper, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DummyExoMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DummyExoMediaDrm.java index 9631b76491..97602811d6 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DummyExoMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DummyExoMediaDrm.java @@ -68,6 +68,8 @@ public final class DummyExoMediaDrm implements ExoMediaDrm { throw new IllegalStateException(); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override @Nullable public byte[] provideKeyResponse(byte[] scope, byte[] response) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java index 068f1b3782..cbc9583506 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java @@ -63,17 +63,23 @@ public final class ErrorStateDrmSession implements DrmSession { return null; } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override @Nullable public byte[] getOfflineLicenseKeySetId() { return null; } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override public void acquire(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) { // Do nothing. } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override public void release(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) { // Do nothing. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java index 6684064f63..e7607e5777 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java @@ -119,6 +119,8 @@ public interface ExoMediaDrm { * @param extra A secondary error code. * @param data Optional byte array of data that may be associated with the event. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") void onEvent( ExoMediaDrm mediaDrm, @Nullable byte[] sessionId, @@ -294,6 +296,8 @@ public interface ExoMediaDrm { throws NotProvisionedException; /** @see MediaDrm#provideKeyResponse(byte[], byte[]) */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Nullable byte[] provideKeyResponse(byte[] scope, byte[] response) throws NotProvisionedException, DeniedByServerException; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java index 26fe66e792..a951a5f2a4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java @@ -112,6 +112,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm { } } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override public void setOnEventListener(@Nullable ExoMediaDrm.OnEventListener listener) { mediaDrm.setOnEventListener( @@ -127,6 +129,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm { * @param listener The listener to receive events, or {@code null} to stop receiving events. * @throws UnsupportedOperationException on API levels lower than 23. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Override @RequiresApi(23) public void setOnKeyStatusChangeListener( @@ -213,6 +217,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm { return new KeyRequest(requestData, licenseServerUrl); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override @Nullable public byte[] provideKeyResponse(byte[] scope, byte[] response) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java index 6a20cf7bda..4f26a7067a 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/HttpMediaDrmCallback.java @@ -153,6 +153,8 @@ public final class HttpMediaDrmCallback implements MediaDrmCallback { return executePost(dataSourceFactory, url, request.getData(), requestProperties); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") private static byte[] executePost( HttpDataSource.Factory dataSourceFactory, String url, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java index b218d0cadb..0db0f6182e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java @@ -262,6 +262,8 @@ public final class OfflineLicenseHelper { handlerThread.quit(); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") private byte[] blockingKeyRequest( @Mode int licenseMode, @Nullable byte[] offlineLicenseKeySetId, Format format) throws DrmSessionException { @@ -277,6 +279,8 @@ public final class OfflineLicenseHelper { return Assertions.checkNotNull(keySetId); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") private DrmSession openBlockingKeyRequest( @Mode int licenseMode, @Nullable byte[] offlineLicenseKeySetId, Format format) { Assertions.checkNotNull(format.drmInitData); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTimeBar.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTimeBar.java index 4e96d39e7c..89271bca52 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTimeBar.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTimeBar.java @@ -222,8 +222,14 @@ public class DefaultTimeBar extends View implements TimeBar { private long position; private long bufferedPosition; private int adGroupCount; - @Nullable private long[] adGroupTimesMs; - @Nullable private boolean[] playedAdGroups; + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + private long[] adGroupTimesMs; + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + private boolean[] playedAdGroups; public DefaultTimeBar(Context context) { this(context, null); @@ -527,9 +533,11 @@ public class DefaultTimeBar extends View implements TimeBar { : duration / timeBarWidthDp; } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override - public void setAdGroupTimesMs(@Nullable long[] adGroupTimesMs, @Nullable boolean[] playedAdGroups, - int adGroupCount) { + public void setAdGroupTimesMs( + @Nullable long[] adGroupTimesMs, @Nullable boolean[] playedAdGroups, int adGroupCount) { Assertions.checkArgument(adGroupCount == 0 || (adGroupTimesMs != null && playedAdGroups != null)); this.adGroupCount = adGroupCount; diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java index 1ae7812bd4..19c658a534 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java @@ -568,6 +568,8 @@ public class PlayerControlView extends FrameLayout { * @param extraPlayedAdGroups Whether each ad has been played. Must be the same length as {@code * extraAdGroupTimesMs}, or {@code null} if {@code extraAdGroupTimesMs} is {@code null}. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public void setExtraAdGroupMarkers( @Nullable long[] extraAdGroupTimesMs, @Nullable boolean[] extraPlayedAdGroups) { if (extraAdGroupTimesMs == null) { diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerNotificationManager.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerNotificationManager.java index b183fddbb6..287f067a69 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerNotificationManager.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerNotificationManager.java @@ -373,7 +373,11 @@ public class PlayerNotificationManager { private final int instanceId; private final Timeline.Window window; - @Nullable private NotificationCompat.Builder builder; + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + private NotificationCompat.Builder builder; + @Nullable private List builderActions; @Nullable private Player player; @Nullable private PlaybackPreparer playbackPreparer; @@ -381,7 +385,11 @@ public class PlayerNotificationManager { private boolean isNotificationStarted; private int currentNotificationTag; @Nullable private NotificationListener notificationListener; - @Nullable private MediaSessionCompat.Token mediaSessionToken; + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + private MediaSessionCompat.Token mediaSessionToken; + private boolean useNavigationActions; private boolean useNavigationActionsInCompactView; private boolean usePlayPauseActions; @@ -1039,6 +1047,8 @@ public class PlayerNotificationManager { * NotificationCompat.Builder#build()} to obtain the notification, or {@code null} if no * notification should be displayed. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Nullable protected NotificationCompat.Builder createNotification( Player player, @@ -1054,6 +1064,8 @@ public class PlayerNotificationManager { List actions = new ArrayList<>(actionNames.size()); for (int i = 0; i < actionNames.size(); i++) { String actionName = actionNames.get(i); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") @Nullable NotificationCompat.Action action = playbackActions.containsKey(actionName) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java index 3143d3d70b..1c21437c45 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java @@ -309,7 +309,11 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider @Nullable private Player player; private boolean useController; - @Nullable private PlayerControlView.VisibilityListener controllerVisibilityListener; + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + private PlayerControlView.VisibilityListener controllerVisibilityListener; + private boolean useArtwork; @Nullable private Drawable defaultArtwork; private @ShowBuffering int showBuffering; @@ -564,7 +568,10 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider @Nullable Player oldPlayer = this.player; if (oldPlayer != null) { oldPlayer.removeListener(componentListener); - @Nullable Player.VideoComponent oldVideoComponent = oldPlayer.getVideoComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.VideoComponent oldVideoComponent = oldPlayer.getVideoComponent(); if (oldVideoComponent != null) { oldVideoComponent.removeVideoListener(componentListener); if (surfaceView instanceof TextureView) { @@ -577,7 +584,10 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider oldVideoComponent.clearVideoSurfaceView((SurfaceView) surfaceView); } } - @Nullable Player.TextComponent oldTextComponent = oldPlayer.getTextComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.TextComponent oldTextComponent = oldPlayer.getTextComponent(); if (oldTextComponent != null) { oldTextComponent.removeTextOutput(componentListener); } @@ -593,7 +603,10 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider updateErrorMessage(); updateForCurrentTrackSelections(/* isNewPlayer= */ true); if (player != null) { - @Nullable Player.VideoComponent newVideoComponent = player.getVideoComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.VideoComponent newVideoComponent = player.getVideoComponent(); if (newVideoComponent != null) { if (surfaceView instanceof TextureView) { newVideoComponent.setVideoTextureView((TextureView) surfaceView); @@ -607,7 +620,10 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider } newVideoComponent.addVideoListener(componentListener); } - @Nullable Player.TextComponent newTextComponent = player.getTextComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.TextComponent newTextComponent = player.getTextComponent(); if (newTextComponent != null) { newTextComponent.addTextOutput(componentListener); if (subtitleView != null) { @@ -966,6 +982,8 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider * @param listener The listener to be notified about visibility changes, or null to remove the * current listener. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public void setControllerVisibilityListener( @Nullable PlayerControlView.VisibilityListener listener) { Assertions.checkStateNotNull(controller); @@ -1108,6 +1126,8 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider * @param extraPlayedAdGroups Whether each ad has been played, or {@code null} to show no extra ad * markers. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public void setExtraAdGroupMarkers( @Nullable long[] extraAdGroupTimesMs, @Nullable boolean[] extraPlayedAdGroups) { Assertions.checkStateNotNull(controller); @@ -1120,6 +1140,8 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider * @param listener The listener to be notified about aspect ratios changes of the video content or * the content frame. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public void setAspectRatioListener( @Nullable AspectRatioFrameLayout.AspectRatioListener listener) { Assertions.checkStateNotNull(contentFrame); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java index 3cff0ef3cb..da3dc0a508 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java @@ -791,6 +791,8 @@ public class StyledPlayerControlView extends FrameLayout { * @param extraPlayedAdGroups Whether each ad has been played. Must be the same length as {@code * extraAdGroupTimesMs}, or {@code null} if {@code extraAdGroupTimesMs} is {@code null}. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public void setExtraAdGroupMarkers( @Nullable long[] extraAdGroupTimesMs, @Nullable boolean[] extraPlayedAdGroups) { if (extraAdGroupTimesMs == null) { diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java index 871ed8919c..59804d311c 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java @@ -311,7 +311,11 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro @Nullable private Player player; private boolean useController; - @Nullable private StyledPlayerControlView.VisibilityListener controllerVisibilityListener; + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + private StyledPlayerControlView.VisibilityListener controllerVisibilityListener; + private boolean useArtwork; @Nullable private Drawable defaultArtwork; private @ShowBuffering int showBuffering; @@ -573,7 +577,10 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro @Nullable Player oldPlayer = this.player; if (oldPlayer != null) { oldPlayer.removeListener(componentListener); - @Nullable Player.VideoComponent oldVideoComponent = oldPlayer.getVideoComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.VideoComponent oldVideoComponent = oldPlayer.getVideoComponent(); if (oldVideoComponent != null) { oldVideoComponent.removeVideoListener(componentListener); if (surfaceView instanceof TextureView) { @@ -586,7 +593,10 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro oldVideoComponent.clearVideoSurfaceView((SurfaceView) surfaceView); } } - @Nullable Player.TextComponent oldTextComponent = oldPlayer.getTextComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.TextComponent oldTextComponent = oldPlayer.getTextComponent(); if (oldTextComponent != null) { oldTextComponent.removeTextOutput(componentListener); } @@ -602,7 +612,10 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro updateErrorMessage(); updateForCurrentTrackSelections(/* isNewPlayer= */ true); if (player != null) { - @Nullable Player.VideoComponent newVideoComponent = player.getVideoComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.VideoComponent newVideoComponent = player.getVideoComponent(); if (newVideoComponent != null) { if (surfaceView instanceof TextureView) { newVideoComponent.setVideoTextureView((TextureView) surfaceView); @@ -616,7 +629,10 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro } newVideoComponent.addVideoListener(componentListener); } - @Nullable Player.TextComponent newTextComponent = player.getTextComponent(); + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + Player.TextComponent newTextComponent = player.getTextComponent(); if (newTextComponent != null) { newTextComponent.addTextOutput(componentListener); if (subtitleView != null) { @@ -950,6 +966,8 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro * @param listener The listener to be notified about visibility changes, or null to remove the * current listener. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public void setControllerVisibilityListener( @Nullable StyledPlayerControlView.VisibilityListener listener) { Assertions.checkStateNotNull(controller); @@ -971,6 +989,8 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro * @param listener The listener to be notified when the fullscreen button is clicked, or null to * remove the current listener and hide the fullscreen button. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public void setControllerOnFullScreenModeChangedListener( @Nullable StyledPlayerControlView.OnFullScreenModeChangedListener listener) { Assertions.checkStateNotNull(controller); @@ -1102,6 +1122,8 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro * @param extraPlayedAdGroups Whether each ad has been played, or {@code null} to show no extra ad * markers. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public void setExtraAdGroupMarkers( @Nullable long[] extraAdGroupTimesMs, @Nullable boolean[] extraPlayedAdGroups) { Assertions.checkStateNotNull(controller); @@ -1114,6 +1136,8 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro * @param listener The listener to be notified about aspect ratios changes of the video content or * the content frame. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public void setAspectRatioListener( @Nullable AspectRatioFrameLayout.AspectRatioListener listener) { Assertions.checkStateNotNull(contentFrame); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/TimeBar.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/TimeBar.java index 9e3f2e42ff..bda47df86d 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/TimeBar.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/TimeBar.java @@ -102,8 +102,10 @@ public interface TimeBar { * groups. * @param adGroupCount The number of ad groups. */ - void setAdGroupTimesMs(@Nullable long[] adGroupTimesMs, @Nullable boolean[] playedAdGroups, - int adGroupCount); + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + void setAdGroupTimesMs( + @Nullable long[] adGroupTimesMs, @Nullable boolean[] playedAdGroups, int adGroupCount); /** * Listener for scrubbing events. diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java index f3de4298a5..dfda502017 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java @@ -374,6 +374,8 @@ import java.util.Map; } } + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") private static String convertAlignmentToCss(@Nullable Layout.Alignment alignment) { if (alignment == null) { return "center"; diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/CapturingAudioSink.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/CapturingAudioSink.java index bf1ffdce0e..aae37236ef 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/CapturingAudioSink.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/CapturingAudioSink.java @@ -36,6 +36,8 @@ public final class CapturingAudioSink extends ForwardingAudioSink implements Dum interceptedData = new ArrayList<>(); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Override public void configure(Format inputFormat, int specifiedBufferSize, @Nullable int[] outputChannels) throws ConfigurationException { diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DownloadBuilder.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DownloadBuilder.java index 184b7a11e4..a698dd9562 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DownloadBuilder.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DownloadBuilder.java @@ -41,7 +41,11 @@ public final class DownloadBuilder { private Uri uri; @Nullable private String mimeType; private List streamKeys; - @Nullable private byte[] keySetId; + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + private byte[] keySetId; + @Nullable private String cacheKey; private byte[] customMetadata; @@ -85,6 +89,8 @@ public final class DownloadBuilder { } /** Creates a download builder. */ + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") private DownloadBuilder( String id, Uri uri, diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/Dumper.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/Dumper.java index 8175c9032d..f7fb54ac61 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/Dumper.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/Dumper.java @@ -54,6 +54,8 @@ public final class Dumper { return this; } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") public Dumper add(String field, @Nullable byte[] value) { String string = String.format( diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSet.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSet.java index 550220a563..85c8045a74 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSet.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeDataSet.java @@ -80,7 +80,11 @@ public class FakeDataSet { public static final class Segment { @Nullable public final IOException exception; - @Nullable public final byte[] data; + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + public final byte[] data; + public final int length; public final long byteOffset; @Nullable public final Runnable action; @@ -105,6 +109,8 @@ public class FakeDataSet { this(null, 0, null, action, previousSegment); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") private Segment( @Nullable byte[] data, int length, diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExoMediaDrm.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExoMediaDrm.java index 19ea68cbf2..f3ebdae489 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExoMediaDrm.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeExoMediaDrm.java @@ -170,6 +170,8 @@ public final class FakeExoMediaDrm implements ExoMediaDrm { return new KeyRequest(requestData.toByteArray(), /* licenseServerUrl= */ ""); } + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") @Nullable @Override public byte[] provideKeyResponse(byte[] scope, byte[] response) @@ -243,7 +245,10 @@ public final class FakeExoMediaDrm implements ExoMediaDrm { @Override public byte[] getPropertyByteArray(String propertyName) { Assertions.checkState(referenceCount > 0); - @Nullable byte[] value = byteProperties.get(propertyName); + // nullness annotations are not applicable to primitive types + @SuppressWarnings("nullness:nullness.on.primitive") + @Nullable + byte[] value = byteProperties.get(propertyName); if (value == null) { throw new IllegalArgumentException("Unrecognized propertyName: " + propertyName); } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java index 0978547610..4ed786d293 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java @@ -81,7 +81,11 @@ public class FakeMediaSource extends BaseMediaSource { private static final int MANIFEST_LOAD_BYTES = 100; private final TrackGroupArray trackGroupArray; - @Nullable private final FakeMediaPeriod.TrackDataFactory trackDataFactory; + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + private final FakeMediaPeriod.TrackDataFactory trackDataFactory; + private final ArrayList activeMediaPeriods; private final ArrayList createdMediaPeriods; private final DrmSessionManager drmSessionManager; @@ -121,6 +125,8 @@ public class FakeMediaSource extends BaseMediaSource { * null to prevent an immediate source info refresh message when preparing the media source. It * can be manually set later using {@link #setNewSourceInfo(Timeline)}. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public FakeMediaSource( @Nullable Timeline timeline, DrmSessionManager drmSessionManager, @@ -136,6 +142,8 @@ public class FakeMediaSource extends BaseMediaSource { * immediate source info refresh message when preparing the media source. It can be manually set * later using {@link #setNewSourceInfo(Timeline)}. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public FakeMediaSource( @Nullable Timeline timeline, DrmSessionManager drmSessionManager, diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java index eaa2fb52bb..4fcfe0cf7c 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java @@ -126,7 +126,11 @@ public class FakeSampleStream implements SampleStream { } } - @Nullable private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher; + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") + @Nullable + private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher; + private final Format initialFormat; private final List fakeSampleStreamItems; private final DrmSessionManager drmSessionManager; @@ -153,6 +157,8 @@ public class FakeSampleStream implements SampleStream { * return every time readData is called. This should usually end with {@link * FakeSampleStreamItem#END_OF_STREAM_ITEM}. */ + // nullness annotations are not applicable to outer types + @SuppressWarnings("nullness:nullness.on.outer") public FakeSampleStream( @Nullable MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher, DrmSessionManager drmSessionManager,