void prepareVideo(Uri videoUri, Either<Surface, SurfaceHolder> surface) { requestAudioFocus(); release(); try { currentState = PlaybackState.PREPARING; mediaPlayer = createAndBindMediaPlayer(surface, videoUri); mediaPlayer.prepareAsync(); } catch (IOException | IllegalArgumentException | IllegalStateException ex) { reportCreationError(ex, videoUri); } }
@Test public void givenMediaPlayerIsPrepared_whenReleasing_thenReleasesMediaPlayer() { givenMediaPlayerIsPrepared(); facade.release(); verify(mediaPlayer).reset(); verify(mediaPlayer).release(); }
private void reset() { delayedActionExecutor.clearAllActions(); listenersHolder.resetState(); loadTimeout.cancel(); heart.stopBeatingHeart(); mediaPlayer.release(); destroySurfaceByHidingVideoContainer(); }
@Test public void givenInitialised_whenCallingOnError_thenPlayerResourcesAreReleased_andNotListeners() { player.initialise(); ArgumentCaptor<NoPlayer.ErrorListener> errorListenerCaptor = ArgumentCaptor.forClass(NoPlayer.ErrorListener.class); verify(listenersHolder).addErrorListener(errorListenerCaptor.capture()); NoPlayer.ErrorListener errorListener = errorListenerCaptor.getValue(); errorListener.onError(mock(NoPlayer.PlayerError.class)); verify(delayedActionExecutor).clearAllActions(); verify(listenersHolder).resetState(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(listenersHolder, never()).clear(); verify(stateChangedListener, never()).onVideoStopped(); }
@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 whenStopping_thenPlayerResourcesAreReleased_andNotListeners() { player.stop(); verify(delayedActionExecutor).clearAllActions(); verify(listenersHolder).resetState(); verify(stateChangedListener).onVideoStopped(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(listenersHolder, never()).clear(); }
@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 givenAttachedPlayerView_whenStopping_thenPlayerResourcesAreReleased_andNotListeners() { player.attach(playerView); player.stop(); verify(delayedActionExecutor).clearAllActions(); verify(listenersHolder).resetState(); verify(stateChangedListener).onVideoStopped(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(containerView).setVisibility(View.GONE); verify(listenersHolder, never()).clear(); }
@Test public void givenAttachedPlayerView_whenReleasing_thenPlayerResourcesAreReleased() { player.attach(playerView); player.release(); verify(delayedActionExecutor).clearAllActions(); verify(listenersHolder).resetState(); verify(stateChangedListener).onVideoStopped(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(containerView).setVisibility(View.GONE); verify(listenersHolder).clear(); } }
@Test public void whenReleasing_thenPlayerResourcesAreReleased() { player.release(); verify(delayedActionExecutor).clearAllActions(); verify(listenersHolder).resetState(); verify(stateChangedListener).onVideoStopped(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(listenersHolder).clear(); }
@Test public void givenPlayerHasPlayedVideo_whenLoadingVideo_thenPlayerIsReleased_andNotListeners() { given(mediaPlayer.hasPlayedContent()).willReturn(true); player.loadVideo(URI, OPTIONS); verify(stateChangedListener).onVideoStopped(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(listenersHolder, never()).clear(); }
@Test public void givenPlayerHasPlayedVideo_whenLoadingVideoWithTimeout_thenPlayerResourcesAreReleased_andNotListeners() { given(mediaPlayer.hasPlayedContent()).willReturn(true); player.loadVideoWithTimeout(URI, OPTIONS, ANY_TIMEOUT, ANY_LOAD_TIMEOUT_CALLBACK); verify(stateChangedListener).onVideoStopped(); verify(loadTimeout).cancel(); verify(heart).stopBeatingHeart(); verify(mediaPlayer).release(); verify(listenersHolder, never()).clear(); }