private boolean videoDriverCanBeBuggy() { return mediaPlayerTypeReader.getPlayerType() == AndroidMediaPlayerType.AWESOME; }
private AndroidMediaPlayerType getPlayerTypeLollipop() throws SystemProperties.MissingSystemPropertiesException { // NuPlayer is enabled if property is false or absent // http://androidxref.com/5.0.0_r2/xref/frameworks/av/media/libmediaplayerservice/MediaPlayerFactory.cpp#63 boolean isAwesomePlayerEnabled = getBooleanProp(PROP_USE_AWESOME_PLAYER_PERSIST) || getBooleanProp(PROP_USE_AWESOME_PLAYER_MEDIA); return isAwesomePlayerEnabled ? AndroidMediaPlayerType.AWESOME : AndroidMediaPlayerType.NU; }
AndroidMediaPlayerType getPlayerType() { AndroidMediaPlayerType playerType; try { playerType = getMediaPlayerType(); } catch (SystemProperties.MissingSystemPropertiesException e) { playerType = AndroidMediaPlayerType.UNKNOWN; } return playerType; }
private AndroidMediaPlayerType getMediaPlayerType() throws SystemProperties.MissingSystemPropertiesException { return deviceOSVersion >= Build.VERSION_CODES.LOLLIPOP ? getPlayerTypeLollipop() : getPlayerTypePreLollipop(); }
private void givenTheUserIsOnOSVersion(int deviceOSVersion) { checker = new MediaPlayerTypeReader(systemProperties, deviceOSVersion); }
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 ); } }
@Override public String getName() { return "MediaPlayer: " + mediaPlayerTypeReader.getPlayerType().getName(); } }
private AndroidMediaPlayerType getPlayerTypePreLollipop() throws SystemProperties.MissingSystemPropertiesException { // NuPlayer is disabled if property is false or absent // http://androidxref.com/4.4.4_r1/xref/frameworks/av/media/libmediaplayerservice/MediaPlayerFactory.cpp#63 return getBooleanProp(PROP_USE_NU_PLAYER) ? AndroidMediaPlayerType.NU : AndroidMediaPlayerType.AWESOME; }
@Test public void givenVideoDriverIsNotBuggy_whenPreventingVideoDriverBug_thenNothingHappens() { when(mediaPlayerTypeReader.getPlayerType()).thenReturn(AndroidMediaPlayerType.NU); buggyVideoDriverPreventer.preventVideoDriverBug(player, videoContainer); verifyZeroInteractions(videoContainer); }
@Test public void givenVideoDriverCanBeBuggy_whenPreventingVideoDriverBug_thenABuggyDriverLayoutListenerIsAddedToTheVideoContainer() { when(mediaPlayerTypeReader.getPlayerType()).thenReturn(AndroidMediaPlayerType.AWESOME); buggyVideoDriverPreventer.preventVideoDriverBug(player, videoContainer); verify(videoContainer).addOnLayoutChangeListener(any(OnPotentialBuggyDriverLayoutListener.class)); } }
private void thenPlayerTypeIs(AndroidMediaPlayerType playerType) { assertThat(checker.getPlayerType()).isEqualTo(playerType); } }
@Test public void givenInternalNuPlayer_whenReadingName_thenReturnsMediaPlayerNuPlayer() { given(playerTypeReader.getPlayerType()).willReturn(AndroidMediaPlayerType.NU); String name = playerInformation.getName(); assertThat(name).isEqualTo("MediaPlayer: NuPlayer"); }