Commit 7d66865d by tonihei Committed by Andrew Lewis
parent a8bf7e21
Showing with 101 additions and 68 deletions
...@@ -72,7 +72,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab ...@@ -72,7 +72,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab
this.context = context; this.context = context;
this.player = player; this.player = player;
this.updatePeriodMs = updatePeriodMs; this.updatePeriodMs = updatePeriodMs;
handler = Util.createHandler(); handler = Util.createHandlerForCurrentOrMainLooper();
componentListener = new ComponentListener(); componentListener = new ComponentListener();
controlDispatcher = new DefaultControlDispatcher(); controlDispatcher = new DefaultControlDispatcher();
} }
......
...@@ -437,7 +437,7 @@ public final class MediaSessionConnector { ...@@ -437,7 +437,7 @@ public final class MediaSessionConnector {
*/ */
public MediaSessionConnector(MediaSessionCompat mediaSession) { public MediaSessionConnector(MediaSessionCompat mediaSession) {
this.mediaSession = mediaSession; this.mediaSession = mediaSession;
looper = Util.getLooper(); looper = Util.getCurrentOrMainLooper();
componentListener = new ComponentListener(); componentListener = new ComponentListener();
commandReceivers = new ArrayList<>(); commandReceivers = new ArrayList<>();
customCommandReceivers = new ArrayList<>(); customCommandReceivers = new ArrayList<>();
......
...@@ -399,8 +399,8 @@ public final class Util { ...@@ -399,8 +399,8 @@ public final class Util {
* <p>If the current thread doesn't have a {@link Looper}, the application's main thread {@link * <p>If the current thread doesn't have a {@link Looper}, the application's main thread {@link
* Looper} is used. * Looper} is used.
*/ */
public static Handler createHandler() { public static Handler createHandlerForCurrentOrMainLooper() {
return createHandler(/* callback= */ null); return createHandlerForCurrentOrMainLooper(/* callback= */ null);
} }
/** /**
...@@ -416,8 +416,9 @@ public final class Util { ...@@ -416,8 +416,9 @@ public final class Util {
* callback is required. * callback is required.
* @return A {@link Handler} with the specified callback on the current {@link Looper} thread. * @return A {@link Handler} with the specified callback on the current {@link Looper} thread.
*/ */
public static Handler createHandler(@Nullable Handler.@UnknownInitialization Callback callback) { public static Handler createHandlerForCurrentOrMainLooper(
return createHandler(getLooper(), callback); @Nullable Handler.@UnknownInitialization Callback callback) {
return createHandler(getCurrentOrMainLooper(), callback);
} }
/** /**
...@@ -441,8 +442,8 @@ public final class Util { ...@@ -441,8 +442,8 @@ public final class Util {
* Returns the {@link Looper} associated with the current thread, or the {@link Looper} of the * Returns the {@link Looper} associated with the current thread, or the {@link Looper} of the
* application's main thread if the current thread doesn't have a {@link Looper}. * application's main thread if the current thread doesn't have a {@link Looper}.
*/ */
public static Looper getLooper() { public static Looper getCurrentOrMainLooper() {
Looper myLooper = Looper.myLooper(); @Nullable Looper myLooper = Looper.myLooper();
return myLooper != null ? myLooper : Looper.getMainLooper(); return myLooper != null ? myLooper : Looper.getMainLooper();
} }
......
...@@ -209,7 +209,7 @@ public interface ExoPlayer extends Player { ...@@ -209,7 +209,7 @@ public interface ExoPlayer extends Player {
this.mediaSourceFactory = mediaSourceFactory; this.mediaSourceFactory = mediaSourceFactory;
this.loadControl = loadControl; this.loadControl = loadControl;
this.bandwidthMeter = bandwidthMeter; this.bandwidthMeter = bandwidthMeter;
looper = Util.getLooper(); looper = Util.getCurrentOrMainLooper();
useLazyPreparation = true; useLazyPreparation = true;
seekParameters = SeekParameters.DEFAULT; seekParameters = SeekParameters.DEFAULT;
clock = Clock.DEFAULT; clock = Clock.DEFAULT;
......
...@@ -101,11 +101,7 @@ public final class ExoPlayerFactory { ...@@ -101,11 +101,7 @@ public final class ExoPlayerFactory {
TrackSelector trackSelector, TrackSelector trackSelector,
LoadControl loadControl) { LoadControl loadControl) {
return newSimpleInstance( return newSimpleInstance(
context, context, renderersFactory, trackSelector, loadControl, Util.getCurrentOrMainLooper());
renderersFactory,
trackSelector,
loadControl,
Util.getLooper());
} }
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
...@@ -124,7 +120,7 @@ public final class ExoPlayerFactory { ...@@ -124,7 +120,7 @@ public final class ExoPlayerFactory {
loadControl, loadControl,
bandwidthMeter, bandwidthMeter,
new AnalyticsCollector(Clock.DEFAULT), new AnalyticsCollector(Clock.DEFAULT),
Util.getLooper()); Util.getCurrentOrMainLooper());
} }
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
...@@ -142,7 +138,7 @@ public final class ExoPlayerFactory { ...@@ -142,7 +138,7 @@ public final class ExoPlayerFactory {
trackSelector, trackSelector,
loadControl, loadControl,
analyticsCollector, analyticsCollector,
Util.getLooper()); Util.getCurrentOrMainLooper());
} }
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
...@@ -220,7 +216,8 @@ public final class ExoPlayerFactory { ...@@ -220,7 +216,8 @@ public final class ExoPlayerFactory {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public static ExoPlayer newInstance( public static ExoPlayer newInstance(
Context context, Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl) { Context context, Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl) {
return newInstance(context, renderers, trackSelector, loadControl, Util.getLooper()); return newInstance(
context, renderers, trackSelector, loadControl, Util.getCurrentOrMainLooper());
} }
/** @deprecated Use {@link ExoPlayer.Builder} instead. */ /** @deprecated Use {@link ExoPlayer.Builder} instead. */
......
...@@ -437,8 +437,8 @@ import java.util.Set; ...@@ -437,8 +437,8 @@ import java.util.Set;
(source, timeline) -> mediaSourceListInfoListener.onPlaylistUpdateRequested(); (source, timeline) -> mediaSourceListInfoListener.onPlaylistUpdateRequested();
ForwardingEventListener eventListener = new ForwardingEventListener(holder); ForwardingEventListener eventListener = new ForwardingEventListener(holder);
childSources.put(holder, new MediaSourceAndListener(mediaSource, caller, eventListener)); childSources.put(holder, new MediaSourceAndListener(mediaSource, caller, eventListener));
mediaSource.addEventListener(Util.createHandler(), eventListener); mediaSource.addEventListener(Util.createHandlerForCurrentOrMainLooper(), eventListener);
mediaSource.addDrmEventListener(Util.createHandler(), eventListener); mediaSource.addDrmEventListener(Util.createHandlerForCurrentOrMainLooper(), eventListener);
mediaSource.prepareSource(caller, mediaTransferListener); mediaSource.prepareSource(caller, mediaTransferListener);
} }
......
...@@ -199,7 +199,7 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -199,7 +199,7 @@ public class SimpleExoPlayer extends BasePlayer
this.loadControl = loadControl; this.loadControl = loadControl;
this.bandwidthMeter = bandwidthMeter; this.bandwidthMeter = bandwidthMeter;
this.analyticsCollector = analyticsCollector; this.analyticsCollector = analyticsCollector;
looper = Util.getLooper(); looper = Util.getCurrentOrMainLooper();
audioAttributes = AudioAttributes.DEFAULT; audioAttributes = AudioAttributes.DEFAULT;
wakeMode = C.WAKE_MODE_NONE; wakeMode = C.WAKE_MODE_NONE;
videoScalingMode = Renderer.VIDEO_SCALING_MODE_DEFAULT; videoScalingMode = Renderer.VIDEO_SCALING_MODE_DEFAULT;
......
...@@ -65,7 +65,7 @@ public final class AudioCapabilitiesReceiver { ...@@ -65,7 +65,7 @@ public final class AudioCapabilitiesReceiver {
context = context.getApplicationContext(); context = context.getApplicationContext();
this.context = context; this.context = context;
this.listener = Assertions.checkNotNull(listener); this.listener = Assertions.checkNotNull(listener);
handler = new Handler(Util.getLooper()); handler = Util.createHandlerForCurrentOrMainLooper();
receiver = Util.SDK_INT >= 21 ? new HdmiAudioPlugBroadcastReceiver() : null; receiver = Util.SDK_INT >= 21 ? new HdmiAudioPlugBroadcastReceiver() : null;
Uri externalSurroundSoundUri = AudioCapabilities.getExternalSurroundSoundGlobalSettingUri(); Uri externalSurroundSoundUri = AudioCapabilities.getExternalSurroundSoundGlobalSettingUri();
externalSurroundSoundSettingObserver = externalSurroundSoundSettingObserver =
......
...@@ -156,7 +156,7 @@ public final class DownloadHelper { ...@@ -156,7 +156,7 @@ public final class DownloadHelper {
public static RendererCapabilities[] getRendererCapabilities(RenderersFactory renderersFactory) { public static RendererCapabilities[] getRendererCapabilities(RenderersFactory renderersFactory) {
Renderer[] renderers = Renderer[] renderers =
renderersFactory.createRenderers( renderersFactory.createRenderers(
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
new VideoRendererEventListener() {}, new VideoRendererEventListener() {},
new AudioRendererEventListener() {}, new AudioRendererEventListener() {},
(cues) -> {}, (cues) -> {},
...@@ -501,7 +501,7 @@ public final class DownloadHelper { ...@@ -501,7 +501,7 @@ public final class DownloadHelper {
this.rendererCapabilities = rendererCapabilities; this.rendererCapabilities = rendererCapabilities;
this.scratchSet = new SparseIntArray(); this.scratchSet = new SparseIntArray();
trackSelector.init(/* listener= */ () -> {}, new DummyBandwidthMeter()); trackSelector.init(/* listener= */ () -> {}, new DummyBandwidthMeter());
callbackHandler = new Handler(Util.getLooper()); callbackHandler = Util.createHandlerForCurrentOrMainLooper();
window = new Timeline.Window(); window = new Timeline.Window();
} }
...@@ -970,7 +970,8 @@ public final class DownloadHelper { ...@@ -970,7 +970,8 @@ public final class DownloadHelper {
allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE); allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE);
pendingMediaPeriods = new ArrayList<>(); pendingMediaPeriods = new ArrayList<>();
@SuppressWarnings("methodref.receiver.bound.invalid") @SuppressWarnings("methodref.receiver.bound.invalid")
Handler downloadThreadHandler = Util.createHandler(this::handleDownloadHelperCallbackMessage); Handler downloadThreadHandler =
Util.createHandlerForCurrentOrMainLooper(this::handleDownloadHelperCallbackMessage);
this.downloadHelperHandler = downloadThreadHandler; this.downloadHelperHandler = downloadThreadHandler;
mediaSourceThread = new HandlerThread("ExoPlayer:DownloadHelper"); mediaSourceThread = new HandlerThread("ExoPlayer:DownloadHelper");
mediaSourceThread.start(); mediaSourceThread.start();
......
...@@ -228,7 +228,7 @@ public final class DownloadManager { ...@@ -228,7 +228,7 @@ public final class DownloadManager {
listeners = new CopyOnWriteArraySet<>(); listeners = new CopyOnWriteArraySet<>();
@SuppressWarnings("methodref.receiver.bound.invalid") @SuppressWarnings("methodref.receiver.bound.invalid")
Handler mainHandler = Util.createHandler(this::handleMainMessage); Handler mainHandler = Util.createHandlerForCurrentOrMainLooper(this::handleMainMessage);
this.applicationHandler = mainHandler; this.applicationHandler = mainHandler;
HandlerThread internalThread = new HandlerThread("ExoPlayer:DownloadManager"); HandlerThread internalThread = new HandlerThread("ExoPlayer:DownloadManager");
internalThread.start(); internalThread.start();
......
...@@ -950,7 +950,7 @@ public abstract class DownloadService extends Service { ...@@ -950,7 +950,7 @@ public abstract class DownloadService extends Service {
// DownloadService.getForegroundNotification, and concrete subclass implementations may // DownloadService.getForegroundNotification, and concrete subclass implementations may
// not anticipate the possibility of this method being called before their onCreate // not anticipate the possibility of this method being called before their onCreate
// implementation has finished executing. // implementation has finished executing.
Util.createHandler() Util.createHandlerForCurrentOrMainLooper()
.postAtFrontOfQueue( .postAtFrontOfQueue(
() -> downloadService.notifyDownloads(downloadManager.getCurrentDownloads())); () -> downloadService.notifyDownloads(downloadManager.getCurrentDownloads()));
} }
......
...@@ -71,7 +71,7 @@ public final class RequirementsWatcher { ...@@ -71,7 +71,7 @@ public final class RequirementsWatcher {
this.context = context.getApplicationContext(); this.context = context.getApplicationContext();
this.listener = listener; this.listener = listener;
this.requirements = requirements; this.requirements = requirements;
handler = new Handler(Util.getLooper()); handler = Util.createHandlerForCurrentOrMainLooper();
} }
/** /**
......
...@@ -48,7 +48,7 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource { ...@@ -48,7 +48,7 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
@CallSuper @CallSuper
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) { protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
this.mediaTransferListener = mediaTransferListener; this.mediaTransferListener = mediaTransferListener;
eventHandler = Util.createHandler(); eventHandler = Util.createHandlerForCurrentOrMainLooper();
} }
@Override @Override
......
...@@ -192,7 +192,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -192,7 +192,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
.onContinueLoadingRequested(ProgressiveMediaPeriod.this); .onContinueLoadingRequested(ProgressiveMediaPeriod.this);
} }
}; };
handler = Util.createHandler(); handler = Util.createHandlerForCurrentOrMainLooper();
sampleQueueTrackIds = new TrackId[0]; sampleQueueTrackIds = new TrackId[0];
sampleQueues = new SampleQueue[0]; sampleQueues = new SampleQueue[0];
pendingResetPositionUs = C.TIME_UNSET; pendingResetPositionUs = C.TIME_UNSET;
......
...@@ -336,7 +336,7 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> { ...@@ -336,7 +336,7 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
* events on the external event listener thread. * events on the external event listener thread.
*/ */
public ComponentListener() { public ComponentListener() {
playerHandler = Util.createHandler(); playerHandler = Util.createHandlerForCurrentOrMainLooper();
} }
/** Releases the component listener. */ /** Releases the component listener. */
......
...@@ -1763,7 +1763,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -1763,7 +1763,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
private final Handler handler; private final Handler handler;
public OnFrameRenderedListenerV23(MediaCodec codec) { public OnFrameRenderedListenerV23(MediaCodec codec) {
handler = Util.createHandler(/* callback= */ this); handler = Util.createHandlerForCurrentOrMainLooper(/* callback= */ this);
codec.setOnFrameRenderedListener(/* listener= */ this, handler); codec.setOnFrameRenderedListener(/* listener= */ this, handler);
} }
......
...@@ -599,7 +599,7 @@ public final class ClippingMediaSourceTest { ...@@ -599,7 +599,7 @@ public final class ClippingMediaSourceTest {
testRunner.runOnPlaybackThread( testRunner.runOnPlaybackThread(
() -> () ->
clippingMediaSource.addEventListener( clippingMediaSource.addEventListener(
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
new MediaSourceEventListener() { new MediaSourceEventListener() {
@Override @Override
public void onDownstreamFormatChanged( public void onDownstreamFormatChanged(
......
...@@ -412,7 +412,9 @@ public final class ConcatenatingMediaSourceTest { ...@@ -412,7 +412,9 @@ public final class ConcatenatingMediaSourceTest {
dummyMainThread.runOnMainThread( dummyMainThread.runOnMainThread(
() -> () ->
mediaSource.addMediaSource( mediaSource.addMediaSource(
createFakeMediaSource(), Util.createHandler(), runnableInvoked::countDown)); createFakeMediaSource(),
Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown));
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -428,7 +430,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -428,7 +430,7 @@ public final class ConcatenatingMediaSourceTest {
() -> () ->
mediaSource.addMediaSources( mediaSource.addMediaSources(
Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown)); runnableInvoked::countDown));
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -446,7 +448,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -446,7 +448,7 @@ public final class ConcatenatingMediaSourceTest {
mediaSource.addMediaSource( mediaSource.addMediaSource(
/* index */ 0, /* index */ 0,
createFakeMediaSource(), createFakeMediaSource(),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown)); runnableInvoked::countDown));
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -464,7 +466,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -464,7 +466,7 @@ public final class ConcatenatingMediaSourceTest {
mediaSource.addMediaSources( mediaSource.addMediaSources(
/* index */ 0, /* index */ 0,
Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown)); runnableInvoked::countDown));
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -481,7 +483,9 @@ public final class ConcatenatingMediaSourceTest { ...@@ -481,7 +483,9 @@ public final class ConcatenatingMediaSourceTest {
() -> { () -> {
mediaSource.addMediaSource(createFakeMediaSource()); mediaSource.addMediaSource(createFakeMediaSource());
mediaSource.removeMediaSource( mediaSource.removeMediaSource(
/* index */ 0, Util.createHandler(), runnableInvoked::countDown); /* index */ 0,
Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown);
}); });
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -499,7 +503,10 @@ public final class ConcatenatingMediaSourceTest { ...@@ -499,7 +503,10 @@ public final class ConcatenatingMediaSourceTest {
mediaSource.addMediaSources( mediaSource.addMediaSources(
Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()})); Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}));
mediaSource.moveMediaSource( mediaSource.moveMediaSource(
/* fromIndex */ 1, /* toIndex */ 0, Util.createHandler(), runnableInvoked::countDown); /* fromIndex */ 1, /* toIndex */
0,
Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown);
}); });
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -516,7 +523,9 @@ public final class ConcatenatingMediaSourceTest { ...@@ -516,7 +523,9 @@ public final class ConcatenatingMediaSourceTest {
dummyMainThread.runOnMainThread( dummyMainThread.runOnMainThread(
() -> () ->
mediaSource.addMediaSource( mediaSource.addMediaSource(
createFakeMediaSource(), Util.createHandler(), timelineGrabber)); createFakeMediaSource(),
Util.createHandlerForCurrentOrMainLooper(),
timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getWindowCount()).isEqualTo(1); assertThat(timeline.getWindowCount()).isEqualTo(1);
} finally { } finally {
...@@ -535,7 +544,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -535,7 +544,7 @@ public final class ConcatenatingMediaSourceTest {
mediaSource.addMediaSources( mediaSource.addMediaSources(
Arrays.asList( Arrays.asList(
new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
timelineGrabber)); timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getWindowCount()).isEqualTo(2); assertThat(timeline.getWindowCount()).isEqualTo(2);
...@@ -553,7 +562,10 @@ public final class ConcatenatingMediaSourceTest { ...@@ -553,7 +562,10 @@ public final class ConcatenatingMediaSourceTest {
dummyMainThread.runOnMainThread( dummyMainThread.runOnMainThread(
() -> () ->
mediaSource.addMediaSource( mediaSource.addMediaSource(
/* index */ 0, createFakeMediaSource(), Util.createHandler(), timelineGrabber)); /* index */ 0,
createFakeMediaSource(),
Util.createHandlerForCurrentOrMainLooper(),
timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getWindowCount()).isEqualTo(1); assertThat(timeline.getWindowCount()).isEqualTo(1);
} finally { } finally {
...@@ -573,7 +585,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -573,7 +585,7 @@ public final class ConcatenatingMediaSourceTest {
/* index */ 0, /* index */ 0,
Arrays.asList( Arrays.asList(
new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
timelineGrabber)); timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getWindowCount()).isEqualTo(2); assertThat(timeline.getWindowCount()).isEqualTo(2);
...@@ -593,7 +605,8 @@ public final class ConcatenatingMediaSourceTest { ...@@ -593,7 +605,8 @@ public final class ConcatenatingMediaSourceTest {
final TimelineGrabber timelineGrabber = new TimelineGrabber(testRunner); final TimelineGrabber timelineGrabber = new TimelineGrabber(testRunner);
dummyMainThread.runOnMainThread( dummyMainThread.runOnMainThread(
() -> () ->
mediaSource.removeMediaSource(/* index */ 0, Util.createHandler(), timelineGrabber)); mediaSource.removeMediaSource(
/* index */ 0, Util.createHandlerForCurrentOrMainLooper(), timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getWindowCount()).isEqualTo(0); assertThat(timeline.getWindowCount()).isEqualTo(0);
} finally { } finally {
...@@ -617,7 +630,10 @@ public final class ConcatenatingMediaSourceTest { ...@@ -617,7 +630,10 @@ public final class ConcatenatingMediaSourceTest {
dummyMainThread.runOnMainThread( dummyMainThread.runOnMainThread(
() -> () ->
mediaSource.moveMediaSource( mediaSource.moveMediaSource(
/* fromIndex */ 1, /* toIndex */ 0, Util.createHandler(), timelineGrabber)); /* fromIndex */ 1, /* toIndex */
0,
Util.createHandlerForCurrentOrMainLooper(),
timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getWindowCount()).isEqualTo(2); assertThat(timeline.getWindowCount()).isEqualTo(2);
} finally { } finally {
...@@ -638,7 +654,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -638,7 +654,7 @@ public final class ConcatenatingMediaSourceTest {
mediaSource.moveMediaSource( mediaSource.moveMediaSource(
/* currentIndex= */ 0, /* currentIndex= */ 0,
/* newIndex= */ 1, /* newIndex= */ 1,
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
callbackCalledCondition::countDown); callbackCalledCondition::countDown);
mediaSource.releaseSource(caller); mediaSource.releaseSource(caller);
}); });
...@@ -890,7 +906,8 @@ public final class ConcatenatingMediaSourceTest { ...@@ -890,7 +906,8 @@ public final class ConcatenatingMediaSourceTest {
testRunner.prepareSource(); testRunner.prepareSource();
final TimelineGrabber timelineGrabber = new TimelineGrabber(testRunner); final TimelineGrabber timelineGrabber = new TimelineGrabber(testRunner);
dummyMainThread.runOnMainThread(() -> mediaSource.clear(Util.createHandler(), timelineGrabber)); dummyMainThread.runOnMainThread(
() -> mediaSource.clear(Util.createHandlerForCurrentOrMainLooper(), timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.isEmpty()).isTrue(); assertThat(timeline.isEmpty()).isTrue();
...@@ -1042,7 +1059,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -1042,7 +1059,7 @@ public final class ConcatenatingMediaSourceTest {
() -> () ->
mediaSource.setShuffleOrder( mediaSource.setShuffleOrder(
new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 0), new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 0),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
runnableInvoked::countDown)); runnableInvoked::countDown));
runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS);
dummyMainThread.release(); dummyMainThread.release();
...@@ -1062,7 +1079,7 @@ public final class ConcatenatingMediaSourceTest { ...@@ -1062,7 +1079,7 @@ public final class ConcatenatingMediaSourceTest {
() -> () ->
mediaSource.setShuffleOrder( mediaSource.setShuffleOrder(
new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 3), new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 3),
Util.createHandler(), Util.createHandlerForCurrentOrMainLooper(),
timelineGrabber)); timelineGrabber));
Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking();
assertThat(timeline.getFirstWindowIndex(/* shuffleModeEnabled= */ true)).isEqualTo(0); assertThat(timeline.getFirstWindowIndex(/* shuffleModeEnabled= */ true)).isEqualTo(0);
......
...@@ -65,7 +65,9 @@ public class MediaSourceEventDispatcherTest { ...@@ -65,7 +65,9 @@ public class MediaSourceEventDispatcherTest {
@Test @Test
public void listenerReceivesEventPopulatedWithMediaPeriodInfo() { public void listenerReceivesEventPopulatedWithMediaPeriodInfo() {
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class); MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class);
...@@ -76,9 +78,13 @@ public class MediaSourceEventDispatcherTest { ...@@ -76,9 +78,13 @@ public class MediaSourceEventDispatcherTest {
@Test @Test
public void sameListenerObjectRegisteredTwiceOnlyReceivesEventsOnce() { public void sameListenerObjectRegisteredTwiceOnlyReceivesEventsOnce() {
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class); MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class);
...@@ -154,7 +160,9 @@ public class MediaSourceEventDispatcherTest { ...@@ -154,7 +160,9 @@ public class MediaSourceEventDispatcherTest {
@Test @Test
public void listenersAreCopiedToNewDispatcher() { public void listenersAreCopiedToNewDispatcher() {
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
MediaSource.MediaPeriodId newPeriodId = new MediaSource.MediaPeriodId("different uid"); MediaSource.MediaPeriodId newPeriodId = new MediaSource.MediaPeriodId("different uid");
MediaSourceEventDispatcher newEventDispatcher = MediaSourceEventDispatcher newEventDispatcher =
...@@ -170,7 +178,9 @@ public class MediaSourceEventDispatcherTest { ...@@ -170,7 +178,9 @@ public class MediaSourceEventDispatcherTest {
@Test @Test
public void removingListenerStopsEventDispatch() { public void removingListenerStopsEventDispatch() {
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
eventDispatcher.removeEventListener(mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.removeEventListener(mediaSourceEventListener, MediaSourceEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
...@@ -182,7 +192,9 @@ public class MediaSourceEventDispatcherTest { ...@@ -182,7 +192,9 @@ public class MediaSourceEventDispatcherTest {
@Test @Test
public void removingListenerWithDifferentTypeToRegistrationDoesntRemove() { public void removingListenerWithDifferentTypeToRegistrationDoesntRemove() {
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaAndDrmEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaAndDrmEventListener,
MediaSourceEventListener.class);
eventDispatcher.removeEventListener(mediaAndDrmEventListener, DrmSessionEventListener.class); eventDispatcher.removeEventListener(mediaAndDrmEventListener, DrmSessionEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
...@@ -195,9 +207,13 @@ public class MediaSourceEventDispatcherTest { ...@@ -195,9 +207,13 @@ public class MediaSourceEventDispatcherTest {
public void listenersAreCountedBasedOnListenerAndType() { public void listenersAreCountedBasedOnListenerAndType() {
// Add the listener twice and remove it once. // Add the listener twice and remove it once.
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
eventDispatcher.addEventListener( eventDispatcher.addEventListener(
Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); Util.createHandlerForCurrentOrMainLooper(),
mediaSourceEventListener,
MediaSourceEventListener.class);
eventDispatcher.removeEventListener(mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.removeEventListener(mediaSourceEventListener, MediaSourceEventListener.class);
eventDispatcher.dispatch( eventDispatcher.dispatch(
......
...@@ -680,7 +680,7 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -680,7 +680,7 @@ public final class DashMediaSource extends BaseMediaSource {
} else { } else {
dataSource = manifestDataSourceFactory.createDataSource(); dataSource = manifestDataSourceFactory.createDataSource();
loader = new Loader("Loader:DashMediaSource"); loader = new Loader("Loader:DashMediaSource");
handler = Util.createHandler(); handler = Util.createHandlerForCurrentOrMainLooper();
startLoadingManifest(); startLoadingManifest();
} }
} }
......
...@@ -105,7 +105,7 @@ public final class PlayerEmsgHandler implements Handler.Callback { ...@@ -105,7 +105,7 @@ public final class PlayerEmsgHandler implements Handler.Callback {
this.allocator = allocator; this.allocator = allocator;
manifestPublishTimeToExpiryTimeUs = new TreeMap<>(); manifestPublishTimeToExpiryTimeUs = new TreeMap<>();
handler = Util.createHandler(/* callback= */ this); handler = Util.createHandlerForCurrentOrMainLooper(/* callback= */ this);
decoder = new EventMessageDecoder(); decoder = new EventMessageDecoder();
lastLoadedChunkEndTimeUs = C.TIME_UNSET; lastLoadedChunkEndTimeUs = C.TIME_UNSET;
lastLoadedChunkEndTimeBeforeRefreshUs = C.TIME_UNSET; lastLoadedChunkEndTimeBeforeRefreshUs = C.TIME_UNSET;
......
...@@ -227,7 +227,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -227,7 +227,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@SuppressWarnings("nullness:methodref.receiver.bound.invalid") @SuppressWarnings("nullness:methodref.receiver.bound.invalid")
Runnable onTracksEndedRunnable = this::onTracksEnded; Runnable onTracksEndedRunnable = this::onTracksEnded;
this.onTracksEndedRunnable = onTracksEndedRunnable; this.onTracksEndedRunnable = onTracksEndedRunnable;
handler = Util.createHandler(); handler = Util.createHandlerForCurrentOrMainLooper();
lastSeekPositionUs = positionUs; lastSeekPositionUs = positionUs;
pendingResetPositionUs = positionUs; pendingResetPositionUs = positionUs;
} }
......
...@@ -121,7 +121,7 @@ public final class DefaultHlsPlaylistTracker ...@@ -121,7 +121,7 @@ public final class DefaultHlsPlaylistTracker
Uri initialPlaylistUri, Uri initialPlaylistUri,
EventDispatcher eventDispatcher, EventDispatcher eventDispatcher,
PrimaryPlaylistListener primaryPlaylistListener) { PrimaryPlaylistListener primaryPlaylistListener) {
this.playlistRefreshHandler = Util.createHandler(); this.playlistRefreshHandler = Util.createHandlerForCurrentOrMainLooper();
this.eventDispatcher = eventDispatcher; this.eventDispatcher = eventDispatcher;
this.primaryPlaylistListener = primaryPlaylistListener; this.primaryPlaylistListener = primaryPlaylistListener;
ParsingLoadable<HlsPlaylist> masterPlaylistLoadable = ParsingLoadable<HlsPlaylist> masterPlaylistLoadable =
......
...@@ -620,7 +620,7 @@ public final class SsMediaSource extends BaseMediaSource ...@@ -620,7 +620,7 @@ public final class SsMediaSource extends BaseMediaSource
manifestDataSource = manifestDataSourceFactory.createDataSource(); manifestDataSource = manifestDataSourceFactory.createDataSource();
manifestLoader = new Loader("Loader:Manifest"); manifestLoader = new Loader("Loader:Manifest");
manifestLoaderErrorThrower = manifestLoader; manifestLoaderErrorThrower = manifestLoader;
manifestRefreshHandler = Util.createHandler(); manifestRefreshHandler = Util.createHandlerForCurrentOrMainLooper();
startLoadingManifest(); startLoadingManifest();
} }
} }
......
...@@ -602,7 +602,7 @@ public abstract class Action { ...@@ -602,7 +602,7 @@ public abstract class Action {
} else { } else {
message.setPosition(positionMs); message.setPosition(positionMs);
} }
message.setHandler(Util.createHandler()); message.setHandler(Util.createHandlerForCurrentOrMainLooper());
message.setDeleteAfterDelivery(deleteAfterDelivery); message.setDeleteAfterDelivery(deleteAfterDelivery);
message.send(); message.send();
} }
...@@ -684,7 +684,7 @@ public abstract class Action { ...@@ -684,7 +684,7 @@ public abstract class Action {
@Nullable Surface surface, @Nullable Surface surface,
HandlerWrapper handler, HandlerWrapper handler,
@Nullable ActionNode nextAction) { @Nullable ActionNode nextAction) {
Handler testThreadHandler = Util.createHandler(); Handler testThreadHandler = Util.createHandlerForCurrentOrMainLooper();
// Schedule a message on the playback thread to ensure the player is paused immediately. // Schedule a message on the playback thread to ensure the player is paused immediately.
player player
.createMessage( .createMessage(
...@@ -1048,7 +1048,7 @@ public abstract class Action { ...@@ -1048,7 +1048,7 @@ public abstract class Action {
player player
.createMessage( .createMessage(
(type, data) -> nextAction.schedule(player, trackSelector, surface, handler)) (type, data) -> nextAction.schedule(player, trackSelector, surface, handler))
.setHandler(Util.createHandler()) .setHandler(Util.createHandlerForCurrentOrMainLooper())
.send(); .send();
} }
......
...@@ -137,7 +137,8 @@ public abstract class ExoHostedTest implements AnalyticsListener, HostedTest { ...@@ -137,7 +137,8 @@ public abstract class ExoHostedTest implements AnalyticsListener, HostedTest {
player.addAnalyticsListener(this); player.addAnalyticsListener(this);
player.addAnalyticsListener(new EventLogger(trackSelector, tag)); player.addAnalyticsListener(new EventLogger(trackSelector, tag));
// Schedule any pending actions. // Schedule any pending actions.
actionHandler = Clock.DEFAULT.createHandler(Util.getLooper(), /* callback= */ null); actionHandler =
Clock.DEFAULT.createHandler(Util.getCurrentOrMainLooper(), /* callback= */ null);
if (pendingSchedule != null) { if (pendingSchedule != null) {
pendingSchedule.start(player, trackSelector, surface, actionHandler, /* callback= */ null); pendingSchedule.start(player, trackSelector, surface, actionHandler, /* callback= */ null);
pendingSchedule = null; pendingSchedule = null;
......
...@@ -162,7 +162,7 @@ public class FakeMediaPeriod implements MediaPeriod { ...@@ -162,7 +162,7 @@ public class FakeMediaPeriod implements MediaPeriod {
/* mediaEndTimeUs = */ C.TIME_UNSET); /* mediaEndTimeUs = */ C.TIME_UNSET);
prepareCallback = callback; prepareCallback = callback;
if (deferOnPrepared) { if (deferOnPrepared) {
playerHandler = Util.createHandler(); playerHandler = Util.createHandlerForCurrentOrMainLooper();
} else { } else {
finishPreparation(); finishPreparation();
} }
......
...@@ -176,7 +176,7 @@ public class FakeMediaSource extends BaseMediaSource { ...@@ -176,7 +176,7 @@ public class FakeMediaSource extends BaseMediaSource {
drmSessionManager.prepare(); drmSessionManager.prepare();
preparedSource = true; preparedSource = true;
releasedSource = false; releasedSource = false;
sourceInfoRefreshHandler = Util.createHandler(); sourceInfoRefreshHandler = Util.createHandlerForCurrentOrMainLooper();
if (timeline != null) { if (timeline != null) {
finishSourcePreparation(/* sendManifestLoadEvents= */ true); finishSourcePreparation(/* sendManifestLoadEvents= */ true);
} }
......
...@@ -490,7 +490,7 @@ public class TestExoPlayer { ...@@ -490,7 +490,7 @@ public class TestExoPlayer {
AtomicBoolean receivedMessageCallback = new AtomicBoolean(false); AtomicBoolean receivedMessageCallback = new AtomicBoolean(false);
player player
.createMessage((type, data) -> receivedMessageCallback.set(true)) .createMessage((type, data) -> receivedMessageCallback.set(true))
.setHandler(Util.createHandler()) .setHandler(Util.createHandlerForCurrentOrMainLooper())
.send(); .send();
runMainLooperUntil(receivedMessageCallback::get); runMainLooperUntil(receivedMessageCallback::get);
} }
......
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