From 63ae4cc54bc58303faf15a0dc97017792b0de6f2 Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 19 Jun 2020 12:16:05 +0100 Subject: [PATCH] Rollback of https://github.com/google/ExoPlayer/commit/6ae472243f16d1f075328a779f3d4b46e180b76d *** Original commit *** Rename Util methods to clarify which Looper is used. The method name didn't clarify that either the main or current Looper is used. *** PiperOrigin-RevId: 317283606 --- .../ext/leanback/LeanbackPlayerAdapter.java | 2 +- .../mediasession/MediaSessionConnector.java | 2 +- .../google/android/exoplayer2/util/Util.java | 13 +++-- .../google/android/exoplayer2/ExoPlayer.java | 2 +- .../android/exoplayer2/ExoPlayerFactory.java | 13 +++-- .../android/exoplayer2/MediaSourceList.java | 4 +- .../android/exoplayer2/SimpleExoPlayer.java | 2 +- .../audio/AudioCapabilitiesReceiver.java | 2 +- .../exoplayer2/offline/DownloadHelper.java | 7 ++- .../exoplayer2/offline/DownloadManager.java | 2 +- .../exoplayer2/offline/DownloadService.java | 2 +- .../scheduler/RequirementsWatcher.java | 2 +- .../source/CompositeMediaSource.java | 2 +- .../source/ProgressiveMediaPeriod.java | 2 +- .../exoplayer2/source/ads/AdsMediaSource.java | 2 +- .../video/MediaCodecVideoRenderer.java | 2 +- .../source/ClippingMediaSourceTest.java | 2 +- .../source/ConcatenatingMediaSourceTest.java | 49 ++++++------------- .../util/MediaSourceEventDispatcherTest.java | 32 +++--------- .../source/dash/DashMediaSource.java | 2 +- .../source/dash/PlayerEmsgHandler.java | 2 +- .../source/hls/HlsSampleStreamWrapper.java | 2 +- .../playlist/DefaultHlsPlaylistTracker.java | 2 +- .../source/smoothstreaming/SsMediaSource.java | 2 +- .../android/exoplayer2/testutil/Action.java | 6 +-- .../exoplayer2/testutil/ExoHostedTest.java | 3 +- .../exoplayer2/testutil/FakeMediaPeriod.java | 2 +- .../exoplayer2/testutil/FakeMediaSource.java | 2 +- .../exoplayer2/testutil/TestExoPlayer.java | 2 +- 29 files changed, 68 insertions(+), 101 deletions(-) diff --git a/extensions/leanback/src/main/java/com/google/android/exoplayer2/ext/leanback/LeanbackPlayerAdapter.java b/extensions/leanback/src/main/java/com/google/android/exoplayer2/ext/leanback/LeanbackPlayerAdapter.java index 6538160b8b..e385cd52e9 100644 --- a/extensions/leanback/src/main/java/com/google/android/exoplayer2/ext/leanback/LeanbackPlayerAdapter.java +++ b/extensions/leanback/src/main/java/com/google/android/exoplayer2/ext/leanback/LeanbackPlayerAdapter.java @@ -72,7 +72,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab this.context = context; this.player = player; this.updatePeriodMs = updatePeriodMs; - handler = Util.createHandlerForCurrentOrMainLooper(); + handler = Util.createHandler(); componentListener = new ComponentListener(); controlDispatcher = new DefaultControlDispatcher(); } diff --git a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java index f3edfa3545..b74ad9701f 100644 --- a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java +++ b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java @@ -437,7 +437,7 @@ public final class MediaSessionConnector { */ public MediaSessionConnector(MediaSessionCompat mediaSession) { this.mediaSession = mediaSession; - looper = Util.getCurrentOrMainLooper(); + looper = Util.getLooper(); componentListener = new ComponentListener(); commandReceivers = new ArrayList<>(); customCommandReceivers = new ArrayList<>(); diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java b/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java index 96c2d3622a..09303c4a9c 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java @@ -399,8 +399,8 @@ public final class Util { *

