diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 7d48272bdd..c893d49864 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -230,7 +230,7 @@ import java.util.concurrent.atomic.AtomicBoolean; BandwidthMeter bandwidthMeter, @Player.RepeatMode int repeatMode, boolean shuffleModeEnabled, - @Nullable AnalyticsCollector analyticsCollector, + AnalyticsCollector analyticsCollector, SeekParameters seekParameters, LivePlaybackSpeedControl livePlaybackSpeedControl, long releaseTimeoutMs, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/MediaPeriodQueue.java b/library/core/src/main/java/com/google/android/exoplayer2/MediaPeriodQueue.java index e34dffd595..797ec91add 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/MediaPeriodQueue.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/MediaPeriodQueue.java @@ -66,7 +66,7 @@ import com.google.common.collect.ImmutableList; private final Timeline.Period period; private final Timeline.Window window; - @Nullable private final AnalyticsCollector analyticsCollector; + private final AnalyticsCollector analyticsCollector; private final Handler analyticsCollectorHandler; private long nextWindowSequenceNumber; @@ -82,13 +82,12 @@ import com.google.common.collect.ImmutableList; /** * Creates a new media period queue. * - * @param analyticsCollector An optional {@link AnalyticsCollector} to be informed of queue - * changes. + * @param analyticsCollector An {@link AnalyticsCollector} to be informed of queue changes. * @param analyticsCollectorHandler The {@link Handler} to call {@link AnalyticsCollector} methods * on. */ public MediaPeriodQueue( - @Nullable AnalyticsCollector analyticsCollector, Handler analyticsCollectorHandler) { + AnalyticsCollector analyticsCollector, Handler analyticsCollectorHandler) { this.analyticsCollector = analyticsCollector; this.analyticsCollectorHandler = analyticsCollectorHandler; period = new Timeline.Period(); @@ -451,17 +450,15 @@ import com.google.common.collect.ImmutableList; // Internal methods. private void notifyQueueUpdate() { - if (analyticsCollector != null) { - ImmutableList.Builder builder = ImmutableList.builder(); - @Nullable MediaPeriodHolder period = playing; - while (period != null) { - builder.add(period.info.id); - period = period.getNext(); - } - @Nullable MediaPeriodId readingPeriodId = reading == null ? null : reading.info.id; - analyticsCollectorHandler.post( - () -> analyticsCollector.updateMediaPeriodQueueInfo(builder.build(), readingPeriodId)); + ImmutableList.Builder builder = ImmutableList.builder(); + @Nullable MediaPeriodHolder period = playing; + while (period != null) { + builder.add(period.info.id); + period = period.getNext(); } + @Nullable MediaPeriodId readingPeriodId = reading == null ? null : reading.info.id; + analyticsCollectorHandler.post( + () -> analyticsCollector.updateMediaPeriodQueueInfo(builder.build(), readingPeriodId)); } /** diff --git a/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java b/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java index 95da840f95..389ae64b74 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java @@ -91,15 +91,15 @@ import java.util.Set; * * @param listener The {@link MediaSourceListInfoRefreshListener} to be informed of timeline * changes. - * @param analyticsCollector An optional {@link AnalyticsCollector} to be registered for media - * source events. + * @param analyticsCollector An {@link AnalyticsCollector} to be registered for media source + * events. * @param analyticsCollectorHandler The {@link Handler} to call {@link AnalyticsCollector} methods * on. * @param playerId The {@link PlayerId} of the player using this list. */ public MediaSourceList( MediaSourceListInfoRefreshListener listener, - @Nullable AnalyticsCollector analyticsCollector, + AnalyticsCollector analyticsCollector, Handler analyticsCollectorHandler, PlayerId playerId) { this.playerId = playerId; @@ -112,10 +112,8 @@ import java.util.Set; drmEventDispatcher = new DrmSessionEventListener.EventDispatcher(); childSources = new HashMap<>(); enabledMediaSourceHolders = new HashSet<>(); - if (analyticsCollector != null) { - mediaSourceEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector); - drmEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector); - } + mediaSourceEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector); + drmEventDispatcher.addEventListener(analyticsCollectorHandler, analyticsCollector); } /** diff --git a/library/core/src/test/java/com/google/android/exoplayer2/MediaPeriodQueueTest.java b/library/core/src/test/java/com/google/android/exoplayer2/MediaPeriodQueueTest.java index 00e99f8b3a..5263f957a9 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/MediaPeriodQueueTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/MediaPeriodQueueTest.java @@ -22,7 +22,9 @@ import static org.robolectric.Shadows.shadowOf; import android.net.Uri; import android.os.Handler; import android.os.Looper; +import androidx.test.core.app.ApplicationProvider; 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.source.MediaSource.MediaPeriodId; 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.TrackSelectorResult; import com.google.android.exoplayer2.upstream.Allocator; +import com.google.android.exoplayer2.util.Clock; import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; @@ -74,12 +77,16 @@ public final class MediaPeriodQueueTest { @Before public void setUp() { + AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT); + analyticsCollector.setPlayer( + new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(), + Looper.getMainLooper()); mediaPeriodQueue = - new MediaPeriodQueue(/* analyticsCollector= */ null, new Handler(Looper.getMainLooper())); + new MediaPeriodQueue(analyticsCollector, new Handler(Looper.getMainLooper())); mediaSourceList = new MediaSourceList( mock(MediaSourceList.MediaSourceListInfoRefreshListener.class), - /* analyticsCollector= */ null, + analyticsCollector, new Handler(Looper.getMainLooper()), PlayerId.UNSET); rendererCapabilities = new RendererCapabilities[0]; diff --git a/library/core/src/test/java/com/google/android/exoplayer2/MediaSourceListTest.java b/library/core/src/test/java/com/google/android/exoplayer2/MediaSourceListTest.java index 209fb83547..53ba1dac82 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/MediaSourceListTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/MediaSourceListTest.java @@ -25,12 +25,16 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.os.Looper; +import androidx.test.core.app.ApplicationProvider; 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.source.MediaSource; import com.google.android.exoplayer2.source.ShuffleOrder; import com.google.android.exoplayer2.testutil.FakeMediaSource; import com.google.android.exoplayer2.testutil.FakeShuffleOrder; +import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.util.Util; import java.util.ArrayList; import java.util.Collections; @@ -51,10 +55,14 @@ public class MediaSourceListTest { @Before public void setUp() { + AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT); + analyticsCollector.setPlayer( + new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(), + Looper.getMainLooper()); mediaSourceList = new MediaSourceList( mock(MediaSourceList.MediaSourceListInfoRefreshListener.class), - /* analyticsCollector= */ null, + analyticsCollector, Util.createHandlerForCurrentOrMainLooper(), PlayerId.UNSET); }