diff --git a/libraries/common/build.gradle b/libraries/common/build.gradle index 9caaef38ec..fabad125f3 100644 --- a/libraries/common/build.gradle +++ b/libraries/common/build.gradle @@ -50,7 +50,6 @@ dependencies { testImplementation 'junit:junit:' + junitVersion testImplementation 'com.google.truth:truth:' + truthVersion testImplementation 'org.robolectric:robolectric:' + robolectricVersion - testImplementation project(modulePrefix + 'lib-exoplayer') testImplementation project(modulePrefix + 'test-utils') } diff --git a/libraries/common/src/test/java/androidx/media3/common/FormatTest.java b/libraries/common/src/test/java/androidx/media3/common/FormatTest.java index 48fcfa9e0a..6e184def74 100644 --- a/libraries/common/src/test/java/androidx/media3/common/FormatTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/FormatTest.java @@ -20,7 +20,7 @@ import static androidx.media3.common.MimeTypes.VIDEO_MP4; import static androidx.media3.common.MimeTypes.VIDEO_WEBM; import static com.google.common.truth.Truth.assertThat; -import androidx.media3.extractor.metadata.id3.TextInformationFrame; +import androidx.media3.test.utils.FakeMetadataEntry; import androidx.test.ext.junit.runners.AndroidJUnit4; import java.util.ArrayList; import java.util.List; @@ -61,10 +61,7 @@ public final class FormatTest { byte[] projectionData = new byte[] {1, 2, 3}; - Metadata metadata = - new Metadata( - new TextInformationFrame("id1", "description1", "value1"), - new TextInformationFrame("id2", "description2", "value2")); + Metadata metadata = new Metadata(new FakeMetadataEntry("id1"), new FakeMetadataEntry("id2")); ColorInfo colorInfo = new ColorInfo( diff --git a/libraries/common/src/test/java/androidx/media3/common/ForwardingPlayerTest.java b/libraries/common/src/test/java/androidx/media3/common/ForwardingPlayerTest.java index e80a52e060..2973bbb2c2 100644 --- a/libraries/common/src/test/java/androidx/media3/common/ForwardingPlayerTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/ForwardingPlayerTest.java @@ -24,9 +24,7 @@ import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import android.content.Context; -import androidx.media3.test.utils.StubExoPlayer; -import androidx.test.core.app.ApplicationProvider; +import androidx.media3.test.utils.StubPlayer; import androidx.test.ext.junit.runners.AndroidJUnit4; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -47,7 +45,7 @@ public class ForwardingPlayerTest { @Test public void addListener_addsForwardingListener() { - FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext()); + FakePlayer player = new FakePlayer(); Player.Listener listener1 = mock(Player.Listener.class); Player.Listener listener2 = mock(Player.Listener.class); @@ -62,7 +60,7 @@ public class ForwardingPlayerTest { @Test public void removeListener_removesForwardingListener() { - FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext()); + FakePlayer player = new FakePlayer(); Player.Listener listener1 = mock(Player.Listener.class); Player.Listener listener2 = mock(Player.Listener.class); ForwardingPlayer forwardingPlayer = new ForwardingPlayer(player); @@ -80,7 +78,7 @@ public class ForwardingPlayerTest { @Test public void onEvents_passesForwardingPlayerAsArgument() { - FakePlayer player = new FakePlayer(ApplicationProvider.getApplicationContext()); + FakePlayer player = new FakePlayer(); Player.Listener listener = mock(Player.Listener.class); ForwardingPlayer forwardingPlayer = new ForwardingPlayer(player); forwardingPlayer.addListener(listener); @@ -179,14 +177,10 @@ public class ForwardingPlayerTest { throw new IllegalStateException(); } - private static class FakePlayer extends StubExoPlayer { + private static class FakePlayer extends StubPlayer { private final Set listeners = new HashSet<>(); - public FakePlayer(Context context) { - super(context); - } - @Override public void addListener(Listener listener) { listeners.add(listener); diff --git a/libraries/common/src/test/java/androidx/media3/common/MetadataTest.java b/libraries/common/src/test/java/androidx/media3/common/MetadataTest.java index fa7c18253e..31ad83244a 100644 --- a/libraries/common/src/test/java/androidx/media3/common/MetadataTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/MetadataTest.java @@ -18,7 +18,7 @@ package androidx.media3.common; import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; -import androidx.media3.extractor.metadata.id3.BinaryFrame; +import androidx.media3.test.utils.FakeMetadataEntry; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,8 +30,7 @@ public class MetadataTest { @Test public void parcelable() { Metadata metadataToParcel = - new Metadata( - new BinaryFrame("id1", new byte[] {1}), new BinaryFrame("id2", new byte[] {2})); + new Metadata(new FakeMetadataEntry("id1"), new FakeMetadataEntry("id2")); Parcel parcel = Parcel.obtain(); metadataToParcel.writeToParcel(parcel, 0); diff --git a/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java b/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java index dc11f753b9..884891dc6c 100644 --- a/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java @@ -19,8 +19,6 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; import androidx.media3.common.TrackSelectionOverrides.TrackSelectionOverride; -import androidx.media3.exoplayer.trackselection.DefaultTrackSelector; -import androidx.media3.exoplayer.trackselection.DefaultTrackSelector.SelectionOverride; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -180,17 +178,4 @@ public final class TrackSelectionParametersTest { assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE); assertThat(parameters.viewportOrientationMayChange).isTrue(); } - - /** Tests {@link SelectionOverride}'s {@link Bundleable} implementation. */ - @Test - public void roundTripViaBundle_ofSelectionOverride_yieldsEqualInstance() { - SelectionOverride selectionOverrideToBundle = - new SelectionOverride(/* groupIndex= */ 1, /* tracks...= */ 2, 3); - - SelectionOverride selectionOverrideFromBundle = - DefaultTrackSelector.SelectionOverride.CREATOR.fromBundle( - selectionOverrideToBundle.toBundle()); - - assertThat(selectionOverrideFromBundle).isEqualTo(selectionOverrideToBundle); - } } diff --git a/libraries/common/src/test/java/androidx/media3/common/util/AtomicFileTest.java b/libraries/common/src/test/java/androidx/media3/common/util/AtomicFileTest.java index 324a6d325e..de7b5768c9 100644 --- a/libraries/common/src/test/java/androidx/media3/common/util/AtomicFileTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/util/AtomicFileTest.java @@ -39,7 +39,7 @@ public final class AtomicFileTest { @Before public void setUp() throws Exception { tempFolder = - Util.createTempDirectory(ApplicationProvider.getApplicationContext(), "ExoPlayerTest"); + Util.createTempDirectory(ApplicationProvider.getApplicationContext(), "AtomicFileTest"); file = new File(tempFolder, "atomicFile"); atomicFile = new AtomicFile(file); } diff --git a/libraries/common/src/test/java/androidx/media3/common/util/MediaFormatUtilTest.java b/libraries/common/src/test/java/androidx/media3/common/util/MediaFormatUtilTest.java index 6334121737..72cee1a71f 100644 --- a/libraries/common/src/test/java/androidx/media3/common/util/MediaFormatUtilTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/util/MediaFormatUtilTest.java @@ -32,7 +32,7 @@ import org.junit.runner.RunWith; public class MediaFormatUtilTest { @Test - public void createMediaFormatFromEmptyExoPlayerFormat_generatesExpectedEntries() { + public void createMediaFormatFromFormat_withEmptyFormat_generatesExpectedEntries() { MediaFormat mediaFormat = MediaFormatUtil.createMediaFormatFromFormat(new Format.Builder().build()); // Assert that no invalid keys are accidentally being populated. @@ -60,7 +60,7 @@ public class MediaFormatUtilTest { } @Test - public void createMediaFormatFromPopulatedExoPlayerFormat_generatesExpectedMediaFormatEntries() { + public void createMediaFormatFromFormat_withPopulatedFormat_generatesExpectedEntries() { Format format = new Format.Builder() .setAverageBitrate(1) @@ -146,7 +146,7 @@ public class MediaFormatUtilTest { } @Test - public void createMediaFormatWithExoPlayerPcmEncoding_containsExoPlayerSpecificEncoding() { + public void createMediaFormatFromFormat_withPcmEncoding_setsCustomPcmEncodingEntry() { Format format = new Format.Builder().setPcmEncoding(C.ENCODING_PCM_32BIT).build(); MediaFormat mediaFormat = MediaFormatUtil.createMediaFormatFromFormat(format); assertThat(mediaFormat.getInteger(MediaFormatUtil.KEY_EXO_PCM_ENCODING)) diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java index 4f20ae5b17..6a61eea7f3 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java @@ -1752,6 +1752,19 @@ public final class DefaultTrackSelectorTest { assertThat(trackGroupInfos.get(0).getTrackSupport(0)).isEqualTo(FORMAT_HANDLED); } + /** Tests {@link SelectionOverride}'s {@link Bundleable} implementation. */ + @Test + public void roundTripViaBundle_ofSelectionOverride_yieldsEqualInstance() { + SelectionOverride selectionOverrideToBundle = + new SelectionOverride(/* groupIndex= */ 1, /* tracks...= */ 2, 3); + + SelectionOverride selectionOverrideFromBundle = + DefaultTrackSelector.SelectionOverride.CREATOR.fromBundle( + selectionOverrideToBundle.toBundle()); + + assertThat(selectionOverrideFromBundle).isEqualTo(selectionOverrideToBundle); + } + private static void assertSelections(TrackSelectorResult result, TrackSelection[] expected) { assertThat(result.length).isEqualTo(expected.length); for (int i = 0; i < expected.length; i++) { diff --git a/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/FakePlayer.java b/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/FakeExoPlayer.java similarity index 97% rename from libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/FakePlayer.java rename to libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/FakeExoPlayer.java index 17a381b633..e44b74a964 100644 --- a/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/FakePlayer.java +++ b/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/FakeExoPlayer.java @@ -15,7 +15,6 @@ */ package androidx.media3.exoplayer.ima; -import android.content.Context; import android.os.Looper; import androidx.media3.common.C; import androidx.media3.common.MediaItem; @@ -27,10 +26,11 @@ import androidx.media3.common.TracksInfo; import androidx.media3.common.util.Clock; import androidx.media3.common.util.ListenerSet; import androidx.media3.common.util.Util; +import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.test.utils.StubExoPlayer; -/** A fake player for testing content/ad playback. */ -/* package */ final class FakePlayer extends StubExoPlayer { +/** A fake {@link ExoPlayer} for testing content/ad playback. */ +/* package */ final class FakeExoPlayer extends StubExoPlayer { private final ListenerSet listeners; private final Timeline.Period period; @@ -48,8 +48,7 @@ import androidx.media3.test.utils.StubExoPlayer; private int adGroupIndex; private int adIndexInAdGroup; - public FakePlayer(Context context) { - super(context); + public FakeExoPlayer() { listeners = new ListenerSet<>( Looper.getMainLooper(), diff --git a/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/ImaAdsLoaderTest.java b/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/ImaAdsLoaderTest.java index 6022fef6e7..7ae97242c1 100644 --- a/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/ImaAdsLoaderTest.java +++ b/libraries/exoplayer_ima/src/test/java/androidx/media3/exoplayer/ima/ImaAdsLoaderTest.java @@ -139,13 +139,13 @@ public final class ImaAdsLoaderTest { private ContentProgressProvider contentProgressProvider; private VideoAdPlayer videoAdPlayer; private TestAdsLoaderListener adsLoaderListener; - private FakePlayer fakePlayer; + private FakeExoPlayer fakePlayer; private ImaAdsLoader imaAdsLoader; @Before public void setUp() { setupMocks(); - fakePlayer = new FakePlayer(getApplicationContext()); + fakePlayer = new FakeExoPlayer(); adViewGroup = new FrameLayout(getApplicationContext()); View adOverlayView = new View(getApplicationContext()); adViewProvider = diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeMetadataEntry.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeMetadataEntry.java new file mode 100644 index 0000000000..de09491835 --- /dev/null +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/FakeMetadataEntry.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2021 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 + * + * http://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.test.utils; + +import static androidx.media3.common.util.Util.castNonNull; + +import android.os.Parcel; +import android.os.Parcelable; +import androidx.annotation.Nullable; +import androidx.media3.common.Metadata; +import androidx.media3.common.util.UnstableApi; + +/** A fake {@link Metadata.Entry}. */ +@UnstableApi +public final class FakeMetadataEntry implements Metadata.Entry { + + public final String data; + + public FakeMetadataEntry(String data) { + this.data = data; + } + + /* package */ FakeMetadataEntry(Parcel in) { + data = castNonNull(in.readString()); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + FakeMetadataEntry other = (FakeMetadataEntry) obj; + return data.equals(other.data); + } + + @Override + public int hashCode() { + return data.hashCode(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(data); + } + + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + + @Override + public FakeMetadataEntry createFromParcel(Parcel in) { + return new FakeMetadataEntry(in); + } + + @Override + public FakeMetadataEntry[] newArray(int size) { + return new FakeMetadataEntry[size]; + } + }; +} diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java index 3fb1592539..0b4310bc30 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubExoPlayer.java @@ -15,30 +15,13 @@ */ package androidx.media3.test.utils; -import android.content.Context; import android.os.Looper; -import android.view.Surface; -import android.view.SurfaceHolder; -import android.view.SurfaceView; -import android.view.TextureView; import androidx.annotation.Nullable; import androidx.media3.common.AudioAttributes; import androidx.media3.common.AuxEffectInfo; -import androidx.media3.common.BasePlayer; -import androidx.media3.common.DeviceInfo; import androidx.media3.common.Format; -import androidx.media3.common.MediaItem; -import androidx.media3.common.MediaMetadata; -import androidx.media3.common.PlaybackParameters; import androidx.media3.common.Player; import androidx.media3.common.PriorityTaskManager; -import androidx.media3.common.Timeline; -import androidx.media3.common.TrackGroupArray; -import androidx.media3.common.TrackSelectionArray; -import androidx.media3.common.TrackSelectionParameters; -import androidx.media3.common.TracksInfo; -import androidx.media3.common.VideoSize; -import androidx.media3.common.text.Cue; import androidx.media3.common.util.Clock; import androidx.media3.common.util.UnstableApi; import androidx.media3.exoplayer.DecoderCounters; @@ -60,11 +43,7 @@ import java.util.List; * from every method. */ @UnstableApi -public class StubExoPlayer extends BasePlayer implements ExoPlayer { - - public StubExoPlayer(Context context) { - super(); - } +public class StubExoPlayer extends StubPlayer implements ExoPlayer { @Override @Deprecated @@ -95,31 +74,16 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - public Looper getApplicationLooper() { - throw new UnsupportedOperationException(); - } - @Override public Clock getClock() { throw new UnsupportedOperationException(); } - @Override - public void addListener(Listener listener) { - throw new UnsupportedOperationException(); - } - @Override public void addListener(Player.EventListener listener) { throw new UnsupportedOperationException(); } - @Override - public void removeListener(Listener listener) { - throw new UnsupportedOperationException(); - } - @Override public void removeListener(Player.EventListener listener) { throw new UnsupportedOperationException(); @@ -150,68 +114,29 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - @State - public int getPlaybackState() { - throw new UnsupportedOperationException(); - } - - @Override - @PlaybackSuppressionReason - public int getPlaybackSuppressionReason() { - throw new UnsupportedOperationException(); - } - @Override public ExoPlaybackException getPlayerError() { throw new UnsupportedOperationException(); } - /** @deprecated Use {@link #prepare()} instead. */ @Deprecated @Override public void retry() { throw new UnsupportedOperationException(); } - /** - * @deprecated Use {@link #setMediaSource(MediaSource)} and {@link ExoPlayer#prepare()} instead. - */ - @Deprecated - @Override - public void prepare() { - throw new UnsupportedOperationException(); - } - - /** - * @deprecated Use {@link #setMediaSource(MediaSource)} and {@link ExoPlayer#prepare()} instead. - */ @Deprecated @Override public void prepare(MediaSource mediaSource) { throw new UnsupportedOperationException(); } - /** - * @deprecated Use {@link #setMediaSource(MediaSource, boolean)} and {@link ExoPlayer#prepare()} - * instead. - */ @Deprecated @Override public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) { throw new UnsupportedOperationException(); } - @Override - public void setMediaItems(List mediaItems, boolean resetPosition) { - throw new UnsupportedOperationException(); - } - - @Override - public void setMediaItems(List mediaItems, int startIndex, long startPositionMs) { - throw new UnsupportedOperationException(); - } - @Override public void setMediaSource(MediaSource mediaSource) { throw new UnsupportedOperationException(); @@ -243,11 +168,6 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - public void addMediaItems(int index, List mediaItems) { - throw new UnsupportedOperationException(); - } - @Override public void addMediaSource(MediaSource mediaSource) { throw new UnsupportedOperationException(); @@ -268,41 +188,6 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - public void moveMediaItems(int fromIndex, int toIndex, int newIndex) { - throw new UnsupportedOperationException(); - } - - @Override - public void removeMediaItems(int fromIndex, int toIndex) { - throw new UnsupportedOperationException(); - } - - @Override - public Commands getAvailableCommands() { - throw new UnsupportedOperationException(); - } - - @Override - public void setPlayWhenReady(boolean playWhenReady) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean getPlayWhenReady() { - throw new UnsupportedOperationException(); - } - - @Override - public void setRepeatMode(@RepeatMode int repeatMode) { - throw new UnsupportedOperationException(); - } - - @Override - public int getRepeatMode() { - throw new UnsupportedOperationException(); - } - @Override public void setShuffleOrder(ShuffleOrder shuffleOrder) { throw new UnsupportedOperationException(); @@ -383,51 +268,6 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - public void setShuffleModeEnabled(boolean shuffleModeEnabled) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean getShuffleModeEnabled() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isLoading() { - throw new UnsupportedOperationException(); - } - - @Override - public void seekTo(int mediaItemIndex, long positionMs) { - throw new UnsupportedOperationException(); - } - - @Override - public long getSeekBackIncrement() { - throw new UnsupportedOperationException(); - } - - @Override - public long getSeekForwardIncrement() { - throw new UnsupportedOperationException(); - } - - @Override - public long getMaxSeekToPreviousPosition() { - throw new UnsupportedOperationException(); - } - - @Override - public void setPlaybackParameters(PlaybackParameters playbackParameters) { - throw new UnsupportedOperationException(); - } - - @Override - public PlaybackParameters getPlaybackParameters() { - throw new UnsupportedOperationException(); - } - @Override public void setSeekParameters(@Nullable SeekParameters seekParameters) { throw new UnsupportedOperationException(); @@ -438,22 +278,6 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - public void stop() { - throw new UnsupportedOperationException(); - } - - @Deprecated - @Override - public void stop(boolean reset) { - throw new UnsupportedOperationException(); - } - - @Override - public void release() { - throw new UnsupportedOperationException(); - } - @Override public PlayerMessage createMessage(PlayerMessage.Target target) { throw new UnsupportedOperationException(); @@ -475,211 +299,6 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } - @Override - public TrackGroupArray getCurrentTrackGroups() { - throw new UnsupportedOperationException(); - } - - @Override - public TrackSelectionArray getCurrentTrackSelections() { - throw new UnsupportedOperationException(); - } - - @Override - public TracksInfo getCurrentTracksInfo() { - throw new UnsupportedOperationException(); - } - - @Override - public TrackSelectionParameters getTrackSelectionParameters() { - throw new UnsupportedOperationException(); - } - - @Override - public void setTrackSelectionParameters(TrackSelectionParameters parameters) { - throw new UnsupportedOperationException(); - } - - @Override - public MediaMetadata getMediaMetadata() { - throw new UnsupportedOperationException(); - } - - @Override - public MediaMetadata getPlaylistMetadata() { - throw new UnsupportedOperationException(); - } - - @Override - public void setPlaylistMetadata(MediaMetadata mediaMetadata) { - throw new UnsupportedOperationException(); - } - - @Override - public Timeline getCurrentTimeline() { - throw new UnsupportedOperationException(); - } - - @Override - public int getCurrentPeriodIndex() { - throw new UnsupportedOperationException(); - } - - @Override - public int getCurrentMediaItemIndex() { - throw new UnsupportedOperationException(); - } - - @Override - public long getDuration() { - throw new UnsupportedOperationException(); - } - - @Override - public long getCurrentPosition() { - throw new UnsupportedOperationException(); - } - - @Override - public long getBufferedPosition() { - throw new UnsupportedOperationException(); - } - - @Override - public long getTotalBufferedDuration() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isPlayingAd() { - throw new UnsupportedOperationException(); - } - - @Override - public int getCurrentAdGroupIndex() { - throw new UnsupportedOperationException(); - } - - @Override - public int getCurrentAdIndexInAdGroup() { - throw new UnsupportedOperationException(); - } - - @Override - public long getContentPosition() { - throw new UnsupportedOperationException(); - } - - @Override - public long getContentBufferedPosition() { - throw new UnsupportedOperationException(); - } - - @Override - public AudioAttributes getAudioAttributes() { - throw new UnsupportedOperationException(); - } - - @Override - public void setVolume(float volume) { - throw new UnsupportedOperationException(); - } - - @Override - public float getVolume() { - throw new UnsupportedOperationException(); - } - - @Override - public void clearVideoSurface() { - throw new UnsupportedOperationException(); - } - - @Override - public void clearVideoSurface(@Nullable Surface surface) { - throw new UnsupportedOperationException(); - } - - @Override - public void setVideoSurface(@Nullable Surface surface) { - throw new UnsupportedOperationException(); - } - - @Override - public void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { - throw new UnsupportedOperationException(); - } - - @Override - public void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { - throw new UnsupportedOperationException(); - } - - @Override - public void setVideoSurfaceView(@Nullable SurfaceView surfaceView) { - throw new UnsupportedOperationException(); - } - - @Override - public void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) { - throw new UnsupportedOperationException(); - } - - @Override - public void setVideoTextureView(@Nullable TextureView textureView) { - throw new UnsupportedOperationException(); - } - - @Override - public void clearVideoTextureView(@Nullable TextureView textureView) { - throw new UnsupportedOperationException(); - } - - @Override - public VideoSize getVideoSize() { - throw new UnsupportedOperationException(); - } - - @Override - public List getCurrentCues() { - throw new UnsupportedOperationException(); - } - - @Override - public DeviceInfo getDeviceInfo() { - throw new UnsupportedOperationException(); - } - - @Override - public int getDeviceVolume() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isDeviceMuted() { - throw new UnsupportedOperationException(); - } - - @Override - public void setDeviceVolume(int volume) { - throw new UnsupportedOperationException(); - } - - @Override - public void increaseDeviceVolume() { - throw new UnsupportedOperationException(); - } - - @Override - public void decreaseDeviceVolume() { - throw new UnsupportedOperationException(); - } - - @Override - public void setDeviceMuted(boolean muted) { - throw new UnsupportedOperationException(); - } - @Override public void setForegroundMode(boolean foregroundMode) { throw new UnsupportedOperationException(); diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubPlayer.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubPlayer.java new file mode 100644 index 0000000000..ce2411f93a --- /dev/null +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/StubPlayer.java @@ -0,0 +1,401 @@ +/* + * Copyright (C) 2017 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 + * + * http://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.test.utils; + +import android.os.Looper; +import android.view.Surface; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.TextureView; +import androidx.annotation.Nullable; +import androidx.media3.common.AudioAttributes; +import androidx.media3.common.BasePlayer; +import androidx.media3.common.DeviceInfo; +import androidx.media3.common.MediaItem; +import androidx.media3.common.MediaMetadata; +import androidx.media3.common.PlaybackException; +import androidx.media3.common.PlaybackParameters; +import androidx.media3.common.Player; +import androidx.media3.common.Timeline; +import androidx.media3.common.TrackGroupArray; +import androidx.media3.common.TrackSelectionArray; +import androidx.media3.common.TrackSelectionParameters; +import androidx.media3.common.TracksInfo; +import androidx.media3.common.VideoSize; +import androidx.media3.common.text.Cue; +import androidx.media3.common.util.UnstableApi; +import java.util.List; + +/** + * An abstract {@link Player} implementation that throws {@link UnsupportedOperationException} from + * every method. + */ +@UnstableApi +public class StubPlayer extends BasePlayer { + + @Override + public Looper getApplicationLooper() { + throw new UnsupportedOperationException(); + } + + @Override + public void addListener(Listener listener) { + throw new UnsupportedOperationException(); + } + + @Override + public void removeListener(Listener listener) { + throw new UnsupportedOperationException(); + } + + @Override + @State + public int getPlaybackState() { + throw new UnsupportedOperationException(); + } + + @Override + @PlaybackSuppressionReason + public int getPlaybackSuppressionReason() { + throw new UnsupportedOperationException(); + } + + @Override + public PlaybackException getPlayerError() { + throw new UnsupportedOperationException(); + } + + @Override + public void prepare() { + throw new UnsupportedOperationException(); + } + + @Override + public void setMediaItems(List mediaItems, boolean resetPosition) { + throw new UnsupportedOperationException(); + } + + @Override + public void setMediaItems(List mediaItems, int startIndex, long startPositionMs) { + throw new UnsupportedOperationException(); + } + + @Override + public void addMediaItems(int index, List mediaItems) { + throw new UnsupportedOperationException(); + } + + @Override + public void moveMediaItems(int fromIndex, int toIndex, int newIndex) { + throw new UnsupportedOperationException(); + } + + @Override + public void removeMediaItems(int fromIndex, int toIndex) { + throw new UnsupportedOperationException(); + } + + @Override + public Commands getAvailableCommands() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPlayWhenReady(boolean playWhenReady) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getPlayWhenReady() { + throw new UnsupportedOperationException(); + } + + @Override + public void setRepeatMode(@RepeatMode int repeatMode) { + throw new UnsupportedOperationException(); + } + + @Override + public int getRepeatMode() { + throw new UnsupportedOperationException(); + } + + @Override + public void setShuffleModeEnabled(boolean shuffleModeEnabled) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getShuffleModeEnabled() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isLoading() { + throw new UnsupportedOperationException(); + } + + @Override + public void seekTo(int mediaItemIndex, long positionMs) { + throw new UnsupportedOperationException(); + } + + @Override + public long getSeekBackIncrement() { + throw new UnsupportedOperationException(); + } + + @Override + public long getSeekForwardIncrement() { + throw new UnsupportedOperationException(); + } + + @Override + public long getMaxSeekToPreviousPosition() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPlaybackParameters(PlaybackParameters playbackParameters) { + throw new UnsupportedOperationException(); + } + + @Override + public PlaybackParameters getPlaybackParameters() { + throw new UnsupportedOperationException(); + } + + @Override + public void stop() { + throw new UnsupportedOperationException(); + } + + @Deprecated + @Override + public void stop(boolean reset) { + throw new UnsupportedOperationException(); + } + + @Override + public void release() { + throw new UnsupportedOperationException(); + } + + @Override + public TrackGroupArray getCurrentTrackGroups() { + throw new UnsupportedOperationException(); + } + + @Override + public TrackSelectionArray getCurrentTrackSelections() { + throw new UnsupportedOperationException(); + } + + @Override + public TracksInfo getCurrentTracksInfo() { + throw new UnsupportedOperationException(); + } + + @Override + public TrackSelectionParameters getTrackSelectionParameters() { + throw new UnsupportedOperationException(); + } + + @Override + public void setTrackSelectionParameters(TrackSelectionParameters parameters) { + throw new UnsupportedOperationException(); + } + + @Override + public MediaMetadata getMediaMetadata() { + throw new UnsupportedOperationException(); + } + + @Override + public MediaMetadata getPlaylistMetadata() { + throw new UnsupportedOperationException(); + } + + @Override + public void setPlaylistMetadata(MediaMetadata mediaMetadata) { + throw new UnsupportedOperationException(); + } + + @Override + public Timeline getCurrentTimeline() { + throw new UnsupportedOperationException(); + } + + @Override + public int getCurrentPeriodIndex() { + throw new UnsupportedOperationException(); + } + + @Override + public int getCurrentMediaItemIndex() { + throw new UnsupportedOperationException(); + } + + @Override + public long getDuration() { + throw new UnsupportedOperationException(); + } + + @Override + public long getCurrentPosition() { + throw new UnsupportedOperationException(); + } + + @Override + public long getBufferedPosition() { + throw new UnsupportedOperationException(); + } + + @Override + public long getTotalBufferedDuration() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isPlayingAd() { + throw new UnsupportedOperationException(); + } + + @Override + public int getCurrentAdGroupIndex() { + throw new UnsupportedOperationException(); + } + + @Override + public int getCurrentAdIndexInAdGroup() { + throw new UnsupportedOperationException(); + } + + @Override + public long getContentPosition() { + throw new UnsupportedOperationException(); + } + + @Override + public long getContentBufferedPosition() { + throw new UnsupportedOperationException(); + } + + @Override + public AudioAttributes getAudioAttributes() { + throw new UnsupportedOperationException(); + } + + @Override + public void setVolume(float volume) { + throw new UnsupportedOperationException(); + } + + @Override + public float getVolume() { + throw new UnsupportedOperationException(); + } + + @Override + public void clearVideoSurface() { + throw new UnsupportedOperationException(); + } + + @Override + public void clearVideoSurface(@Nullable Surface surface) { + throw new UnsupportedOperationException(); + } + + @Override + public void setVideoSurface(@Nullable Surface surface) { + throw new UnsupportedOperationException(); + } + + @Override + public void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { + throw new UnsupportedOperationException(); + } + + @Override + public void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { + throw new UnsupportedOperationException(); + } + + @Override + public void setVideoSurfaceView(@Nullable SurfaceView surfaceView) { + throw new UnsupportedOperationException(); + } + + @Override + public void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) { + throw new UnsupportedOperationException(); + } + + @Override + public void setVideoTextureView(@Nullable TextureView textureView) { + throw new UnsupportedOperationException(); + } + + @Override + public void clearVideoTextureView(@Nullable TextureView textureView) { + throw new UnsupportedOperationException(); + } + + @Override + public VideoSize getVideoSize() { + throw new UnsupportedOperationException(); + } + + @Override + public List getCurrentCues() { + throw new UnsupportedOperationException(); + } + + @Override + public DeviceInfo getDeviceInfo() { + throw new UnsupportedOperationException(); + } + + @Override + public int getDeviceVolume() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isDeviceMuted() { + throw new UnsupportedOperationException(); + } + + @Override + public void setDeviceVolume(int volume) { + throw new UnsupportedOperationException(); + } + + @Override + public void increaseDeviceVolume() { + throw new UnsupportedOperationException(); + } + + @Override + public void decreaseDeviceVolume() { + throw new UnsupportedOperationException(); + } + + @Override + public void setDeviceMuted(boolean muted) { + throw new UnsupportedOperationException(); + } +}