Commit 8077fe1b by ibaker Committed by Oliver Woodman

Add media period info to DrmSessionEventListener methods

Part of issue:#6765

PiperOrigin-RevId: 310143494
parent 34327bec
...@@ -702,45 +702,59 @@ import java.util.Set; ...@@ -702,45 +702,59 @@ import java.util.Set;
// DrmSessionEventListener implementation // DrmSessionEventListener implementation
@Override @Override
public void onDrmSessionAcquired() { public void onDrmSessionAcquired(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaSource.MediaPeriodId mediaPeriodId) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionAcquired(), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
DrmSessionEventListener::onDrmSessionAcquired, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmKeysLoaded() { public void onDrmKeysLoaded(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaSource.MediaPeriodId mediaPeriodId) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded(), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
DrmSessionEventListener::onDrmKeysLoaded, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmSessionManagerError(Exception error) { public void onDrmSessionManagerError(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaSource.MediaPeriodId mediaPeriodId, Exception error) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionManagerError(error), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
(listener, innerWindowIndex, innerMediaPeriodId) ->
listener.onDrmSessionManagerError(innerWindowIndex, innerMediaPeriodId, error),
DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmKeysRestored() { public void onDrmKeysRestored(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaSource.MediaPeriodId mediaPeriodId) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRestored(), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
DrmSessionEventListener::onDrmKeysRestored, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmKeysRemoved() { public void onDrmKeysRemoved(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaSource.MediaPeriodId mediaPeriodId) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRemoved(), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
DrmSessionEventListener::onDrmKeysRemoved, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmSessionReleased() { public void onDrmSessionReleased(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaSource.MediaPeriodId mediaPeriodId) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionReleased(), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
DrmSessionEventListener::onDrmSessionReleased, DrmSessionEventListener.class);
}
} }
/** Updates the event dispatcher and returns whether the event should be dispatched. */ /** Updates the event dispatcher and returns whether the event should be dispatched. */
......
...@@ -576,48 +576,49 @@ public class AnalyticsCollector ...@@ -576,48 +576,49 @@ public class AnalyticsCollector
// DefaultDrmSessionManager.EventListener implementation. // DefaultDrmSessionManager.EventListener implementation.
@Override @Override
public final void onDrmSessionAcquired() { public final void onDrmSessionAcquired(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
EventTime eventTime = generateReadingMediaPeriodEventTime(); EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
for (AnalyticsListener listener : listeners) { for (AnalyticsListener listener : listeners) {
listener.onDrmSessionAcquired(eventTime); listener.onDrmSessionAcquired(eventTime);
} }
} }
@Override @Override
public final void onDrmKeysLoaded() { public final void onDrmKeysLoaded(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
EventTime eventTime = generateReadingMediaPeriodEventTime(); EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
for (AnalyticsListener listener : listeners) { for (AnalyticsListener listener : listeners) {
listener.onDrmKeysLoaded(eventTime); listener.onDrmKeysLoaded(eventTime);
} }
} }
@Override @Override
public final void onDrmSessionManagerError(Exception error) { public final void onDrmSessionManagerError(
EventTime eventTime = generateReadingMediaPeriodEventTime(); int windowIndex, @Nullable MediaPeriodId mediaPeriodId, Exception error) {
EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
for (AnalyticsListener listener : listeners) { for (AnalyticsListener listener : listeners) {
listener.onDrmSessionManagerError(eventTime, error); listener.onDrmSessionManagerError(eventTime, error);
} }
} }
@Override @Override
public final void onDrmKeysRestored() { public final void onDrmKeysRestored(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
EventTime eventTime = generateReadingMediaPeriodEventTime(); EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
for (AnalyticsListener listener : listeners) { for (AnalyticsListener listener : listeners) {
listener.onDrmKeysRestored(eventTime); listener.onDrmKeysRestored(eventTime);
} }
} }
@Override @Override
public final void onDrmKeysRemoved() { public final void onDrmKeysRemoved(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
EventTime eventTime = generateReadingMediaPeriodEventTime(); EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
for (AnalyticsListener listener : listeners) { for (AnalyticsListener listener : listeners) {
listener.onDrmKeysRemoved(eventTime); listener.onDrmKeysRemoved(eventTime);
} }
} }
@Override @Override
public final void onDrmSessionReleased() { public final void onDrmSessionReleased(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
EventTime eventTime = generatePlayingMediaPeriodEventTime(); EventTime eventTime = generateMediaPeriodEventTime(windowIndex, mediaPeriodId);
for (AnalyticsListener listener : listeners) { for (AnalyticsListener listener : listeners) {
listener.onDrmSessionReleased(eventTime); listener.onDrmSessionReleased(eventTime);
} }
......
...@@ -275,8 +275,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -275,8 +275,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
// re-used or not. // re-used or not.
if (eventDispatcher != null) { if (eventDispatcher != null) {
eventDispatcher.dispatch( eventDispatcher.dispatch(
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionAcquired(), DrmSessionEventListener::onDrmSessionAcquired, DrmSessionEventListener.class);
DrmSessionEventListener.class);
} }
} }
} }
...@@ -301,7 +300,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -301,7 +300,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
} }
releaseCallback.onSessionReleased(this); releaseCallback.onSessionReleased(this);
} }
dispatchEvent((listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionReleased()); dispatchEvent(DrmSessionEventListener::onDrmSessionReleased);
if (eventDispatcher != null) { if (eventDispatcher != null) {
eventDispatchers.remove(eventDispatcher); eventDispatchers.remove(eventDispatcher);
} }
...@@ -326,7 +325,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -326,7 +325,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
try { try {
sessionId = mediaDrm.openSession(); sessionId = mediaDrm.openSession();
mediaCrypto = mediaDrm.createMediaCrypto(sessionId); mediaCrypto = mediaDrm.createMediaCrypto(sessionId);
dispatchEvent((listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionAcquired()); dispatchEvent(DrmSessionEventListener::onDrmSessionAcquired);
state = STATE_OPENED; state = STATE_OPENED;
Assertions.checkNotNull(sessionId); Assertions.checkNotNull(sessionId);
return true; return true;
...@@ -390,7 +389,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -390,7 +389,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
onError(new KeysExpiredException()); onError(new KeysExpiredException());
} else { } else {
state = STATE_OPENED_WITH_KEYS; state = STATE_OPENED_WITH_KEYS;
dispatchEvent((listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRestored()); dispatchEvent(DrmSessionEventListener::onDrmKeysRestored);
} }
} }
break; break;
...@@ -460,7 +459,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -460,7 +459,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
byte[] responseData = (byte[]) response; byte[] responseData = (byte[]) response;
if (mode == DefaultDrmSessionManager.MODE_RELEASE) { if (mode == DefaultDrmSessionManager.MODE_RELEASE) {
mediaDrm.provideKeyResponse(Util.castNonNull(offlineLicenseKeySetId), responseData); mediaDrm.provideKeyResponse(Util.castNonNull(offlineLicenseKeySetId), responseData);
dispatchEvent((listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRestored()); dispatchEvent(DrmSessionEventListener::onDrmKeysRestored);
} else { } else {
byte[] keySetId = mediaDrm.provideKeyResponse(sessionId, responseData); byte[] keySetId = mediaDrm.provideKeyResponse(sessionId, responseData);
if ((mode == DefaultDrmSessionManager.MODE_DOWNLOAD if ((mode == DefaultDrmSessionManager.MODE_DOWNLOAD
...@@ -471,7 +470,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -471,7 +470,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
offlineLicenseKeySetId = keySetId; offlineLicenseKeySetId = keySetId;
} }
state = STATE_OPENED_WITH_KEYS; state = STATE_OPENED_WITH_KEYS;
dispatchEvent((listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded()); dispatchEvent(DrmSessionEventListener::onDrmKeysLoaded);
} }
} catch (Exception e) { } catch (Exception e) {
onKeysError(e); onKeysError(e);
...@@ -495,7 +494,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -495,7 +494,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private void onError(final Exception e) { private void onError(final Exception e) {
lastException = new DrmSessionException(e); lastException = new DrmSessionException(e);
dispatchEvent((listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionManagerError(e)); dispatchEvent(
(listener, windowIndex, mediaPeriodId) ->
listener.onDrmSessionManagerError(windowIndex, mediaPeriodId, e));
if (state != STATE_OPENED_WITH_KEYS) { if (state != STATE_OPENED_WITH_KEYS) {
state = STATE_ERROR; state = STATE_ERROR;
} }
......
...@@ -489,7 +489,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager { ...@@ -489,7 +489,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
final MissingSchemeDataException error = new MissingSchemeDataException(uuid); final MissingSchemeDataException error = new MissingSchemeDataException(uuid);
if (eventDispatcher != null) { if (eventDispatcher != null) {
eventDispatcher.dispatch( eventDispatcher.dispatch(
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionManagerError(error), (listener, windowIndex, mediaPeriodId) ->
listener.onDrmSessionManagerError(windowIndex, mediaPeriodId, error),
DrmSessionEventListener.class); DrmSessionEventListener.class);
} }
return new ErrorStateDrmSession(new DrmSessionException(error)); return new ErrorStateDrmSession(new DrmSessionException(error));
......
...@@ -15,16 +15,28 @@ ...@@ -15,16 +15,28 @@
*/ */
package com.google.android.exoplayer2.drm; package com.google.android.exoplayer2.drm;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
/** Listener of {@link DrmSessionManager} events. */ /** Listener of {@link DrmSessionManager} events. */
public interface DrmSessionEventListener { public interface DrmSessionEventListener {
/** Called each time a drm session is acquired. */ /**
default void onDrmSessionAcquired() {} * Called each time a drm session is acquired.
*
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
*/
default void onDrmSessionAcquired(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {}
/** Called each time keys are loaded. */ /**
default void onDrmKeysLoaded() {} * Called each time keys are loaded.
*
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
*/
default void onDrmKeysLoaded(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {}
/** /**
* Called when a drm error occurs. * Called when a drm error occurs.
...@@ -36,16 +48,34 @@ public interface DrmSessionEventListener { ...@@ -36,16 +48,34 @@ public interface DrmSessionEventListener {
* such behavior). This method is called to provide the application with an opportunity to log the * such behavior). This method is called to provide the application with an opportunity to log the
* error if it wishes to do so. * error if it wishes to do so.
* *
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
* @param error The corresponding exception. * @param error The corresponding exception.
*/ */
default void onDrmSessionManagerError(Exception error) {} default void onDrmSessionManagerError(
int windowIndex, @Nullable MediaPeriodId mediaPeriodId, Exception error) {}
/** Called each time offline keys are restored. */ /**
default void onDrmKeysRestored() {} * Called each time offline keys are restored.
*
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
*/
default void onDrmKeysRestored(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {}
/** Called each time offline keys are removed. */ /**
default void onDrmKeysRemoved() {} * Called each time offline keys are removed.
*
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
*/
default void onDrmKeysRemoved(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {}
/** Called each time a drm session is released. */ /**
default void onDrmSessionReleased() {} * Called each time a drm session is released.
*
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
*/
default void onDrmSessionReleased(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {}
} }
...@@ -24,6 +24,7 @@ import androidx.annotation.Nullable; ...@@ -24,6 +24,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager.Mode; import com.google.android.exoplayer2.drm.DefaultDrmSessionManager.Mode;
import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.upstream.HttpDataSource; import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MediaSourceEventDispatcher; import com.google.android.exoplayer2.util.MediaSourceEventDispatcher;
...@@ -156,22 +157,23 @@ public final class OfflineLicenseHelper { ...@@ -156,22 +157,23 @@ public final class OfflineLicenseHelper {
DrmSessionEventListener eventListener = DrmSessionEventListener eventListener =
new DrmSessionEventListener() { new DrmSessionEventListener() {
@Override @Override
public void onDrmKeysLoaded() { public void onDrmKeysLoaded(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
conditionVariable.open(); conditionVariable.open();
} }
@Override @Override
public void onDrmSessionManagerError(Exception e) { public void onDrmSessionManagerError(
int windowIndex, @Nullable MediaPeriodId mediaPeriodId, Exception e) {
conditionVariable.open(); conditionVariable.open();
} }
@Override @Override
public void onDrmKeysRestored() { public void onDrmKeysRestored(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
conditionVariable.open(); conditionVariable.open();
} }
@Override @Override
public void onDrmKeysRemoved() { public void onDrmKeysRemoved(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
conditionVariable.open(); conditionVariable.open();
} }
}; };
......
...@@ -324,45 +324,54 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource { ...@@ -324,45 +324,54 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
// DrmSessionEventListener implementation // DrmSessionEventListener implementation
@Override @Override
public void onDrmSessionAcquired() { public void onDrmSessionAcquired(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
eventDispatcher.dispatch( if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionAcquired(), eventDispatcher.dispatch(
DrmSessionEventListener.class); DrmSessionEventListener::onDrmSessionAcquired, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmKeysLoaded() { public void onDrmKeysLoaded(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
eventDispatcher.dispatch( if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded(), eventDispatcher.dispatch(
DrmSessionEventListener.class); DrmSessionEventListener::onDrmKeysLoaded, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmSessionManagerError(Exception error) { public void onDrmSessionManagerError(
eventDispatcher.dispatch( int windowIndex, @Nullable MediaPeriodId mediaPeriodId, Exception error) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionManagerError(error), if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
DrmSessionEventListener.class); eventDispatcher.dispatch(
(listener, innerWindowIndex, innerMediaPeriodId) ->
listener.onDrmSessionManagerError(innerWindowIndex, innerMediaPeriodId, error),
DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmKeysRestored() { public void onDrmKeysRestored(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
eventDispatcher.dispatch( if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRestored(), eventDispatcher.dispatch(
DrmSessionEventListener.class); DrmSessionEventListener::onDrmKeysRestored, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmKeysRemoved() { public void onDrmKeysRemoved(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
eventDispatcher.dispatch( if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRemoved(), eventDispatcher.dispatch(
DrmSessionEventListener.class); DrmSessionEventListener::onDrmKeysRemoved, DrmSessionEventListener.class);
}
} }
@Override @Override
public void onDrmSessionReleased() { public void onDrmSessionReleased(int windowIndex, @Nullable MediaPeriodId mediaPeriodId) {
eventDispatcher.dispatch( if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionReleased(), eventDispatcher.dispatch(
DrmSessionEventListener.class); DrmSessionEventListener::onDrmSessionReleased, DrmSessionEventListener.class);
}
} }
/** Updates the event dispatcher and returns whether the event should be dispatched. */ /** Updates the event dispatcher and returns whether the event should be dispatched. */
......
...@@ -100,11 +100,10 @@ public class MediaSourceEventDispatcherTest { ...@@ -100,11 +100,10 @@ public class MediaSourceEventDispatcherTest {
eventDispatcher.dispatch( eventDispatcher.dispatch(
MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class); MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded(), DrmSessionEventListener::onDrmKeysLoaded, DrmSessionEventListener.class);
DrmSessionEventListener.class);
verify(mediaAndDrmEventListener).onMediaPeriodCreated(WINDOW_INDEX, MEDIA_PERIOD_ID); verify(mediaAndDrmEventListener).onMediaPeriodCreated(WINDOW_INDEX, MEDIA_PERIOD_ID);
verify(mediaAndDrmEventListener).onDrmKeysLoaded(); verify(mediaAndDrmEventListener).onDrmKeysLoaded(WINDOW_INDEX, MEDIA_PERIOD_ID);
} }
// If a listener is added that implements multiple types, it should only receive events for the // If a listener is added that implements multiple types, it should only receive events for the
...@@ -119,11 +118,10 @@ public class MediaSourceEventDispatcherTest { ...@@ -119,11 +118,10 @@ public class MediaSourceEventDispatcherTest {
eventDispatcher.dispatch( eventDispatcher.dispatch(
MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class); MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded(), DrmSessionEventListener::onDrmKeysLoaded, DrmSessionEventListener.class);
DrmSessionEventListener.class);
verify(mediaAndDrmEventListener).onMediaPeriodCreated(WINDOW_INDEX, MEDIA_PERIOD_ID); verify(mediaAndDrmEventListener).onMediaPeriodCreated(WINDOW_INDEX, MEDIA_PERIOD_ID);
verify(mediaAndDrmEventListener, never()).onDrmKeysLoaded(); verify(mediaAndDrmEventListener, never()).onDrmKeysLoaded(WINDOW_INDEX, MEDIA_PERIOD_ID);
} }
@Test @Test
......
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