If the current thread doesn't have a {@link Looper}, the application's main thread {@link * Looper} is used. */ - public static Handler createHandlerForCurrentOrMainLooper() { - return createHandlerForCurrentOrMainLooper(/* callback= */ null); + public static Handler createHandler() { + return createHandler(/* callback= */ null); } /** @@ -416,9 +416,8 @@ public final class Util { * callback is required. * @return A {@link Handler} with the specified callback on the current {@link Looper} thread. */ - public static Handler createHandlerForCurrentOrMainLooper( - @Nullable Handler.@UnknownInitialization Callback callback) { - return createHandler(getCurrentOrMainLooper(), callback); + public static Handler createHandler(@Nullable Handler.@UnknownInitialization Callback callback) { + return createHandler(getLooper(), callback); } /** @@ -442,8 +441,8 @@ public final class Util { * 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}. */ - public static Looper getCurrentOrMainLooper() { - @Nullable Looper myLooper = Looper.myLooper(); + public static Looper getLooper() { + Looper myLooper = Looper.myLooper(); return myLooper != null ? myLooper : Looper.getMainLooper(); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java index 9990e77f3a..b4cd9a399d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java @@ -209,7 +209,7 @@ public interface ExoPlayer extends Player { this.mediaSourceFactory = mediaSourceFactory; this.loadControl = loadControl; this.bandwidthMeter = bandwidthMeter; - looper = Util.getCurrentOrMainLooper(); + looper = Util.getLooper(); useLazyPreparation = true; seekParameters = SeekParameters.DEFAULT; clock = Clock.DEFAULT; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java index dcdce89489..2c07593aaa 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java @@ -101,7 +101,11 @@ public final class ExoPlayerFactory { TrackSelector trackSelector, LoadControl loadControl) { return newSimpleInstance( - context, renderersFactory, trackSelector, loadControl, Util.getCurrentOrMainLooper()); + context, + renderersFactory, + trackSelector, + loadControl, + Util.getLooper()); } /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @@ -120,7 +124,7 @@ public final class ExoPlayerFactory { loadControl, bandwidthMeter, new AnalyticsCollector(Clock.DEFAULT), - Util.getCurrentOrMainLooper()); + Util.getLooper()); } /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @@ -138,7 +142,7 @@ public final class ExoPlayerFactory { trackSelector, loadControl, analyticsCollector, - Util.getCurrentOrMainLooper()); + Util.getLooper()); } /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @@ -216,8 +220,7 @@ public final class ExoPlayerFactory { @SuppressWarnings("deprecation") public static ExoPlayer newInstance( Context context, Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl) { - return newInstance( - context, renderers, trackSelector, loadControl, Util.getCurrentOrMainLooper()); + return newInstance(context, renderers, trackSelector, loadControl, Util.getLooper()); } /** @deprecated Use {@link ExoPlayer.Builder} instead. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java b/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java index cffad118ad..e690ea3626 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java @@ -437,8 +437,8 @@ import java.util.Set; (source, timeline) -> mediaSourceListInfoListener.onPlaylistUpdateRequested(); ForwardingEventListener eventListener = new ForwardingEventListener(holder); childSources.put(holder, new MediaSourceAndListener(mediaSource, caller, eventListener)); - mediaSource.addEventListener(Util.createHandlerForCurrentOrMainLooper(), eventListener); - mediaSource.addDrmEventListener(Util.createHandlerForCurrentOrMainLooper(), eventListener); + mediaSource.addEventListener(Util.createHandler(), eventListener); + mediaSource.addDrmEventListener(Util.createHandler(), eventListener); mediaSource.prepareSource(caller, mediaTransferListener); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index db2602ea85..d1f0cfc798 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -199,7 +199,7 @@ public class SimpleExoPlayer extends BasePlayer this.loadControl = loadControl; this.bandwidthMeter = bandwidthMeter; this.analyticsCollector = analyticsCollector; - looper = Util.getCurrentOrMainLooper(); + looper = Util.getLooper(); audioAttributes = AudioAttributes.DEFAULT; wakeMode = C.WAKE_MODE_NONE; videoScalingMode = Renderer.VIDEO_SCALING_MODE_DEFAULT; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/AudioCapabilitiesReceiver.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/AudioCapabilitiesReceiver.java index c9c78a7422..991ed9ee97 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/AudioCapabilitiesReceiver.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/AudioCapabilitiesReceiver.java @@ -65,7 +65,7 @@ public final class AudioCapabilitiesReceiver { context = context.getApplicationContext(); this.context = context; this.listener = Assertions.checkNotNull(listener); - handler = Util.createHandlerForCurrentOrMainLooper(); + handler = new Handler(Util.getLooper()); receiver = Util.SDK_INT >= 21 ? new HdmiAudioPlugBroadcastReceiver() : null; Uri externalSurroundSoundUri = AudioCapabilities.getExternalSurroundSoundGlobalSettingUri(); externalSurroundSoundSettingObserver = diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java index 51b939f6ce..11933e7834 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java @@ -156,7 +156,7 @@ public final class DownloadHelper { public static RendererCapabilities[] getRendererCapabilities(RenderersFactory renderersFactory) { Renderer[] renderers = renderersFactory.createRenderers( - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), new VideoRendererEventListener() {}, new AudioRendererEventListener() {}, (cues) -> {}, @@ -501,7 +501,7 @@ public final class DownloadHelper { this.rendererCapabilities = rendererCapabilities; this.scratchSet = new SparseIntArray(); trackSelector.init(/* listener= */ () -> {}, new DummyBandwidthMeter()); - callbackHandler = Util.createHandlerForCurrentOrMainLooper(); + callbackHandler = new Handler(Util.getLooper()); window = new Timeline.Window(); } @@ -970,8 +970,7 @@ public final class DownloadHelper { allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE); pendingMediaPeriods = new ArrayList<>(); @SuppressWarnings("methodref.receiver.bound.invalid") - Handler downloadThreadHandler = - Util.createHandlerForCurrentOrMainLooper(this::handleDownloadHelperCallbackMessage); + Handler downloadThreadHandler = Util.createHandler(this::handleDownloadHelperCallbackMessage); this.downloadHelperHandler = downloadThreadHandler; mediaSourceThread = new HandlerThread("ExoPlayer:DownloadHelper"); mediaSourceThread.start(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadManager.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadManager.java index 50df4a0e8a..12f8182980 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadManager.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadManager.java @@ -228,7 +228,7 @@ public final class DownloadManager { listeners = new CopyOnWriteArraySet<>(); @SuppressWarnings("methodref.receiver.bound.invalid") - Handler mainHandler = Util.createHandlerForCurrentOrMainLooper(this::handleMainMessage); + Handler mainHandler = Util.createHandler(this::handleMainMessage); this.applicationHandler = mainHandler; HandlerThread internalThread = new HandlerThread("ExoPlayer:DownloadManager"); internalThread.start(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java index 527c51ea83..a0c08071db 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java @@ -950,7 +950,7 @@ public abstract class DownloadService extends Service { // DownloadService.getForegroundNotification, and concrete subclass implementations may // not anticipate the possibility of this method being called before their onCreate // implementation has finished executing. - Util.createHandlerForCurrentOrMainLooper() + Util.createHandler() .postAtFrontOfQueue( () -> downloadService.notifyDownloads(downloadManager.getCurrentDownloads())); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/scheduler/RequirementsWatcher.java b/library/core/src/main/java/com/google/android/exoplayer2/scheduler/RequirementsWatcher.java index f0a9ae3efc..849511ef3f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/scheduler/RequirementsWatcher.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/scheduler/RequirementsWatcher.java @@ -71,7 +71,7 @@ public final class RequirementsWatcher { this.context = context.getApplicationContext(); this.listener = listener; this.requirements = requirements; - handler = Util.createHandlerForCurrentOrMainLooper(); + handler = new Handler(Util.getLooper()); } /** diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeMediaSource.java index 6693e53abe..b742d3b431 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeMediaSource.java @@ -48,7 +48,7 @@ public abstract class CompositeMediaSource extends BaseMediaSource { @CallSuper protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) { this.mediaTransferListener = mediaTransferListener; - eventHandler = Util.createHandlerForCurrentOrMainLooper(); + eventHandler = Util.createHandler(); } @Override diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java index 25283a0ecf..d879671c83 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java @@ -192,7 +192,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; .onContinueLoadingRequested(ProgressiveMediaPeriod.this); } }; - handler = Util.createHandlerForCurrentOrMainLooper(); + handler = Util.createHandler(); sampleQueueTrackIds = new TrackId[0]; sampleQueues = new SampleQueue[0]; pendingResetPositionUs = C.TIME_UNSET; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java index 3688c63ec1..27df9a66f3 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java @@ -336,7 +336,7 @@ public final class AdsMediaSource extends CompositeMediaSource { * events on the external event listener thread. */ public ComponentListener() { - playerHandler = Util.createHandlerForCurrentOrMainLooper(); + playerHandler = Util.createHandler(); } /** Releases the component listener. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java index 814937717e..aefd52ab11 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java @@ -1763,7 +1763,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { private final Handler handler; public OnFrameRenderedListenerV23(MediaCodec codec) { - handler = Util.createHandlerForCurrentOrMainLooper(/* callback= */ this); + handler = Util.createHandler(/* callback= */ this); codec.setOnFrameRenderedListener(/* listener= */ this, handler); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java index 4f9331be62..d3e85233e9 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java @@ -599,7 +599,7 @@ public final class ClippingMediaSourceTest { testRunner.runOnPlaybackThread( () -> clippingMediaSource.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), new MediaSourceEventListener() { @Override public void onDownstreamFormatChanged( diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java index 90e1eed47f..cf2e3e879d 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java @@ -412,9 +412,7 @@ public final class ConcatenatingMediaSourceTest { dummyMainThread.runOnMainThread( () -> mediaSource.addMediaSource( - createFakeMediaSource(), - Util.createHandlerForCurrentOrMainLooper(), - runnableInvoked::countDown)); + createFakeMediaSource(), Util.createHandler(), runnableInvoked::countDown)); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -430,7 +428,7 @@ public final class ConcatenatingMediaSourceTest { () -> mediaSource.addMediaSources( Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), runnableInvoked::countDown)); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -448,7 +446,7 @@ public final class ConcatenatingMediaSourceTest { mediaSource.addMediaSource( /* index */ 0, createFakeMediaSource(), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), runnableInvoked::countDown)); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -466,7 +464,7 @@ public final class ConcatenatingMediaSourceTest { mediaSource.addMediaSources( /* index */ 0, Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), runnableInvoked::countDown)); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -483,9 +481,7 @@ public final class ConcatenatingMediaSourceTest { () -> { mediaSource.addMediaSource(createFakeMediaSource()); mediaSource.removeMediaSource( - /* index */ 0, - Util.createHandlerForCurrentOrMainLooper(), - runnableInvoked::countDown); + /* index */ 0, Util.createHandler(), runnableInvoked::countDown); }); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -503,10 +499,7 @@ public final class ConcatenatingMediaSourceTest { mediaSource.addMediaSources( Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()})); mediaSource.moveMediaSource( - /* fromIndex */ 1, /* toIndex */ - 0, - Util.createHandlerForCurrentOrMainLooper(), - runnableInvoked::countDown); + /* fromIndex */ 1, /* toIndex */ 0, Util.createHandler(), runnableInvoked::countDown); }); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -523,9 +516,7 @@ public final class ConcatenatingMediaSourceTest { dummyMainThread.runOnMainThread( () -> mediaSource.addMediaSource( - createFakeMediaSource(), - Util.createHandlerForCurrentOrMainLooper(), - timelineGrabber)); + createFakeMediaSource(), Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getWindowCount()).isEqualTo(1); } finally { @@ -544,7 +535,7 @@ public final class ConcatenatingMediaSourceTest { mediaSource.addMediaSources( Arrays.asList( new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getWindowCount()).isEqualTo(2); @@ -562,10 +553,7 @@ public final class ConcatenatingMediaSourceTest { dummyMainThread.runOnMainThread( () -> mediaSource.addMediaSource( - /* index */ 0, - createFakeMediaSource(), - Util.createHandlerForCurrentOrMainLooper(), - timelineGrabber)); + /* index */ 0, createFakeMediaSource(), Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getWindowCount()).isEqualTo(1); } finally { @@ -585,7 +573,7 @@ public final class ConcatenatingMediaSourceTest { /* index */ 0, Arrays.asList( new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getWindowCount()).isEqualTo(2); @@ -605,8 +593,7 @@ public final class ConcatenatingMediaSourceTest { final TimelineGrabber timelineGrabber = new TimelineGrabber(testRunner); dummyMainThread.runOnMainThread( () -> - mediaSource.removeMediaSource( - /* index */ 0, Util.createHandlerForCurrentOrMainLooper(), timelineGrabber)); + mediaSource.removeMediaSource(/* index */ 0, Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getWindowCount()).isEqualTo(0); } finally { @@ -630,10 +617,7 @@ public final class ConcatenatingMediaSourceTest { dummyMainThread.runOnMainThread( () -> mediaSource.moveMediaSource( - /* fromIndex */ 1, /* toIndex */ - 0, - Util.createHandlerForCurrentOrMainLooper(), - timelineGrabber)); + /* fromIndex */ 1, /* toIndex */ 0, Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getWindowCount()).isEqualTo(2); } finally { @@ -654,7 +638,7 @@ public final class ConcatenatingMediaSourceTest { mediaSource.moveMediaSource( /* currentIndex= */ 0, /* newIndex= */ 1, - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), callbackCalledCondition::countDown); mediaSource.releaseSource(caller); }); @@ -906,8 +890,7 @@ public final class ConcatenatingMediaSourceTest { testRunner.prepareSource(); final TimelineGrabber timelineGrabber = new TimelineGrabber(testRunner); - dummyMainThread.runOnMainThread( - () -> mediaSource.clear(Util.createHandlerForCurrentOrMainLooper(), timelineGrabber)); + dummyMainThread.runOnMainThread(() -> mediaSource.clear(Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.isEmpty()).isTrue(); @@ -1059,7 +1042,7 @@ public final class ConcatenatingMediaSourceTest { () -> mediaSource.setShuffleOrder( new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 0), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), runnableInvoked::countDown)); runnableInvoked.await(MediaSourceTestRunner.TIMEOUT_MS, TimeUnit.MILLISECONDS); dummyMainThread.release(); @@ -1079,7 +1062,7 @@ public final class ConcatenatingMediaSourceTest { () -> mediaSource.setShuffleOrder( new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 3), - Util.createHandlerForCurrentOrMainLooper(), + Util.createHandler(), timelineGrabber)); Timeline timeline = timelineGrabber.assertTimelineChangeBlocking(); assertThat(timeline.getFirstWindowIndex(/* shuffleModeEnabled= */ true)).isEqualTo(0); diff --git a/library/core/src/test/java/com/google/android/exoplayer2/util/MediaSourceEventDispatcherTest.java b/library/core/src/test/java/com/google/android/exoplayer2/util/MediaSourceEventDispatcherTest.java index debf839a43..8d110a8776 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/util/MediaSourceEventDispatcherTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/util/MediaSourceEventDispatcherTest.java @@ -65,9 +65,7 @@ public class MediaSourceEventDispatcherTest { @Test public void listenerReceivesEventPopulatedWithMediaPeriodInfo() { eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.dispatch( MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class); @@ -78,13 +76,9 @@ public class MediaSourceEventDispatcherTest { @Test public void sameListenerObjectRegisteredTwiceOnlyReceivesEventsOnce() { eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.dispatch( MediaSourceEventListener::onMediaPeriodCreated, MediaSourceEventListener.class); @@ -160,9 +154,7 @@ public class MediaSourceEventDispatcherTest { @Test public void listenersAreCopiedToNewDispatcher() { eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); MediaSource.MediaPeriodId newPeriodId = new MediaSource.MediaPeriodId("different uid"); MediaSourceEventDispatcher newEventDispatcher = @@ -178,9 +170,7 @@ public class MediaSourceEventDispatcherTest { @Test public void removingListenerStopsEventDispatch() { eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.removeEventListener(mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.dispatch( @@ -192,9 +182,7 @@ public class MediaSourceEventDispatcherTest { @Test public void removingListenerWithDifferentTypeToRegistrationDoesntRemove() { eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaAndDrmEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaAndDrmEventListener, MediaSourceEventListener.class); eventDispatcher.removeEventListener(mediaAndDrmEventListener, DrmSessionEventListener.class); eventDispatcher.dispatch( @@ -207,13 +195,9 @@ public class MediaSourceEventDispatcherTest { public void listenersAreCountedBasedOnListenerAndType() { // Add the listener twice and remove it once. eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.addEventListener( - Util.createHandlerForCurrentOrMainLooper(), - mediaSourceEventListener, - MediaSourceEventListener.class); + Util.createHandler(), mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.removeEventListener(mediaSourceEventListener, MediaSourceEventListener.class); eventDispatcher.dispatch( diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index 103b689dc2..747a24ca63 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -680,7 +680,7 @@ public final class DashMediaSource extends BaseMediaSource { } else { dataSource = manifestDataSourceFactory.createDataSource(); loader = new Loader("Loader:DashMediaSource"); - handler = Util.createHandlerForCurrentOrMainLooper(); + handler = Util.createHandler(); startLoadingManifest(); } } diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/PlayerEmsgHandler.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/PlayerEmsgHandler.java index fed5ab74f5..7888841e23 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/PlayerEmsgHandler.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/PlayerEmsgHandler.java @@ -105,7 +105,7 @@ public final class PlayerEmsgHandler implements Handler.Callback { this.allocator = allocator; manifestPublishTimeToExpiryTimeUs = new TreeMap<>(); - handler = Util.createHandlerForCurrentOrMainLooper(/* callback= */ this); + handler = Util.createHandler(/* callback= */ this); decoder = new EventMessageDecoder(); lastLoadedChunkEndTimeUs = C.TIME_UNSET; lastLoadedChunkEndTimeBeforeRefreshUs = C.TIME_UNSET; diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 579af21bc4..979b24f939 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -227,7 +227,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @SuppressWarnings("nullness:methodref.receiver.bound.invalid") Runnable onTracksEndedRunnable = this::onTracksEnded; this.onTracksEndedRunnable = onTracksEndedRunnable; - handler = Util.createHandlerForCurrentOrMainLooper(); + handler = Util.createHandler(); lastSeekPositionUs = positionUs; pendingResetPositionUs = positionUs; } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java index 2806a0bdd4..d43284a211 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java @@ -121,7 +121,7 @@ public final class DefaultHlsPlaylistTracker Uri initialPlaylistUri, EventDispatcher eventDispatcher, PrimaryPlaylistListener primaryPlaylistListener) { - this.playlistRefreshHandler = Util.createHandlerForCurrentOrMainLooper(); + this.playlistRefreshHandler = Util.createHandler(); this.eventDispatcher = eventDispatcher; this.primaryPlaylistListener = primaryPlaylistListener; ParsingLoadable masterPlaylistLoadable = diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java index 9f63a54650..6b9a00b486 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java @@ -620,7 +620,7 @@ public final class SsMediaSource extends BaseMediaSource manifestDataSource = manifestDataSourceFactory.createDataSource(); manifestLoader = new Loader("Loader:Manifest"); manifestLoaderErrorThrower = manifestLoader; - manifestRefreshHandler = Util.createHandlerForCurrentOrMainLooper(); + manifestRefreshHandler = Util.createHandler(); startLoadingManifest(); } } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/Action.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/Action.java index 5b8d501d00..8fe58aa45b 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/Action.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/Action.java @@ -602,7 +602,7 @@ public abstract class Action { } else { message.setPosition(positionMs); } - message.setHandler(Util.createHandlerForCurrentOrMainLooper()); + message.setHandler(Util.createHandler()); message.setDeleteAfterDelivery(deleteAfterDelivery); message.send(); } @@ -684,7 +684,7 @@ public abstract class Action { @Nullable Surface surface, HandlerWrapper handler, @Nullable ActionNode nextAction) { - Handler testThreadHandler = Util.createHandlerForCurrentOrMainLooper(); + Handler testThreadHandler = Util.createHandler(); // Schedule a message on the playback thread to ensure the player is paused immediately. player .createMessage( @@ -1048,7 +1048,7 @@ public abstract class Action { player .createMessage( (type, data) -> nextAction.schedule(player, trackSelector, surface, handler)) - .setHandler(Util.createHandlerForCurrentOrMainLooper()) + .setHandler(Util.createHandler()) .send(); } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java index d8dabf05b0..ea3c74f26f 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoHostedTest.java @@ -137,8 +137,7 @@ public abstract class ExoHostedTest implements AnalyticsListener, HostedTest { player.addAnalyticsListener(this); player.addAnalyticsListener(new EventLogger(trackSelector, tag)); // Schedule any pending actions. - actionHandler = - Clock.DEFAULT.createHandler(Util.getCurrentOrMainLooper(), /* callback= */ null); + actionHandler = Clock.DEFAULT.createHandler(Util.getLooper(), /* callback= */ null); if (pendingSchedule != null) { pendingSchedule.start(player, trackSelector, surface, actionHandler, /* callback= */ null); pendingSchedule = null; diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaPeriod.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaPeriod.java index 4e3d15b43f..35fd2d7f0e 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaPeriod.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaPeriod.java @@ -162,7 +162,7 @@ public class FakeMediaPeriod implements MediaPeriod { /* mediaEndTimeUs = */ C.TIME_UNSET); prepareCallback = callback; if (deferOnPrepared) { - playerHandler = Util.createHandlerForCurrentOrMainLooper(); + playerHandler = Util.createHandler(); } else { finishPreparation(); } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java index ded1da49b9..2c5a471c58 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java @@ -176,7 +176,7 @@ public class FakeMediaSource extends BaseMediaSource { drmSessionManager.prepare(); preparedSource = true; releasedSource = false; - sourceInfoRefreshHandler = Util.createHandlerForCurrentOrMainLooper(); + sourceInfoRefreshHandler = Util.createHandler(); if (timeline != null) { finishSourcePreparation(/* sendManifestLoadEvents= */ true); } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestExoPlayer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestExoPlayer.java index 548c0a0ccf..139088aeb6 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestExoPlayer.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestExoPlayer.java @@ -490,7 +490,7 @@ public class TestExoPlayer { AtomicBoolean receivedMessageCallback = new AtomicBoolean(false); player .createMessage((type, data) -> receivedMessageCallback.set(true)) - .setHandler(Util.createHandlerForCurrentOrMainLooper()) + .setHandler(Util.createHandler()) .send(); runMainLooperUntil(receivedMessageCallback::get); }