From 148641f049b8df73d698b7664e68eff031917f69 Mon Sep 17 00:00:00 2001 From: tianyifeng Date: Tue, 3 Dec 2024 08:35:09 -0800 Subject: [PATCH] Move BasePreloadManager.Listener to a top level PreloadManagerListener PiperOrigin-RevId: 702351887 --- RELEASENOTES.md | 2 ++ .../source/preload/BasePreloadManager.java | 22 ++++-------- .../preload/PreloadManagerListener.java | 34 +++++++++++++++++++ .../preload/DefaultPreloadManagerTest.java | 2 +- 4 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/PreloadManagerListener.java diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 527f76d026..5b14ac0405 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -22,6 +22,8 @@ 2000 ms respectively. * Add `MediaExtractorCompat`, a new class that provides equivalent functionality to platform `MediaExtractor`. + * Move `BasePreloadManager.Listener` to a top level + `PreloadManagerListener`. * Transformer: * Update parameters of `VideoFrameProcessor.registerInputStream` and `VideoFrameProcessor.Listener.onInputStreamRegistered` to use `Format`. diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/BasePreloadManager.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/BasePreloadManager.java index 76707df129..097a7c04a9 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/BasePreloadManager.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/BasePreloadManager.java @@ -62,21 +62,11 @@ public abstract class BasePreloadManager { public abstract BasePreloadManager build(); } - /** Listener for events in a preload manager. */ - public interface Listener { - - /** Called when the given {@link MediaItem} has completed preloading. */ - void onCompleted(MediaItem mediaItem); - - /** Called when an {@linkplain PreloadException error} occurs. */ - void onError(PreloadException exception); - } - private final Object lock; protected final Comparator rankingDataComparator; private final TargetPreloadStatusControl targetPreloadStatusControl; private final MediaSource.Factory mediaSourceFactory; - private final ListenerSet listeners; + private final ListenerSet listeners; private final Map mediaItemMediaSourceHolderMap; private final Handler applicationHandler; @@ -103,26 +93,26 @@ public abstract class BasePreloadManager { } /** - * Adds a {@link Listener} to listen to the preload events. + * Adds a {@link PreloadManagerListener} to listen to the preload events. * *

This method can be called from any thread. */ - public void addListener(Listener listener) { + public void addListener(PreloadManagerListener listener) { listeners.add(listener); } /** - * Removes a {@link Listener}. + * Removes a {@link PreloadManagerListener}. * * @throws IllegalStateException If this method is called from the wrong thread. */ - public void removeListener(Listener listener) { + public void removeListener(PreloadManagerListener listener) { verifyApplicationThread(); listeners.remove(listener); } /** - * Clears all the {@linkplain Listener listeners}. + * Clears all the {@linkplain PreloadManagerListener listeners}. * * @throws IllegalStateException If this method is called from the wrong thread. */ diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/PreloadManagerListener.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/PreloadManagerListener.java new file mode 100644 index 0000000000..6996e6e718 --- /dev/null +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/preload/PreloadManagerListener.java @@ -0,0 +1,34 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.media3.exoplayer.source.preload; + +import androidx.media3.common.MediaItem; +import androidx.media3.common.util.UnstableApi; + +/** + * Listener for events in a preload manager. + * + *

All methods have no-op default implementations to allow selective overrides. + */ +@UnstableApi +public interface PreloadManagerListener { + + /** Called when the given {@link MediaItem} has completed preloading. */ + default void onCompleted(MediaItem mediaItem) {} + + /** Called when an {@linkplain PreloadException error} occurs. */ + default void onError(PreloadException exception) {} +} diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/preload/DefaultPreloadManagerTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/preload/DefaultPreloadManagerTest.java index c4975c9eed..4d588c5736 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/preload/DefaultPreloadManagerTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/preload/DefaultPreloadManagerTest.java @@ -902,7 +902,7 @@ public class DefaultPreloadManagerTest { preloadThread.quit(); } - private static class TestPreloadManagerListener implements BasePreloadManager.Listener { + private static class TestPreloadManagerListener implements PreloadManagerListener { public final List onCompletedMediaItemRecords; public final List onErrorPreloadExceptionRecords;