Use serialized listener notification for all listener notifications.
This ensures that all callbacks use the same notification mechanism. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=222226913
This commit is contained in:
parent
771db2c9fc
commit
b7ab570094
@ -238,8 +238,8 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
}
|
}
|
||||||
if (this.playWhenReady != playWhenReady) {
|
if (this.playWhenReady != playWhenReady) {
|
||||||
this.playWhenReady = playWhenReady;
|
this.playWhenReady = playWhenReady;
|
||||||
notifyListeners(
|
int playbackState = playbackInfo.playbackState;
|
||||||
new PlayWhenReadyUpdate(listeners, playWhenReady, playbackInfo.playbackState));
|
notifyListeners(listener -> listener.onPlayerStateChanged(playWhenReady, playbackState));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,9 +253,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
if (this.repeatMode != repeatMode) {
|
if (this.repeatMode != repeatMode) {
|
||||||
this.repeatMode = repeatMode;
|
this.repeatMode = repeatMode;
|
||||||
internalPlayer.setRepeatMode(repeatMode);
|
internalPlayer.setRepeatMode(repeatMode);
|
||||||
for (Player.EventListener listener : listeners) {
|
notifyListeners(listener -> listener.onRepeatModeChanged(repeatMode));
|
||||||
listener.onRepeatModeChanged(repeatMode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,9 +267,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
if (this.shuffleModeEnabled != shuffleModeEnabled) {
|
if (this.shuffleModeEnabled != shuffleModeEnabled) {
|
||||||
this.shuffleModeEnabled = shuffleModeEnabled;
|
this.shuffleModeEnabled = shuffleModeEnabled;
|
||||||
internalPlayer.setShuffleModeEnabled(shuffleModeEnabled);
|
internalPlayer.setShuffleModeEnabled(shuffleModeEnabled);
|
||||||
for (Player.EventListener listener : listeners) {
|
notifyListeners(listener -> listener.onShuffleModeEnabledChanged(shuffleModeEnabled));
|
||||||
listener.onShuffleModeEnabledChanged(shuffleModeEnabled);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,9 +316,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
maskingPeriodIndex = timeline.getIndexOfPeriod(periodUidAndPosition.first);
|
maskingPeriodIndex = timeline.getIndexOfPeriod(periodUidAndPosition.first);
|
||||||
}
|
}
|
||||||
internalPlayer.seekTo(timeline, windowIndex, C.msToUs(positionMs));
|
internalPlayer.seekTo(timeline, windowIndex, C.msToUs(positionMs));
|
||||||
for (Player.EventListener listener : listeners) {
|
notifyListeners(listener -> listener.onPositionDiscontinuity(DISCONTINUITY_REASON_SEEK));
|
||||||
listener.onPositionDiscontinuity(DISCONTINUITY_REASON_SEEK);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -594,17 +588,13 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
PlaybackParameters playbackParameters = (PlaybackParameters) msg.obj;
|
PlaybackParameters playbackParameters = (PlaybackParameters) msg.obj;
|
||||||
if (!this.playbackParameters.equals(playbackParameters)) {
|
if (!this.playbackParameters.equals(playbackParameters)) {
|
||||||
this.playbackParameters = playbackParameters;
|
this.playbackParameters = playbackParameters;
|
||||||
for (Player.EventListener listener : listeners) {
|
notifyListeners(listener -> listener.onPlaybackParametersChanged(playbackParameters));
|
||||||
listener.onPlaybackParametersChanged(playbackParameters);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ExoPlayerImplInternal.MSG_ERROR:
|
case ExoPlayerImplInternal.MSG_ERROR:
|
||||||
ExoPlaybackException playbackError = (ExoPlaybackException) msg.obj;
|
ExoPlaybackException playbackError = (ExoPlaybackException) msg.obj;
|
||||||
this.playbackError = playbackError;
|
this.playbackError = playbackError;
|
||||||
for (Player.EventListener listener : listeners) {
|
notifyListeners(listener -> listener.onPlayerError(playbackError));
|
||||||
listener.onPlayerError(playbackError);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
@ -703,6 +693,15 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
playWhenReady));
|
playWhenReady));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(ListenerInvocation listenerInvocation) {
|
||||||
|
notifyListeners(
|
||||||
|
() -> {
|
||||||
|
for (Player.EventListener listener : listeners) {
|
||||||
|
listenerInvocation.invokeListener(listener);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void notifyListeners(Runnable listenerNotificationRunnable) {
|
private void notifyListeners(Runnable listenerNotificationRunnable) {
|
||||||
boolean isRunningRecursiveListenerNotification = !pendingListenerNotifications.isEmpty();
|
boolean isRunningRecursiveListenerNotification = !pendingListenerNotifications.isEmpty();
|
||||||
pendingListenerNotifications.addLast(listenerNotificationRunnable);
|
pendingListenerNotifications.addLast(listenerNotificationRunnable);
|
||||||
@ -806,24 +805,8 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class PlayWhenReadyUpdate implements Runnable {
|
private interface ListenerInvocation {
|
||||||
|
|
||||||
private final Set<Player.EventListener> listeners;
|
void invokeListener(Player.EventListener listener);
|
||||||
private final boolean playWhenReady;
|
|
||||||
private final int playbackState;
|
|
||||||
|
|
||||||
public PlayWhenReadyUpdate(
|
|
||||||
Set<Player.EventListener> listeners, boolean playWhenReady, int playbackState) {
|
|
||||||
this.listeners = listeners;
|
|
||||||
this.playWhenReady = playWhenReady;
|
|
||||||
this.playbackState = playbackState;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
for (Player.EventListener listener : listeners) {
|
|
||||||
listener.onPlayerStateChanged(playWhenReady, playbackState);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -498,12 +498,12 @@ public final class ExoPlayerTest {
|
|||||||
.waitForPlaybackState(Player.STATE_READY)
|
.waitForPlaybackState(Player.STATE_READY)
|
||||||
.seek(10)
|
.seek(10)
|
||||||
// Start playback and wait until playback reaches second window.
|
// Start playback and wait until playback reaches second window.
|
||||||
.play()
|
.playUntilStartOfWindow(/* windowIndex= */ 1)
|
||||||
.waitForPositionDiscontinuity()
|
|
||||||
// Seek twice in concession, expecting the first seek to be replaced (and thus except
|
// Seek twice in concession, expecting the first seek to be replaced (and thus except
|
||||||
// only on seek processed callback).
|
// only on seek processed callback).
|
||||||
.seek(5)
|
.seek(5)
|
||||||
.seek(60)
|
.seek(60)
|
||||||
|
.play()
|
||||||
.build();
|
.build();
|
||||||
final List<Integer> playbackStatesWhenSeekProcessed = new ArrayList<>();
|
final List<Integer> playbackStatesWhenSeekProcessed = new ArrayList<>();
|
||||||
EventListener eventListener =
|
EventListener eventListener =
|
||||||
@ -2058,8 +2058,11 @@ public final class ExoPlayerTest {
|
|||||||
.pause()
|
.pause()
|
||||||
.waitForPlaybackState(Player.STATE_READY)
|
.waitForPlaybackState(Player.STATE_READY)
|
||||||
.seek(/* windowIndex= */ 0, /* positionMs= */ 9999)
|
.seek(/* windowIndex= */ 0, /* positionMs= */ 9999)
|
||||||
|
.waitForSeekProcessed()
|
||||||
.seek(/* windowIndex= */ 0, /* positionMs= */ 1)
|
.seek(/* windowIndex= */ 0, /* positionMs= */ 1)
|
||||||
|
.waitForSeekProcessed()
|
||||||
.seek(/* windowIndex= */ 0, /* positionMs= */ 9999)
|
.seek(/* windowIndex= */ 0, /* positionMs= */ 9999)
|
||||||
|
.waitForSeekProcessed()
|
||||||
.play()
|
.play()
|
||||||
.build();
|
.build();
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user