gitextract_28nzi1vk/ ├── .github/ │ ├── contributing.md │ ├── issue_template.md │ ├── pull_request_template.md │ └── workflows/ │ └── pull-request-builder.yml ├── .gitignore ├── .idea/ │ ├── codeStyleSettings.xml │ ├── compiler.xml │ ├── encodings.xml │ └── vcs.xml ├── LICENSE ├── NOTICE ├── README.md ├── build.gradle ├── core/ │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── novoda/ │ │ │ └── noplayer/ │ │ │ ├── AndroidMediaPlayerCapabilities.java │ │ │ ├── AspectRatioChangeCalculator.java │ │ │ ├── ContentType.java │ │ │ ├── DetailErrorType.java │ │ │ ├── ExoPlayerCapabilities.java │ │ │ ├── Listeners.java │ │ │ ├── NoPlayer.java │ │ │ ├── NoPlayerCreator.java │ │ │ ├── NoPlayerError.java │ │ │ ├── NoPlayerView.java │ │ │ ├── Options.java │ │ │ ├── OptionsBuilder.java │ │ │ ├── PlayerBuilder.java │ │ │ ├── PlayerCapabilities.java │ │ │ ├── PlayerErrorType.java │ │ │ ├── PlayerInformation.java │ │ │ ├── PlayerState.java │ │ │ ├── PlayerSurfaceHolder.java │ │ │ ├── PlayerType.java │ │ │ ├── PlayerView.java │ │ │ ├── PlayerViewSurfaceHolder.java │ │ │ ├── SubtitlePainter.java │ │ │ ├── SubtitleView.java │ │ │ ├── SurfaceRequester.java │ │ │ ├── UnableToCreatePlayerException.java │ │ │ ├── drm/ │ │ │ │ ├── DownloadedModularDrm.java │ │ │ │ ├── DrmHandler.java │ │ │ │ ├── DrmType.java │ │ │ │ ├── ModularDrmKeyRequest.java │ │ │ │ ├── ModularDrmProvisionRequest.java │ │ │ │ └── StreamingModularDrm.java │ │ │ ├── external/ │ │ │ │ └── exoplayer/ │ │ │ │ ├── text/ │ │ │ │ │ └── webvtt/ │ │ │ │ │ ├── CssParser.java │ │ │ │ │ ├── WebvttCueParser.java │ │ │ │ │ ├── WebvttDecoder.java │ │ │ │ │ └── WebvttSubtitle.java │ │ │ │ └── util/ │ │ │ │ └── ColorParser.java │ │ │ ├── internal/ │ │ │ │ ├── Clock.java │ │ │ │ ├── Heart.java │ │ │ │ ├── SystemClock.java │ │ │ │ ├── drm/ │ │ │ │ │ └── provision/ │ │ │ │ │ ├── HttpPostingProvisionExecutor.java │ │ │ │ │ ├── HttpUrlConnectionPoster.java │ │ │ │ │ ├── ProvisionExecutor.java │ │ │ │ │ ├── ProvisionExecutorCreator.java │ │ │ │ │ ├── ProvisioningCapabilities.java │ │ │ │ │ └── UnableToProvisionException.java │ │ │ │ ├── exoplayer/ │ │ │ │ │ ├── BandwidthMeterCreator.java │ │ │ │ │ ├── CompositeTrackSelector.java │ │ │ │ │ ├── CompositeTrackSelectorCreator.java │ │ │ │ │ ├── ExoPlayerCreator.java │ │ │ │ │ ├── ExoPlayerCueMapper.java │ │ │ │ │ ├── ExoPlayerFacade.java │ │ │ │ │ ├── ExoPlayerInformation.java │ │ │ │ │ ├── ExoPlayerTwoImpl.java │ │ │ │ │ ├── NoPlayerExoPlayerCreator.java │ │ │ │ │ ├── RendererTypeRequester.java │ │ │ │ │ ├── RendererTypeRequesterCreator.java │ │ │ │ │ ├── SecurityDowngradingCodecSelector.java │ │ │ │ │ ├── SimpleRenderersFactory.java │ │ │ │ │ ├── TextRendererOutput.java │ │ │ │ │ ├── drm/ │ │ │ │ │ │ ├── DownloadDrmSessionCreator.java │ │ │ │ │ │ ├── DrmSessionCreator.java │ │ │ │ │ │ ├── DrmSessionCreatorException.java │ │ │ │ │ │ ├── DrmSessionCreatorFactory.java │ │ │ │ │ │ ├── FrameworkDrmSession.java │ │ │ │ │ │ ├── FrameworkMediaDrmCreator.java │ │ │ │ │ │ ├── InvalidDrmSession.java │ │ │ │ │ │ ├── LocalDrmSession.java │ │ │ │ │ │ ├── LocalDrmSessionManager.java │ │ │ │ │ │ ├── NoDrmSessionCreator.java │ │ │ │ │ │ ├── ProvisioningModularDrmCallback.java │ │ │ │ │ │ ├── SessionId.java │ │ │ │ │ │ └── StreamingDrmSessionCreator.java │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── ErrorFormatter.java │ │ │ │ │ │ ├── ExoPlayerErrorMapper.java │ │ │ │ │ │ ├── RendererErrorMapper.java │ │ │ │ │ │ ├── SourceErrorMapper.java │ │ │ │ │ │ └── UnexpectedErrorMapper.java │ │ │ │ │ ├── forwarder/ │ │ │ │ │ │ ├── AnalyticsListenerForwarder.java │ │ │ │ │ │ ├── BitrateForwarder.java │ │ │ │ │ │ ├── BufferStateForwarder.java │ │ │ │ │ │ ├── DrmSessionInfoForwarder.java │ │ │ │ │ │ ├── EventInfoForwarder.java │ │ │ │ │ │ ├── EventListener.java │ │ │ │ │ │ ├── ExoPlayerDrmSessionEventListener.java │ │ │ │ │ │ ├── ExoPlayerForwarder.java │ │ │ │ │ │ ├── ExoPlayerVideoListener.java │ │ │ │ │ │ ├── ForwarderInformation.java │ │ │ │ │ │ ├── MediaSourceEventForwarder.java │ │ │ │ │ │ ├── NoPlayerAnalyticsListener.java │ │ │ │ │ │ ├── NoPlayerMediaSourceEventListener.java │ │ │ │ │ │ ├── OnCompletionForwarder.java │ │ │ │ │ │ ├── OnCompletionStateChangedForwarder.java │ │ │ │ │ │ ├── OnPrepareForwarder.java │ │ │ │ │ │ ├── PlayerOnErrorForwarder.java │ │ │ │ │ │ └── VideoSizeChangedForwarder.java │ │ │ │ │ └── mediasource/ │ │ │ │ │ ├── AudioTrackType.java │ │ │ │ │ ├── ExoPlayerAudioTrackSelector.java │ │ │ │ │ ├── ExoPlayerMappedTrackInfo.java │ │ │ │ │ ├── ExoPlayerSubtitleTrackSelector.java │ │ │ │ │ ├── ExoPlayerTrackSelector.java │ │ │ │ │ ├── ExoPlayerVideoTrackSelector.java │ │ │ │ │ ├── MediaSourceFactory.java │ │ │ │ │ ├── RendererTrackIndexExtractor.java │ │ │ │ │ └── TrackType.java │ │ │ │ ├── listeners/ │ │ │ │ │ ├── BitrateChangedListeners.java │ │ │ │ │ ├── BufferStateListeners.java │ │ │ │ │ ├── CompletionListeners.java │ │ │ │ │ ├── DroppedFramesListeners.java │ │ │ │ │ ├── ErrorListeners.java │ │ │ │ │ ├── HeartbeatCallbacks.java │ │ │ │ │ ├── InfoListeners.java │ │ │ │ │ ├── PlayerListenersHolder.java │ │ │ │ │ ├── PreparedListeners.java │ │ │ │ │ ├── StateChangedListeners.java │ │ │ │ │ └── VideoSizeChangedListeners.java │ │ │ │ ├── mediaplayer/ │ │ │ │ │ ├── AndroidMediaPlayerAudioTrackSelector.java │ │ │ │ │ ├── AndroidMediaPlayerFacade.java │ │ │ │ │ ├── AndroidMediaPlayerImpl.java │ │ │ │ │ ├── AndroidMediaPlayerType.java │ │ │ │ │ ├── BuggyVideoDriverPreventer.java │ │ │ │ │ ├── CheckBufferHeartbeatCallback.java │ │ │ │ │ ├── DelayedActionExecutor.java │ │ │ │ │ ├── ErrorFactory.java │ │ │ │ │ ├── ErrorFormatter.java │ │ │ │ │ ├── MediaPlayerCreator.java │ │ │ │ │ ├── MediaPlayerInformation.java │ │ │ │ │ ├── MediaPlayerTypeReader.java │ │ │ │ │ ├── NoPlayerMediaPlayerCreator.java │ │ │ │ │ ├── NoPlayerTrackInfo.java │ │ │ │ │ ├── NoPlayerTrackInfos.java │ │ │ │ │ ├── OnPotentialBuggyDriverLayoutListener.java │ │ │ │ │ ├── PlaybackStateChecker.java │ │ │ │ │ ├── SystemProperties.java │ │ │ │ │ ├── TrackInfosFactory.java │ │ │ │ │ └── forwarder/ │ │ │ │ │ ├── BufferHeartbeatListener.java │ │ │ │ │ ├── BufferInfoForwarder.java │ │ │ │ │ ├── BufferOnPreparedListener.java │ │ │ │ │ ├── CompletionForwarder.java │ │ │ │ │ ├── CompletionInfoForwarder.java │ │ │ │ │ ├── CompletionStateChangedForwarder.java │ │ │ │ │ ├── ErrorForwarder.java │ │ │ │ │ ├── ErrorInfoForwarder.java │ │ │ │ │ ├── HeartBeatListener.java │ │ │ │ │ ├── MediaPlayerCompletionListener.java │ │ │ │ │ ├── MediaPlayerErrorListener.java │ │ │ │ │ ├── MediaPlayerForwarder.java │ │ │ │ │ ├── MediaPlayerPreparedListener.java │ │ │ │ │ ├── OnPreparedForwarder.java │ │ │ │ │ ├── OnPreparedInfoForwarder.java │ │ │ │ │ ├── VideoSizeChangedForwarder.java │ │ │ │ │ ├── VideoSizeChangedInfoForwarder.java │ │ │ │ │ └── VideoSizeChangedListener.java │ │ │ │ └── utils/ │ │ │ │ ├── AndroidDeviceVersion.java │ │ │ │ ├── NoPlayerLog.java │ │ │ │ └── Optional.java │ │ │ ├── model/ │ │ │ │ ├── AudioTracks.java │ │ │ │ ├── Bitrate.java │ │ │ │ ├── Either.java │ │ │ │ ├── KeySetId.java │ │ │ │ ├── LoadTimeout.java │ │ │ │ ├── NoPlayerCue.java │ │ │ │ ├── PlayerAudioTrack.java │ │ │ │ ├── PlayerSubtitleTrack.java │ │ │ │ ├── PlayerVideoTrack.java │ │ │ │ ├── TextCues.java │ │ │ │ └── Timeout.java │ │ │ └── text/ │ │ │ └── NoPlayerSubtitleDecoderFactory.java │ │ └── res/ │ │ └── layout/ │ │ └── noplayer_view.xml │ └── test/ │ ├── java/ │ │ ├── com/ │ │ │ ├── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ ├── ExoPlaybackExceptionFactory.java │ │ │ │ └── drm/ │ │ │ │ └── FrameworkMediaCryptoFixture.java │ │ │ └── novoda/ │ │ │ └── noplayer/ │ │ │ ├── LoadTimeoutTest.java │ │ │ ├── NoPlayerCreatorTest.java │ │ │ ├── PlayerSurfaceHolderTest.java │ │ │ ├── PlayerTypeTest.java │ │ │ ├── internal/ │ │ │ │ ├── HeartTest.java │ │ │ │ ├── drm/ │ │ │ │ │ └── provision/ │ │ │ │ │ ├── HttpPostingProvisionExecutorTest.java │ │ │ │ │ └── ProvisioningCapabilitiesFixtures.java │ │ │ │ ├── exoplayer/ │ │ │ │ │ ├── ExoPlayerFacadeTest.java │ │ │ │ │ ├── ExoPlayerInformationTest.java │ │ │ │ │ ├── ExoPlayerTwoImplTest.java │ │ │ │ │ ├── NoPlayerExoPlayerCreatorTest.java │ │ │ │ │ ├── PlayerSubtitleTrackFixture.java │ │ │ │ │ ├── SecurityDowngradingCodecSelectorTest.java │ │ │ │ │ ├── drm/ │ │ │ │ │ │ ├── DrmSessionCreatorFactoryTest.java │ │ │ │ │ │ └── LocalDrmSessionManagerTest.java │ │ │ │ │ ├── error/ │ │ │ │ │ │ └── ErrorFormatterTest.java │ │ │ │ │ ├── forwarder/ │ │ │ │ │ │ └── ExoPlayerErrorMapperTest.java │ │ │ │ │ └── mediasource/ │ │ │ │ │ ├── AudioFormatFixture.java │ │ │ │ │ ├── AudioTrackTypeTest.java │ │ │ │ │ ├── ExoPlayerAudioTrackSelectorTest.java │ │ │ │ │ ├── ExoPlayerVideoTrackSelectorTest.java │ │ │ │ │ ├── RendererTrackIndexExtractorTest.java │ │ │ │ │ └── VideoFormatFixture.java │ │ │ │ ├── listeners/ │ │ │ │ │ ├── BufferStateListenersTest.java │ │ │ │ │ ├── CompletionListenersTest.java │ │ │ │ │ └── StateChangedListenersTest.java │ │ │ │ └── mediaplayer/ │ │ │ │ ├── AndroidMediaPlayerAudioTrackSelectorTest.java │ │ │ │ ├── AndroidMediaPlayerFacadeTest.java │ │ │ │ ├── AndroidMediaPlayerImplTest.java │ │ │ │ ├── BuggyVideoDriverPreventerTest.java │ │ │ │ ├── DelayedActionExecutorTest.java │ │ │ │ ├── ErrorFactoryTest.java │ │ │ │ ├── ErrorFormatterTest.java │ │ │ │ ├── LoadTimeoutTest.java │ │ │ │ ├── MediaPlayerInformationTest.java │ │ │ │ ├── NoPlayerMediaPlayerCreatorTest.java │ │ │ │ ├── OnPotentialBuggyDriverLayoutListenerTest.java │ │ │ │ ├── PlaybackStateCheckerTest.java │ │ │ │ └── PlayerCheckerTest.java │ │ │ └── model/ │ │ │ ├── AudioTracksTest.java │ │ │ ├── EitherTest.java │ │ │ ├── PlayerAudioTrackFixture.java │ │ │ └── PlayerVideoTrackFixture.java │ │ └── utils/ │ │ └── ExceptionMatcher.java │ └── resources/ │ └── mockito-extensions/ │ └── org.mockito.plugins.MockMaker ├── demo/ │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── novoda/ │ │ │ └── demo/ │ │ │ ├── AndroidControllerView.java │ │ │ ├── ControllerView.java │ │ │ ├── DataPostingModularDrm.java │ │ │ ├── DemoPresenter.java │ │ │ ├── DialogCreator.java │ │ │ ├── HttpClient.java │ │ │ ├── MainActivity.java │ │ │ ├── ProgressCalculator.java │ │ │ └── TimeFormatter.java │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── progress.xml │ │ │ └── thumb.xml │ │ ├── layout/ │ │ │ ├── activity_main.xml │ │ │ ├── list_item.xml │ │ │ └── merge_player_controls.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── controls_styles.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── themes.xml │ └── test/ │ └── java/ │ └── com/ │ └── novoda/ │ └── demo/ │ └── TimeFormatterTest.java ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── team-props/ ├── static-analysis/ │ ├── checkstyle-modules.xml │ ├── checkstyle-suppressions.xml │ ├── findbugs-excludes.xml │ ├── lint-config.xml │ └── pmd-rules.xml └── static-analysis.gradle