diff --git a/build.gradle b/build.gradle index 172a4cc1..9ee320b9 100644 --- a/build.gradle +++ b/build.gradle @@ -9,8 +9,8 @@ def teamPropsFile(propsFile) { buildscript { repositories { - jcenter() google() + jcenter() } dependencies { @@ -23,8 +23,8 @@ buildscript { subprojects { repositories { - jcenter() google() + jcenter() } apply from: teamPropsFile('static-analysis.gradle') diff --git a/core/build.gradle b/core/build.gradle index ca180090..d730858f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -52,13 +52,17 @@ android { abortOnError true warningsAsErrors true } + + compileOptions { + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { - implementation 'com.google.android.exoplayer:exoplayer:2.8.4' + implementation 'com.google.android.exoplayer:exoplayer:2.9.2' testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.22.0' + testImplementation 'org.mockito:mockito-core:2.23.4' testImplementation 'org.easytesting:fest-assert-core:2.0M10' } diff --git a/core/src/main/java/com/novoda/noplayer/DetailErrorType.java b/core/src/main/java/com/novoda/noplayer/DetailErrorType.java index 5b4bd4d5..00ec3602 100644 --- a/core/src/main/java/com/novoda/noplayer/DetailErrorType.java +++ b/core/src/main/java/com/novoda/noplayer/DetailErrorType.java @@ -76,7 +76,6 @@ public enum DetailErrorType { AUDIO_UNHANDLED_FORMAT_ERROR, AUDIO_DECODER_ERROR, INITIALISATION_ERROR, - DECODING_METADATA_ERROR, DECODING_SUBTITLE_ERROR, MEDIA_PLAYER_INFO_AUDIO_NOT_PLAYING, MEDIA_PLAYER_BAD_INTERLEAVING, diff --git a/core/src/main/java/com/novoda/noplayer/PlayerBuilder.java b/core/src/main/java/com/novoda/noplayer/PlayerBuilder.java index 8f64f463..7019866d 100644 --- a/core/src/main/java/com/novoda/noplayer/PlayerBuilder.java +++ b/core/src/main/java/com/novoda/noplayer/PlayerBuilder.java @@ -111,6 +111,7 @@ public PlayerBuilder withDowngradedSecureDecoder() { * @see NoPlayer */ public NoPlayer build(Context context) throws UnableToCreatePlayerException { + Context applicationContext = context.getApplicationContext(); Handler handler = new Handler(Looper.getMainLooper()); ProvisionExecutorCreator provisionExecutorCreator = new ProvisionExecutorCreator(); DrmSessionCreatorFactory drmSessionCreatorFactory = new DrmSessionCreatorFactory( @@ -119,7 +120,7 @@ public NoPlayer build(Context context) throws UnableToCreatePlayerException { handler ); NoPlayerCreator noPlayerCreator = new NoPlayerCreator( - context, + applicationContext, prioritizedPlayerTypes, NoPlayerExoPlayerCreator.newInstance(handler), NoPlayerMediaPlayerCreator.newInstance(handler), diff --git a/core/src/main/java/com/novoda/noplayer/external/exoplayer/text/webvtt/WebvttDecoder.java b/core/src/main/java/com/novoda/noplayer/external/exoplayer/text/webvtt/WebvttDecoder.java index b2a1e884..8881385f 100644 --- a/core/src/main/java/com/novoda/noplayer/external/exoplayer/text/webvtt/WebvttDecoder.java +++ b/core/src/main/java/com/novoda/noplayer/external/exoplayer/text/webvtt/WebvttDecoder.java @@ -17,6 +17,7 @@ import android.text.TextUtils; +import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.text.SimpleSubtitleDecoder; import com.google.android.exoplayer2.text.SubtitleDecoderException; import com.google.android.exoplayer2.text.webvtt.WebvttCssStyle; @@ -67,8 +68,13 @@ protected WebvttSubtitle decode(byte[] bytes, int length, boolean reset) definedStyles.clear(); // Validate the first line of the header, and skip the remainder. - WebvttParserUtil.validateWebvttHeaderLine(parsableWebvttData); - while (!TextUtils.isEmpty(parsableWebvttData.readLine())) {} + try { + WebvttParserUtil.validateWebvttHeaderLine(parsableWebvttData); + } catch (ParserException e) { + throw new SubtitleDecoderException(e); + } + while (!TextUtils.isEmpty(parsableWebvttData.readLine())) { + } int event; ArrayList subtitles = new ArrayList<>(); diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/BandwidthMeterCreator.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/BandwidthMeterCreator.java new file mode 100644 index 00000000..0d59aafb --- /dev/null +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/BandwidthMeterCreator.java @@ -0,0 +1,19 @@ +package com.novoda.noplayer.internal.exoplayer; + +import android.content.Context; + +import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; + +class BandwidthMeterCreator { + private final Context context; + + BandwidthMeterCreator(Context context) { + this.context = context; + } + + DefaultBandwidthMeter create(long maxInitialBitrate) { + return new DefaultBandwidthMeter.Builder(context) + .setInitialBitrateEstimate(maxInitialBitrate) + .build(); + } +} diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerCreator.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerCreator.java index 6422538b..232a48ab 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerCreator.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerCreator.java @@ -44,6 +44,6 @@ public SimpleExoPlayer create(DrmSessionCreator drmSessionCreator, ); DefaultLoadControl loadControl = new DefaultLoadControl(); - return ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, loadControl, drmSessionManager); + return ExoPlayerFactory.newSimpleInstance(context, renderersFactory, trackSelector, loadControl, drmSessionManager); } } diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacade.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacade.java index c160a215..9535f623 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacade.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacade.java @@ -3,6 +3,7 @@ import android.net.Uri; import android.support.annotation.Nullable; +import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.audio.AudioAttributes; @@ -28,6 +29,7 @@ class ExoPlayerFacade { private static final boolean RESET_POSITION = true; private static final boolean DO_NOT_RESET_STATE = false; + private final BandwidthMeterCreator bandwidthMeterCreator; private final AndroidDeviceVersion androidDeviceVersion; private final MediaSourceFactory mediaSourceFactory; private final CompositeTrackSelectorCreator trackSelectorCreator; @@ -43,11 +45,13 @@ class ExoPlayerFacade { @Nullable private Options options; - ExoPlayerFacade(AndroidDeviceVersion androidDeviceVersion, + ExoPlayerFacade(BandwidthMeterCreator bandwidthMeterCreator, + AndroidDeviceVersion androidDeviceVersion, MediaSourceFactory mediaSourceFactory, CompositeTrackSelectorCreator trackSelectorCreator, ExoPlayerCreator exoPlayerCreator, RendererTypeRequesterCreator rendererTypeRequesterCreator) { + this.bandwidthMeterCreator = bandwidthMeterCreator; this.androidDeviceVersion = androidDeviceVersion; this.mediaSourceFactory = mediaSourceFactory; this.trackSelectorCreator = trackSelectorCreator; @@ -109,9 +113,7 @@ void loadVideo(PlayerSurfaceHolder playerSurfaceHolder, MediaCodecSelector mediaCodecSelector) { this.options = options; - DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder() - .setInitialBitrateEstimate(options.maxInitialBitrate()) - .build(); + DefaultBandwidthMeter bandwidthMeter = bandwidthMeterCreator.create(options.maxInitialBitrate()); compositeTrackSelector = trackSelectorCreator.create(options, bandwidthMeter); exoPlayer = exoPlayerCreator.create( @@ -140,7 +142,7 @@ void loadVideo(PlayerSurfaceHolder playerSurfaceHolder, private void setMovieAudioAttributes(SimpleExoPlayer exoPlayer) { if (androidDeviceVersion.isLollipopTwentyOneOrAbove()) { AudioAttributes audioAttributes = new AudioAttributes.Builder() - .setContentType(android.media.AudioAttributes.CONTENT_TYPE_MOVIE) + .setContentType(C.CONTENT_TYPE_MOVIE) .build(); exoPlayer.setAudioAttributes(audioAttributes); } diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/NoPlayerExoPlayerCreator.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/NoPlayerExoPlayerCreator.java index e779fc83..02845fe2 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/NoPlayerExoPlayerCreator.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/NoPlayerExoPlayerCreator.java @@ -55,14 +55,16 @@ ExoPlayerTwoImpl create(Context context, DrmSessionCreator drmSessionCreator, bo MediaCodecSelector mediaCodecSelector = downgradeSecureDecoder ? SecurityDowngradingCodecSelector.newInstance() - : MediaCodecSelector.DEFAULT; + : MediaCodecSelector.DEFAULT_WITH_FALLBACK; CompositeTrackSelectorCreator trackSelectorCreator = new CompositeTrackSelectorCreator(); ExoPlayerCreator exoPlayerCreator = new ExoPlayerCreator(context); RendererTypeRequesterCreator rendererTypeRequesterCreator = new RendererTypeRequesterCreator(); AndroidDeviceVersion androidDeviceVersion = AndroidDeviceVersion.newInstance(); + BandwidthMeterCreator bandwidthMeterCreator = new BandwidthMeterCreator(context); ExoPlayerFacade exoPlayerFacade = new ExoPlayerFacade( + bandwidthMeterCreator, androidDeviceVersion, mediaSourceFactory, trackSelectorCreator, diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelector.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelector.java index 74bb5b3b..8da3e6c3 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelector.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelector.java @@ -4,6 +4,8 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; +import java.util.List; + class SecurityDowngradingCodecSelector implements MediaCodecSelector { private static final boolean USE_INSECURE_DECODER = false; @@ -20,23 +22,22 @@ public static SecurityDowngradingCodecSelector newInstance() { } @Override - public MediaCodecInfo getDecoderInfo(String mimeType, boolean contentRequiresSecureDecoder) - throws MediaCodecUtil.DecoderQueryException { - return internalMediaCodecUtil.getDecoderInfo(mimeType, USE_INSECURE_DECODER); + public List getDecoderInfos(String mimeType, boolean requiresSecureDecoder) throws MediaCodecUtil.DecoderQueryException { + return internalMediaCodecUtil.getDecoderInfos(mimeType, USE_INSECURE_DECODER); } @Override - public MediaCodecInfo getPassthroughDecoderInfo() { + public MediaCodecInfo getPassthroughDecoderInfo() throws MediaCodecUtil.DecoderQueryException { return internalMediaCodecUtil.getPassthroughDecoderInfo(); } static class InternalMediaCodecUtil { - MediaCodecInfo getDecoderInfo(String mimeType, boolean requiresSecureDecoder) throws MediaCodecUtil.DecoderQueryException { - return MediaCodecUtil.getDecoderInfo(mimeType, requiresSecureDecoder); + List getDecoderInfos(String mimeType, boolean requiresSecureDecoder) throws MediaCodecUtil.DecoderQueryException { + return MediaCodecUtil.getDecoderInfos(mimeType, requiresSecureDecoder); } - MediaCodecInfo getPassthroughDecoderInfo() { + MediaCodecInfo getPassthroughDecoderInfo() throws MediaCodecUtil.DecoderQueryException { return MediaCodecUtil.getPassthroughDecoderInfo(); } } diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/drm/ProvisioningModularDrmCallback.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/drm/ProvisioningModularDrmCallback.java index 7e237c5a..ff6d7862 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/drm/ProvisioningModularDrmCallback.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/drm/ProvisioningModularDrmCallback.java @@ -1,8 +1,5 @@ package com.novoda.noplayer.internal.exoplayer.drm; -import android.support.annotation.Nullable; -import android.text.TextUtils; - import com.google.android.exoplayer2.drm.ExoMediaDrm; import com.google.android.exoplayer2.drm.MediaDrmCallback; import com.novoda.noplayer.drm.ModularDrmKeyRequest; @@ -28,13 +25,7 @@ public byte[] executeProvisionRequest(UUID uuid, ExoMediaDrm.ProvisionRequest re } @Override - public byte[] executeKeyRequest(UUID uuid, ExoMediaDrm.KeyRequest request, @Nullable String mediaProvidedLicenseServerUrl) throws Exception { - String url = request.getDefaultUrl(); - - if (TextUtils.isEmpty(url)) { - url = mediaProvidedLicenseServerUrl; - } - - return streamingModularDrm.executeKeyRequest(new ModularDrmKeyRequest(url, request.getData())); + public byte[] executeKeyRequest(UUID uuid, ExoMediaDrm.KeyRequest request) throws Exception { + return streamingModularDrm.executeKeyRequest(new ModularDrmKeyRequest(request.getLicenseServerUrl(), request.getData())); } } diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/error/RendererErrorMapper.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/error/RendererErrorMapper.java index 1dfb0fca..c26bab74 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/error/RendererErrorMapper.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/error/RendererErrorMapper.java @@ -12,7 +12,6 @@ import com.google.android.exoplayer2.drm.UnsupportedDrmException; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; -import com.google.android.exoplayer2.metadata.MetadataDecoderException; import com.google.android.exoplayer2.text.SubtitleDecoderException; import com.novoda.noplayer.DetailErrorType; import com.novoda.noplayer.NoPlayer; @@ -62,10 +61,6 @@ static NoPlayer.PlayerError map(Exception rendererException, String message) { return new NoPlayerError(PlayerErrorType.DEVICE_MEDIA_CAPABILITIES, DetailErrorType.UNKNOWN, message); } - if (rendererException instanceof MetadataDecoderException) { - return new NoPlayerError(PlayerErrorType.RENDERER_DECODER, DetailErrorType.DECODING_METADATA_ERROR, message); - } - if (rendererException instanceof SubtitleDecoderException) { return new NoPlayerError(PlayerErrorType.RENDERER_DECODER, DetailErrorType.DECODING_SUBTITLE_ERROR, message); } diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/AnalyticsListenerForwarder.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/AnalyticsListenerForwarder.java index 1f4e1910..f4812078 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/AnalyticsListenerForwarder.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/AnalyticsListenerForwarder.java @@ -1,7 +1,5 @@ package com.novoda.noplayer.internal.exoplayer.forwarder; -import android.net.NetworkInfo; -import android.support.annotation.Nullable; import android.view.Surface; import com.google.android.exoplayer2.ExoPlaybackException; @@ -258,24 +256,14 @@ public void onBandwidthEstimate(EventTime eventTime, } @Override - public void onViewportSizeChange(EventTime eventTime, int width, int height) { + public void onSurfaceSizeChanged(EventTime eventTime, int width, int height) { HashMap callingMethodParameters = new HashMap<>(); callingMethodParameters.put(Parameters.EVENT_TIME, eventTime.toString()); callingMethodParameters.put(Parameters.WIDTH, String.valueOf(width)); callingMethodParameters.put(Parameters.HEIGHT, String.valueOf(height)); - infoListeners.onNewInfo(Methods.ON_VIEWPORT_SIZE_CHANGE, callingMethodParameters); - } - - @Override - public void onNetworkTypeChanged(EventTime eventTime, @Nullable NetworkInfo networkInfo) { - HashMap callingMethodParameters = new HashMap<>(); - - callingMethodParameters.put(Parameters.EVENT_TIME, eventTime.toString()); - callingMethodParameters.put(Parameters.NETWORK_INFO, networkInfo == null ? Parameters.NO_NETWORK_INFO : networkInfo.toString()); - - infoListeners.onNewInfo(Methods.ON_NETWORK_TYPE_CHANGED, callingMethodParameters); + infoListeners.onNewInfo(Methods.ON_SURFACE_SIZE_CHANGED, callingMethodParameters); } @Override diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/ForwarderInformation.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/ForwarderInformation.java index f0dea975..f64e544b 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/ForwarderInformation.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/ForwarderInformation.java @@ -27,8 +27,6 @@ private Parameters() { static final String BITRATE_ESTIMATE = "bitrateEstimate"; static final String WIDTH = "width"; static final String HEIGHT = "height"; - static final String NETWORK_INFO = "networkInfo"; - static final String NO_NETWORK_INFO = "null"; static final String METADATA = "metadata"; static final String TRACK_TYPE = "trackType"; static final String DECODER_COUNTERS = "decoderCounters"; @@ -48,8 +46,6 @@ private Parameters() { static final String MANIFEST = "manifest"; static final String WINDOW_INDEX = "windowIndex"; static final String MEDIA_PERIOD_ID = "mediaPeriodId"; - static final String COUNT = "count"; - static final String INITIALIZED_TIMESTAMP_MS = "initializedTimestampMs"; } @@ -79,8 +75,7 @@ private Methods() { static final String ON_MEDIA_PERIOD_RELEASED = "onMediaPeriodReleased"; static final String ON_READING_STARTED = "onReadingStarted"; static final String ON_BANDWIDTH_ESTIMATE = "onBandwidthEstimate"; - static final String ON_VIEWPORT_SIZE_CHANGE = "onViewportSizeChange"; - static final String ON_NETWORK_TYPE_CHANGED = "onNetworkTypeChanged"; + static final String ON_SURFACE_SIZE_CHANGED = "onSurfaceSizeChanged"; static final String ON_METADATA = "onMetadata"; static final String ON_DECODER_ENABLED = "onDecoderEnabled"; static final String ON_DECODER_INITIALIZED = "onDecoderInitialized"; @@ -97,9 +92,5 @@ private Methods() { static final String ON_DRM_KEYS_REMOVED = "onDrmKeysRemoved"; static final String ON_LOADING_CHANGED = "onLoadingChanged"; static final String ON_SHUFFLE_MODE_ENABLED_CHANGED = "onShuffleModeEnabledChanged"; - static final String ON_VIDEO_ENABLED = "onVideoEnabled"; - static final String ON_VIDEO_DECODER_INITIALIZED = "onVideoDecoderInitialized"; - static final String ON_VIDEO_INPUT_FORMAT_CHANGED = "onVideoInputFormatChanged"; - static final String ON_VIDEO_DISABLED = "onVideoDisabled"; } } diff --git a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/NoPlayerAnalyticsListener.java b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/NoPlayerAnalyticsListener.java index 52354ccf..cea98336 100644 --- a/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/NoPlayerAnalyticsListener.java +++ b/core/src/main/java/com/novoda/noplayer/internal/exoplayer/forwarder/NoPlayerAnalyticsListener.java @@ -1,7 +1,5 @@ package com.novoda.noplayer.internal.exoplayer.forwarder; -import android.net.NetworkInfo; -import android.support.annotation.Nullable; import android.view.Surface; import com.google.android.exoplayer2.ExoPlaybackException; @@ -195,18 +193,9 @@ public void onBandwidthEstimate(EventTime eventTime, } @Override - public void onViewportSizeChange(EventTime eventTime, - int width, - int height) { + public void onSurfaceSizeChanged(EventTime eventTime, int width, int height) { for (AnalyticsListener listener : listeners) { - listener.onViewportSizeChange(eventTime, width, height); - } - } - - @Override - public void onNetworkTypeChanged(EventTime eventTime, @Nullable NetworkInfo networkInfo) { - for (AnalyticsListener listener : listeners) { - listener.onNetworkTypeChanged(eventTime, networkInfo); + listener.onSurfaceSizeChanged(eventTime, width, height); } } diff --git a/core/src/main/java/com/novoda/noplayer/text/NoPlayerSubtitleDecoderFactory.java b/core/src/main/java/com/novoda/noplayer/text/NoPlayerSubtitleDecoderFactory.java index b3efe7e4..04b18078 100644 --- a/core/src/main/java/com/novoda/noplayer/text/NoPlayerSubtitleDecoderFactory.java +++ b/core/src/main/java/com/novoda/noplayer/text/NoPlayerSubtitleDecoderFactory.java @@ -54,7 +54,7 @@ public SubtitleDecoder createDecoder(Format format) { case MimeTypes.APPLICATION_MP4CEA608: return new Cea608Decoder(format.sampleMimeType, format.accessibilityChannel); case MimeTypes.APPLICATION_CEA708: - return new Cea708Decoder(format.accessibilityChannel); + return new Cea708Decoder(format.accessibilityChannel, format.initializationData); case MimeTypes.APPLICATION_DVBSUBS: return new DvbDecoder(format.initializationData); case MimeTypes.APPLICATION_PGS: diff --git a/core/src/test/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacadeTest.java b/core/src/test/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacadeTest.java index 0b3c3395..9fcdafa8 100644 --- a/core/src/test/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacadeTest.java +++ b/core/src/test/java/com/novoda/noplayer/internal/exoplayer/ExoPlayerFacadeTest.java @@ -47,6 +47,7 @@ import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -468,6 +469,10 @@ public abstract static class Base { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + @Mock + BandwidthMeterCreator bandwidthMeterCreator; + @Mock + DefaultBandwidthMeter defaultBandwidthMeter; @Mock AndroidDeviceVersion androidDeviceVersion; @Mock @@ -508,10 +513,12 @@ public void setUp() { ExoPlayerCreator exoPlayerCreator = mock(ExoPlayerCreator.class); given(exoPlayerForwarder.drmSessionEventListener()).willReturn(drmSessionEventListener); given(exoPlayerForwarder.mediaSourceEventListener()).willReturn(mediaSourceEventListener); - given(trackSelectorCreator.create(eq(OPTIONS), any(DefaultBandwidthMeter.class))).willReturn(trackSelector); + given(bandwidthMeterCreator.create(anyLong())).willReturn(defaultBandwidthMeter); + given(trackSelectorCreator.create(OPTIONS, defaultBandwidthMeter)).willReturn(trackSelector); given(exoPlayerCreator.create(drmSessionCreator, drmSessionEventListener, mediaCodecSelector, trackSelector.trackSelector())).willReturn(exoPlayer); given(rendererTypeRequesterCreator.createfrom(exoPlayer)).willReturn(rendererTypeRequester); facade = new ExoPlayerFacade( + bandwidthMeterCreator, androidDeviceVersion, mediaSourceFactory, trackSelectorCreator, @@ -527,10 +534,10 @@ MediaSource givenMediaSource() { MediaSource mediaSource = mock(MediaSource.class); given( mediaSourceFactory.create( - eq(OPTIONS), - eq(uri), - eq(mediaSourceEventListener), - any(DefaultBandwidthMeter.class) + OPTIONS, + uri, + mediaSourceEventListener, + defaultBandwidthMeter ) ).willReturn(mediaSource); diff --git a/core/src/test/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelectorTest.java b/core/src/test/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelectorTest.java index 29bd2714..ffd08651 100644 --- a/core/src/test/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelectorTest.java +++ b/core/src/test/java/com/novoda/noplayer/internal/exoplayer/SecurityDowngradingCodecSelectorTest.java @@ -30,10 +30,10 @@ public class SecurityDowngradingCodecSelectorTest { public void whenContentIsSecure_thenRequiresSecureDecoderIsFalse() throws MediaCodecUtil.DecoderQueryException { SecurityDowngradingCodecSelector securityDowngradingCodecSelector = new SecurityDowngradingCodecSelector(internalMediaCodecUtil); - securityDowngradingCodecSelector.getDecoderInfo(ANY_MIME_TYPE, CONTENT_SECURE); + securityDowngradingCodecSelector.getDecoderInfos(ANY_MIME_TYPE, CONTENT_SECURE); ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Boolean.class); - verify(internalMediaCodecUtil).getDecoderInfo(eq(ANY_MIME_TYPE), argumentCaptor.capture()); + verify(internalMediaCodecUtil).getDecoderInfos(eq(ANY_MIME_TYPE), argumentCaptor.capture()); assertThat(argumentCaptor.getValue()).isFalse(); } @@ -41,10 +41,10 @@ public void whenContentIsSecure_thenRequiresSecureDecoderIsFalse() throws MediaC public void whenContentIsInsecure_thenRequiresSecureDecoderIsFalse() throws MediaCodecUtil.DecoderQueryException { SecurityDowngradingCodecSelector securityDowngradingCodecSelector = new SecurityDowngradingCodecSelector(internalMediaCodecUtil); - securityDowngradingCodecSelector.getDecoderInfo(ANY_MIME_TYPE, CONTENT_INSECURE); + securityDowngradingCodecSelector.getDecoderInfos(ANY_MIME_TYPE, CONTENT_INSECURE); ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Boolean.class); - verify(internalMediaCodecUtil).getDecoderInfo(eq(ANY_MIME_TYPE), argumentCaptor.capture()); + verify(internalMediaCodecUtil).getDecoderInfos(eq(ANY_MIME_TYPE), argumentCaptor.capture()); assertThat(argumentCaptor.getValue()).isFalse(); } diff --git a/core/src/test/java/com/novoda/noplayer/internal/exoplayer/forwarder/ExoPlayerErrorMapperTest.java b/core/src/test/java/com/novoda/noplayer/internal/exoplayer/forwarder/ExoPlayerErrorMapperTest.java index df89d264..854f33ba 100644 --- a/core/src/test/java/com/novoda/noplayer/internal/exoplayer/forwarder/ExoPlayerErrorMapperTest.java +++ b/core/src/test/java/com/novoda/noplayer/internal/exoplayer/forwarder/ExoPlayerErrorMapperTest.java @@ -13,7 +13,6 @@ import com.google.android.exoplayer2.drm.KeysExpiredException; import com.google.android.exoplayer2.drm.UnsupportedDrmException; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; -import com.google.android.exoplayer2.metadata.MetadataDecoderException; import com.google.android.exoplayer2.offline.DownloadException; import com.google.android.exoplayer2.source.ClippingMediaSource; import com.google.android.exoplayer2.source.MergingMediaSource; @@ -36,14 +35,14 @@ import com.novoda.noplayer.PlayerErrorType; import com.novoda.noplayer.internal.exoplayer.error.ExoPlayerErrorMapper; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - import java.io.IOException; import java.util.Arrays; import java.util.Collection; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + import static com.novoda.noplayer.DetailErrorType.ADS_LOAD_UNEXPECTED_ERROR_THEN_WILL_SKIP; import static com.novoda.noplayer.DetailErrorType.AD_GROUP_LOAD_ERROR_THEN_WILL_SKIP; import static com.novoda.noplayer.DetailErrorType.AD_LOAD_ERROR_THEN_WILL_SKIP; @@ -57,7 +56,6 @@ import static com.novoda.noplayer.DetailErrorType.CLIPPING_MEDIA_SOURCE_CANNOT_CLIP_WRAPPED_SOURCE_INVALID_PERIOD_COUNT; import static com.novoda.noplayer.DetailErrorType.CLIPPING_MEDIA_SOURCE_CANNOT_CLIP_WRAPPED_SOURCE_NOT_SEEKABLE_TO_START; import static com.novoda.noplayer.DetailErrorType.DATA_POSITION_OUT_OF_RANGE_ERROR; -import static com.novoda.noplayer.DetailErrorType.DECODING_METADATA_ERROR; import static com.novoda.noplayer.DetailErrorType.DECODING_SUBTITLE_ERROR; import static com.novoda.noplayer.DetailErrorType.DOWNLOAD_ERROR; import static com.novoda.noplayer.DetailErrorType.DRM_INSTANTIATION_ERROR; @@ -131,7 +129,6 @@ public static Collection parameters() { new Object[]{RENDERER_DECODER, AUDIO_UNHANDLED_FORMAT_ERROR, createRenderer(new AudioProcessor.UnhandledFormatException(0, 0, 0))}, new Object[]{RENDERER_DECODER, AUDIO_DECODER_ERROR, createRenderer(new AudioDecoderException("audio-decoder-exception"))}, new Object[]{RENDERER_DECODER, INITIALISATION_ERROR, createRenderer(new MediaCodecRenderer.DecoderInitializationException(Format.createSampleFormat("id", "sample-mimety[e", 0), new Throwable(), true, 0))}, - new Object[]{RENDERER_DECODER, DECODING_METADATA_ERROR, createRenderer(new MetadataDecoderException("metadata-decoder-exception"))}, new Object[]{RENDERER_DECODER, DECODING_SUBTITLE_ERROR, createRenderer(new SubtitleDecoderException("metadata-decoder-exception"))}, new Object[]{DRM, UNSUPPORTED_DRM_SCHEME_ERROR, createRenderer(new UnsupportedDrmException(UnsupportedDrmException.REASON_UNSUPPORTED_SCHEME))}, diff --git a/core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..1f0955d4 --- /dev/null +++ b/core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline diff --git a/demo/build.gradle b/demo/build.gradle index 004a2ea7..97b5d848 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -17,10 +17,14 @@ android { abortOnError true warningsAsErrors true } + + compileOptions { + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { implementation project(':core') implementation 'com.android.support:appcompat-v7:28.0.0' testImplementation 'junit:junit:4.12' - testImplementation 'com.google.truth:truth:0.41' + testImplementation 'com.google.truth:truth:0.42' }