From fe41f17c387b7c18a818c8cf2a1ebcdfbd36836a Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Fri, 23 Nov 2018 11:46:24 +0000 Subject: [PATCH] Move listener invocation classes to BasePlayer PiperOrigin-RevId: 222609579 --- .../google/android/exoplayer2/BasePlayer.java | 54 +++++++++++++++++++ .../android/exoplayer2/ExoPlayerImpl.java | 42 --------------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/BasePlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/BasePlayer.java index eb3bd4f91a..4c1b84b4fd 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/BasePlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/BasePlayer.java @@ -135,4 +135,58 @@ public abstract class BasePlayer implements Player { @RepeatMode int repeatMode = getRepeatMode(); return repeatMode == REPEAT_MODE_ONE ? REPEAT_MODE_OFF : repeatMode; } + + /** Holds a listener reference. */ + protected static final class ListenerHolder { + + /** + * The listener on which {link #invoke} will execute {@link ListenerInvocation listener + * invocations}. + */ + public final Player.EventListener listener; + + private boolean released; + + public ListenerHolder(Player.EventListener listener) { + this.listener = listener; + } + + /** Prevents any further {@link ListenerInvocation} to be executed on {@link #listener}. */ + public void release() { + released = true; + } + + /** + * Executes the given {@link ListenerInvocation} on {@link #listener}. Does nothing if {@link + * #release} has been called on this instance. + */ + public void invoke(ListenerInvocation listenerInvocation) { + if (!released) { + listenerInvocation.invokeListener(listener); + } + } + + @Override + public boolean equals(@Nullable Object other) { + if (this == other) { + return true; + } + if (other == null || getClass() != other.getClass()) { + return false; + } + return listener.equals(((ListenerHolder) other).listener); + } + + @Override + public int hashCode() { + return listener.hashCode(); + } + } + + /** Parameterized invocation of a {@link Player.EventListener} method. */ + protected interface ListenerInvocation { + + /** Executes the invocation on the given {@link Player.EventListener}. */ + void invokeListener(Player.EventListener listener); + } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index ccd95a7922..a56c8e3b90 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -809,46 +809,4 @@ import java.util.concurrent.CopyOnWriteArrayList; listenerHolder.invoke(listenerInvocation); } } - - private interface ListenerInvocation { - - void invokeListener(Player.EventListener listener); - } - - private static final class ListenerHolder { - - private final Player.EventListener listener; - - private boolean released; - - public ListenerHolder(Player.EventListener listener) { - this.listener = listener; - } - - public void release() { - released = true; - } - - public void invoke(ListenerInvocation listenerInvocation) { - if (!released) { - listenerInvocation.invokeListener(listener); - } - } - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - return listener.equals(((ListenerHolder) other).listener); - } - - @Override - public int hashCode() { - return listener.hashCode(); - } - } }