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); }
private void assertIsInPlaybackState() throws IllegalStateException { if (!playbackStateChecker.isInPlaybackState(mediaPlayer, currentState)) { throw new IllegalStateException("Video must be loaded and not in an error state before trying to interact with the player"); } }
boolean isPlaying() { return playbackStateChecker.isPlaying(mediaPlayer, currentState); }
@Test public void whenCheckingIsPlaying_thenReturnsExpectedState() { PlaybackStateChecker playbackStateChecker = new PlaybackStateChecker(); boolean inPlaybackState = playbackStateChecker.isInPlaybackState(mediaPlayer, playbackState); assertThat(inPlaybackState).isEqualTo(expectedIsPlaying); } }
@Test public void whenCheckingIsInPlaybackState_thenReturnsExpectedState() { PlaybackStateChecker playbackStateChecker = new PlaybackStateChecker(); boolean inPlaybackState = playbackStateChecker.isInPlaybackState(mediaPlayer, playbackState); assertThat(inPlaybackState).isEqualTo(expectedIsInPlaybackState); } }
boolean isPlaying(MediaPlayer mediaPlayer, PlaybackState playbackState) { return isInPlaybackState(mediaPlayer, playbackState) && mediaPlayer.isPlaying(); }
@Test public void givenMediaPlayerIsNotPlaying_whenPausing_thenDoesNotPausesMediaPlayer() { givenMediaPlayerIsPrepared(); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_NOT_PLAYING); facade.pause(); verify(mediaPlayer, never()).pause(); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenPausing_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.pause(); verify(mediaPlayer).pause(); }
@Test public void givenMediaPlayerIsPlaying_whenPausing_thenPausesMediaPlayer() { givenMediaPlayerIsPrepared(); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_PLAYING); facade.pause(); verify(mediaPlayer).pause(); }
@Test public void givenMediaPlayerIsInPlaybackState_whenSeeking_thenSeeksToPosition() { givenMediaPlayerIsPrepared(); given(playbackStateChecker.isInPlaybackState(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_IN_PLAYBACK_STATE); facade.seekTo(TEN_SECONDS_IN_MILLIS); verify(mediaPlayer).seekTo(TEN_SECONDS_IN_MILLIS); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenSelectingAudioTracks_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_PLAYING); facade.selectAudioTrack(mock(PlayerAudioTrack.class)); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenSettingOnSeekCompleteListener_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.setOnSeekCompleteListener(mock(MediaPlayer.OnSeekCompleteListener.class)); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenSelectingSubtitleTrack_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_PLAYING); facade.selectSubtitleTrack(mock(PlayerSubtitleTrack.class)); }
@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_whenGettingAudioTracks_thenThrowsIllegalStateException() { thrown.expect(ExceptionMatcher.matches(ERROR_MESSAGE, IllegalStateException.class)); given(playbackStateChecker.isPlaying(eq(mediaPlayer), any(PlaybackStateChecker.PlaybackState.class))) .willReturn(IS_PLAYING); facade.getAudioTracks(); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenGettingPosition_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.currentPositionInMillis(); }
@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_whenGettingDuration_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.mediaDurationInMillis(); }
@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(); }
@Test public void givenMediaPlayerIsNotInPlaybackState_whenSeeking_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.seekTo(TEN_SECONDS_IN_MILLIS); }