Remove unneccessary nullability.

AnalyticsCollector can't be null when passed into ExoPlayerImplInternal,
so there is no need to pass it around as nullable.

PiperOrigin-RevId: 424594031
This commit is contained in:
tonihei 2022-01-27 14:18:02 +00:00 committed by Andrew Lewis
parent 78411006df
commit fb8e99c778
5 changed files with 35 additions and 25 deletions

View file

@ -238,7 +238,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
BandwidthMeter bandwidthMeter, BandwidthMeter bandwidthMeter,
@Player.RepeatMode int repeatMode, @Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled, boolean shuffleModeEnabled,
@Nullable AnalyticsCollector analyticsCollector, AnalyticsCollector analyticsCollector,
SeekParameters seekParameters, SeekParameters seekParameters,
LivePlaybackSpeedControl livePlaybackSpeedControl, LivePlaybackSpeedControl livePlaybackSpeedControl,
long releaseTimeoutMs, long releaseTimeoutMs,

View file

@ -68,7 +68,7 @@ import com.google.common.collect.ImmutableList;
private final Timeline.Period period; private final Timeline.Period period;
private final Timeline.Window window; private final Timeline.Window window;
@Nullable private final AnalyticsCollector analyticsCollector; private final AnalyticsCollector analyticsCollector;
private final Handler analyticsCollectorHandler; private final Handler analyticsCollectorHandler;
private long nextWindowSequenceNumber; private long nextWindowSequenceNumber;
@ -84,13 +84,12 @@ import com.google.common.collect.ImmutableList;
/** /**
* Creates a new media period queue. * Creates a new media period queue.
* *
* @param analyticsCollector An optional {@link AnalyticsCollector} to be informed of queue * @param analyticsCollector An {@link AnalyticsCollector} to be informed of queue changes.
* changes.
* @param analyticsCollectorHandler The {@link Handler} to call {@link AnalyticsCollector} methods * @param analyticsCollectorHandler The {@link Handler} to call {@link AnalyticsCollector} methods
* on. * on.
*/ */
public MediaPeriodQueue( public MediaPeriodQueue(
@Nullable AnalyticsCollector analyticsCollector, Handler analyticsCollectorHandler) { AnalyticsCollector analyticsCollector, Handler analyticsCollectorHandler) {
this.analyticsCollector = analyticsCollector; this.analyticsCollector = analyticsCollector;
this.analyticsCollectorHandler = analyticsCollectorHandler; this.analyticsCollectorHandler = analyticsCollectorHandler;
period = new Timeline.Period(); period = new Timeline.Period();
@ -453,17 +452,15 @@ import com.google.common.collect.ImmutableList;
// Internal methods. // Internal methods.
private void notifyQueueUpdate() { private void notifyQueueUpdate() {
if (analyticsCollector != null) { ImmutableList.Builder<MediaPeriodId> builder = ImmutableList.builder();
ImmutableList.Builder<MediaPeriodId> builder = ImmutableList.builder(); @Nullable MediaPeriodHolder period = playing;
@Nullable MediaPeriodHolder period = playing; while (period != null) {
while (period != null) { builder.add(period.info.id);
builder.add(period.info.id); period = period.getNext();
period = period.getNext();
}
@Nullable MediaPeriodId readingPeriodId = reading == null ? null : reading.info.id;
analyticsCollectorHandler.post(
() -> analyticsCollector.updateMediaPeriodQueueInfo(builder.build(), readingPeriodId));
} }
@Nullable MediaPeriodId readingPeriodId = reading == null ? null : reading.info.id;
analyticsCollectorHandler.post(
() -> analyticsCollector.updateMediaPeriodQueueInfo(builder.build(), readingPeriodId));
} }
/** /**

View file

@ -92,15 +92,15 @@ import java.util.Set;
* *
* @param listener The {@link MediaSourceListInfoRefreshListener} to be informed of timeline * @param listener The {@link MediaSourceListInfoRefreshListener} to be informed of timeline
* changes. * changes.
* @param analyticsCollector An optional {@link AnalyticsCollector} to be registered for media * @param analyticsCollector An {@link AnalyticsCollector} to be registered for media source
* source events. * events.
* @param analyticsCollectorHandler The {@link Handler} to call {@link AnalyticsCollector} methods * @param analyticsCollectorHandler The {@link Handler} to call {@link AnalyticsCollector} methods
* on. * on.
* @param playerId The {@link PlayerId} of the player using this list. * @param playerId The {@link PlayerId} of the player using this list.
*/ */
public MediaSourceList( public MediaSourceList(
MediaSourceListInfoRefreshListener listener, MediaSourceListInfoRefreshListener listener,
@Nullable AnalyticsCollector analyticsCollector, AnalyticsCollector analyticsCollector,
Handler analyticsCollectorHandler, Handler analyticsCollectorHandler,
PlayerId playerId) { PlayerId playerId) {
this.playerId = playerId; this.playerId = playerId;
@ -113,10 +113,8 @@ import java.util.Set;
drmEventDispatcher = new DrmSessionEventListener.EventDispatcher(); drmEventDispatcher = new DrmSessionEventListener.EventDispatcher();
childSources = new HashMap<>(); childSources = new HashMap<>();
enabledMediaSourceHolders = new HashSet<>(); enabledMediaSourceHolders = new HashSet<>();
if (analyticsCollector != null) { mediaSourceEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector);
mediaSourceEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector); drmEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector);
drmEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector);
}
} }
/** /**

View file

@ -29,6 +29,8 @@ import androidx.media3.common.PlaybackParameters;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.common.Timeline; import androidx.media3.common.Timeline;
import androidx.media3.common.TracksInfo; import androidx.media3.common.TracksInfo;
import androidx.media3.common.util.Clock;
import androidx.media3.exoplayer.analytics.AnalyticsCollector;
import androidx.media3.exoplayer.analytics.PlayerId; import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.source.MediaSource.MediaPeriodId; import androidx.media3.exoplayer.source.MediaSource.MediaPeriodId;
import androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller; import androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller;
@ -42,6 +44,7 @@ import androidx.media3.test.utils.FakeMediaSource;
import androidx.media3.test.utils.FakeShuffleOrder; import androidx.media3.test.utils.FakeShuffleOrder;
import androidx.media3.test.utils.FakeTimeline; import androidx.media3.test.utils.FakeTimeline;
import androidx.media3.test.utils.FakeTimeline.TimelineWindowDefinition; import androidx.media3.test.utils.FakeTimeline.TimelineWindowDefinition;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.junit.Before; import org.junit.Before;
@ -80,12 +83,16 @@ public final class MediaPeriodQueueTest {
@Before @Before
public void setUp() { public void setUp() {
AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT);
analyticsCollector.setPlayer(
new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(),
Looper.getMainLooper());
mediaPeriodQueue = mediaPeriodQueue =
new MediaPeriodQueue(/* analyticsCollector= */ null, new Handler(Looper.getMainLooper())); new MediaPeriodQueue(analyticsCollector, new Handler(Looper.getMainLooper()));
mediaSourceList = mediaSourceList =
new MediaSourceList( new MediaSourceList(
mock(MediaSourceList.MediaSourceListInfoRefreshListener.class), mock(MediaSourceList.MediaSourceListInfoRefreshListener.class),
/* analyticsCollector= */ null, analyticsCollector,
new Handler(Looper.getMainLooper()), new Handler(Looper.getMainLooper()),
PlayerId.UNSET); PlayerId.UNSET);
rendererCapabilities = new RendererCapabilities[0]; rendererCapabilities = new RendererCapabilities[0];

