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 145e923dce
commit 777246d9dc
5 changed files with 35 additions and 25 deletions

View File

@ -230,7 +230,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

@ -66,7 +66,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;
@ -82,13 +82,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();
@ -451,17 +450,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

@ -91,15 +91,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;
@ -112,10 +112,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

@ -22,7 +22,9 @@ import static org.robolectric.Shadows.shadowOf;
import android.net.Uri; import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
import com.google.android.exoplayer2.analytics.PlayerId; import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId; import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller; import com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller;
@ -37,6 +39,7 @@ import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelectorResult; import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.util.Clock;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -74,12 +77,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,12 +25,16 @@ 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.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
import com.google.android.exoplayer2.analytics.PlayerId; import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ShuffleOrder; import com.google.android.exoplayer2.source.ShuffleOrder;
import com.google.android.exoplayer2.testutil.FakeMediaSource; import com.google.android.exoplayer2.testutil.FakeMediaSource;
import com.google.android.exoplayer2.testutil.FakeShuffleOrder; import com.google.android.exoplayer2.testutil.FakeShuffleOrder;
import com.google.android.exoplayer2.util.Clock;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -51,10 +55,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);
} }