Commit a0423461 by ibaker Committed by Ian Baker

Reshuffle the way listeners are attached to MediaSources

This better supports custom listener types defined by MediaSource
subclasses.

Part of issue:#6765

PiperOrigin-RevId: 308050575
parent 84faa1ae
...@@ -22,6 +22,7 @@ import com.google.android.exoplayer2.Timeline; ...@@ -22,6 +22,7 @@ import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.drm.DrmSessionEventListener; import com.google.android.exoplayer2.drm.DrmSessionEventListener;
import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MediaSourceEventDispatcher;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
...@@ -133,22 +134,44 @@ public abstract class BaseMediaSource implements MediaSource { ...@@ -133,22 +134,44 @@ public abstract class BaseMediaSource implements MediaSource {
@Override @Override
public final void addEventListener(Handler handler, MediaSourceEventListener eventListener) { public final void addEventListener(Handler handler, MediaSourceEventListener eventListener) {
eventDispatcher.addEventListener(handler, eventListener); addEventListenerInternal(handler, eventListener, MediaSourceEventListener.class);
} }
@Override @Override
public final void removeEventListener(MediaSourceEventListener eventListener) { public final void removeEventListener(MediaSourceEventListener eventListener) {
eventDispatcher.removeEventListener(eventListener); removeEventListenerInternal(eventListener, MediaSourceEventListener.class);
} }
@Override @Override
public final void addDrmEventListener(Handler handler, DrmSessionEventListener eventListener) { public final void addDrmEventListener(Handler handler, DrmSessionEventListener eventListener) {
eventDispatcher.addEventListener(handler, eventListener, DrmSessionEventListener.class); addEventListenerInternal(handler, eventListener, DrmSessionEventListener.class);
} }
@Override @Override
public final void removeDrmEventListener(DrmSessionEventListener eventListener) { public final void removeDrmEventListener(DrmSessionEventListener eventListener) {
eventDispatcher.removeEventListener(eventListener, DrmSessionEventListener.class); removeEventListenerInternal(eventListener, DrmSessionEventListener.class);
}
/**
* Adds a listener to the internal {@link MediaSourceEventDispatcher} with the provided type.
*
* <p>NOTE: Read the caveats on {@link MediaSourceEventDispatcher#addEventListener(Handler,
* Object, Class)} when deciding what value to pass for {@code listenerClass}.
*
* @see MediaSourceEventDispatcher#addEventListener(Handler, Object, Class)
*/
protected final <T> void addEventListenerInternal(
Handler handler, T eventListener, Class<T> listenerClass) {
eventDispatcher.addEventListener(handler, eventListener, listenerClass);
}
/**
* Removes a listener from the internal {@link MediaSourceEventDispatcher}.
*
* @see MediaSourceEventDispatcher#removeEventListener(Object, Class)
*/
protected final <T> void removeEventListenerInternal(T eventListener, Class<T> listenerClass) {
eventDispatcher.removeEventListener(eventListener, listenerClass);
} }
@Override @Override
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package com.google.android.exoplayer2.source; package com.google.android.exoplayer2.source;
import android.net.Uri; import android.net.Uri;
import android.os.Handler;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
...@@ -188,33 +187,6 @@ public interface MediaSourceEventListener { ...@@ -188,33 +187,6 @@ public interface MediaSourceEventListener {
return new EventDispatcher(listenerInfos, windowIndex, mediaPeriodId, mediaTimeOffsetMs); return new EventDispatcher(listenerInfos, windowIndex, mediaPeriodId, mediaTimeOffsetMs);
} }
/**
* Adds a {@link MediaSourceEventListener} to the event dispatcher.
*
* <p>This is equivalent to {@link #addEventListener(Handler, Object, Class)} with {@code
* listenerClass = MediaSourceEventListener.class} and is intended to ease the transition to
* using {@link MediaSourceEventDispatcher} everywhere.
*
* @param handler A handler on the which listener events will be posted.
* @param eventListener The listener to be added.
*/
public void addEventListener(Handler handler, MediaSourceEventListener eventListener) {
addEventListener(handler, eventListener, MediaSourceEventListener.class);
}
/**
* Removes a {@link MediaSourceEventListener} from the event dispatcher.
*
* <p>This is equivalent to {@link #removeEventListener(Object, Class)} with {@code
* listenerClass = MediaSourceEventListener.class} and is intended to ease the transition to
* using {@link MediaSourceEventDispatcher} everywhere.
*
* @param eventListener The listener to be removed.
*/
public void removeEventListener(MediaSourceEventListener eventListener) {
removeEventListener(eventListener, MediaSourceEventListener.class);
}
public void mediaPeriodCreated() { public void mediaPeriodCreated() {
dispatch( dispatch(
(listener, windowIndex, mediaPeriodId) -> (listener, windowIndex, mediaPeriodId) ->
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment