void preventVideoDriverBug(NoPlayer player, View containerView) { if (videoDriverCanBeBuggy()) { attemptToCorrectMediaPlayerStatus(player, containerView); } }
@Test public void givenVideoDriverIsNotBuggy_whenPreventingVideoDriverBug_thenNothingHappens() { when(mediaPlayerTypeReader.getPlayerType()).thenReturn(AndroidMediaPlayerType.NU); buggyVideoDriverPreventer.preventVideoDriverBug(player, videoContainer); verifyZeroInteractions(videoContainer); }
@Test public void whenDetachingPlayerView_thenClearsVideoDriverBugPreventer() { PlayerView playerView = mock(PlayerView.class); View containerView = mock(View.class); given(playerView.getContainerView()).willReturn(containerView); player.detach(playerView); verify(buggyVideoDriverPreventer).clear(containerView); }
@Before public void setUp() { buggyVideoDriverPreventer = new BuggyVideoDriverPreventer(mediaPlayerTypeReader); }
@Test public void givenVideoDriverCanBeBuggy_whenPreventingVideoDriverBug_thenABuggyDriverLayoutListenerIsAddedToTheVideoContainer() { when(mediaPlayerTypeReader.getPlayerType()).thenReturn(AndroidMediaPlayerType.AWESOME); buggyVideoDriverPreventer.preventVideoDriverBug(player, videoContainer); verify(videoContainer).addOnLayoutChangeListener(any(OnPotentialBuggyDriverLayoutListener.class)); } }
@Override public void detach(PlayerView playerView) { clearSurfaceHolderCallbacks(); listenersHolder.removeStateChangedListener(playerView.getStateChangedListener()); listenersHolder.removeVideoSizeChangedListener(playerView.getVideoSizeChangedListener()); buggyVideoDriverPreventer.clear(playerView.getContainerView()); surfaceRequester = null; containerView = null; }
public AndroidMediaPlayerImpl create(Context context) { LoadTimeout loadTimeout = new LoadTimeout(new SystemClock(), handler); MediaPlayerForwarder forwarder = new MediaPlayerForwarder(); AndroidMediaPlayerFacade facade = AndroidMediaPlayerFacade.newInstance(context, forwarder); PlayerListenersHolder listenersHolder = new PlayerListenersHolder(); CheckBufferHeartbeatCallback bufferHeartbeatCallback = new CheckBufferHeartbeatCallback(); Heart heart = Heart.newInstance(handler); MediaPlayerTypeReader mediaPlayerTypeReader = new MediaPlayerTypeReader(new SystemProperties(), Build.VERSION.SDK_INT); DelayedActionExecutor delayedActionExecutor = new DelayedActionExecutor(handler, new HashMap<DelayedActionExecutor.Action, Runnable>()); BuggyVideoDriverPreventer preventer = new BuggyVideoDriverPreventer(mediaPlayerTypeReader); MediaPlayerInformation mediaPlayerInformation = new MediaPlayerInformation(mediaPlayerTypeReader); return new AndroidMediaPlayerImpl( mediaPlayerInformation, facade, forwarder, listenersHolder, bufferHeartbeatCallback, loadTimeout, heart, delayedActionExecutor, preventer ); } }
@Test public void whenAttachingPlayerView_thenPreventsVideoDriverBug() { player.attach(playerView); verify(buggyVideoDriverPreventer).preventVideoDriverBug(player, containerView); }
@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(); }