@Override public void attach(PlayerView playerView) { containerView = playerView.getContainerView(); buggyVideoDriverPreventer.preventVideoDriverBug(this, containerView); listenersHolder.addVideoSizeChangedListener(playerView.getVideoSizeChangedListener()); listenersHolder.addStateChangedListener(playerView.getStateChangedListener()); PlayerSurfaceHolder playerSurfaceHolder = playerView.getPlayerSurfaceHolder(); surfaceRequester = playerSurfaceHolder.getSurfaceRequester(); }
@Override public boolean hideSubtitleTrack() throws IllegalStateException { playerView.hideSubtitles(); removeSubtitleRenderer(); return exoPlayer.clearSubtitleTrackSelection(); }
@Override public void onCues(List<Cue> cues) { TextCues textCues = ExoPlayerCueMapper.map(cues); playerView.setSubtitleCue(textCues); } };
@Override public void attach(PlayerView playerView) { this.playerView = playerView; listenersHolder.addStateChangedListener(playerView.getStateChangedListener()); listenersHolder.addVideoSizeChangedListener(playerView.getVideoSizeChangedListener()); }
@Override public void detach(PlayerView playerView) { clearSurfaceHolderCallbacks(); listenersHolder.removeStateChangedListener(playerView.getStateChangedListener()); listenersHolder.removeVideoSizeChangedListener(playerView.getVideoSizeChangedListener()); buggyVideoDriverPreventer.clear(playerView.getContainerView()); surfaceRequester = null; containerView = null; }
@Test public void givenPlayerIsInitialised_whenAttachingPlayerView_thenAddsPlayerViewVideoSizeChangedListenerToListenersHolder() { player.initialise(); player.attach(playerView); ArgumentCaptor<NoPlayer.VideoSizeChangedListener> argumentCaptor = ArgumentCaptor.forClass(NoPlayer.VideoSizeChangedListener.class); verify(listenersHolder, times(2)).addVideoSizeChangedListener(argumentCaptor.capture()); NoPlayer.VideoSizeChangedListener videoSizeChangedListener = argumentCaptor.getAllValues().get(1); assertThat(videoSizeChangedListener).isSameAs(playerView.getVideoSizeChangedListener()); }
@Override public void loadVideo(final Uri uri, final Options options) { if (exoPlayer.hasPlayedContent()) { stop(); } assertPlayerViewIsAttached(); exoPlayer.loadVideo(playerView.getPlayerSurfaceHolder(), drmSessionCreator, uri, options, forwarder, mediaCodecSelector); createSurfaceByShowingVideoContainer(); }
@Test public void whenLoadingVideo_thenAddsStateChangedListenerToListenersHolder() { player.loadVideo(uri, OPTIONS); verify(listenersHolder).addStateChangedListener(playerView.getStateChangedListener()); }
private void destroySurfaceByHidingVideoContainer() { if (playerView != null) { playerView.getContainerView().setVisibility(View.GONE); } }
@Override public boolean showSubtitleTrack(PlayerSubtitleTrack subtitleTrack) throws IllegalStateException { setSubtitleRendererOutput(); playerView.showSubtitles(); return exoPlayer.selectSubtitleTrack(subtitleTrack); }
@Override public void detach(PlayerView playerView) { listenersHolder.removeStateChangedListener(playerView.getStateChangedListener()); listenersHolder.removeVideoSizeChangedListener(playerView.getVideoSizeChangedListener()); removeSubtitleRenderer(); this.playerView = null; }
@Test public void whenLoadingVideo_thenAddsVideoSizeChangedListenerToListenersHolder() { player.loadVideo(uri, OPTIONS); verify(listenersHolder).addVideoSizeChangedListener(playerView.getVideoSizeChangedListener()); }
@Test public void whenLoadingVideo_thenDelegatesLoadingToFacade() { player.attach(playerView); player.loadVideo(uri, OPTIONS); verify(exoPlayerFacade).loadVideo(playerView.getPlayerSurfaceHolder(), drmSessionCreator, uri, OPTIONS, forwarder, mediaCodecSelector); }
@Test public void whenDetachingPlayerView_thenRemovesStateChangedListener() { PlayerView playerView = mock(PlayerView.class); NoPlayer.StateChangedListener stateChangedListener = mock(NoPlayer.StateChangedListener.class); given(playerView.getStateChangedListener()).willReturn(stateChangedListener); player.detach(playerView); verify(listenersHolder).removeStateChangedListener(stateChangedListener); }
private void createSurfaceByShowingVideoContainer() { playerView.getContainerView().setVisibility(View.VISIBLE); }
@Test public void whenSelectingSubtitlesTrack_thenShowsPlayerSubtitlesView() { PlayerSubtitleTrack playerSubtitleTrack = PlayerSubtitleTrackFixture.anInstance().build(); player.showSubtitleTrack(playerSubtitleTrack); verify(playerView).showSubtitles(); }
@Before public void setUp() { given(playerView.getPlayerSurfaceHolder()).willReturn(playerSurfaceHolder); given(playerView.getStateChangedListener()).willReturn(stateChangeListener); given(playerView.getVideoSizeChangedListener()).willReturn(videoSizeChangedListener); given(playerView.getContainerView()).willReturn(containerView); given(listenersHolder.getErrorListeners()).willReturn(errorListener); given(listenersHolder.getPreparedListeners()).willReturn(preparedListener); given(listenersHolder.getBufferStateListeners()).willReturn(bufferStateListener); given(listenersHolder.getCompletionListeners()).willReturn(completionListener); given(listenersHolder.getStateChangedListeners()).willReturn(stateChangedListener); given(listenersHolder.getInfoListeners()).willReturn(infoListener); given(listenersHolder.getVideoSizeChangedListeners()).willReturn(videoSizeChangedListener); given(listenersHolder.getBitrateChangedListeners()).willReturn(bitrateChangedListener); player = new ExoPlayerTwoImpl( exoPlayerFacade, listenersHolder, forwarder, loadTimeout, heart, drmSessionCreator, mediaCodecSelector ); } }
@Test public void whenDetachingPlayerView_thenRemovesVideoSizeChangedListener() { PlayerView playerView = mock(PlayerView.class); NoPlayer.VideoSizeChangedListener videoSizeChangedListener = mock(NoPlayer.VideoSizeChangedListener.class); given(playerView.getVideoSizeChangedListener()).willReturn(videoSizeChangedListener); player.detach(playerView); verify(listenersHolder).removeVideoSizeChangedListener(videoSizeChangedListener); }
@Test public void whenLoadingVideoWithTimeout_thenDelegatesLoadingToFacade() { player.attach(playerView); player.loadVideoWithTimeout(uri, OPTIONS, ANY_TIMEOUT, ANY_LOAD_TIMEOUT_CALLBACK); verify(exoPlayerFacade).loadVideo(playerView.getPlayerSurfaceHolder(), drmSessionCreator, uri, OPTIONS, forwarder, mediaCodecSelector); }
@Test public void whenAttachingPlayerView_thenAddsStateChangedListener() { NoPlayer.StateChangedListener stateChangedListener = mock(NoPlayer.StateChangedListener.class); given(playerView.getStateChangedListener()).willReturn(stateChangedListener); player.attach(playerView); verify(listenersHolder).addStateChangedListener(stateChangedListener); }