@Override public boolean hideSubtitleTrack() throws IllegalStateException { return mediaPlayer.clearSubtitleTrack(); }
@Override public long playheadPositionInMillis() throws IllegalStateException { return isSeeking() ? seekToPositionInMillis : mediaPlayer.currentPositionInMillis(); }
@Override public AudioTracks getAudioTracks() throws IllegalStateException { return mediaPlayer.getAudioTracks(); }
@Test public void givenPlayerHasNotPlayedVideo_whenLoadingVideoWithTimeout_thenPlayerResourcesAreNotReleased() { given(mediaPlayer.hasPlayedContent()).willReturn(false); player.loadVideoWithTimeout(URI, OPTIONS, ANY_TIMEOUT, ANY_LOAD_TIMEOUT_CALLBACK); verify(stateChangedListener, never()).onVideoStopped(); verify(loadTimeout, never()).cancel(); verify(heart, never()).stopBeatingHeart(); verify(mediaPlayer, never()).release(); }
@Test public void whenStartingPlayAtVideoPosition_thenMediaPlayerStarts() { given(mediaPlayer.currentPositionInMillis()).willReturn((int) BEGINNING_POSITION); player.playAt(BEGINNING_POSITION); verify(mediaPlayer).start(surface); }
@Override public float getVolume() { return mediaPlayer.getVolume(); }
@Override public int bufferPercentage() throws IllegalStateException { return mediaPlayer.getBufferPercentage(); }
@Override public List<PlayerSubtitleTrack> getSubtitleTracks() throws IllegalStateException { return mediaPlayer.getSubtitleTracks(); }
@Override public List<PlayerVideoTrack> getVideoTracks() throws IllegalStateException { return mediaPlayer.getVideoTracks(); }
@Override public Optional<PlayerVideoTrack> getSelectedVideoTrack() throws IllegalStateException { return mediaPlayer.getSelectedVideoTrack(); }
static AndroidMediaPlayerFacade newInstance(Context context, MediaPlayerForwarder forwarder) { TrackInfosFactory trackInfosFactory = new TrackInfosFactory(); AndroidMediaPlayerAudioTrackSelector trackSelector = new AndroidMediaPlayerAudioTrackSelector(trackInfosFactory); PlaybackStateChecker playbackStateChecker = new PlaybackStateChecker(); AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); MediaPlayerCreator mediaPlayerCreator = new MediaPlayerCreator(); return new AndroidMediaPlayerFacade(context, forwarder, audioManager, trackSelector, playbackStateChecker, mediaPlayerCreator); }
@Override public void loadVideo(final Uri uri, final Options options) { if (mediaPlayer.hasPlayedContent()) { stop(); } assertPlayerViewIsAttached(); createSurfaceByShowingVideoContainer(); listenersHolder.getBufferStateListeners().onBufferStarted(); requestSurface(new SurfaceRequester.Callback() { @Override public void onSurfaceReady(Either<Surface, SurfaceHolder> surface) { mediaPlayer.prepareVideo(uri, surface); } }); }
@Test public void givenPlayerHasNotPlayedVideo_whenLoadingVideo_thenPlayerResourcesAreNotReleased() { given(mediaPlayer.hasPlayedContent()).willReturn(false); player.loadVideo(URI, OPTIONS); verify(stateChangedListener, never()).onVideoStopped(); verify(loadTimeout, never()).cancel(); verify(heart, never()).stopBeatingHeart(); verify(mediaPlayer, never()).release(); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenGettingVolume_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); facade.getVolume(); }
@Test public void givenBoundBufferListener_andMediaPlayerIsPrepared_whenBuffering_thenBufferPercentageIsUpdated() { givenMediaPlayerIsPrepared(); ArgumentCaptor<MediaPlayer.OnBufferingUpdateListener> argumentCaptor = ArgumentCaptor.forClass(MediaPlayer.OnBufferingUpdateListener.class); verify(mediaPlayer).setOnBufferingUpdateListener(argumentCaptor.capture()); argumentCaptor.getValue().onBufferingUpdate(mediaPlayer, TEN_PERCENT); int bufferPercentage = facade.getBufferPercentage(); assertThat(bufferPercentage).isEqualTo(TEN_PERCENT); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenGettingSubtitleTracks_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); given(playbackStateChecker.isInPlaybackState(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_NOT_IN_PLAYBACK_STATE); facade.getSubtitleTracks(); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenGettingVideoTracks_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_PLAYING); facade.getVideoTracks(); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenGettingSelectedVideoTrack_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_PLAYING); facade.getSelectedVideoTrack(); }
@Before public void setUp() { NoPlayerLog.setLoggingEnabled(false); facade = new AndroidMediaPlayerFacade(context, forwarder, audioManager, trackSelector, playbackStateChecker, mediaPlayerCreator); given(mediaPlayerCreator.createMediaPlayer()).willReturn(mediaPlayer); given(playbackStateChecker.isInPlaybackState(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))).willReturn(IS_IN_PLAYBACK_STATE); eitherSurface = Either.left(surface); givenSurfaceRequesterReturns(eitherSurface); given(forwarder.onPreparedListener()).willReturn(preparedListener); given(forwarder.onCompletionListener()).willReturn(completionListener); given(forwarder.onErrorListener()).willReturn(errorListener); given(forwarder.onSizeChangedListener()).willReturn(videoSizeChangedListener); }