Move listener invocation classes to BasePlayer
PiperOrigin-RevId: 222609579
This commit is contained in:
parent
1a9705e247
commit
fe41f17c38
@ -135,4 +135,58 @@ public abstract class BasePlayer implements Player {
|
|||||||
@RepeatMode int repeatMode = getRepeatMode();
|
@RepeatMode int repeatMode = getRepeatMode();
|
||||||
return repeatMode == REPEAT_MODE_ONE ? REPEAT_MODE_OFF : repeatMode;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -809,46 +809,4 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
|||||||
listenerHolder.invoke(listenerInvocation);
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user