Split AnalyticsCollector in interface and default Impl
This will allow R8 to strip out the implementation if it is not needed for an app. #minor-release PiperOrigin-RevId: 427983730
This commit is contained in:
parent
cacec8e02f
commit
e5f2e44c29
@ -54,6 +54,8 @@
|
||||
`ExoPlayer.Builder.setUsePlatformDiagnostics(false)`.
|
||||
* Updated some `AnalyticsListener.EventFlags` constant values to match
|
||||
values in `Player.EventFlags`.
|
||||
* Split `AnalyticsCollector` into an interface and default implementation
|
||||
to allow it to be stripped by R8 if an app doesn't need it.
|
||||
* Android 12 compatibility:
|
||||
* Upgrade the Cast extension to depend on
|
||||
`com.google.android.gms:play-services-cast-framework:20.1.0`. Earlier
|
||||
|
@ -225,16 +225,16 @@ new PlaybackStatsListener(
|
||||
|
||||
In case you need to add custom events to the analytics data, you need to save
|
||||
these events in your own data structure and combine them with the reported
|
||||
`PlaybackStats` later. If it helps, you can extend `AnalyticsCollector` to be
|
||||
able to generate `EventTime` instances for your custom events and send them to
|
||||
the already registered listeners as shown in the following example.
|
||||
`PlaybackStats` later. If it helps, you can extend `DefaultAnalyticsCollector`
|
||||
to be able to generate `EventTime` instances for your custom events and send
|
||||
them to the already registered listeners as shown in the following example.
|
||||
|
||||
~~~
|
||||
interface ExtendedListener extends AnalyticsListener {
|
||||
void onCustomEvent(EventTime eventTime);
|
||||
}
|
||||
|
||||
class ExtendedCollector extends AnalyticsCollector {
|
||||
class ExtendedCollector extends DefaultAnalyticsCollector {
|
||||
public void customEvent() {
|
||||
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
|
||||
sendEvent(eventTime, CUSTOM_EVENT_ID, listener -> {
|
||||
|
@ -32,6 +32,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
|
||||
import com.google.android.exoplayer2.analytics.AnalyticsListener;
|
||||
import com.google.android.exoplayer2.analytics.DefaultAnalyticsCollector;
|
||||
import com.google.android.exoplayer2.audio.AudioAttributes;
|
||||
import com.google.android.exoplayer2.audio.AudioSink;
|
||||
import com.google.android.exoplayer2.audio.AuxEffectInfo;
|
||||
@ -565,7 +566,7 @@ public interface ExoPlayer extends Player {
|
||||
this.analyticsCollectorSupplier =
|
||||
analyticsCollectorSupplier != null
|
||||
? analyticsCollectorSupplier
|
||||
: () -> new AnalyticsCollector(checkNotNull(clock));
|
||||
: () -> new DefaultAnalyticsCollector(checkNotNull(clock));
|
||||
looper = Util.getCurrentOrMainLooper();
|
||||
audioAttributes = AudioAttributes.DEFAULT;
|
||||
wakeMode = C.WAKE_MODE_NONE;
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -25,6 +25,7 @@ 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.DefaultAnalyticsCollector;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
|
||||
import com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller;
|
||||
@ -77,7 +78,7 @@ public final class MediaPeriodQueueTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT);
|
||||
AnalyticsCollector analyticsCollector = new DefaultAnalyticsCollector(Clock.DEFAULT);
|
||||
analyticsCollector.setPlayer(
|
||||
new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(),
|
||||
Looper.getMainLooper());
|
||||
|
@ -29,6 +29,7 @@ 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.DefaultAnalyticsCollector;
|
||||
import com.google.android.exoplayer2.analytics.PlayerId;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.ShuffleOrder;
|
||||
@ -55,7 +56,7 @@ public class MediaSourceListTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT);
|
||||
AnalyticsCollector analyticsCollector = new DefaultAnalyticsCollector(Clock.DEFAULT);
|
||||
analyticsCollector.setPlayer(
|
||||
new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(),
|
||||
Looper.getMainLooper());
|
||||
|
@ -55,12 +55,12 @@ import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.argThat;
|
||||
import static org.mockito.ArgumentMatchers.same;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.same;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@ -134,11 +134,11 @@ import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.InOrder;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
|
||||
/** Integration test for {@link AnalyticsCollector}. */
|
||||
/** Integration test for {@link DefaultAnalyticsCollector}. */
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class AnalyticsCollectorTest {
|
||||
public final class DefaultAnalyticsCollectorTest {
|
||||
|
||||
private static final String TAG = "AnalyticsCollectorTest";
|
||||
private static final String TAG = "DefaultAnalyticsCollectorTest";
|
||||
|
||||
// Deprecated event constants.
|
||||
private static final long EVENT_PLAYER_STATE_CHANGED = 1L << 63;
|
||||
@ -193,14 +193,14 @@ public final class AnalyticsCollectorTest {
|
||||
private EventWindowAndPeriodId window1Period0Seq1;
|
||||
|
||||
@Test
|
||||
public void analyticsCollector_overridesAllPlayerListenerMethods() throws Exception {
|
||||
public void defaultAnalyticsCollector_overridesAllPlayerListenerMethods() throws Exception {
|
||||
// Verify that AnalyticsCollector forwards all Player.Listener methods to AnalyticsListener.
|
||||
for (Method method : Player.Listener.class.getDeclaredMethods()) {
|
||||
assertThat(
|
||||
AnalyticsCollector.class
|
||||
DefaultAnalyticsCollector.class
|
||||
.getMethod(method.getName(), method.getParameterTypes())
|
||||
.getDeclaringClass())
|
||||
.isEqualTo(AnalyticsCollector.class);
|
||||
.isEqualTo(DefaultAnalyticsCollector.class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1964,7 +1964,7 @@ public final class AnalyticsCollectorTest {
|
||||
|
||||
@Test
|
||||
public void recursiveListenerInvocation_arrivesInCorrectOrder() {
|
||||
AnalyticsCollector analyticsCollector = new AnalyticsCollector(Clock.DEFAULT);
|
||||
AnalyticsCollector analyticsCollector = new DefaultAnalyticsCollector(Clock.DEFAULT);
|
||||
analyticsCollector.setPlayer(
|
||||
new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(),
|
||||
Looper.myLooper());
|
@ -26,7 +26,7 @@ import com.google.android.exoplayer2.LoadControl;
|
||||
import com.google.android.exoplayer2.Renderer;
|
||||
import com.google.android.exoplayer2.RenderersFactory;
|
||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
|
||||
import com.google.android.exoplayer2.analytics.DefaultAnalyticsCollector;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||
import com.google.android.exoplayer2.upstream.BandwidthMeter;
|
||||
@ -300,7 +300,7 @@ public class TestExoPlayerBuilder {
|
||||
.setTrackSelector(trackSelector)
|
||||
.setLoadControl(loadControl)
|
||||
.setBandwidthMeter(bandwidthMeter)
|
||||
.setAnalyticsCollector(new AnalyticsCollector(clock))
|
||||
.setAnalyticsCollector(new DefaultAnalyticsCollector(clock))
|
||||
.setClock(clock)
|
||||
.setUseLazyPreparation(useLazyPreparation)
|
||||
.setLooper(looper)
|
||||
|
Loading…
x
Reference in New Issue
Block a user