Commit 30218973 by olly Committed by Oliver Woodman

Allow multiple listeners on TimeBar

Issue: #3406

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174214296
parent 8c424798
...@@ -40,6 +40,7 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -40,6 +40,7 @@ import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import java.util.Formatter; import java.util.Formatter;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.CopyOnWriteArraySet;
/** /**
* A time bar that shows a current position, buffered position, duration and ad markers. * A time bar that shows a current position, buffered position, duration and ad markers.
...@@ -198,8 +199,8 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -198,8 +199,8 @@ public class DefaultTimeBar extends View implements TimeBar {
private final StringBuilder formatBuilder; private final StringBuilder formatBuilder;
private final Formatter formatter; private final Formatter formatter;
private final Runnable stopScrubbingRunnable; private final Runnable stopScrubbingRunnable;
private final CopyOnWriteArraySet<OnScrubListener> listeners;
private OnScrubListener listener;
private int keyCountIncrement; private int keyCountIncrement;
private long keyTimeIncrement; private long keyTimeIncrement;
private int lastCoarseScrubXPosition; private int lastCoarseScrubXPosition;
...@@ -231,6 +232,7 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -231,6 +232,7 @@ public class DefaultTimeBar extends View implements TimeBar {
playedAdMarkerPaint = new Paint(); playedAdMarkerPaint = new Paint();
scrubberPaint = new Paint(); scrubberPaint = new Paint();
scrubberPaint.setAntiAlias(true); scrubberPaint.setAntiAlias(true);
listeners = new CopyOnWriteArraySet<>();
// Calculate the dimensions and paints for drawn elements. // Calculate the dimensions and paints for drawn elements.
Resources res = context.getResources(); Resources res = context.getResources();
...@@ -325,8 +327,13 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -325,8 +327,13 @@ public class DefaultTimeBar extends View implements TimeBar {
} }
@Override @Override
public void setListener(OnScrubListener listener) { public void addListener(OnScrubListener listener) {
this.listener = listener; listeners.add(listener);
}
@Override
public void removeListener(OnScrubListener listener) {
listeners.remove(listener);
} }
@Override @Override
...@@ -421,7 +428,7 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -421,7 +428,7 @@ public class DefaultTimeBar extends View implements TimeBar {
positionScrubber(x); positionScrubber(x);
} }
scrubPosition = getScrubberPosition(); scrubPosition = getScrubberPosition();
if (listener != null) { for (OnScrubListener listener : listeners) {
listener.onScrubMove(this, scrubPosition); listener.onScrubMove(this, scrubPosition);
} }
update(); update();
...@@ -584,7 +591,7 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -584,7 +591,7 @@ public class DefaultTimeBar extends View implements TimeBar {
if (parent != null) { if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true); parent.requestDisallowInterceptTouchEvent(true);
} }
if (listener != null) { for (OnScrubListener listener : listeners) {
listener.onScrubStart(this, getScrubberPosition()); listener.onScrubStart(this, getScrubberPosition());
} }
} }
...@@ -597,7 +604,7 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -597,7 +604,7 @@ public class DefaultTimeBar extends View implements TimeBar {
parent.requestDisallowInterceptTouchEvent(false); parent.requestDisallowInterceptTouchEvent(false);
} }
invalidate(); invalidate();
if (listener != null) { for (OnScrubListener listener : listeners) {
listener.onScrubStop(this, getScrubberPosition(), canceled); listener.onScrubStop(this, getScrubberPosition(), canceled);
} }
} }
...@@ -735,7 +742,7 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -735,7 +742,7 @@ public class DefaultTimeBar extends View implements TimeBar {
if (!scrubbing) { if (!scrubbing) {
startScrubbing(); startScrubbing();
} }
if (listener != null) { for (OnScrubListener listener : listeners) {
listener.onScrubMove(this, scrubPosition); listener.onScrubMove(this, scrubPosition);
} }
update(); update();
......
...@@ -341,7 +341,7 @@ public class PlaybackControlView extends FrameLayout { ...@@ -341,7 +341,7 @@ public class PlaybackControlView extends FrameLayout {
positionView = findViewById(R.id.exo_position); positionView = findViewById(R.id.exo_position);
timeBar = findViewById(R.id.exo_progress); timeBar = findViewById(R.id.exo_progress);
if (timeBar != null) { if (timeBar != null) {
timeBar.setListener(componentListener); timeBar.addListener(componentListener);
} }
playButton = findViewById(R.id.exo_play); playButton = findViewById(R.id.exo_play);
if (playButton != null) { if (playButton != null) {
......
...@@ -25,16 +25,23 @@ import android.view.View; ...@@ -25,16 +25,23 @@ import android.view.View;
public interface TimeBar { public interface TimeBar {
/** /**
* @see View#isEnabled() * Adds a listener for scrubbing events.
*
* @param listener The listener to add.
*/ */
void setEnabled(boolean enabled); void addListener(OnScrubListener listener);
/** /**
* Sets the listener for the scrubbing events. * Removes a listener for scrubbing events.
* *
* @param listener The listener for scrubbing events. * @param listener The listener to remove.
*/
void removeListener(OnScrubListener listener);
/**
* @see View#isEnabled()
*/ */
void setListener(OnScrubListener listener); void setEnabled(boolean enabled);
/** /**
* Sets the position increment for key presses and accessibility actions, in milliseconds. * Sets the position increment for key presses and accessibility actions, in milliseconds.
......
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