View file

@ -25,15 +25,19 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.os.Looper;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.common.Timeline; import androidx.media3.common.Timeline;
import androidx.media3.common.util.Clock;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.analytics.AnalyticsCollector;
import androidx.media3.exoplayer.analytics.PlayerId; import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.ShuffleOrder; import androidx.media3.exoplayer.source.ShuffleOrder;
import androidx.media3.test.utils.FakeMediaSource; import androidx.media3.test.utils.FakeMediaSource;
import androidx.media3.test.utils.FakeShuffleOrder; import androidx.media3.test.utils.FakeShuffleOrder;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -54,10 +58,14 @@ public class MediaSourceListTest {
@Before @Before
public void setUp() { public void setUp() {
AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT);
analyticsCollector.setPlayer(
new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(),
Looper.getMainLooper());
mediaSourceList = mediaSourceList =
new MediaSourceList( new MediaSourceList(
mock(MediaSourceList.MediaSourceListInfoRefreshListener.class), mock(MediaSourceList.MediaSourceListInfoRefreshListener.class),
/* analyticsCollector= */ null, analyticsCollector,
Util.createHandlerForCurrentOrMainLooper(), Util.createHandlerForCurrentOrMainLooper(),
PlayerId.UNSET); PlayerId.UNSET);
} }