gitextract_iykr0_hr/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── 1-bug_report.yml │ │ ├── 2-feature-request.yml │ │ └── config.yml │ └── workflows/ │ ├── CI.yml │ ├── cleanup.yml │ ├── stale.yml │ └── virustotal_scan.yml ├── .gitignore ├── .gitmodules ├── .reuse/ │ └── dep5 ├── LICENSE ├── README.md ├── build.gradle ├── chatkit/ │ ├── .gitignore │ ├── LICENSE │ ├── build.gradle │ ├── proguard.txt │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── stfalcon/ │ │ └── chatkit/ │ │ ├── commons/ │ │ │ ├── DebouncedOnClickListener.java │ │ │ ├── ImageLoader.java │ │ │ ├── InputTrackingRecyclerViewAdapter.java │ │ │ ├── Style.java │ │ │ ├── ViewHolder.java │ │ │ ├── models/ │ │ │ │ ├── IDialog.java │ │ │ │ ├── IMessage.java │ │ │ │ ├── IUser.java │ │ │ │ └── MessageContentType.java │ │ │ └── widgets/ │ │ │ ├── FocusFixRelativeLayout.java │ │ │ └── WrapWidthTextView.java │ │ ├── dialogs/ │ │ │ ├── DialogListStyle.java │ │ │ ├── DialogsList.java │ │ │ └── DialogsListAdapter.java │ │ ├── messages/ │ │ │ ├── MessageHolders.java │ │ │ ├── MessageInput.java │ │ │ ├── MessageInputStyle.java │ │ │ ├── MessagesList.java │ │ │ ├── MessagesListAdapter.java │ │ │ ├── MessagesListStyle.java │ │ │ └── RecyclerScrollMoreListener.java │ │ └── utils/ │ │ ├── DateFormatter.java │ │ ├── RoundedImageView.java │ │ └── ShapeImageView.java │ └── res/ │ ├── color/ │ │ └── textchange.xml │ ├── drawable/ │ │ ├── bgchange.xml │ │ ├── bubble_circle.xml │ │ ├── shape_incoming_message.xml │ │ ├── shape_incoming_message_focused.xml │ │ └── shape_outcoming_message.xml │ ├── layout/ │ │ ├── item_date_header.xml │ │ ├── item_dialog.xml │ │ ├── item_incoming_image_message.xml │ │ ├── item_incoming_text_message.xml │ │ ├── item_outcoming_image_message.xml │ │ ├── item_outcoming_text_message.xml │ │ └── view_message_input.xml │ ├── values/ │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── fonts.xml │ │ ├── ids.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── values-v21/ │ └── fonts.xml ├── common/ │ ├── .gitignore │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── liskovsoft/ │ │ │ └── smartyoutubetv2/ │ │ │ └── common/ │ │ │ ├── app/ │ │ │ │ ├── models/ │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── BrowseSection.java │ │ │ │ │ │ ├── Playlist.java │ │ │ │ │ │ ├── SettingsGroup.java │ │ │ │ │ │ ├── SettingsItem.java │ │ │ │ │ │ ├── SimpleMediaItem.java │ │ │ │ │ │ ├── Video.java │ │ │ │ │ │ └── VideoGroup.java │ │ │ │ │ ├── errors/ │ │ │ │ │ │ ├── CategoryEmptyError.java │ │ │ │ │ │ ├── ErrorFragmentData.java │ │ │ │ │ │ ├── PasswordError.java │ │ │ │ │ │ └── SignInError.java │ │ │ │ │ ├── playback/ │ │ │ │ │ │ ├── BasePlayerController.java │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ ├── AutoFrameRateController.java │ │ │ │ │ │ │ ├── ChatController.java │ │ │ │ │ │ │ ├── CommentsController.java │ │ │ │ │ │ │ ├── HQDialogController.java │ │ │ │ │ │ │ ├── PlayerUIController.java │ │ │ │ │ │ │ ├── RemoteController.java │ │ │ │ │ │ │ ├── SponsorBlockController.java │ │ │ │ │ │ │ ├── SuggestionsController.java │ │ │ │ │ │ │ ├── VideoLoaderController.java │ │ │ │ │ │ │ └── VideoStateController.java │ │ │ │ │ │ ├── listener/ │ │ │ │ │ │ │ ├── PlayerEngineEventListener.java │ │ │ │ │ │ │ ├── PlayerEventListener.java │ │ │ │ │ │ │ ├── PlayerUiEventListener.java │ │ │ │ │ │ │ └── ViewEventListener.java │ │ │ │ │ │ ├── manager/ │ │ │ │ │ │ │ ├── PlayerConstants.java │ │ │ │ │ │ │ ├── PlayerEngine.java │ │ │ │ │ │ │ ├── PlayerManager.java │ │ │ │ │ │ │ └── PlayerUI.java │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ └── VideoStateService.java │ │ │ │ │ │ └── ui/ │ │ │ │ │ │ ├── AbstractCommentsReceiver.java │ │ │ │ │ │ ├── ChatReceiver.java │ │ │ │ │ │ ├── ChatReceiverImpl.java │ │ │ │ │ │ ├── CommentsReceiver.java │ │ │ │ │ │ ├── OptionCallback.java │ │ │ │ │ │ ├── OptionCategory.java │ │ │ │ │ │ ├── OptionItem.java │ │ │ │ │ │ ├── SeekBarSegment.java │ │ │ │ │ │ └── UiOptionItem.java │ │ │ │ │ └── search/ │ │ │ │ │ ├── MediaServiceSearchTagProvider.java │ │ │ │ │ ├── PrefsSearchTagsProvider.java │ │ │ │ │ ├── SearchTagsProvider.java │ │ │ │ │ └── vineyard/ │ │ │ │ │ ├── Option.java │ │ │ │ │ ├── Tag.java │ │ │ │ │ └── User.java │ │ │ │ ├── presenters/ │ │ │ │ │ ├── AddDevicePresenter.java │ │ │ │ │ ├── AppDialogPresenter.java │ │ │ │ │ ├── BrowsePresenter.java │ │ │ │ │ ├── ChannelPresenter.java │ │ │ │ │ ├── ChannelUploadsPresenter.java │ │ │ │ │ ├── DetailsPresenter.java │ │ │ │ │ ├── GoogleSignInPresenter.java │ │ │ │ │ ├── PlaybackPresenter.java │ │ │ │ │ ├── SearchPresenter.java │ │ │ │ │ ├── SignInPresenter.java │ │ │ │ │ ├── SplashPresenter.java │ │ │ │ │ ├── WebBrowserPresenter.java │ │ │ │ │ ├── YTSignInPresenter.java │ │ │ │ │ ├── base/ │ │ │ │ │ │ └── BasePresenter.java │ │ │ │ │ ├── dialogs/ │ │ │ │ │ │ ├── ATVBridgePresenter.java │ │ │ │ │ │ ├── AccountSelectionPresenter.java │ │ │ │ │ │ ├── AmazonBridgePresenter.java │ │ │ │ │ │ ├── AppUpdatePresenter.java │ │ │ │ │ │ ├── BootDialogPresenter.java │ │ │ │ │ │ ├── BridgePresenter.java │ │ │ │ │ │ ├── QuickRestorePresenter.java │ │ │ │ │ │ ├── StableRestorePresenter.java │ │ │ │ │ │ ├── VideoActionPresenter.java │ │ │ │ │ │ └── menu/ │ │ │ │ │ │ ├── BaseMenuPresenter.java │ │ │ │ │ │ ├── ChannelUploadsMenuPresenter.java │ │ │ │ │ │ ├── SectionMenuPresenter.java │ │ │ │ │ │ ├── VideoMenuPresenter.java │ │ │ │ │ │ └── providers/ │ │ │ │ │ │ ├── ContextMenuManager.java │ │ │ │ │ │ ├── ContextMenuProvider.java │ │ │ │ │ │ └── channelgroup/ │ │ │ │ │ │ ├── ChannelGroupMenuProvider.java │ │ │ │ │ │ ├── ChannelGroupServiceWrapper.java │ │ │ │ │ │ ├── RemoveGroupMenuProvider.java │ │ │ │ │ │ └── RenameGroupMenuProvider.java │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ ├── Presenter.java │ │ │ │ │ │ ├── SectionPresenter.java │ │ │ │ │ │ └── VideoGroupPresenter.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ └── SidebarService.java │ │ │ │ │ └── settings/ │ │ │ │ │ ├── AboutSettingsPresenter.java │ │ │ │ │ ├── AboutSimpleSettingsPresenter.java │ │ │ │ │ ├── AccountSettingsPresenter.java │ │ │ │ │ ├── AutoFrameRateSettingsPresenter.java │ │ │ │ │ ├── BackupSettingsPresenter.java │ │ │ │ │ ├── DeArrowSettingsPresenter.java │ │ │ │ │ ├── GeneralSettingsPresenter.java │ │ │ │ │ ├── LanguageSettingsPresenter.java │ │ │ │ │ ├── MainUISettingsPresenter.java │ │ │ │ │ ├── PlayerSettingsPresenter.java │ │ │ │ │ ├── RemoteControlSettingsPresenter.java │ │ │ │ │ ├── SearchSettingsPresenter.java │ │ │ │ │ ├── SponsorBlockSettingsPresenter.java │ │ │ │ │ ├── SubtitleSettingsPresenter.java │ │ │ │ │ └── UIScaleSettingsPresenter.java │ │ │ │ └── views/ │ │ │ │ ├── AddDeviceView.java │ │ │ │ ├── AppDialogView.java │ │ │ │ ├── AppUpdateView.java │ │ │ │ ├── BrowseView.java │ │ │ │ ├── ChannelUploadsView.java │ │ │ │ ├── ChannelView.java │ │ │ │ ├── DetailsView.java │ │ │ │ ├── PlaybackView.java │ │ │ │ ├── SearchView.java │ │ │ │ ├── SignInView.java │ │ │ │ ├── SplashView.java │ │ │ │ ├── ViewManager.java │ │ │ │ └── WebBrowserView.java │ │ │ ├── autoframerate/ │ │ │ │ ├── AutoFrameRateHelper.java │ │ │ │ ├── ModeSyncManager.java │ │ │ │ └── internal/ │ │ │ │ ├── DisplayHolder.java │ │ │ │ ├── DisplaySyncHelper.java │ │ │ │ ├── UhdHelper.java │ │ │ │ └── UhdHelperListener.java │ │ │ ├── exoplayer/ │ │ │ │ ├── ExoMediaSourceFactory.java │ │ │ │ ├── LiveDashManifestParser.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── ExoPlayerController.java │ │ │ │ │ └── PlayerView.java │ │ │ │ ├── errors/ │ │ │ │ │ ├── DashDefaultLoadErrorHandlingPolicy.java │ │ │ │ │ ├── SabrDefaultLoadErrorHandlingPolicy.java │ │ │ │ │ └── TrackErrorFixer.java │ │ │ │ ├── other/ │ │ │ │ │ ├── DebugInfoManager.java │ │ │ │ │ ├── ExoPlayerInitializer.java │ │ │ │ │ ├── SubtitleManager.java │ │ │ │ │ ├── VideoZoomManager.java │ │ │ │ │ └── VolumeBooster.java │ │ │ │ ├── selector/ │ │ │ │ │ ├── ExoFormatItem.java │ │ │ │ │ ├── FormatItem.java │ │ │ │ │ ├── TrackInfoFormatter2.java │ │ │ │ │ ├── TrackSelectorManager.java │ │ │ │ │ ├── TrackSelectorUtil.java │ │ │ │ │ └── track/ │ │ │ │ │ ├── AudioTrack.java │ │ │ │ │ ├── MediaTrack.java │ │ │ │ │ ├── SubtitleTrack.java │ │ │ │ │ └── VideoTrack.java │ │ │ │ └── versions/ │ │ │ │ ├── ExoUtils.java │ │ │ │ ├── renderer/ │ │ │ │ │ ├── CustomOverridesRenderersFactory.java │ │ │ │ │ ├── CustomRenderersFactoryBase.java │ │ │ │ │ ├── DebugInfoMediaCodecVideoRenderer.java │ │ │ │ │ ├── DelayMediaCodecAudioRenderer.java │ │ │ │ │ └── TweaksMediaCodecVideoRenderer.java │ │ │ │ └── selector/ │ │ │ │ ├── BlacklistMediaCodecSelector.java │ │ │ │ ├── RestoreTrackSelector.java │ │ │ │ └── backport/ │ │ │ │ └── Definition.java │ │ │ ├── misc/ │ │ │ │ ├── AppDataSourceManager.java │ │ │ │ ├── BackgroundPlaybackService.java │ │ │ │ ├── BackupAndRestoreHelper.java │ │ │ │ ├── BackupAndRestoreManager.java │ │ │ │ ├── BackupReceiverActivity.java │ │ │ │ ├── BrowseProcessor.java │ │ │ │ ├── BrowseProcessorManager.java │ │ │ │ ├── CrashRestorer.java │ │ │ │ ├── DeArrowProcessor.java │ │ │ │ ├── GDriveBackupManager.java │ │ │ │ ├── GDriveBackupManagerOld.java │ │ │ │ ├── GDriveBackupWorker.java │ │ │ │ ├── GlobalKeyTranslator.java │ │ │ │ ├── KeyTranslator.java │ │ │ │ ├── LocalDriveBackupWorker.java │ │ │ │ ├── MediaServiceManager.java │ │ │ │ ├── MotherActivity.java │ │ │ │ ├── PlayerKeyTranslator.java │ │ │ │ ├── RemoteControlReceiver.java │ │ │ │ ├── RemoteControlService.java │ │ │ │ ├── RemoteControlWorker.java │ │ │ │ ├── ScreensaverManager.java │ │ │ │ ├── SharedPreferencesHelper.java │ │ │ │ ├── StreamReminderService.java │ │ │ │ ├── TickleManager.java │ │ │ │ ├── UnlocalizedTitleProcessor.java │ │ │ │ ├── ZipHelper.java │ │ │ │ └── ZipHelper2.java │ │ │ ├── prefs/ │ │ │ │ ├── AccountsData.java │ │ │ │ ├── AppPrefs.java │ │ │ │ ├── BlockedChannelData.java │ │ │ │ ├── DeArrowData.java │ │ │ │ ├── GeneralData.java │ │ │ │ ├── HiddenPrefs.java │ │ │ │ ├── MainUIData.java │ │ │ │ ├── PlayerData.java │ │ │ │ ├── PlayerTweaksData.java │ │ │ │ ├── RemoteControlData.java │ │ │ │ ├── SearchData.java │ │ │ │ ├── SponsorBlockData.java │ │ │ │ └── common/ │ │ │ │ ├── DataChangeBase.java │ │ │ │ └── DataSaverBase.java │ │ │ ├── proxy/ │ │ │ │ ├── PasswdInetSocketAddress.java │ │ │ │ ├── PasswdURI.java │ │ │ │ ├── Proxy.java │ │ │ │ ├── ProxyManager.java │ │ │ │ └── WebProxyDialog.java │ │ │ └── utils/ │ │ │ ├── AppDialogUtil.java │ │ │ ├── ClickbaitRemover.java │ │ │ ├── CopyOnWriteHashList.java │ │ │ ├── HttpURLConnectionUtils.java │ │ │ ├── IntentExtractor.java │ │ │ ├── LoadingManager.java │ │ │ ├── SimpleEditDialog.java │ │ │ ├── TvQuickActions.java │ │ │ ├── UserAgentManager.java │ │ │ └── Utils.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── debug_view.xml │ │ │ ├── dim_container.xml │ │ │ ├── simple_edit_dialog.xml │ │ │ └── web_proxy_dialog.xml │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── countries.xml │ │ │ ├── dimens.xml │ │ │ ├── donations.xml │ │ │ ├── feedback.xml │ │ │ ├── ids.xml │ │ │ ├── languages.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ ├── unlocalized-strings.xml │ │ │ └── update_urls.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-az/ │ │ │ └── strings.xml │ │ ├── values-bg/ │ │ │ └── strings.xml │ │ ├── values-ca/ │ │ │ └── strings.xml │ │ ├── values-cs/ │ │ │ └── strings.xml │ │ ├── values-da/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-el/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-et/ │ │ │ └── strings.xml │ │ ├── values-fa-rIR/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-gl-rES/ │ │ │ └── strings.xml │ │ ├── values-he/ │ │ │ └── strings.xml │ │ ├── values-hi/ │ │ │ └── strings.xml │ │ ├── values-hr/ │ │ │ └── strings.xml │ │ ├── values-hu/ │ │ │ └── strings.xml │ │ ├── values-hy/ │ │ │ └── strings.xml │ │ ├── values-in/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-iw/ │ │ │ └── strings.xml │ │ ├── values-ja/ │ │ │ └── strings.xml │ │ ├── values-ko/ │ │ │ └── strings.xml │ │ ├── values-lt/ │ │ │ └── strings.xml │ │ ├── values-lv/ │ │ │ └── strings.xml │ │ ├── values-mo/ │ │ │ └── strings.xml │ │ ├── values-nb/ │ │ │ └── strings.xml │ │ ├── values-nl/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt-rBR/ │ │ │ └── strings.xml │ │ ├── values-pt-rPT/ │ │ │ └── strings.xml │ │ ├── values-ro/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sk/ │ │ │ └── strings.xml │ │ ├── values-sl/ │ │ │ └── strings.xml │ │ ├── values-sq/ │ │ │ └── strings.xml │ │ ├── values-sr/ │ │ │ └── strings.xml │ │ ├── values-sv/ │ │ │ └── strings.xml │ │ ├── values-te/ │ │ │ └── strings.xml │ │ ├── values-th/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ ├── values-zh/ │ │ │ └── strings.xml │ │ ├── values-zh-rTW/ │ │ │ └── strings.xml │ │ ├── volume-fa/ │ │ │ └── strings.xml │ │ └── xml/ │ │ └── app_prefs.xml │ ├── stbeta/ │ │ └── res/ │ │ └── values/ │ │ └── update_urls.xml │ └── ststable/ │ └── res/ │ └── values/ │ └── update_urls.xml ├── crowdin.yml ├── doubletapplayerview/ │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── github/ │ │ └── vkay94/ │ │ └── dtpv/ │ │ ├── DoubleTapPlayerAdapter.kt │ │ ├── DoubleTapPlayerView.kt │ │ ├── DoubleTapPlayerViewImpl.kt │ │ ├── PlayerDoubleTapListener.java │ │ ├── SeekListener.kt │ │ └── youtube/ │ │ ├── YouTubeOverlay.kt │ │ └── views/ │ │ ├── CircleClipTapView.kt │ │ └── YouTubeSecondsView.kt │ └── res/ │ ├── drawable/ │ │ └── ic_play_triangle.xml │ ├── layout/ │ │ ├── yt_overlay.xml │ │ └── yt_seconds_view.xml │ ├── values/ │ │ ├── dtpv.xml │ │ ├── plurals.xml │ │ ├── public.xml │ │ └── yt_overlay.xml │ ├── values-af/ │ │ └── plurals.xml │ ├── values-am/ │ │ └── plurals.xml │ ├── values-ar/ │ │ └── plurals.xml │ ├── values-az/ │ │ └── plurals.xml │ ├── values-b+sr+Latn/ │ │ └── plurals.xml │ ├── values-be/ │ │ └── plurals.xml │ ├── values-bg/ │ │ └── plurals.xml │ ├── values-bn/ │ │ └── plurals.xml │ ├── values-bs/ │ │ └── plurals.xml │ ├── values-ca/ │ │ └── plurals.xml │ ├── values-cs/ │ │ └── plurals.xml │ ├── values-da/ │ │ └── plurals.xml │ ├── values-de/ │ │ └── plurals.xml │ ├── values-el/ │ │ └── plurals.xml │ ├── values-en-rGB/ │ │ └── plurals.xml │ ├── values-en-rIN/ │ │ └── plurals.xml │ ├── values-es/ │ │ └── plurals.xml │ ├── values-es-rUS/ │ │ └── plurals.xml │ ├── values-et/ │ │ └── plurals.xml │ ├── values-eu/ │ │ └── plurals.xml │ ├── values-fa/ │ │ └── plurals.xml │ ├── values-fi/ │ │ └── plurals.xml │ ├── values-fr/ │ │ └── plurals.xml │ ├── values-fr-rCA/ │ │ └── plurals.xml │ ├── values-gl/ │ │ └── plurals.xml │ ├── values-gu/ │ │ └── plurals.xml │ ├── values-hi/ │ │ └── plurals.xml │ ├── values-hr/ │ │ └── plurals.xml │ ├── values-hu/ │ │ └── plurals.xml │ ├── values-hy/ │ │ └── plurals.xml │ ├── values-in/ │ │ └── plurals.xml │ ├── values-is/ │ │ └── plurals.xml │ ├── values-it/ │ │ └── plurals.xml │ ├── values-iw/ │ │ └── plurals.xml │ ├── values-ja/ │ │ └── plurals.xml │ ├── values-ka/ │ │ └── plurals.xml │ ├── values-kk/ │ │ └── plurals.xml │ ├── values-km/ │ │ └── plurals.xml │ ├── values-kn/ │ │ └── plurals.xml │ ├── values-ko/ │ │ └── plurals.xml │ ├── values-ky/ │ │ └── plurals.xml │ ├── values-lo/ │ │ └── plurals.xml │ ├── values-lt/ │ │ └── plurals.xml │ ├── values-lv/ │ │ └── plurals.xml │ ├── values-mk/ │ │ └── plurals.xml │ ├── values-ml/ │ │ └── plurals.xml │ ├── values-mn/ │ │ └── plurals.xml │ ├── values-mr/ │ │ └── plurals.xml │ ├── values-ms/ │ │ └── plurals.xml │ ├── values-my/ │ │ └── plurals.xml │ ├── values-nb/ │ │ └── plurals.xml │ ├── values-ne/ │ │ └── plurals.xml │ ├── values-nl/ │ │ └── plurals.xml │ ├── values-pa/ │ │ └── plurals.xml │ ├── values-pl/ │ │ └── plurals.xml │ ├── values-pt-rBR/ │ │ └── plurals.xml │ ├── values-pt-rPT/ │ │ └── plurals.xml │ ├── values-ro/ │ │ └── plurals.xml │ ├── values-ru/ │ │ └── plurals.xml │ ├── values-si/ │ │ └── plurals.xml │ ├── values-sk/ │ │ └── plurals.xml │ ├── values-sl/ │ │ └── plurals.xml │ ├── values-sq/ │ │ └── plurals.xml │ ├── values-sr/ │ │ └── plurals.xml │ ├── values-sv/ │ │ └── plurals.xml │ ├── values-sw/ │ │ └── plurals.xml │ ├── values-ta/ │ │ └── plurals.xml │ ├── values-te/ │ │ └── plurals.xml │ ├── values-th/ │ │ └── plurals.xml │ ├── values-tl/ │ │ └── plurals.xml │ ├── values-tr/ │ │ └── plurals.xml │ ├── values-uk/ │ │ └── plurals.xml │ ├── values-ur/ │ │ └── plurals.xml │ ├── values-uz/ │ │ └── plurals.xml │ ├── values-vi/ │ │ └── plurals.xml │ ├── values-zh-rCN/ │ │ └── plurals.xml │ ├── values-zh-rHK/ │ │ └── plurals.xml │ ├── values-zh-rTW/ │ │ └── plurals.xml │ └── values-zu/ │ └── plurals.xml ├── exoplayer-amzn-2.10.6/ │ ├── .gitignore │ ├── .hgignore │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README-ORIGINAL.md │ ├── README.md │ ├── RELEASENOTES.md │ ├── build.gradle │ ├── constants.gradle │ ├── core_settings.gradle │ ├── demos/ │ │ ├── README.md │ │ ├── cast/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── castdemo/ │ │ │ │ ├── DefaultReceiverPlayerManager.java │ │ │ │ ├── DemoUtil.java │ │ │ │ ├── MainActivity.java │ │ │ │ └── PlayerManager.java │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── ic_plus.xml │ │ │ ├── layout/ │ │ │ │ ├── cast_context_error.xml │ │ │ │ ├── main_activity.xml │ │ │ │ └── sample_list.xml │ │ │ ├── menu/ │ │ │ │ └── menu.xml │ │ │ └── values/ │ │ │ └── strings.xml │ │ ├── ima/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── imademo/ │ │ │ │ ├── MainActivity.java │ │ │ │ └── PlayerManager.java │ │ │ └── res/ │ │ │ ├── layout/ │ │ │ │ └── main_activity.xml │ │ │ └── values/ │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── main/ │ │ ├── README.md │ │ ├── build.gradle │ │ ├── proguard-rules.txt │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── assets/ │ │ │ └── media.exolist.json │ │ ├── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── DemoDownloadService.java │ │ │ ├── DownloadTracker.java │ │ │ ├── PlayerActivity.java │ │ │ ├── SampleChooserActivity.java │ │ │ └── TrackSelectionDialog.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── player_activity.xml │ │ │ ├── sample_chooser_activity.xml │ │ │ ├── sample_list_item.xml │ │ │ └── track_selection_dialog.xml │ │ ├── menu/ │ │ │ └── sample_chooser_menu.xml │ │ └── values/ │ │ ├── strings.xml │ │ └── styles.xml │ ├── extensions/ │ │ ├── README.md │ │ ├── cast/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── cast/ │ │ │ │ ├── CastPlayer.java │ │ │ │ ├── CastTimeline.java │ │ │ │ ├── CastTimelineTracker.java │ │ │ │ ├── CastUtils.java │ │ │ │ ├── DefaultCastOptionsProvider.java │ │ │ │ ├── MediaItem.java │ │ │ │ ├── MediaItemQueue.java │ │ │ │ └── SessionAvailabilityListener.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── cast/ │ │ │ ├── CastTimelineTrackerTest.java │ │ │ └── MediaItemTest.java │ │ ├── cronet/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── cronet/ │ │ │ │ ├── ByteArrayUploadDataProvider.java │ │ │ │ ├── CronetDataSource.java │ │ │ │ ├── CronetDataSourceFactory.java │ │ │ │ └── CronetEngineWrapper.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── cronet/ │ │ │ ├── ByteArrayUploadDataProviderTest.java │ │ │ └── CronetDataSourceTest.java │ │ ├── ffmpeg/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── google/ │ │ │ │ │ └── android/ │ │ │ │ │ └── exoplayer2/ │ │ │ │ │ └── ext/ │ │ │ │ │ └── ffmpeg/ │ │ │ │ │ ├── FfmpegAudioRenderer.java │ │ │ │ │ ├── FfmpegDecoder.java │ │ │ │ │ ├── FfmpegDecoderException.java │ │ │ │ │ └── FfmpegLibrary.java │ │ │ │ └── jni/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Application.mk │ │ │ │ └── ffmpeg_jni.cc │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── ffmpeg/ │ │ │ └── DefaultRenderersFactoryTest.java │ │ ├── flac/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── assets/ │ │ │ │ │ ├── bear-flac.mka │ │ │ │ │ ├── bear.flac │ │ │ │ │ ├── bear.flac.0.dump │ │ │ │ │ ├── bear.flac.1.dump │ │ │ │ │ ├── bear.flac.2.dump │ │ │ │ │ ├── bear.flac.3.dump │ │ │ │ │ ├── bear_no_seek.flac │ │ │ │ │ ├── bear_with_id3.flac │ │ │ │ │ ├── bear_with_id3.flac.0.dump │ │ │ │ │ ├── bear_with_id3.flac.1.dump │ │ │ │ │ ├── bear_with_id3.flac.2.dump │ │ │ │ │ └── bear_with_id3.flac.3.dump │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── flac/ │ │ │ │ ├── FlacBinarySearchSeekerTest.java │ │ │ │ ├── FlacExtractorSeekTest.java │ │ │ │ ├── FlacExtractorTest.java │ │ │ │ └── FlacPlaybackTest.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── google/ │ │ │ │ │ └── android/ │ │ │ │ │ └── exoplayer2/ │ │ │ │ │ └── ext/ │ │ │ │ │ └── flac/ │ │ │ │ │ ├── FlacBinarySearchSeeker.java │ │ │ │ │ ├── FlacDecoder.java │ │ │ │ │ ├── FlacDecoderException.java │ │ │ │ │ ├── FlacDecoderJni.java │ │ │ │ │ ├── FlacExtractor.java │ │ │ │ │ ├── FlacLibrary.java │ │ │ │ │ └── LibflacAudioRenderer.java │ │ │ │ └── jni/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Application.mk │ │ │ │ ├── flac_jni.cc │ │ │ │ ├── flac_parser.cc │ │ │ │ ├── flac_sources.mk │ │ │ │ └── include/ │ │ │ │ ├── data_source.h │ │ │ │ └── flac_parser.h │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── flac/ │ │ │ ├── DefaultExtractorsFactoryTest.java │ │ │ └── DefaultRenderersFactoryTest.java │ │ ├── gvr/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── gvr/ │ │ │ │ ├── GvrAudioProcessor.java │ │ │ │ └── GvrPlayerActivity.java │ │ │ └── res/ │ │ │ ├── layout/ │ │ │ │ └── vr_ui.xml │ │ │ ├── values/ │ │ │ │ └── styles.xml │ │ │ └── values-v21/ │ │ │ └── styles.xml │ │ ├── ima/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── ima/ │ │ │ │ └── ImaAdsLoader.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── ima/ │ │ │ ├── FakeAd.java │ │ │ ├── FakeAdsLoader.java │ │ │ ├── FakeAdsRequest.java │ │ │ ├── FakePlayer.java │ │ │ ├── ImaAdsLoaderTest.java │ │ │ └── SingletonImaFactory.java │ │ ├── jobdispatcher/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── jobdispatcher/ │ │ │ └── JobDispatcherScheduler.java │ │ ├── leanback/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── leanback/ │ │ │ └── LeanbackPlayerAdapter.java │ │ ├── mediasession/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── mediasession/ │ │ │ │ ├── MediaSessionConnector.java │ │ │ │ ├── RepeatModeActionProvider.java │ │ │ │ ├── TimelineQueueEditor.java │ │ │ │ └── TimelineQueueNavigator.java │ │ │ └── res/ │ │ │ ├── drawable-anydpi-v21/ │ │ │ │ ├── exo_media_action_repeat_all.xml │ │ │ │ ├── exo_media_action_repeat_off.xml │ │ │ │ └── exo_media_action_repeat_one.xml │ │ │ ├── values/ │ │ │ │ └── strings.xml │ │ │ ├── values-af/ │ │ │ │ └── strings.xml │ │ │ ├── values-am/ │ │ │ │ └── strings.xml │ │ │ ├── values-ar/ │ │ │ │ └── strings.xml │ │ │ ├── values-az/ │ │ │ │ └── strings.xml │ │ │ ├── values-b+sr+Latn/ │ │ │ │ └── strings.xml │ │ │ ├── values-be/ │ │ │ │ └── strings.xml │ │ │ ├── values-bg/ │ │ │ │ └── strings.xml │ │ │ ├── values-bn/ │ │ │ │ └── strings.xml │ │ │ ├── values-bs/ │ │ │ │ └── strings.xml │ │ │ ├── values-ca/ │ │ │ │ └── strings.xml │ │ │ ├── values-cs/ │ │ │ │ └── strings.xml │ │ │ ├── values-da/ │ │ │ │ └── strings.xml │ │ │ ├── values-de/ │ │ │ │ └── strings.xml │ │ │ ├── values-el/ │ │ │ │ └── strings.xml │ │ │ ├── values-en-rAU/ │ │ │ │ └── strings.xml │ │ │ ├── values-en-rGB/ │ │ │ │ └── strings.xml │ │ │ ├── values-en-rIN/ │ │ │ │ └── strings.xml │ │ │ ├── values-es/ │ │ │ │ └── strings.xml │ │ │ ├── values-es-rUS/ │ │ │ │ └── strings.xml │ │ │ ├── values-et/ │ │ │ │ └── strings.xml │ │ │ ├── values-eu/ │ │ │ │ └── strings.xml │ │ │ ├── values-fa/ │ │ │ │ └── strings.xml │ │ │ ├── values-fi/ │ │ │ │ └── strings.xml │ │ │ ├── values-fr/ │ │ │ │ └── strings.xml │ │ │ ├── values-fr-rCA/ │ │ │ │ └── strings.xml │ │ │ ├── values-gl/ │ │ │ │ └── strings.xml │ │ │ ├── values-gu/ │ │ │ │ └── strings.xml │ │ │ ├── values-hi/ │ │ │ │ └── strings.xml │ │ │ ├── values-hr/ │ │ │ │ └── strings.xml │ │ │ ├── values-hu/ │ │ │ │ └── strings.xml │ │ │ ├── values-hy/ │ │ │ │ └── strings.xml │ │ │ ├── values-in/ │ │ │ │ └── strings.xml │ │ │ ├── values-is/ │ │ │ │ └── strings.xml │ │ │ ├── values-it/ │ │ │ │ └── strings.xml │ │ │ ├── values-iw/ │ │ │ │ └── strings.xml │ │ │ ├── values-ja/ │ │ │ │ └── strings.xml │ │ │ ├── values-ka/ │ │ │ │ └── strings.xml │ │ │ ├── values-kk/ │ │ │ │ └── strings.xml │ │ │ ├── values-km/ │ │ │ │ └── strings.xml │ │ │ ├── values-kn/ │ │ │ │ └── strings.xml │ │ │ ├── values-ko/ │ │ │ │ └── strings.xml │ │ │ ├── values-ky/ │ │ │ │ └── strings.xml │ │ │ ├── values-lo/ │ │ │ │ └── strings.xml │ │ │ ├── values-lt/ │ │ │ │ └── strings.xml │ │ │ ├── values-lv/ │ │ │ │ └── strings.xml │ │ │ ├── values-mk/ │ │ │ │ └── strings.xml │ │ │ ├── values-ml/ │ │ │ │ └── strings.xml │ │ │ ├── values-mn/ │ │ │ │ └── strings.xml │ │ │ ├── values-mr/ │ │ │ │ └── strings.xml │ │ │ ├── values-ms/ │ │ │ │ └── strings.xml │ │ │ ├── values-my/ │ │ │ │ └── strings.xml │ │ │ ├── values-nb/ │ │ │ │ └── strings.xml │ │ │ ├── values-ne/ │ │ │ │ └── strings.xml │ │ │ ├── values-nl/ │ │ │ │ └── strings.xml │ │ │ ├── values-pa/ │ │ │ │ └── strings.xml │ │ │ ├── values-pl/ │ │ │ │ └── strings.xml │ │ │ ├── values-pt/ │ │ │ │ └── strings.xml │ │ │ ├── values-pt-rPT/ │ │ │ │ └── strings.xml │ │ │ ├── values-ro/ │ │ │ │ └── strings.xml │ │ │ ├── values-ru/ │ │ │ │ └── strings.xml │ │ │ ├── values-si/ │ │ │ │ └── strings.xml │ │ │ ├── values-sk/ │ │ │ │ └── strings.xml │ │ │ ├── values-sl/ │ │ │ │ └── strings.xml │ │ │ ├── values-sq/ │ │ │ │ └── strings.xml │ │ │ ├── values-sr/ │ │ │ │ └── strings.xml │ │ │ ├── values-sv/ │ │ │ │ └── strings.xml │ │ │ ├── values-sw/ │ │ │ │ └── strings.xml │ │ │ ├── values-ta/ │ │ │ │ └── strings.xml │ │ │ ├── values-te/ │ │ │ │ └── strings.xml │ │ │ ├── values-th/ │ │ │ │ └── strings.xml │ │ │ ├── values-tl/ │ │ │ │ └── strings.xml │ │ │ ├── values-tr/ │ │ │ │ └── strings.xml │ │ │ ├── values-uk/ │ │ │ │ └── strings.xml │ │ │ ├── values-ur/ │ │ │ │ └── strings.xml │ │ │ ├── values-uz/ │ │ │ │ └── strings.xml │ │ │ ├── values-vi/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rCN/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rHK/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rTW/ │ │ │ │ └── strings.xml │ │ │ └── values-zu/ │ │ │ └── strings.xml │ │ ├── okhttp/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── okhttp/ │ │ │ ├── OkHttpDataSource.java │ │ │ └── OkHttpDataSourceFactory.java │ │ ├── opus/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── assets/ │ │ │ │ │ └── bear-opus.webm │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── opus/ │ │ │ │ └── OpusPlaybackTest.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── google/ │ │ │ │ │ └── android/ │ │ │ │ │ └── exoplayer2/ │ │ │ │ │ └── ext/ │ │ │ │ │ └── opus/ │ │ │ │ │ ├── LibopusAudioRenderer.java │ │ │ │ │ ├── OpusDecoder.java │ │ │ │ │ ├── OpusDecoderException.java │ │ │ │ │ └── OpusLibrary.java │ │ │ │ └── jni/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Application.mk │ │ │ │ ├── convert_android_asm.sh │ │ │ │ ├── libopus.mk │ │ │ │ └── opus_jni.cc │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── opus/ │ │ │ └── DefaultRenderersFactoryTest.java │ │ ├── rtmp/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── rtmp/ │ │ │ │ ├── RtmpDataSource.java │ │ │ │ └── RtmpDataSourceFactory.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── rtmp/ │ │ │ └── DefaultDataSourceTest.java │ │ ├── vp9/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── assets/ │ │ │ │ │ ├── bear-vp9-odd-dimensions.webm │ │ │ │ │ ├── bear-vp9.webm │ │ │ │ │ ├── invalid-bitstream.webm │ │ │ │ │ └── roadtrip-vp92-10bit.webm │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ext/ │ │ │ │ └── vp9/ │ │ │ │ └── VpxPlaybackTest.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── google/ │ │ │ │ │ └── android/ │ │ │ │ │ └── exoplayer2/ │ │ │ │ │ └── ext/ │ │ │ │ │ └── vp9/ │ │ │ │ │ ├── LibvpxVideoRenderer.java │ │ │ │ │ ├── VpxDecoder.java │ │ │ │ │ ├── VpxDecoderException.java │ │ │ │ │ ├── VpxInputBuffer.java │ │ │ │ │ ├── VpxLibrary.java │ │ │ │ │ ├── VpxOutputBuffer.java │ │ │ │ │ ├── VpxOutputBufferRenderer.java │ │ │ │ │ ├── VpxRenderer.java │ │ │ │ │ └── VpxVideoSurfaceView.java │ │ │ │ └── jni/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Application.mk │ │ │ │ ├── generate_libvpx_android_configs.sh │ │ │ │ ├── libvpx.mk │ │ │ │ └── vpx_jni.cc │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── ext/ │ │ │ └── vp9/ │ │ │ └── DefaultRenderersFactoryTest.java │ │ └── workmanager/ │ │ ├── README.md │ │ ├── build.gradle │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── google/ │ │ └── android/ │ │ └── exoplayer2/ │ │ └── ext/ │ │ └── workmanager/ │ │ └── WorkManagerScheduler.java │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ ├── issues/ │ │ └── player-accessed-on-wrong-thread.md │ ├── javadoc_combined.gradle │ ├── javadoc_library.gradle │ ├── javadoc_util.gradle │ ├── library/ │ │ ├── README.md │ │ ├── all/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── AndroidManifest.xml │ │ ├── core/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.txt │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── upstream/ │ │ │ │ └── ContentDataSourceTest.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ ├── BasePlayer.java │ │ │ │ ├── BaseRenderer.java │ │ │ │ ├── C.java │ │ │ │ ├── ControlDispatcher.java │ │ │ │ ├── DefaultControlDispatcher.java │ │ │ │ ├── DefaultLoadControl.java │ │ │ │ ├── DefaultMediaClock.java │ │ │ │ ├── DefaultRenderersFactory.java │ │ │ │ ├── ExoPlaybackException.java │ │ │ │ ├── ExoPlayer.java │ │ │ │ ├── ExoPlayerFactory.java │ │ │ │ ├── ExoPlayerImpl.java │ │ │ │ ├── ExoPlayerImplInternal.java │ │ │ │ ├── ExoPlayerLibraryInfo.java │ │ │ │ ├── Format.java │ │ │ │ ├── FormatHolder.java │ │ │ │ ├── IllegalSeekPositionException.java │ │ │ │ ├── LoadControl.java │ │ │ │ ├── MediaPeriodHolder.java │ │ │ │ ├── MediaPeriodInfo.java │ │ │ │ ├── MediaPeriodQueue.java │ │ │ │ ├── NoSampleRenderer.java │ │ │ │ ├── ParserException.java │ │ │ │ ├── PlaybackInfo.java │ │ │ │ ├── PlaybackParameters.java │ │ │ │ ├── PlaybackPreparer.java │ │ │ │ ├── Player.java │ │ │ │ ├── PlayerMessage.java │ │ │ │ ├── Renderer.java │ │ │ │ ├── RendererCapabilities.java │ │ │ │ ├── RendererConfiguration.java │ │ │ │ ├── RenderersFactory.java │ │ │ │ ├── SeekParameters.java │ │ │ │ ├── SimpleExoPlayer.java │ │ │ │ ├── Timeline.java │ │ │ │ ├── analytics/ │ │ │ │ │ ├── AnalyticsCollector.java │ │ │ │ │ ├── AnalyticsListener.java │ │ │ │ │ └── DefaultAnalyticsListener.java │ │ │ │ ├── audio/ │ │ │ │ │ ├── Ac3Util.java │ │ │ │ │ ├── Ac4Util.java │ │ │ │ │ ├── AudioAttributes.java │ │ │ │ │ ├── AudioCapabilities.java │ │ │ │ │ ├── AudioCapabilitiesReceiver.java │ │ │ │ │ ├── AudioDecoderException.java │ │ │ │ │ ├── AudioFocusManager.java │ │ │ │ │ ├── AudioListener.java │ │ │ │ │ ├── AudioProcessor.java │ │ │ │ │ ├── AudioRendererEventListener.java │ │ │ │ │ ├── AudioSink.java │ │ │ │ │ ├── AudioTimestampPoller.java │ │ │ │ │ ├── AudioTrackPositionTracker.java │ │ │ │ │ ├── AuxEffectInfo.java │ │ │ │ │ ├── BaseAudioProcessor.java │ │ │ │ │ ├── ChannelMappingAudioProcessor.java │ │ │ │ │ ├── DefaultAudioSink.java │ │ │ │ │ ├── DolbyPassthroughAudioTrack.java │ │ │ │ │ ├── DtsUtil.java │ │ │ │ │ ├── FloatResamplingAudioProcessor.java │ │ │ │ │ ├── MediaCodecAudioRenderer.java │ │ │ │ │ ├── ResamplingAudioProcessor.java │ │ │ │ │ ├── SilenceSkippingAudioProcessor.java │ │ │ │ │ ├── SimpleDecoderAudioRenderer.java │ │ │ │ │ ├── Sonic.java │ │ │ │ │ ├── SonicAudioProcessor.java │ │ │ │ │ ├── TeeAudioProcessor.java │ │ │ │ │ ├── TrimmingAudioProcessor.java │ │ │ │ │ └── WavUtil.java │ │ │ │ ├── database/ │ │ │ │ │ ├── DatabaseIOException.java │ │ │ │ │ ├── DatabaseProvider.java │ │ │ │ │ ├── DefaultDatabaseProvider.java │ │ │ │ │ ├── ExoDatabaseProvider.java │ │ │ │ │ └── VersionTable.java │ │ │ │ ├── decoder/ │ │ │ │ │ ├── Buffer.java │ │ │ │ │ ├── CryptoInfo.java │ │ │ │ │ ├── Decoder.java │ │ │ │ │ ├── DecoderCounters.java │ │ │ │ │ ├── DecoderInputBuffer.java │ │ │ │ │ ├── OutputBuffer.java │ │ │ │ │ ├── SimpleDecoder.java │ │ │ │ │ └── SimpleOutputBuffer.java │ │ │ │ ├── drm/ │ │ │ │ │ ├── ClearKeyUtil.java │ │ │ │ │ ├── DecryptionException.java │ │ │ │ │ ├── DecryptionResource.java │ │ │ │ │ ├── DefaultDrmSession.java │ │ │ │ │ ├── DefaultDrmSessionEventListener.java │ │ │ │ │ ├── DefaultDrmSessionManager.java │ │ │ │ │ ├── DrmInitData.java │ │ │ │ │ ├── DrmSession.java │ │ │ │ │ ├── DrmSessionManager.java │ │ │ │ │ ├── ErrorStateDrmSession.java │ │ │ │ │ ├── ExoMediaCrypto.java │ │ │ │ │ ├── ExoMediaDrm.java │ │ │ │ │ ├── FrameworkMediaCrypto.java │ │ │ │ │ ├── FrameworkMediaDrm.java │ │ │ │ │ ├── HttpMediaDrmCallback.java │ │ │ │ │ ├── KeysExpiredException.java │ │ │ │ │ ├── LocalMediaDrmCallback.java │ │ │ │ │ ├── MediaDrmCallback.java │ │ │ │ │ ├── OfflineLicenseHelper.java │ │ │ │ │ ├── UnsupportedDrmException.java │ │ │ │ │ └── WidevineUtil.java │ │ │ │ ├── extractor/ │ │ │ │ │ ├── BinarySearchSeeker.java │ │ │ │ │ ├── ChunkIndex.java │ │ │ │ │ ├── ConstantBitrateSeekMap.java │ │ │ │ │ ├── DefaultExtractorInput.java │ │ │ │ │ ├── DefaultExtractorsFactory.java │ │ │ │ │ ├── DummyExtractorOutput.java │ │ │ │ │ ├── DummyTrackOutput.java │ │ │ │ │ ├── Extractor.java │ │ │ │ │ ├── ExtractorInput.java │ │ │ │ │ ├── ExtractorOutput.java │ │ │ │ │ ├── ExtractorsFactory.java │ │ │ │ │ ├── GaplessInfoHolder.java │ │ │ │ │ ├── Id3Peeker.java │ │ │ │ │ ├── MpegAudioHeader.java │ │ │ │ │ ├── PositionHolder.java │ │ │ │ │ ├── SeekMap.java │ │ │ │ │ ├── SeekPoint.java │ │ │ │ │ ├── TrackOutput.java │ │ │ │ │ ├── amr/ │ │ │ │ │ │ └── AmrExtractor.java │ │ │ │ │ ├── flv/ │ │ │ │ │ │ ├── AudioTagPayloadReader.java │ │ │ │ │ │ ├── FlvExtractor.java │ │ │ │ │ │ ├── ScriptTagPayloadReader.java │ │ │ │ │ │ ├── TagPayloadReader.java │ │ │ │ │ │ └── VideoTagPayloadReader.java │ │ │ │ │ ├── mkv/ │ │ │ │ │ │ ├── DefaultEbmlReader.java │ │ │ │ │ │ ├── EbmlProcessor.java │ │ │ │ │ │ ├── EbmlReader.java │ │ │ │ │ │ ├── MatroskaExtractor.java │ │ │ │ │ │ ├── Sniffer.java │ │ │ │ │ │ └── VarintReader.java │ │ │ │ │ ├── mp3/ │ │ │ │ │ │ ├── ConstantBitrateSeeker.java │ │ │ │ │ │ ├── MlltSeeker.java │ │ │ │ │ │ ├── Mp3Extractor.java │ │ │ │ │ │ ├── Seeker.java │ │ │ │ │ │ ├── VbriSeeker.java │ │ │ │ │ │ └── XingSeeker.java │ │ │ │ │ ├── mp4/ │ │ │ │ │ │ ├── Atom.java │ │ │ │ │ │ ├── AtomParsers.java │ │ │ │ │ │ ├── DefaultSampleValues.java │ │ │ │ │ │ ├── FixedSampleSizeRechunker.java │ │ │ │ │ │ ├── FragmentedMp4Extractor.java │ │ │ │ │ │ ├── MdtaMetadataEntry.java │ │ │ │ │ │ ├── MetadataUtil.java │ │ │ │ │ │ ├── Mp4Extractor.java │ │ │ │ │ │ ├── PsshAtomUtil.java │ │ │ │ │ │ ├── Sniffer.java │ │ │ │ │ │ ├── Track.java │ │ │ │ │ │ ├── TrackEncryptionBox.java │ │ │ │ │ │ ├── TrackFragment.java │ │ │ │ │ │ └── TrackSampleTable.java │ │ │ │ │ ├── ogg/ │ │ │ │ │ │ ├── DefaultOggSeeker.java │ │ │ │ │ │ ├── FlacReader.java │ │ │ │ │ │ ├── OggExtractor.java │ │ │ │ │ │ ├── OggPacket.java │ │ │ │ │ │ ├── OggPageHeader.java │ │ │ │ │ │ ├── OggSeeker.java │ │ │ │ │ │ ├── OpusReader.java │ │ │ │ │ │ ├── StreamReader.java │ │ │ │ │ │ ├── VorbisBitArray.java │ │ │ │ │ │ ├── VorbisReader.java │ │ │ │ │ │ └── VorbisUtil.java │ │ │ │ │ ├── rawcc/ │ │ │ │ │ │ └── RawCcExtractor.java │ │ │ │ │ ├── ts/ │ │ │ │ │ │ ├── Ac3Extractor.java │ │ │ │ │ │ ├── Ac3Reader.java │ │ │ │ │ │ ├── Ac4Extractor.java │ │ │ │ │ │ ├── Ac4Reader.java │ │ │ │ │ │ ├── AdtsExtractor.java │ │ │ │ │ │ ├── AdtsReader.java │ │ │ │ │ │ ├── DefaultTsPayloadReaderFactory.java │ │ │ │ │ │ ├── DtsReader.java │ │ │ │ │ │ ├── DvbSubtitleReader.java │ │ │ │ │ │ ├── ElementaryStreamReader.java │ │ │ │ │ │ ├── H262Reader.java │ │ │ │ │ │ ├── H264Reader.java │ │ │ │ │ │ ├── H265Reader.java │ │ │ │ │ │ ├── Id3Reader.java │ │ │ │ │ │ ├── LatmReader.java │ │ │ │ │ │ ├── MpegAudioReader.java │ │ │ │ │ │ ├── NalUnitTargetBuffer.java │ │ │ │ │ │ ├── PesReader.java │ │ │ │ │ │ ├── PsBinarySearchSeeker.java │ │ │ │ │ │ ├── PsDurationReader.java │ │ │ │ │ │ ├── PsExtractor.java │ │ │ │ │ │ ├── SectionPayloadReader.java │ │ │ │ │ │ ├── SectionReader.java │ │ │ │ │ │ ├── SeiReader.java │ │ │ │ │ │ ├── SpliceInfoSectionReader.java │ │ │ │ │ │ ├── TsBinarySearchSeeker.java │ │ │ │ │ │ ├── TsDurationReader.java │ │ │ │ │ │ ├── TsExtractor.java │ │ │ │ │ │ ├── TsPayloadReader.java │ │ │ │ │ │ ├── TsUtil.java │ │ │ │ │ │ └── UserDataReader.java │ │ │ │ │ └── wav/ │ │ │ │ │ ├── WavExtractor.java │ │ │ │ │ ├── WavHeader.java │ │ │ │ │ └── WavHeaderReader.java │ │ │ │ ├── mediacodec/ │ │ │ │ │ ├── MediaCodecInfo.java │ │ │ │ │ ├── MediaCodecRenderer.java │ │ │ │ │ ├── MediaCodecSelector.java │ │ │ │ │ ├── MediaCodecUtil.java │ │ │ │ │ └── MediaFormatUtil.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── Metadata.java │ │ │ │ │ ├── MetadataDecoder.java │ │ │ │ │ ├── MetadataDecoderFactory.java │ │ │ │ │ ├── MetadataInputBuffer.java │ │ │ │ │ ├── MetadataOutput.java │ │ │ │ │ ├── MetadataRenderer.java │ │ │ │ │ ├── emsg/ │ │ │ │ │ │ ├── EventMessage.java │ │ │ │ │ │ ├── EventMessageDecoder.java │ │ │ │ │ │ └── EventMessageEncoder.java │ │ │ │ │ ├── flac/ │ │ │ │ │ │ ├── PictureFrame.java │ │ │ │ │ │ └── VorbisComment.java │ │ │ │ │ ├── icy/ │ │ │ │ │ │ ├── IcyDecoder.java │ │ │ │ │ │ ├── IcyHeaders.java │ │ │ │ │ │ └── IcyInfo.java │ │ │ │ │ ├── id3/ │ │ │ │ │ │ ├── ApicFrame.java │ │ │ │ │ │ ├── BinaryFrame.java │ │ │ │ │ │ ├── ChapterFrame.java │ │ │ │ │ │ ├── ChapterTocFrame.java │ │ │ │ │ │ ├── CommentFrame.java │ │ │ │ │ │ ├── GeobFrame.java │ │ │ │ │ │ ├── Id3Decoder.java │ │ │ │ │ │ ├── Id3Frame.java │ │ │ │ │ │ ├── InternalFrame.java │ │ │ │ │ │ ├── MlltFrame.java │ │ │ │ │ │ ├── PrivFrame.java │ │ │ │ │ │ ├── TextInformationFrame.java │ │ │ │ │ │ └── UrlLinkFrame.java │ │ │ │ │ └── scte35/ │ │ │ │ │ ├── PrivateCommand.java │ │ │ │ │ ├── SpliceCommand.java │ │ │ │ │ ├── SpliceInfoDecoder.java │ │ │ │ │ ├── SpliceInsertCommand.java │ │ │ │ │ ├── SpliceNullCommand.java │ │ │ │ │ ├── SpliceScheduleCommand.java │ │ │ │ │ └── TimeSignalCommand.java │ │ │ │ ├── offline/ │ │ │ │ │ ├── ActionFile.java │ │ │ │ │ ├── ActionFileUpgradeUtil.java │ │ │ │ │ ├── DefaultDownloadIndex.java │ │ │ │ │ ├── DefaultDownloaderFactory.java │ │ │ │ │ ├── Download.java │ │ │ │ │ ├── DownloadCursor.java │ │ │ │ │ ├── DownloadException.java │ │ │ │ │ ├── DownloadHelper.java │ │ │ │ │ ├── DownloadIndex.java │ │ │ │ │ ├── DownloadManager.java │ │ │ │ │ ├── DownloadProgress.java │ │ │ │ │ ├── DownloadRequest.java │ │ │ │ │ ├── DownloadService.java │ │ │ │ │ ├── Downloader.java │ │ │ │ │ ├── DownloaderConstructorHelper.java │ │ │ │ │ ├── DownloaderFactory.java │ │ │ │ │ ├── FilterableManifest.java │ │ │ │ │ ├── FilteringManifestParser.java │ │ │ │ │ ├── ProgressiveDownloader.java │ │ │ │ │ ├── SegmentDownloader.java │ │ │ │ │ ├── StreamKey.java │ │ │ │ │ └── WritableDownloadIndex.java │ │ │ │ ├── scheduler/ │ │ │ │ │ ├── PlatformScheduler.java │ │ │ │ │ ├── Requirements.java │ │ │ │ │ ├── RequirementsWatcher.java │ │ │ │ │ └── Scheduler.java │ │ │ │ ├── source/ │ │ │ │ │ ├── AbstractConcatenatedTimeline.java │ │ │ │ │ ├── AdaptiveMediaSourceEventListener.java │ │ │ │ │ ├── BaseMediaSource.java │ │ │ │ │ ├── BehindLiveWindowException.java │ │ │ │ │ ├── ClippingMediaPeriod.java │ │ │ │ │ ├── ClippingMediaSource.java │ │ │ │ │ ├── CompositeMediaSource.java │ │ │ │ │ ├── CompositeSequenceableLoader.java │ │ │ │ │ ├── CompositeSequenceableLoaderFactory.java │ │ │ │ │ ├── ConcatenatingMediaSource.java │ │ │ │ │ ├── DefaultCompositeSequenceableLoaderFactory.java │ │ │ │ │ ├── DefaultMediaSourceEventListener.java │ │ │ │ │ ├── DeferredMediaPeriod.java │ │ │ │ │ ├── DynamicConcatenatingMediaSource.java │ │ │ │ │ ├── EmptySampleStream.java │ │ │ │ │ ├── ExtractorMediaSource.java │ │ │ │ │ ├── ForwardingTimeline.java │ │ │ │ │ ├── IcyDataSource.java │ │ │ │ │ ├── LoopingMediaSource.java │ │ │ │ │ ├── MediaPeriod.java │ │ │ │ │ ├── MediaSource.java │ │ │ │ │ ├── MediaSourceEventListener.java │ │ │ │ │ ├── MergingMediaPeriod.java │ │ │ │ │ ├── MergingMediaSource.java │ │ │ │ │ ├── ProgressiveMediaPeriod.java │ │ │ │ │ ├── ProgressiveMediaSource.java │ │ │ │ │ ├── SampleMetadataQueue.java │ │ │ │ │ ├── SampleQueue.java │ │ │ │ │ ├── SampleStream.java │ │ │ │ │ ├── SequenceableLoader.java │ │ │ │ │ ├── ShuffleOrder.java │ │ │ │ │ ├── SilenceMediaSource.java │ │ │ │ │ ├── SinglePeriodTimeline.java │ │ │ │ │ ├── SingleSampleMediaPeriod.java │ │ │ │ │ ├── SingleSampleMediaSource.java │ │ │ │ │ ├── TrackGroup.java │ │ │ │ │ ├── TrackGroupArray.java │ │ │ │ │ ├── UnrecognizedInputFormatException.java │ │ │ │ │ ├── ads/ │ │ │ │ │ │ ├── AdPlaybackState.java │ │ │ │ │ │ ├── AdsLoader.java │ │ │ │ │ │ ├── AdsMediaSource.java │ │ │ │ │ │ └── SinglePeriodAdTimeline.java │ │ │ │ │ └── chunk/ │ │ │ │ │ ├── BaseMediaChunk.java │ │ │ │ │ ├── BaseMediaChunkIterator.java │ │ │ │ │ ├── BaseMediaChunkOutput.java │ │ │ │ │ ├── Chunk.java │ │ │ │ │ ├── ChunkExtractorWrapper.java │ │ │ │ │ ├── ChunkHolder.java │ │ │ │ │ ├── ChunkSampleStream.java │ │ │ │ │ ├── ChunkSource.java │ │ │ │ │ ├── ContainerMediaChunk.java │ │ │ │ │ ├── DataChunk.java │ │ │ │ │ ├── InitializationChunk.java │ │ │ │ │ ├── MediaChunk.java │ │ │ │ │ ├── MediaChunkIterator.java │ │ │ │ │ ├── MediaChunkListIterator.java │ │ │ │ │ └── SingleSampleMediaChunk.java │ │ │ │ ├── text/ │ │ │ │ │ ├── CaptionStyleCompat.java │ │ │ │ │ ├── Cue.java │ │ │ │ │ ├── SimpleSubtitleDecoder.java │ │ │ │ │ ├── SimpleSubtitleOutputBuffer.java │ │ │ │ │ ├── Subtitle.java │ │ │ │ │ ├── SubtitleDecoder.java │ │ │ │ │ ├── SubtitleDecoderException.java │ │ │ │ │ ├── SubtitleDecoderFactory.java │ │ │ │ │ ├── SubtitleInputBuffer.java │ │ │ │ │ ├── SubtitleOutputBuffer.java │ │ │ │ │ ├── TextOutput.java │ │ │ │ │ ├── TextRenderer.java │ │ │ │ │ ├── cea/ │ │ │ │ │ │ ├── Cea608Decoder.java │ │ │ │ │ │ ├── Cea708Cue.java │ │ │ │ │ │ ├── Cea708Decoder.java │ │ │ │ │ │ ├── Cea708InitializationData.java │ │ │ │ │ │ ├── CeaDecoder.java │ │ │ │ │ │ ├── CeaSubtitle.java │ │ │ │ │ │ └── CeaUtil.java │ │ │ │ │ ├── dvb/ │ │ │ │ │ │ ├── DvbDecoder.java │ │ │ │ │ │ ├── DvbParser.java │ │ │ │ │ │ └── DvbSubtitle.java │ │ │ │ │ ├── pgs/ │ │ │ │ │ │ ├── PgsDecoder.java │ │ │ │ │ │ └── PgsSubtitle.java │ │ │ │ │ ├── ssa/ │ │ │ │ │ │ ├── SsaDecoder.java │ │ │ │ │ │ └── SsaSubtitle.java │ │ │ │ │ ├── subrip/ │ │ │ │ │ │ ├── SubripDecoder.java │ │ │ │ │ │ └── SubripSubtitle.java │ │ │ │ │ ├── ttml/ │ │ │ │ │ │ ├── TtmlDecoder.java │ │ │ │ │ │ ├── TtmlNode.java │ │ │ │ │ │ ├── TtmlRegion.java │ │ │ │ │ │ ├── TtmlRenderUtil.java │ │ │ │ │ │ ├── TtmlStyle.java │ │ │ │ │ │ └── TtmlSubtitle.java │ │ │ │ │ ├── tx3g/ │ │ │ │ │ │ ├── Tx3gDecoder.java │ │ │ │ │ │ └── Tx3gSubtitle.java │ │ │ │ │ └── webvtt/ │ │ │ │ │ ├── CssParser.java │ │ │ │ │ ├── Mp4WebvttDecoder.java │ │ │ │ │ ├── Mp4WebvttSubtitle.java │ │ │ │ │ ├── WebvttCssStyle.java │ │ │ │ │ ├── WebvttCue.java │ │ │ │ │ ├── WebvttCueParser.java │ │ │ │ │ ├── WebvttDecoder.java │ │ │ │ │ ├── WebvttParserUtil.java │ │ │ │ │ └── WebvttSubtitle.java │ │ │ │ ├── trackselection/ │ │ │ │ │ ├── AdaptiveTrackSelection.java │ │ │ │ │ ├── BaseTrackSelection.java │ │ │ │ │ ├── BufferSizeAdaptationBuilder.java │ │ │ │ │ ├── DefaultTrackSelector.java │ │ │ │ │ ├── FixedTrackSelection.java │ │ │ │ │ ├── MappingTrackSelector.java │ │ │ │ │ ├── RandomTrackSelection.java │ │ │ │ │ ├── TrackBitrateEstimator.java │ │ │ │ │ ├── TrackSelection.java │ │ │ │ │ ├── TrackSelectionArray.java │ │ │ │ │ ├── TrackSelectionParameters.java │ │ │ │ │ ├── TrackSelectionUtil.java │ │ │ │ │ ├── TrackSelector.java │ │ │ │ │ ├── TrackSelectorResult.java │ │ │ │ │ └── WindowedTrackBitrateEstimator.java │ │ │ │ ├── upstream/ │ │ │ │ │ ├── Allocation.java │ │ │ │ │ ├── Allocator.java │ │ │ │ │ ├── AssetDataSource.java │ │ │ │ │ ├── BandwidthMeter.java │ │ │ │ │ ├── BaseDataSource.java │ │ │ │ │ ├── ByteArrayDataSink.java │ │ │ │ │ ├── ByteArrayDataSource.java │ │ │ │ │ ├── ContentDataSource.java │ │ │ │ │ ├── DataSchemeDataSource.java │ │ │ │ │ ├── DataSink.java │ │ │ │ │ ├── DataSource.java │ │ │ │ │ ├── DataSourceException.java │ │ │ │ │ ├── DataSourceInputStream.java │ │ │ │ │ ├── DataSpec.java │ │ │ │ │ ├── DefaultAllocator.java │ │ │ │ │ ├── DefaultBandwidthMeter.java │ │ │ │ │ ├── DefaultDataSource.java │ │ │ │ │ ├── DefaultDataSourceFactory.java │ │ │ │ │ ├── DefaultHttpDataSource.java │ │ │ │ │ ├── DefaultHttpDataSourceFactory.java │ │ │ │ │ ├── DefaultLoadErrorHandlingPolicy.java │ │ │ │ │ ├── DummyDataSource.java │ │ │ │ │ ├── FileDataSource.java │ │ │ │ │ ├── FileDataSourceFactory.java │ │ │ │ │ ├── HttpDataSource.java │ │ │ │ │ ├── LoadErrorHandlingPolicy.java │ │ │ │ │ ├── Loader.java │ │ │ │ │ ├── LoaderErrorThrower.java │ │ │ │ │ ├── ParsingLoadable.java │ │ │ │ │ ├── PriorityDataSource.java │ │ │ │ │ ├── PriorityDataSourceFactory.java │ │ │ │ │ ├── RawResourceDataSource.java │ │ │ │ │ ├── ResolvingDataSource.java │ │ │ │ │ ├── StatsDataSource.java │ │ │ │ │ ├── TeeDataSource.java │ │ │ │ │ ├── TransferListener.java │ │ │ │ │ ├── UdpDataSource.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ ├── Cache.java │ │ │ │ │ │ ├── CacheDataSink.java │ │ │ │ │ │ ├── CacheDataSinkFactory.java │ │ │ │ │ │ ├── CacheDataSource.java │ │ │ │ │ │ ├── CacheDataSourceFactory.java │ │ │ │ │ │ ├── CacheEvictor.java │ │ │ │ │ │ ├── CacheFileMetadata.java │ │ │ │ │ │ ├── CacheFileMetadataIndex.java │ │ │ │ │ │ ├── CacheKeyFactory.java │ │ │ │ │ │ ├── CacheSpan.java │ │ │ │ │ │ ├── CacheUtil.java │ │ │ │ │ │ ├── CachedContent.java │ │ │ │ │ │ ├── CachedContentIndex.java │ │ │ │ │ │ ├── CachedRegionTracker.java │ │ │ │ │ │ ├── ContentMetadata.java │ │ │ │ │ │ ├── ContentMetadataMutations.java │ │ │ │ │ │ ├── DefaultContentMetadata.java │ │ │ │ │ │ ├── LeastRecentlyUsedCacheEvictor.java │ │ │ │ │ │ ├── NoOpCacheEvictor.java │ │ │ │ │ │ ├── SimpleCache.java │ │ │ │ │ │ └── SimpleCacheSpan.java │ │ │ │ │ └── crypto/ │ │ │ │ │ ├── AesCipherDataSink.java │ │ │ │ │ ├── AesCipherDataSource.java │ │ │ │ │ ├── AesFlushingCipher.java │ │ │ │ │ └── CryptoUtil.java │ │ │ │ ├── util/ │ │ │ │ │ ├── AmazonQuirks.java │ │ │ │ │ ├── Assertions.java │ │ │ │ │ ├── AtomicFile.java │ │ │ │ │ ├── Clock.java │ │ │ │ │ ├── CodecSpecificDataUtil.java │ │ │ │ │ ├── ColorParser.java │ │ │ │ │ ├── ConditionVariable.java │ │ │ │ │ ├── EGLSurfaceTexture.java │ │ │ │ │ ├── ErrorMessageProvider.java │ │ │ │ │ ├── EventDispatcher.java │ │ │ │ │ ├── EventLogger.java │ │ │ │ │ ├── FlacStreamMetadata.java │ │ │ │ │ ├── GlUtil.java │ │ │ │ │ ├── HandlerWrapper.java │ │ │ │ │ ├── LibraryLoader.java │ │ │ │ │ ├── Log.java │ │ │ │ │ ├── Logger.java │ │ │ │ │ ├── LongArray.java │ │ │ │ │ ├── MediaClock.java │ │ │ │ │ ├── MimeTypes.java │ │ │ │ │ ├── NalUnitUtil.java │ │ │ │ │ ├── NotificationUtil.java │ │ │ │ │ ├── ParsableBitArray.java │ │ │ │ │ ├── ParsableByteArray.java │ │ │ │ │ ├── ParsableNalUnitBitArray.java │ │ │ │ │ ├── Predicate.java │ │ │ │ │ ├── PriorityTaskManager.java │ │ │ │ │ ├── RepeatModeUtil.java │ │ │ │ │ ├── ReusableBufferedOutputStream.java │ │ │ │ │ ├── SlidingPercentile.java │ │ │ │ │ ├── StandaloneMediaClock.java │ │ │ │ │ ├── SystemClock.java │ │ │ │ │ ├── SystemHandlerWrapper.java │ │ │ │ │ ├── TimedValueQueue.java │ │ │ │ │ ├── TimestampAdjuster.java │ │ │ │ │ ├── TraceUtil.java │ │ │ │ │ ├── UriUtil.java │ │ │ │ │ ├── Util.java │ │ │ │ │ └── XmlPullParserUtil.java │ │ │ │ └── video/ │ │ │ │ ├── AvcConfig.java │ │ │ │ ├── ColorInfo.java │ │ │ │ ├── DolbyVisionConfig.java │ │ │ │ ├── DummySurface.java │ │ │ │ ├── HevcConfig.java │ │ │ │ ├── MediaCodecVideoRenderer.java │ │ │ │ ├── VideoFrameMetadataListener.java │ │ │ │ ├── VideoFrameReleaseTimeHelper.java │ │ │ │ ├── VideoListener.java │ │ │ │ ├── VideoRendererEventListener.java │ │ │ │ └── spherical/ │ │ │ │ ├── CameraMotionListener.java │ │ │ │ ├── CameraMotionRenderer.java │ │ │ │ ├── FrameRotationQueue.java │ │ │ │ ├── Projection.java │ │ │ │ └── ProjectionDecoder.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets/ │ │ │ │ ├── amr/ │ │ │ │ │ ├── sample_nb.amr │ │ │ │ │ ├── sample_nb.amr.0.dump │ │ │ │ │ ├── sample_nb_cbr.amr │ │ │ │ │ ├── sample_nb_cbr.amr.0.dump │ │ │ │ │ ├── sample_nb_cbr.amr.1.dump │ │ │ │ │ ├── sample_nb_cbr.amr.2.dump │ │ │ │ │ ├── sample_nb_cbr.amr.3.dump │ │ │ │ │ ├── sample_nb_cbr.amr.unklen.dump │ │ │ │ │ ├── sample_wb.amr │ │ │ │ │ ├── sample_wb.amr.0.dump │ │ │ │ │ ├── sample_wb_cbr.amr │ │ │ │ │ ├── sample_wb_cbr.amr.0.dump │ │ │ │ │ ├── sample_wb_cbr.amr.1.dump │ │ │ │ │ ├── sample_wb_cbr.amr.2.dump │ │ │ │ │ ├── sample_wb_cbr.amr.3.dump │ │ │ │ │ └── sample_wb_cbr.amr.unklen.dump │ │ │ │ ├── download-actions/ │ │ │ │ │ ├── dash-download-v0 │ │ │ │ │ ├── dash-remove-v0 │ │ │ │ │ ├── hls-download-v0 │ │ │ │ │ ├── hls-download-v1 │ │ │ │ │ ├── hls-remove-v0 │ │ │ │ │ ├── hls-remove-v1 │ │ │ │ │ ├── progressive-download-v0 │ │ │ │ │ ├── progressive-remove-v0 │ │ │ │ │ ├── ss-download-v0 │ │ │ │ │ ├── ss-download-v1 │ │ │ │ │ ├── ss-remove-v0 │ │ │ │ │ └── ss-remove-v1 │ │ │ │ ├── flv/ │ │ │ │ │ ├── sample.flv │ │ │ │ │ └── sample.flv.0.dump │ │ │ │ ├── mkv/ │ │ │ │ │ ├── sample.mkv │ │ │ │ │ ├── sample.mkv.0.dump │ │ │ │ │ ├── sample.mkv.1.dump │ │ │ │ │ ├── sample.mkv.2.dump │ │ │ │ │ ├── sample.mkv.3.dump │ │ │ │ │ ├── subsample_encrypted_altref.webm │ │ │ │ │ ├── subsample_encrypted_altref.webm.0.dump │ │ │ │ │ ├── subsample_encrypted_noaltref.webm │ │ │ │ │ └── subsample_encrypted_noaltref.webm.0.dump │ │ │ │ ├── mp3/ │ │ │ │ │ ├── bear.mp3.0.dump │ │ │ │ │ ├── bear.mp3.1.dump │ │ │ │ │ ├── bear.mp3.2.dump │ │ │ │ │ ├── bear.mp3.3.dump │ │ │ │ │ ├── play-trimmed.mp3.0.dump │ │ │ │ │ ├── play-trimmed.mp3.1.dump │ │ │ │ │ ├── play-trimmed.mp3.2.dump │ │ │ │ │ ├── play-trimmed.mp3.3.dump │ │ │ │ │ └── play-trimmed.mp3.unklen.dump │ │ │ │ ├── mp4/ │ │ │ │ │ ├── sample.mp4.0.dump │ │ │ │ │ ├── sample.mp4.1.dump │ │ │ │ │ ├── sample.mp4.2.dump │ │ │ │ │ ├── sample.mp4.3.dump │ │ │ │ │ ├── sample_fragmented.mp4.0.dump │ │ │ │ │ ├── sample_fragmented_seekable.mp4.0.dump │ │ │ │ │ ├── sample_fragmented_seekable.mp4.1.dump │ │ │ │ │ ├── sample_fragmented_seekable.mp4.2.dump │ │ │ │ │ ├── sample_fragmented_seekable.mp4.3.dump │ │ │ │ │ └── sample_fragmented_sei.mp4.0.dump │ │ │ │ ├── offline/ │ │ │ │ │ ├── action_file_for_download_index_upgrade.exi │ │ │ │ │ ├── action_file_incomplete_header.exi │ │ │ │ │ ├── action_file_no_data.exi │ │ │ │ │ ├── action_file_one_action.exi │ │ │ │ │ ├── action_file_two_actions.exi │ │ │ │ │ ├── action_file_unsupported_version.exi │ │ │ │ │ └── action_file_zero_actions.exi │ │ │ │ ├── ogg/ │ │ │ │ │ ├── bear.opus │ │ │ │ │ ├── bear.opus.0.dump │ │ │ │ │ ├── bear.opus.1.dump │ │ │ │ │ ├── bear.opus.2.dump │ │ │ │ │ ├── bear.opus.3.dump │ │ │ │ │ ├── bear.opus.unklen.dump │ │ │ │ │ ├── bear_flac.ogg │ │ │ │ │ ├── bear_flac.ogg.0.dump │ │ │ │ │ ├── bear_flac.ogg.1.dump │ │ │ │ │ ├── bear_flac.ogg.2.dump │ │ │ │ │ ├── bear_flac.ogg.3.dump │ │ │ │ │ ├── bear_flac.ogg.unklen.dump │ │ │ │ │ ├── bear_flac_noseektable.ogg │ │ │ │ │ ├── bear_flac_noseektable.ogg.0.dump │ │ │ │ │ ├── bear_flac_noseektable.ogg.1.dump │ │ │ │ │ ├── bear_flac_noseektable.ogg.2.dump │ │ │ │ │ ├── bear_flac_noseektable.ogg.3.dump │ │ │ │ │ ├── bear_flac_noseektable.ogg.unklen.dump │ │ │ │ │ ├── bear_vorbis.ogg │ │ │ │ │ ├── bear_vorbis.ogg.0.dump │ │ │ │ │ ├── bear_vorbis.ogg.1.dump │ │ │ │ │ ├── bear_vorbis.ogg.2.dump │ │ │ │ │ ├── bear_vorbis.ogg.3.dump │ │ │ │ │ └── bear_vorbis.ogg.unklen.dump │ │ │ │ ├── rawcc/ │ │ │ │ │ ├── sample.rawcc │ │ │ │ │ └── sample.rawcc.0.dump │ │ │ │ ├── ssa/ │ │ │ │ │ ├── empty │ │ │ │ │ ├── invalid_timecodes │ │ │ │ │ ├── no_end_timecodes │ │ │ │ │ ├── typical │ │ │ │ │ ├── typical_dialogue │ │ │ │ │ ├── typical_format │ │ │ │ │ └── typical_header │ │ │ │ ├── subrip/ │ │ │ │ │ ├── empty │ │ │ │ │ ├── no_end_timecodes │ │ │ │ │ ├── typical │ │ │ │ │ ├── typical_extra_blank_line │ │ │ │ │ ├── typical_missing_sequence │ │ │ │ │ ├── typical_missing_timecode │ │ │ │ │ ├── typical_negative_timestamps │ │ │ │ │ ├── typical_unexpected_end │ │ │ │ │ ├── typical_with_byte_order_mark │ │ │ │ │ └── typical_with_tags │ │ │ │ ├── ts/ │ │ │ │ │ ├── bbb_2500ms.ts │ │ │ │ │ ├── elephants_dream.mpg │ │ │ │ │ ├── sample.ac3 │ │ │ │ │ ├── sample.ac3.0.dump │ │ │ │ │ ├── sample.ac4 │ │ │ │ │ ├── sample.ac4.0.dump │ │ │ │ │ ├── sample.adts │ │ │ │ │ ├── sample.adts.0.dump │ │ │ │ │ ├── sample.eac3 │ │ │ │ │ ├── sample.eac3.0.dump │ │ │ │ │ ├── sample.ps │ │ │ │ │ ├── sample.ps.0.dump │ │ │ │ │ ├── sample.ps.1.dump │ │ │ │ │ ├── sample.ps.2.dump │ │ │ │ │ ├── sample.ps.3.dump │ │ │ │ │ ├── sample.ps.unklen.dump │ │ │ │ │ ├── sample.ts │ │ │ │ │ ├── sample.ts.0.dump │ │ │ │ │ ├── sample.ts.1.dump │ │ │ │ │ ├── sample.ts.2.dump │ │ │ │ │ ├── sample.ts.3.dump │ │ │ │ │ ├── sample.ts.unklen.dump │ │ │ │ │ ├── sample_cbs.adts │ │ │ │ │ ├── sample_cbs.adts.0.dump │ │ │ │ │ ├── sample_cbs.adts.1.dump │ │ │ │ │ ├── sample_cbs.adts.2.dump │ │ │ │ │ ├── sample_cbs.adts.3.dump │ │ │ │ │ ├── sample_cbs.adts.unklen.dump │ │ │ │ │ └── sample_with_sdt.ts │ │ │ │ ├── ttml/ │ │ │ │ │ ├── bitmap_percentage_region.xml │ │ │ │ │ ├── bitmap_pixel_region.xml │ │ │ │ │ ├── bitmap_unsupported_region.xml │ │ │ │ │ ├── chain_multiple_styles.xml │ │ │ │ │ ├── font_size.xml │ │ │ │ │ ├── font_size_empty.xml │ │ │ │ │ ├── font_size_invalid.xml │ │ │ │ │ ├── font_size_no_unit.xml │ │ │ │ │ ├── frame_rate.xml │ │ │ │ │ ├── inherit_and_override_style.xml │ │ │ │ │ ├── inherit_global_and_parent.xml │ │ │ │ │ ├── inherit_multiple_styles.xml │ │ │ │ │ ├── inherit_style.xml │ │ │ │ │ ├── inline_style_attributes.xml │ │ │ │ │ ├── multiple_regions.xml │ │ │ │ │ └── no_underline_linethrough.xml │ │ │ │ ├── tx3g/ │ │ │ │ │ ├── initialization │ │ │ │ │ ├── initialization_all_defaults │ │ │ │ │ ├── no_subtitle │ │ │ │ │ ├── sample_just_text │ │ │ │ │ ├── sample_utf16_be_no_styl │ │ │ │ │ ├── sample_utf16_le_no_styl │ │ │ │ │ ├── sample_with_multiple_styl │ │ │ │ │ ├── sample_with_other_extension │ │ │ │ │ ├── sample_with_styl │ │ │ │ │ ├── sample_with_styl_all_defaults │ │ │ │ │ └── sample_with_tbox │ │ │ │ ├── wav/ │ │ │ │ │ ├── sample.wav.0.dump │ │ │ │ │ ├── sample.wav.1.dump │ │ │ │ │ ├── sample.wav.2.dump │ │ │ │ │ └── sample.wav.3.dump │ │ │ │ ├── webm/ │ │ │ │ │ └── vorbis_codec_private │ │ │ │ └── webvtt/ │ │ │ │ ├── empty │ │ │ │ ├── typical │ │ │ │ ├── typical_with_bad_timestamps │ │ │ │ ├── typical_with_comments │ │ │ │ ├── typical_with_identifiers │ │ │ │ ├── with_bad_cue_header │ │ │ │ ├── with_bom │ │ │ │ ├── with_css_complex_selectors │ │ │ │ ├── with_css_styles │ │ │ │ ├── with_positioning │ │ │ │ └── with_tags │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ ├── CTest.java │ │ │ ├── DefaultLoadControlTest.java │ │ │ ├── DefaultMediaClockTest.java │ │ │ ├── ExoPlayerTest.java │ │ │ ├── FormatTest.java │ │ │ ├── MediaPeriodQueueTest.java │ │ │ ├── TimelineTest.java │ │ │ ├── analytics/ │ │ │ │ └── AnalyticsCollectorTest.java │ │ │ ├── audio/ │ │ │ │ ├── Ac3UtilTest.java │ │ │ │ ├── AudioFocusManagerTest.java │ │ │ │ ├── DefaultAudioSinkTest.java │ │ │ │ ├── SilenceSkippingAudioProcessorTest.java │ │ │ │ ├── SimpleDecoderAudioRendererTest.java │ │ │ │ └── SonicAudioProcessorTest.java │ │ │ ├── database/ │ │ │ │ └── VersionTableTest.java │ │ │ ├── drm/ │ │ │ │ ├── ClearKeyUtilTest.java │ │ │ │ ├── DrmInitDataTest.java │ │ │ │ └── OfflineLicenseHelperTest.java │ │ │ ├── extractor/ │ │ │ │ ├── ConstantBitrateSeekMapTest.java │ │ │ │ ├── DefaultExtractorInputTest.java │ │ │ │ ├── DefaultExtractorsFactoryTest.java │ │ │ │ ├── ExtractorTest.java │ │ │ │ ├── Id3PeekerTest.java │ │ │ │ ├── amr/ │ │ │ │ │ ├── AmrExtractorSeekTest.java │ │ │ │ │ └── AmrExtractorTest.java │ │ │ │ ├── flv/ │ │ │ │ │ └── FlvExtractorTest.java │ │ │ │ ├── mkv/ │ │ │ │ │ ├── DefaultEbmlReaderTest.java │ │ │ │ │ ├── MatroskaExtractorTest.java │ │ │ │ │ └── VarintReaderTest.java │ │ │ │ ├── mp3/ │ │ │ │ │ ├── Mp3ExtractorTest.java │ │ │ │ │ └── XingSeekerTest.java │ │ │ │ ├── mp4/ │ │ │ │ │ ├── AtomParsersTest.java │ │ │ │ │ ├── FragmentedMp4ExtractorTest.java │ │ │ │ │ ├── MdtaMetadataEntryTest.java │ │ │ │ │ ├── Mp4ExtractorTest.java │ │ │ │ │ └── PsshAtomUtilTest.java │ │ │ │ ├── ogg/ │ │ │ │ │ ├── DefaultOggSeekerTest.java │ │ │ │ │ ├── OggExtractorTest.java │ │ │ │ │ ├── OggPacketTest.java │ │ │ │ │ ├── OggPageHeaderTest.java │ │ │ │ │ ├── OggTestFile.java │ │ │ │ │ ├── VorbisBitArrayTest.java │ │ │ │ │ ├── VorbisReaderTest.java │ │ │ │ │ └── VorbisUtilTest.java │ │ │ │ ├── rawcc/ │ │ │ │ │ └── RawCcExtractorTest.java │ │ │ │ ├── ts/ │ │ │ │ │ ├── Ac3ExtractorTest.java │ │ │ │ │ ├── Ac4ExtractorTest.java │ │ │ │ │ ├── AdtsExtractorSeekTest.java │ │ │ │ │ ├── AdtsExtractorTest.java │ │ │ │ │ ├── AdtsReaderTest.java │ │ │ │ │ ├── PsDurationReaderTest.java │ │ │ │ │ ├── PsExtractorSeekTest.java │ │ │ │ │ ├── PsExtractorTest.java │ │ │ │ │ ├── SectionReaderTest.java │ │ │ │ │ ├── TsDurationReaderTest.java │ │ │ │ │ ├── TsExtractorSeekTest.java │ │ │ │ │ └── TsExtractorTest.java │ │ │ │ └── wav/ │ │ │ │ └── WavExtractorTest.java │ │ │ ├── metadata/ │ │ │ │ ├── MetadataRendererTest.java │ │ │ │ ├── emsg/ │ │ │ │ │ ├── EventMessageDecoderTest.java │ │ │ │ │ ├── EventMessageEncoderTest.java │ │ │ │ │ └── EventMessageTest.java │ │ │ │ ├── flac/ │ │ │ │ │ ├── PictureFrameTest.java │ │ │ │ │ └── VorbisCommentTest.java │ │ │ │ ├── icy/ │ │ │ │ │ ├── IcyDecoderTest.java │ │ │ │ │ ├── IcyHeadersTest.java │ │ │ │ │ └── IcyInfoTest.java │ │ │ │ ├── id3/ │ │ │ │ │ ├── ChapterFrameTest.java │ │ │ │ │ ├── ChapterTocFrameTest.java │ │ │ │ │ ├── Id3DecoderTest.java │ │ │ │ │ └── MlltFrameTest.java │ │ │ │ └── scte35/ │ │ │ │ └── SpliceInfoDecoderTest.java │ │ │ ├── offline/ │ │ │ │ ├── ActionFileTest.java │ │ │ │ ├── ActionFileUpgradeUtilTest.java │ │ │ │ ├── DefaultDownloadIndexTest.java │ │ │ │ ├── DefaultDownloaderFactoryTest.java │ │ │ │ ├── DownloadBuilder.java │ │ │ │ ├── DownloadHelperTest.java │ │ │ │ ├── DownloadManagerTest.java │ │ │ │ ├── DownloadRequestTest.java │ │ │ │ └── StreamKeyTest.java │ │ │ ├── source/ │ │ │ │ ├── ClippingMediaSourceTest.java │ │ │ │ ├── CompositeSequenceableLoaderTest.java │ │ │ │ ├── ConcatenatingMediaSourceTest.java │ │ │ │ ├── LoopingMediaSourceTest.java │ │ │ │ ├── MergingMediaSourceTest.java │ │ │ │ ├── SampleQueueTest.java │ │ │ │ ├── ShuffleOrderTest.java │ │ │ │ ├── SinglePeriodTimelineTest.java │ │ │ │ ├── TrackGroupArrayTest.java │ │ │ │ ├── TrackGroupTest.java │ │ │ │ ├── ads/ │ │ │ │ │ └── AdPlaybackStateTest.java │ │ │ │ └── chunk/ │ │ │ │ └── MediaChunkListIteratorTest.java │ │ │ ├── text/ │ │ │ │ ├── ssa/ │ │ │ │ │ └── SsaDecoderTest.java │ │ │ │ ├── subrip/ │ │ │ │ │ └── SubripDecoderTest.java │ │ │ │ ├── ttml/ │ │ │ │ │ ├── TtmlDecoderTest.java │ │ │ │ │ ├── TtmlRenderUtilTest.java │ │ │ │ │ └── TtmlStyleTest.java │ │ │ │ ├── tx3g/ │ │ │ │ │ └── Tx3gDecoderTest.java │ │ │ │ └── webvtt/ │ │ │ │ ├── CssParserTest.java │ │ │ │ ├── Mp4WebvttDecoderTest.java │ │ │ │ ├── WebvttCueParserTest.java │ │ │ │ ├── WebvttDecoderTest.java │ │ │ │ └── WebvttSubtitleTest.java │ │ │ ├── trackselection/ │ │ │ │ ├── AdaptiveTrackSelectionTest.java │ │ │ │ ├── BufferSizeAdaptiveTrackSelectionTest.java │ │ │ │ ├── DefaultTrackSelectorTest.java │ │ │ │ ├── MappingTrackSelectorTest.java │ │ │ │ ├── TrackSelectionUtilTest.java │ │ │ │ ├── TrackSelectorTest.java │ │ │ │ └── WindowedTrackBitrateEstimatorTest.java │ │ │ ├── upstream/ │ │ │ │ ├── AssetDataSourceTest.java │ │ │ │ ├── BaseDataSourceTest.java │ │ │ │ ├── ByteArrayDataSourceTest.java │ │ │ │ ├── DataSchemeDataSourceTest.java │ │ │ │ ├── DataSourceAsserts.java │ │ │ │ ├── DataSourceInputStreamTest.java │ │ │ │ ├── DataSpecTest.java │ │ │ │ ├── DefaultBandwidthMeterTest.java │ │ │ │ ├── DefaultLoadErrorHandlingPolicyTest.java │ │ │ │ ├── cache/ │ │ │ │ │ ├── CacheDataSourceTest.java │ │ │ │ │ ├── CacheDataSourceTest2.java │ │ │ │ │ ├── CacheUtilTest.java │ │ │ │ │ ├── CachedContentIndexTest.java │ │ │ │ │ ├── CachedRegionTrackerTest.java │ │ │ │ │ ├── DefaultContentMetadataTest.java │ │ │ │ │ ├── LeastRecentlyUsedCacheEvictorTest.java │ │ │ │ │ ├── SimpleCacheSpanTest.java │ │ │ │ │ └── SimpleCacheTest.java │ │ │ │ └── crypto/ │ │ │ │ └── AesFlushingCipherTest.java │ │ │ ├── util/ │ │ │ │ ├── AtomicFileTest.java │ │ │ │ ├── ColorParserTest.java │ │ │ │ ├── FlacStreamMetadataTest.java │ │ │ │ ├── MimeTypesTest.java │ │ │ │ ├── NalUnitUtilTest.java │ │ │ │ ├── ParsableBitArrayTest.java │ │ │ │ ├── ParsableByteArrayTest.java │ │ │ │ ├── ParsableNalUnitBitArrayTest.java │ │ │ │ ├── ReusableBufferedOutputStreamTest.java │ │ │ │ ├── TimedValueQueueTest.java │ │ │ │ ├── UriUtilTest.java │ │ │ │ └── UtilTest.java │ │ │ └── video/ │ │ │ └── spherical/ │ │ │ ├── FrameRotationQueueTest.java │ │ │ ├── ProjectionDecoderTest.java │ │ │ └── ProjectionTest.java │ │ ├── dash/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── source/ │ │ │ │ └── dash/ │ │ │ │ ├── DashChunkSource.java │ │ │ │ ├── DashManifestStaleException.java │ │ │ │ ├── DashMediaPeriod.java │ │ │ │ ├── DashMediaSource.java │ │ │ │ ├── DashSegmentIndex.java │ │ │ │ ├── DashUtil.java │ │ │ │ ├── DashWrappingSegmentIndex.java │ │ │ │ ├── DefaultDashChunkSource.java │ │ │ │ ├── EventSampleStream.java │ │ │ │ ├── PlayerEmsgHandler.java │ │ │ │ ├── manifest/ │ │ │ │ │ ├── AdaptationSet.java │ │ │ │ │ ├── DashManifest.java │ │ │ │ │ ├── DashManifestParser.java │ │ │ │ │ ├── DashManifestParser2.java │ │ │ │ │ ├── Descriptor.java │ │ │ │ │ ├── EventStream.java │ │ │ │ │ ├── Period.java │ │ │ │ │ ├── ProgramInformation.java │ │ │ │ │ ├── RangedUri.java │ │ │ │ │ ├── Representation.java │ │ │ │ │ ├── SegmentBase.java │ │ │ │ │ ├── SingleSegmentIndex.java │ │ │ │ │ ├── UrlTemplate.java │ │ │ │ │ └── UtcTimingElement.java │ │ │ │ └── offline/ │ │ │ │ └── DashDownloader.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets/ │ │ │ │ ├── sample_mpd │ │ │ │ ├── sample_mpd_event_stream │ │ │ │ ├── sample_mpd_labels │ │ │ │ ├── sample_mpd_segment_template │ │ │ │ └── sample_mpd_unknown_mime_type │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── source/ │ │ │ └── dash/ │ │ │ ├── DashMediaPeriodTest.java │ │ │ ├── DashMediaSourceTest.java │ │ │ ├── DashUtilTest.java │ │ │ ├── EventSampleStreamTest.java │ │ │ ├── manifest/ │ │ │ │ ├── DashManifestParserTest.java │ │ │ │ ├── DashManifestTest.java │ │ │ │ ├── RangedUriTest.java │ │ │ │ └── UrlTemplateTest.java │ │ │ └── offline/ │ │ │ ├── DashDownloadTestData.java │ │ │ ├── DashDownloaderTest.java │ │ │ ├── DownloadHelperTest.java │ │ │ ├── DownloadManagerDashTest.java │ │ │ └── DownloadServiceDashTest.java │ │ ├── hls/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── source/ │ │ │ │ └── hls/ │ │ │ │ ├── Aes128DataSource.java │ │ │ │ ├── DefaultHlsDataSourceFactory.java │ │ │ │ ├── DefaultHlsExtractorFactory.java │ │ │ │ ├── HlsChunkSource.java │ │ │ │ ├── HlsDataSourceFactory.java │ │ │ │ ├── HlsExtractorFactory.java │ │ │ │ ├── HlsManifest.java │ │ │ │ ├── HlsMediaChunk.java │ │ │ │ ├── HlsMediaPeriod.java │ │ │ │ ├── HlsMediaSource.java │ │ │ │ ├── HlsMetadataType.java │ │ │ │ ├── HlsSampleStream.java │ │ │ │ ├── HlsSampleStreamWrapper.java │ │ │ │ ├── HlsTrackMetadataEntry.java │ │ │ │ ├── SampleQueueMappingException.java │ │ │ │ ├── TimestampAdjusterProvider.java │ │ │ │ ├── WebvttExtractor.java │ │ │ │ ├── offline/ │ │ │ │ │ └── HlsDownloader.java │ │ │ │ └── playlist/ │ │ │ │ ├── DefaultHlsPlaylistParserFactory.java │ │ │ │ ├── DefaultHlsPlaylistTracker.java │ │ │ │ ├── FilteringHlsPlaylistParserFactory.java │ │ │ │ ├── HlsMasterPlaylist.java │ │ │ │ ├── HlsMediaPlaylist.java │ │ │ │ ├── HlsPlaylist.java │ │ │ │ ├── HlsPlaylistParser.java │ │ │ │ ├── HlsPlaylistParserFactory.java │ │ │ │ └── HlsPlaylistTracker.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── source/ │ │ │ └── hls/ │ │ │ ├── Aes128DataSourceTest.java │ │ │ ├── HlsMediaPeriodTest.java │ │ │ ├── WebvttExtractorTest.java │ │ │ ├── offline/ │ │ │ │ ├── DownloadHelperTest.java │ │ │ │ ├── HlsDownloadTestData.java │ │ │ │ └── HlsDownloaderTest.java │ │ │ └── playlist/ │ │ │ ├── HlsMasterPlaylistParserTest.java │ │ │ └── HlsMediaPlaylistParserTest.java │ │ ├── sabr/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── source/ │ │ │ │ └── sabr/ │ │ │ │ ├── DefaultSabrChunkSource.java │ │ │ │ ├── EventSampleStream.java │ │ │ │ ├── PlayerEmsgHandler.java │ │ │ │ ├── SabrChunkSource.java │ │ │ │ ├── SabrMediaPeriod.java │ │ │ │ ├── SabrMediaSource.java │ │ │ │ ├── SabrSegmentIndex.java │ │ │ │ ├── SabrWrappingSegmentIndex.java │ │ │ │ ├── manifest/ │ │ │ │ │ ├── AdaptationSet.java │ │ │ │ │ ├── EventStream.java │ │ │ │ │ ├── Period.java │ │ │ │ │ ├── RangedUri.java │ │ │ │ │ ├── Representation.java │ │ │ │ │ ├── SabrManifest.java │ │ │ │ │ ├── SabrManifestParser.java │ │ │ │ │ ├── SegmentBase.java │ │ │ │ │ ├── SingleSegmentIndex.java │ │ │ │ │ └── UrlTemplate.java │ │ │ │ └── parser/ │ │ │ │ ├── SabrProcessor.java │ │ │ │ ├── SabrStream.java │ │ │ │ ├── adapter/ │ │ │ │ │ ├── SabrFragmentedMp4Adapter.java │ │ │ │ │ └── SabrMatroskaAdapter.java │ │ │ │ ├── exceptions/ │ │ │ │ │ ├── MediaSegmentMismatchError.java │ │ │ │ │ ├── PoTokenError.java │ │ │ │ │ ├── SabrStreamConsumedError.java │ │ │ │ │ └── SabrStreamError.java │ │ │ │ ├── frames/ │ │ │ │ │ ├── AACFrameExtractor.java │ │ │ │ │ ├── AVCFrameExtractor.java │ │ │ │ │ ├── BaseFrameExtractor.java │ │ │ │ │ ├── FrameExtractor.java │ │ │ │ │ ├── OpusFrameExtractor.java │ │ │ │ │ ├── VP9FrameExtractor.java │ │ │ │ │ └── VorbisFrameExtractor.java │ │ │ │ ├── misc/ │ │ │ │ │ ├── EnabledTrackTypes.java │ │ │ │ │ ├── SabrExtractorInput.java │ │ │ │ │ └── Utils.java │ │ │ │ ├── models/ │ │ │ │ │ ├── AudioSelector.java │ │ │ │ │ ├── CaptionSelector.java │ │ │ │ │ ├── ConsumedRange.java │ │ │ │ │ ├── FormatSelector.java │ │ │ │ │ ├── Segment.java │ │ │ │ │ ├── SelectedFormat.java │ │ │ │ │ └── VideoSelector.java │ │ │ │ ├── parts/ │ │ │ │ │ ├── FormatInitializedSabrPart.java │ │ │ │ │ ├── MediaSeekSabrPart.java │ │ │ │ │ ├── MediaSegmentDataSabrPart.java │ │ │ │ │ ├── MediaSegmentEndSabrPart.java │ │ │ │ │ ├── MediaSegmentInitSabrPart.java │ │ │ │ │ ├── PoTokenStatusSabrPart.java │ │ │ │ │ ├── RefreshPlayerResponseSabrPart.java │ │ │ │ │ └── SabrPart.java │ │ │ │ ├── results/ │ │ │ │ │ ├── ProcessFormatInitializationMetadataResult.java │ │ │ │ │ ├── ProcessLiveMetadataResult.java │ │ │ │ │ ├── ProcessMediaEndResult.java │ │ │ │ │ ├── ProcessMediaHeaderResult.java │ │ │ │ │ ├── ProcessMediaResult.java │ │ │ │ │ ├── ProcessSabrSeekResult.java │ │ │ │ │ └── ProcessStreamProtectionStatusResult.java │ │ │ │ └── ump/ │ │ │ │ ├── UMPDecoder.java │ │ │ │ ├── UMPEncoder.java │ │ │ │ ├── UMPInputStream.java │ │ │ │ ├── UMPPart.java │ │ │ │ └── UMPPartId.java │ │ │ └── proto/ │ │ │ └── sabr/ │ │ │ ├── misc/ │ │ │ │ └── common.proto │ │ │ ├── other/ │ │ │ │ └── ump_part_id.proto │ │ │ └── videostreaming/ │ │ │ ├── buffered_range.proto │ │ │ ├── client_abr_state.proto │ │ │ ├── crypto_params.proto │ │ │ ├── format_initialization_metadata.proto │ │ │ ├── innertube_request.proto │ │ │ ├── live_metadata.proto │ │ │ ├── media_capabilities.proto │ │ │ ├── media_header.proto │ │ │ ├── next_request_policy.proto │ │ │ ├── onesie_header.proto │ │ │ ├── onesie_header_type.proto │ │ │ ├── onesie_innertube_request.proto │ │ │ ├── onesie_innertube_response.proto │ │ │ ├── onesie_proxy_status.proto │ │ │ ├── onesie_request.proto │ │ │ ├── playback_cookie.proto │ │ │ ├── reload_player_response.proto │ │ │ ├── sabr_context_sending_policy.proto │ │ │ ├── sabr_context_update.proto │ │ │ ├── sabr_error.proto │ │ │ ├── sabr_redirect.proto │ │ │ ├── sabr_seek.proto │ │ │ ├── stream_protection_status.proto │ │ │ ├── streamer_context.proto │ │ │ ├── time_range.proto │ │ │ └── video_playback_abr_request.proto │ │ ├── smoothstreaming/ │ │ │ ├── README.md │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── source/ │ │ │ │ └── smoothstreaming/ │ │ │ │ ├── DefaultSsChunkSource.java │ │ │ │ ├── SsChunkSource.java │ │ │ │ ├── SsMediaPeriod.java │ │ │ │ ├── SsMediaSource.java │ │ │ │ ├── manifest/ │ │ │ │ │ ├── SsManifest.java │ │ │ │ │ ├── SsManifestParser.java │ │ │ │ │ └── SsUtil.java │ │ │ │ └── offline/ │ │ │ │ └── SsDownloader.java │ │ │ └── test/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets/ │ │ │ │ ├── sample_ismc_1 │ │ │ │ └── sample_ismc_2 │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── source/ │ │ │ └── smoothstreaming/ │ │ │ ├── SsMediaPeriodTest.java │ │ │ ├── SsTestUtils.java │ │ │ ├── manifest/ │ │ │ │ ├── SsManifestParserTest.java │ │ │ │ └── SsManifestTest.java │ │ │ └── offline/ │ │ │ ├── DownloadHelperTest.java │ │ │ └── SsDownloaderTest.java │ │ └── ui/ │ │ ├── README.md │ │ ├── build.gradle │ │ └── src/ │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── ui/ │ │ │ │ ├── AspectRatioFrameLayout.java │ │ │ │ ├── DebugTextViewHelper.java │ │ │ │ ├── DefaultTimeBar.java │ │ │ │ ├── DefaultTrackNameProvider.java │ │ │ │ ├── DownloadNotificationHelper.java │ │ │ │ ├── DownloadNotificationUtil.java │ │ │ │ ├── PlaybackControlView.java │ │ │ │ ├── PlayerControlView.java │ │ │ │ ├── PlayerNotificationManager.java │ │ │ │ ├── PlayerView.java │ │ │ │ ├── SimpleExoPlayerView.java │ │ │ │ ├── SubtitlePainter.java │ │ │ │ ├── SubtitleView.java │ │ │ │ ├── TimeBar.java │ │ │ │ ├── TrackNameProvider.java │ │ │ │ ├── TrackSelectionDialogBuilder.java │ │ │ │ ├── TrackSelectionView.java │ │ │ │ └── spherical/ │ │ │ │ ├── CanvasRenderer.java │ │ │ │ ├── GlViewGroup.java │ │ │ │ ├── OrientationListener.java │ │ │ │ ├── PointerRenderer.java │ │ │ │ ├── ProjectionRenderer.java │ │ │ │ ├── SceneRenderer.java │ │ │ │ ├── SingleTapListener.java │ │ │ │ ├── SphericalSurfaceView.java │ │ │ │ └── TouchTracker.java │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── exo_edit_mode_logo.xml │ │ │ ├── drawable-anydpi-v21/ │ │ │ │ ├── exo_controls_fullscreen_enter.xml │ │ │ │ ├── exo_controls_fullscreen_exit.xml │ │ │ │ ├── exo_controls_repeat_all.xml │ │ │ │ ├── exo_controls_repeat_off.xml │ │ │ │ ├── exo_controls_repeat_one.xml │ │ │ │ ├── exo_controls_shuffle_off.xml │ │ │ │ ├── exo_controls_shuffle_on.xml │ │ │ │ ├── exo_icon_fastforward.xml │ │ │ │ ├── exo_icon_next.xml │ │ │ │ ├── exo_icon_pause.xml │ │ │ │ ├── exo_icon_play.xml │ │ │ │ ├── exo_icon_previous.xml │ │ │ │ ├── exo_icon_rewind.xml │ │ │ │ └── exo_icon_stop.xml │ │ │ ├── layout/ │ │ │ │ ├── exo_list_divider.xml │ │ │ │ ├── exo_playback_control_view.xml │ │ │ │ ├── exo_player_control_view.xml │ │ │ │ ├── exo_player_view.xml │ │ │ │ ├── exo_simple_player_view.xml │ │ │ │ └── exo_track_selection_dialog.xml │ │ │ ├── values/ │ │ │ │ ├── attrs.xml │ │ │ │ ├── constants.xml │ │ │ │ ├── drawables.xml │ │ │ │ ├── ids.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── values-af/ │ │ │ │ └── strings.xml │ │ │ ├── values-am/ │ │ │ │ └── strings.xml │ │ │ ├── values-ar/ │ │ │ │ └── strings.xml │ │ │ ├── values-az/ │ │ │ │ └── strings.xml │ │ │ ├── values-b+sr+Latn/ │ │ │ │ └── strings.xml │ │ │ ├── values-be/ │ │ │ │ └── strings.xml │ │ │ ├── values-bg/ │ │ │ │ └── strings.xml │ │ │ ├── values-bn/ │ │ │ │ └── strings.xml │ │ │ ├── values-bs/ │ │ │ │ └── strings.xml │ │ │ ├── values-ca/ │ │ │ │ └── strings.xml │ │ │ ├── values-cs/ │ │ │ │ └── strings.xml │ │ │ ├── values-da/ │ │ │ │ └── strings.xml │ │ │ ├── values-de/ │ │ │ │ └── strings.xml │ │ │ ├── values-el/ │ │ │ │ └── strings.xml │ │ │ ├── values-en-rAU/ │ │ │ │ └── strings.xml │ │ │ ├── values-en-rGB/ │ │ │ │ └── strings.xml │ │ │ ├── values-en-rIN/ │ │ │ │ └── strings.xml │ │ │ ├── values-es/ │ │ │ │ └── strings.xml │ │ │ ├── values-es-rUS/ │ │ │ │ └── strings.xml │ │ │ ├── values-et/ │ │ │ │ └── strings.xml │ │ │ ├── values-eu/ │ │ │ │ └── strings.xml │ │ │ ├── values-fa/ │ │ │ │ └── strings.xml │ │ │ ├── values-fi/ │ │ │ │ └── strings.xml │ │ │ ├── values-fr/ │ │ │ │ └── strings.xml │ │ │ ├── values-fr-rCA/ │ │ │ │ └── strings.xml │ │ │ ├── values-gl/ │ │ │ │ └── strings.xml │ │ │ ├── values-gu/ │ │ │ │ └── strings.xml │ │ │ ├── values-hi/ │ │ │ │ └── strings.xml │ │ │ ├── values-hr/ │ │ │ │ └── strings.xml │ │ │ ├── values-hu/ │ │ │ │ └── strings.xml │ │ │ ├── values-hy/ │ │ │ │ └── strings.xml │ │ │ ├── values-in/ │ │ │ │ └── strings.xml │ │ │ ├── values-is/ │ │ │ │ └── strings.xml │ │ │ ├── values-it/ │ │ │ │ └── strings.xml │ │ │ ├── values-iw/ │ │ │ │ └── strings.xml │ │ │ ├── values-ja/ │ │ │ │ └── strings.xml │ │ │ ├── values-ka/ │ │ │ │ └── strings.xml │ │ │ ├── values-kk/ │ │ │ │ └── strings.xml │ │ │ ├── values-km/ │ │ │ │ └── strings.xml │ │ │ ├── values-kn/ │ │ │ │ └── strings.xml │ │ │ ├── values-ko/ │ │ │ │ └── strings.xml │ │ │ ├── values-ky/ │ │ │ │ └── strings.xml │ │ │ ├── values-lo/ │ │ │ │ └── strings.xml │ │ │ ├── values-lt/ │ │ │ │ └── strings.xml │ │ │ ├── values-lv/ │ │ │ │ └── strings.xml │ │ │ ├── values-mk/ │ │ │ │ └── strings.xml │ │ │ ├── values-ml/ │ │ │ │ └── strings.xml │ │ │ ├── values-mn/ │ │ │ │ └── strings.xml │ │ │ ├── values-mr/ │ │ │ │ └── strings.xml │ │ │ ├── values-ms/ │ │ │ │ └── strings.xml │ │ │ ├── values-my/ │ │ │ │ └── strings.xml │ │ │ ├── values-nb/ │ │ │ │ └── strings.xml │ │ │ ├── values-ne/ │ │ │ │ └── strings.xml │ │ │ ├── values-nl/ │ │ │ │ └── strings.xml │ │ │ ├── values-pa/ │ │ │ │ └── strings.xml │ │ │ ├── values-pl/ │ │ │ │ └── strings.xml │ │ │ ├── values-pt/ │ │ │ │ └── strings.xml │ │ │ ├── values-pt-rPT/ │ │ │ │ └── strings.xml │ │ │ ├── values-ro/ │ │ │ │ └── strings.xml │ │ │ ├── values-ru/ │ │ │ │ └── strings.xml │ │ │ ├── values-si/ │ │ │ │ └── strings.xml │ │ │ ├── values-sk/ │ │ │ │ └── strings.xml │ │ │ ├── values-sl/ │ │ │ │ └── strings.xml │ │ │ ├── values-sq/ │ │ │ │ └── strings.xml │ │ │ ├── values-sr/ │ │ │ │ └── strings.xml │ │ │ ├── values-sv/ │ │ │ │ └── strings.xml │ │ │ ├── values-sw/ │ │ │ │ └── strings.xml │ │ │ ├── values-ta/ │ │ │ │ └── strings.xml │ │ │ ├── values-te/ │ │ │ │ └── strings.xml │ │ │ ├── values-th/ │ │ │ │ └── strings.xml │ │ │ ├── values-tl/ │ │ │ │ └── strings.xml │ │ │ ├── values-tr/ │ │ │ │ └── strings.xml │ │ │ ├── values-uk/ │ │ │ │ └── strings.xml │ │ │ ├── values-ur/ │ │ │ │ └── strings.xml │ │ │ ├── values-uz/ │ │ │ │ └── strings.xml │ │ │ ├── values-vi/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rCN/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rHK/ │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rTW/ │ │ │ │ └── strings.xml │ │ │ └── values-zu/ │ │ │ └── strings.xml │ │ └── test/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── google/ │ │ └── android/ │ │ └── exoplayer2/ │ │ └── ui/ │ │ └── spherical/ │ │ ├── CanvasRendererTest.java │ │ └── TouchTrackerTest.java │ ├── playbacktests/ │ │ ├── build.gradle │ │ └── src/ │ │ ├── androidTest/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── android/ │ │ │ └── exoplayer2/ │ │ │ └── playbacktests/ │ │ │ └── gts/ │ │ │ ├── CommonEncryptionDrmTest.java │ │ │ ├── DashDownloadTest.java │ │ │ ├── DashStreamingTest.java │ │ │ ├── DashTestData.java │ │ │ ├── DashTestRunner.java │ │ │ ├── DashWidevineOfflineTest.java │ │ │ └── EnumerateDecodersTest.java │ │ └── main/ │ │ └── AndroidManifest.xml │ ├── publish.gradle │ ├── settings.gradle │ ├── testutils/ │ │ ├── build.gradle │ │ └── src/ │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── google/ │ │ │ │ └── android/ │ │ │ │ └── exoplayer2/ │ │ │ │ └── testutil/ │ │ │ │ ├── Action.java │ │ │ │ ├── ActionSchedule.java │ │ │ │ ├── AutoAdvancingFakeClock.java │ │ │ │ ├── DebugRenderersFactory.java │ │ │ │ ├── DecoderCountersUtil.java │ │ │ │ ├── DummyMainThread.java │ │ │ │ ├── Dumper.java │ │ │ │ ├── ExoHostedTest.java │ │ │ │ ├── ExoPlayerTestRunner.java │ │ │ │ ├── ExtractorAsserts.java │ │ │ │ ├── FakeAdaptiveDataSet.java │ │ │ │ ├── FakeAdaptiveMediaPeriod.java │ │ │ │ ├── FakeAdaptiveMediaSource.java │ │ │ │ ├── FakeChunkSource.java │ │ │ │ ├── FakeClock.java │ │ │ │ ├── FakeDataSet.java │ │ │ │ ├── FakeDataSource.java │ │ │ │ ├── FakeExtractorInput.java │ │ │ │ ├── FakeExtractorOutput.java │ │ │ │ ├── FakeMediaPeriod.java │ │ │ │ ├── FakeMediaSource.java │ │ │ │ ├── FakeRenderer.java │ │ │ │ ├── FakeSampleStream.java │ │ │ │ ├── FakeTimeline.java │ │ │ │ ├── FakeTrackOutput.java │ │ │ │ ├── HostActivity.java │ │ │ │ ├── LogcatMetricsLogger.java │ │ │ │ ├── MetricsLogger.java │ │ │ │ └── TestUtil.java │ │ │ └── res/ │ │ │ └── layout/ │ │ │ └── exo_testutils_host_activity.xml │ │ └── test/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── google/ │ │ └── android/ │ │ └── exoplayer2/ │ │ └── testutil/ │ │ ├── FakeAdaptiveDataSetTest.java │ │ ├── FakeClockTest.java │ │ ├── FakeDataSetTest.java │ │ └── FakeDataSourceTest.java │ └── testutils_robolectric/ │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── google/ │ └── android/ │ └── exoplayer2/ │ └── testutil/ │ ├── CacheAsserts.java │ ├── DefaultRenderersFactoryAsserts.java │ ├── FakeMediaChunk.java │ ├── FakeMediaChunkIterator.java │ ├── FakeMediaClockRenderer.java │ ├── FakeShuffleOrder.java │ ├── FakeTrackSelection.java │ ├── FakeTrackSelector.java │ ├── MediaPeriodAsserts.java │ ├── MediaSourceTestRunner.java │ ├── OggTestData.java │ ├── RobolectricUtil.java │ ├── StubExoPlayer.java │ ├── TestDownloadManagerListener.java │ └── TimelineAsserts.java ├── fastlane/ │ └── metadata/ │ └── android/ │ └── en-US/ │ ├── full_description.txt │ └── short_description.txt ├── filepicker-lib/ │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── arte/ │ │ └── programar/ │ │ └── materialfile/ │ │ ├── MaterialFilePicker.java │ │ ├── filter/ │ │ │ ├── CompositeFilter.java │ │ │ ├── FileFilter.java │ │ │ ├── HiddenFilter.java │ │ │ └── PatternFilter.java │ │ ├── ui/ │ │ │ ├── DirectoryAdapter.java │ │ │ ├── DirectoryFragment.java │ │ │ ├── FilePickerActivity.java │ │ │ ├── OnItemClickListener.java │ │ │ └── ThrottleClickListener.java │ │ ├── utils/ │ │ │ ├── FileComparator.java │ │ │ ├── FileTypeUtils.java │ │ │ └── FileUtils.java │ │ └── widget/ │ │ └── EmptyRecyclerView.java │ └── res/ │ ├── drawable/ │ │ ├── bg_clickable.xml │ │ ├── ic_app_apk.xml │ │ ├── ic_app_certificate.xml │ │ ├── ic_app_compress.xml │ │ ├── ic_app_database.xml │ │ ├── ic_app_directory.xml │ │ ├── ic_app_document.xml │ │ ├── ic_app_drawing.xml │ │ ├── ic_app_file.xml │ │ ├── ic_app_image.xml │ │ ├── ic_app_json.xml │ │ ├── ic_app_music.xml │ │ ├── ic_app_pdf.xml │ │ ├── ic_app_presentation.xml │ │ ├── ic_app_spreadsheet.xml │ │ ├── ic_app_video.xml │ │ └── ic_close.xml │ ├── drawable-night/ │ │ └── ic_close.xml │ ├── drawable-v21/ │ │ └── bg_clickable.xml │ ├── layout/ │ │ ├── activity_file_picker.xml │ │ ├── fragment_directory.xml │ │ └── item_file.xml │ ├── values/ │ │ ├── attr.xml │ │ ├── colors.xml │ │ ├── dimen.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-cs/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-night/ │ │ ├── colors.xml │ │ └── styles.xml │ ├── values-night-v21/ │ │ └── styles.xml │ ├── values-night-v23/ │ │ └── styles.xml │ ├── values-night-v27/ │ │ └── styles.xml │ ├── values-night-v29/ │ │ └── styles.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sk/ │ │ └── strings.xml │ ├── values-v19/ │ │ └── styles.xml │ ├── values-v21/ │ │ └── styles.xml │ ├── values-v23/ │ │ └── styles.xml │ ├── values-v27/ │ │ └── styles.xml │ ├── values-v29/ │ │ └── styles.xml │ └── values-zh/ │ └── strings.xml ├── fragment-1.1.0/ │ ├── .gitignore │ ├── LICENSE │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── androidx/ │ └── fragment/ │ └── app/ │ ├── BackStackRecord.java │ ├── BackStackState.java │ ├── DialogFragment.java │ ├── Fragment.java │ ├── FragmentActivity.java │ ├── FragmentContainer.java │ ├── FragmentController.java │ ├── FragmentFactory.java │ ├── FragmentHostCallback.java │ ├── FragmentManager.java │ ├── FragmentManagerImpl.java │ ├── FragmentManagerNonConfig.java │ ├── FragmentManagerState.java │ ├── FragmentManagerViewModel.java │ ├── FragmentPagerAdapter.java │ ├── FragmentState.java │ ├── FragmentStatePagerAdapter.java │ ├── FragmentTabHost.java │ ├── FragmentTransaction.java │ ├── FragmentTransition.java │ ├── FragmentTransitionCompat21.java │ ├── FragmentTransitionImpl.java │ ├── FragmentViewLifecycleOwner.java │ ├── ListFragment.java │ └── SuperNotCalledException.java ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── leanback-1.0.0/ │ ├── .gitignore │ ├── LICENSE │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── androidx/ │ │ └── leanback/ │ │ ├── animation/ │ │ │ ├── LogAccelerateInterpolator.java │ │ │ └── LogDecelerateInterpolator.java │ │ ├── app/ │ │ │ ├── BackgroundFragment.java │ │ │ ├── BackgroundManager.java │ │ │ ├── BaseFragment.java │ │ │ ├── BaseRowFragment.java │ │ │ ├── BaseRowSupportFragment.java │ │ │ ├── BaseSupportFragment.java │ │ │ ├── BrandedFragment.java │ │ │ ├── BrandedSupportFragment.java │ │ │ ├── BrowseFragment.java │ │ │ ├── BrowseSupportFragment.java │ │ │ ├── DetailsBackgroundVideoHelper.java │ │ │ ├── DetailsFragment.java │ │ │ ├── DetailsFragmentBackgroundController.java │ │ │ ├── DetailsSupportFragment.java │ │ │ ├── DetailsSupportFragmentBackgroundController.java │ │ │ ├── ErrorFragment.java │ │ │ ├── ErrorSupportFragment.java │ │ │ ├── FragmentUtil.java │ │ │ ├── GuidedStepFragment.java │ │ │ ├── GuidedStepRootLayout.java │ │ │ ├── GuidedStepSupportFragment.java │ │ │ ├── HeadersFragment.java │ │ │ ├── HeadersSupportFragment.java │ │ │ ├── ListRowDataAdapter.java │ │ │ ├── OnboardingFragment.java │ │ │ ├── OnboardingSupportFragment.java │ │ │ ├── PermissionHelper.java │ │ │ ├── PlaybackFragment.java │ │ │ ├── PlaybackFragmentGlueHost.java │ │ │ ├── PlaybackSupportFragment.java │ │ │ ├── PlaybackSupportFragmentGlueHost.java │ │ │ ├── ProgressBarManager.java │ │ │ ├── RowsFragment.java │ │ │ ├── RowsSupportFragment.java │ │ │ ├── SearchFragment.java │ │ │ ├── SearchSupportFragment.java │ │ │ ├── VerticalGridFragment.java │ │ │ ├── VerticalGridSupportFragment.java │ │ │ ├── VideoFragment.java │ │ │ ├── VideoFragmentGlueHost.java │ │ │ ├── VideoSupportFragment.java │ │ │ ├── VideoSupportFragmentGlueHost.java │ │ │ └── package-info.java │ │ ├── database/ │ │ │ └── CursorMapper.java │ │ ├── graphics/ │ │ │ ├── BoundsRule.java │ │ │ ├── ColorFilterCache.java │ │ │ ├── ColorFilterDimmer.java │ │ │ ├── ColorOverlayDimmer.java │ │ │ ├── CompositeDrawable.java │ │ │ └── FitWidthBitmapDrawable.java │ │ ├── media/ │ │ │ ├── MediaControllerAdapter.java │ │ │ ├── MediaControllerGlue.java │ │ │ ├── MediaPlayerAdapter.java │ │ │ ├── MediaPlayerGlue.java │ │ │ ├── PlaybackBannerControlGlue.java │ │ │ ├── PlaybackBaseControlGlue.java │ │ │ ├── PlaybackControlGlue.java │ │ │ ├── PlaybackGlue.java │ │ │ ├── PlaybackGlueHost.java │ │ │ ├── PlaybackTransportControlGlue.java │ │ │ ├── PlayerAdapter.java │ │ │ └── SurfaceHolderGlueHost.java │ │ ├── package-info.java │ │ ├── system/ │ │ │ └── Settings.java │ │ ├── transition/ │ │ │ ├── CustomChangeBounds.java │ │ │ ├── FadeAndShortSlide.java │ │ │ ├── LeanbackTransitionHelper.java │ │ │ ├── ParallaxTransition.java │ │ │ ├── Scale.java │ │ │ ├── SlideKitkat.java │ │ │ ├── SlideNoPropagation.java │ │ │ ├── TransitionEpicenterCallback.java │ │ │ ├── TransitionHelper.java │ │ │ ├── TransitionListener.java │ │ │ └── TranslationAnimationCreator.java │ │ ├── util/ │ │ │ ├── MathUtil.java │ │ │ └── StateMachine.java │ │ └── widget/ │ │ ├── AbstractDetailsDescriptionPresenter.java │ │ ├── AbstractMediaItemPresenter.java │ │ ├── AbstractMediaListHeaderPresenter.java │ │ ├── Action.java │ │ ├── ActionPresenterSelector.java │ │ ├── ArrayObjectAdapter.java │ │ ├── BackgroundHelper.java │ │ ├── BaseCardView.java │ │ ├── BaseGridView.java │ │ ├── BaseOnItemViewClickedListener.java │ │ ├── BaseOnItemViewSelectedListener.java │ │ ├── BrowseFrameLayout.java │ │ ├── BrowseRowsFrameLayout.java │ │ ├── CheckableImageView.java │ │ ├── ClassPresenterSelector.java │ │ ├── ControlBar.java │ │ ├── ControlBarPresenter.java │ │ ├── ControlButtonPresenterSelector.java │ │ ├── CursorObjectAdapter.java │ │ ├── DetailsOverviewLogoPresenter.java │ │ ├── DetailsOverviewRow.java │ │ ├── DetailsOverviewRowPresenter.java │ │ ├── DetailsOverviewSharedElementHelper.java │ │ ├── DetailsParallax.java │ │ ├── DetailsParallaxDrawable.java │ │ ├── DiffCallback.java │ │ ├── DividerPresenter.java │ │ ├── DividerRow.java │ │ ├── FacetProvider.java │ │ ├── FacetProviderAdapter.java │ │ ├── FocusHighlight.java │ │ ├── FocusHighlightHandler.java │ │ ├── FocusHighlightHelper.java │ │ ├── ForegroundHelper.java │ │ ├── FragmentAnimationProvider.java │ │ ├── FullWidthDetailsOverviewRowPresenter.java │ │ ├── FullWidthDetailsOverviewSharedElementHelper.java │ │ ├── Grid.java │ │ ├── GridLayoutManager.java │ │ ├── GuidanceStylingRelativeLayout.java │ │ ├── GuidanceStylist.java │ │ ├── GuidedAction.java │ │ ├── GuidedActionAdapter.java │ │ ├── GuidedActionAdapterGroup.java │ │ ├── GuidedActionAutofillSupport.java │ │ ├── GuidedActionDiffCallback.java │ │ ├── GuidedActionEditText.java │ │ ├── GuidedActionItemContainer.java │ │ ├── GuidedActionsRelativeLayout.java │ │ ├── GuidedActionsStylist.java │ │ ├── GuidedDatePickerAction.java │ │ ├── HeaderItem.java │ │ ├── HorizontalGridView.java │ │ ├── HorizontalHoverCardSwitcher.java │ │ ├── ImageCardView.java │ │ ├── ImeKeyMonitor.java │ │ ├── InvisibleRowPresenter.java │ │ ├── ItemAlignment.java │ │ ├── ItemAlignmentFacet.java │ │ ├── ItemAlignmentFacetHelper.java │ │ ├── ItemBridgeAdapter.java │ │ ├── ItemBridgeAdapterShadowOverlayWrapper.java │ │ ├── ListRow.java │ │ ├── ListRowHoverCardView.java │ │ ├── ListRowPresenter.java │ │ ├── ListRowView.java │ │ ├── MediaItemActionPresenter.java │ │ ├── MediaNowPlayingView.java │ │ ├── MediaRowFocusView.java │ │ ├── MultiActionsProvider.java │ │ ├── NonOverlappingFrameLayout.java │ │ ├── NonOverlappingLinearLayout.java │ │ ├── NonOverlappingLinearLayoutWithForeground.java │ │ ├── NonOverlappingRelativeLayout.java │ │ ├── NonOverlappingView.java │ │ ├── ObjectAdapter.java │ │ ├── OnActionClickedListener.java │ │ ├── OnChildLaidOutListener.java │ │ ├── OnChildSelectedListener.java │ │ ├── OnChildViewHolderSelectedListener.java │ │ ├── OnItemViewClickedListener.java │ │ ├── OnItemViewSelectedListener.java │ │ ├── PageRow.java │ │ ├── PagingIndicator.java │ │ ├── Parallax.java │ │ ├── ParallaxEffect.java │ │ ├── ParallaxTarget.java │ │ ├── PersistentFocusWrapper.java │ │ ├── PlaybackControlsPresenter.java │ │ ├── PlaybackControlsRow.java │ │ ├── PlaybackControlsRowPresenter.java │ │ ├── PlaybackControlsRowView.java │ │ ├── PlaybackRowPresenter.java │ │ ├── PlaybackSeekDataProvider.java │ │ ├── PlaybackSeekUi.java │ │ ├── PlaybackTransportRowPresenter.java │ │ ├── PlaybackTransportRowView.java │ │ ├── Presenter.java │ │ ├── PresenterSelector.java │ │ ├── PresenterSwitcher.java │ │ ├── RecyclerViewParallax.java │ │ ├── ResizingTextView.java │ │ ├── RoundedRectHelper.java │ │ ├── RoundedRectHelperApi21.java │ │ ├── Row.java │ │ ├── RowContainerView.java │ │ ├── RowHeaderPresenter.java │ │ ├── RowHeaderView.java │ │ ├── RowPresenter.java │ │ ├── ScaleFrameLayout.java │ │ ├── SearchBar.java │ │ ├── SearchEditText.java │ │ ├── SearchOrbView.java │ │ ├── SectionRow.java │ │ ├── SeekBar.java │ │ ├── ShadowHelper.java │ │ ├── ShadowHelperApi21.java │ │ ├── ShadowOverlayContainer.java │ │ ├── ShadowOverlayHelper.java │ │ ├── SinglePresenterSelector.java │ │ ├── SingleRow.java │ │ ├── SparseArrayObjectAdapter.java │ │ ├── SpeechOrbView.java │ │ ├── SpeechRecognitionCallback.java │ │ ├── StaggeredGrid.java │ │ ├── StaggeredGridDefault.java │ │ ├── StaticShadowHelper.java │ │ ├── StreamingTextView.java │ │ ├── ThumbsBar.java │ │ ├── TitleHelper.java │ │ ├── TitleView.java │ │ ├── TitleViewAdapter.java │ │ ├── Util.java │ │ ├── VerticalGridPresenter.java │ │ ├── VerticalGridView.java │ │ ├── VideoSurfaceView.java │ │ ├── ViewHolderTask.java │ │ ├── ViewsStateBundle.java │ │ ├── Visibility.java │ │ ├── WindowAlignment.java │ │ ├── package-info.java │ │ └── picker/ │ │ ├── DatePicker.java │ │ ├── Picker.java │ │ ├── PickerColumn.java │ │ ├── PickerUtility.java │ │ └── TimePicker.java │ └── res/ │ ├── anim/ │ │ ├── lb_decelerator_2.xml │ │ └── lb_decelerator_4.xml │ ├── animator/ │ │ ├── lb_guidedactions_item_pressed.xml │ │ ├── lb_guidedactions_item_unpressed.xml │ │ ├── lb_guidedstep_slide_down.xml │ │ ├── lb_guidedstep_slide_up.xml │ │ ├── lb_onboarding_description_enter.xml │ │ ├── lb_onboarding_logo_enter.xml │ │ ├── lb_onboarding_logo_exit.xml │ │ ├── lb_onboarding_page_indicator_enter.xml │ │ ├── lb_onboarding_page_indicator_fade_in.xml │ │ ├── lb_onboarding_page_indicator_fade_out.xml │ │ ├── lb_onboarding_start_button_fade_in.xml │ │ ├── lb_onboarding_start_button_fade_out.xml │ │ ├── lb_onboarding_title_enter.xml │ │ ├── lb_playback_bg_fade_in.xml │ │ ├── lb_playback_bg_fade_out.xml │ │ ├── lb_playback_controls_fade_in.xml │ │ ├── lb_playback_controls_fade_out.xml │ │ ├── lb_playback_description_fade_in.xml │ │ ├── lb_playback_description_fade_out.xml │ │ ├── lb_playback_rows_fade_in.xml │ │ └── lb_playback_rows_fade_out.xml │ ├── animator-v21/ │ │ ├── lb_onboarding_description_enter.xml │ │ ├── lb_onboarding_logo_enter.xml │ │ ├── lb_onboarding_logo_exit.xml │ │ ├── lb_onboarding_page_indicator_enter.xml │ │ ├── lb_onboarding_title_enter.xml │ │ ├── lb_playback_bg_fade_in.xml │ │ ├── lb_playback_bg_fade_out.xml │ │ └── lb_playback_description_fade_out.xml │ ├── drawable/ │ │ ├── lb_background.xml │ │ ├── lb_card_foreground.xml │ │ ├── lb_control_button_primary.xml │ │ ├── lb_control_button_secondary.xml │ │ ├── lb_headers_right_fading.xml │ │ ├── lb_onboarding_start_button_background.xml │ │ ├── lb_playback_now_playing_bar.xml │ │ ├── lb_playback_progress_bar.xml │ │ ├── lb_search_orb.xml │ │ └── lb_speech_orb.xml │ ├── drawable-v21/ │ │ ├── lb_action_bg.xml │ │ ├── lb_card_foreground.xml │ │ ├── lb_control_button_primary.xml │ │ ├── lb_control_button_secondary.xml │ │ └── lb_selectable_item_rounded_rect.xml │ ├── layout/ │ │ ├── lb_action_1_line.xml │ │ ├── lb_action_2_lines.xml │ │ ├── lb_background_window.xml │ │ ├── lb_browse_fragment.xml │ │ ├── lb_browse_title.xml │ │ ├── lb_control_bar.xml │ │ ├── lb_control_button_primary.xml │ │ ├── lb_control_button_secondary.xml │ │ ├── lb_details_description.xml │ │ ├── lb_details_fragment.xml │ │ ├── lb_details_overview.xml │ │ ├── lb_divider.xml │ │ ├── lb_error_fragment.xml │ │ ├── lb_fullwidth_details_overview.xml │ │ ├── lb_fullwidth_details_overview_logo.xml │ │ ├── lb_guidance.xml │ │ ├── lb_guidedactions.xml │ │ ├── lb_guidedactions_datepicker_item.xml │ │ ├── lb_guidedactions_item.xml │ │ ├── lb_guidedbuttonactions.xml │ │ ├── lb_guidedstep_background.xml │ │ ├── lb_guidedstep_fragment.xml │ │ ├── lb_header.xml │ │ ├── lb_headers_fragment.xml │ │ ├── lb_image_card_view.xml │ │ ├── lb_image_card_view_themed_badge_left.xml │ │ ├── lb_image_card_view_themed_badge_right.xml │ │ ├── lb_image_card_view_themed_content.xml │ │ ├── lb_image_card_view_themed_title.xml │ │ ├── lb_list_row.xml │ │ ├── lb_list_row_hovercard.xml │ │ ├── lb_media_item_number_view_flipper.xml │ │ ├── lb_media_list_header.xml │ │ ├── lb_onboarding_fragment.xml │ │ ├── lb_picker.xml │ │ ├── lb_picker_column.xml │ │ ├── lb_picker_item.xml │ │ ├── lb_picker_separator.xml │ │ ├── lb_playback_controls.xml │ │ ├── lb_playback_controls_row.xml │ │ ├── lb_playback_fragment.xml │ │ ├── lb_playback_now_playing_bars.xml │ │ ├── lb_playback_transport_controls.xml │ │ ├── lb_playback_transport_controls_row.xml │ │ ├── lb_row_container.xml │ │ ├── lb_row_header.xml │ │ ├── lb_row_media_item.xml │ │ ├── lb_row_media_item_action.xml │ │ ├── lb_rows_fragment.xml │ │ ├── lb_search_bar.xml │ │ ├── lb_search_fragment.xml │ │ ├── lb_search_orb.xml │ │ ├── lb_section_header.xml │ │ ├── lb_shadow.xml │ │ ├── lb_speech_orb.xml │ │ ├── lb_title_view.xml │ │ ├── lb_vertical_grid.xml │ │ ├── lb_vertical_grid_fragment.xml │ │ ├── lb_video_surface.xml │ │ └── video_surface_fragment.xml │ ├── raw/ │ │ ├── lb_voice_failure.ogg │ │ ├── lb_voice_no_input.ogg │ │ ├── lb_voice_open.ogg │ │ └── lb_voice_success.ogg │ ├── transition-v19/ │ │ ├── lb_browse_headers_in.xml │ │ └── lb_browse_headers_out.xml │ ├── transition-v21/ │ │ ├── lb_browse_enter_transition.xml │ │ ├── lb_browse_entrance_transition.xml │ │ ├── lb_browse_headers_in.xml │ │ ├── lb_browse_headers_out.xml │ │ ├── lb_browse_return_transition.xml │ │ ├── lb_details_enter_transition.xml │ │ ├── lb_details_return_transition.xml │ │ ├── lb_enter_transition.xml │ │ ├── lb_guidedstep_activity_enter.xml │ │ ├── lb_guidedstep_activity_enter_bottom.xml │ │ ├── lb_return_transition.xml │ │ ├── lb_shared_element_enter_transition.xml │ │ ├── lb_shared_element_return_transition.xml │ │ ├── lb_title_in.xml │ │ ├── lb_title_out.xml │ │ ├── lb_vertical_grid_enter_transition.xml │ │ ├── lb_vertical_grid_entrance_transition.xml │ │ └── lb_vertical_grid_return_transition.xml │ ├── values/ │ │ └── values.xml │ ├── values-af/ │ │ └── values-af.xml │ ├── values-am/ │ │ └── values-am.xml │ ├── values-ar/ │ │ └── values-ar.xml │ ├── values-as/ │ │ └── values-as.xml │ ├── values-az/ │ │ └── values-az.xml │ ├── values-b+sr+Latn/ │ │ └── values-b+sr+Latn.xml │ ├── values-be/ │ │ └── values-be.xml │ ├── values-bg/ │ │ └── values-bg.xml │ ├── values-bn/ │ │ └── values-bn.xml │ ├── values-bs/ │ │ └── values-bs.xml │ ├── values-ca/ │ │ └── values-ca.xml │ ├── values-cs/ │ │ └── values-cs.xml │ ├── values-da/ │ │ └── values-da.xml │ ├── values-de/ │ │ └── values-de.xml │ ├── values-el/ │ │ └── values-el.xml │ ├── values-en-rAU/ │ │ └── values-en-rAU.xml │ ├── values-en-rCA/ │ │ └── values-en-rCA.xml │ ├── values-en-rGB/ │ │ └── values-en-rGB.xml │ ├── values-en-rIN/ │ │ └── values-en-rIN.xml │ ├── values-en-rXC/ │ │ └── values-en-rXC.xml │ ├── values-es/ │ │ └── values-es.xml │ ├── values-es-rUS/ │ │ └── values-es-rUS.xml │ ├── values-et/ │ │ └── values-et.xml │ ├── values-eu/ │ │ └── values-eu.xml │ ├── values-fa/ │ │ └── values-fa.xml │ ├── values-fi/ │ │ └── values-fi.xml │ ├── values-fr/ │ │ └── values-fr.xml │ ├── values-fr-rCA/ │ │ └── values-fr-rCA.xml │ ├── values-gl/ │ │ └── values-gl.xml │ ├── values-gu/ │ │ └── values-gu.xml │ ├── values-hi/ │ │ └── values-hi.xml │ ├── values-hr/ │ │ └── values-hr.xml │ ├── values-hu/ │ │ └── values-hu.xml │ ├── values-hy/ │ │ └── values-hy.xml │ ├── values-in/ │ │ └── values-in.xml │ ├── values-is/ │ │ └── values-is.xml │ ├── values-it/ │ │ └── values-it.xml │ ├── values-iw/ │ │ └── values-iw.xml │ ├── values-ja/ │ │ └── values-ja.xml │ ├── values-ka/ │ │ └── values-ka.xml │ ├── values-kk/ │ │ └── values-kk.xml │ ├── values-km/ │ │ └── values-km.xml │ ├── values-kn/ │ │ └── values-kn.xml │ ├── values-ko/ │ │ └── values-ko.xml │ ├── values-ky/ │ │ └── values-ky.xml │ ├── values-ldrtl-v17/ │ │ └── values-ldrtl-v17.xml │ ├── values-lo/ │ │ └── values-lo.xml │ ├── values-lt/ │ │ └── values-lt.xml │ ├── values-lv/ │ │ └── values-lv.xml │ ├── values-mk/ │ │ └── values-mk.xml │ ├── values-ml/ │ │ └── values-ml.xml │ ├── values-mn/ │ │ └── values-mn.xml │ ├── values-mr/ │ │ └── values-mr.xml │ ├── values-ms/ │ │ └── values-ms.xml │ ├── values-my/ │ │ └── values-my.xml │ ├── values-nb/ │ │ └── values-nb.xml │ ├── values-ne/ │ │ └── values-ne.xml │ ├── values-nl/ │ │ └── values-nl.xml │ ├── values-or/ │ │ └── values-or.xml │ ├── values-pa/ │ │ └── values-pa.xml │ ├── values-pl/ │ │ └── values-pl.xml │ ├── values-pt/ │ │ └── values-pt.xml │ ├── values-pt-rBR/ │ │ └── values-pt-rBR.xml │ ├── values-pt-rPT/ │ │ └── values-pt-rPT.xml │ ├── values-ro/ │ │ └── values-ro.xml │ ├── values-ru/ │ │ └── values-ru.xml │ ├── values-si/ │ │ └── values-si.xml │ ├── values-sk/ │ │ └── values-sk.xml │ ├── values-sl/ │ │ └── values-sl.xml │ ├── values-sq/ │ │ └── values-sq.xml │ ├── values-sr/ │ │ └── values-sr.xml │ ├── values-sv/ │ │ └── values-sv.xml │ ├── values-sw/ │ │ └── values-sw.xml │ ├── values-ta/ │ │ └── values-ta.xml │ ├── values-te/ │ │ └── values-te.xml │ ├── values-th/ │ │ └── values-th.xml │ ├── values-tl/ │ │ └── values-tl.xml │ ├── values-tr/ │ │ └── values-tr.xml │ ├── values-uk/ │ │ └── values-uk.xml │ ├── values-ur/ │ │ └── values-ur.xml │ ├── values-uz/ │ │ └── values-uz.xml │ ├── values-v18/ │ │ └── values-v18.xml │ ├── values-v19/ │ │ └── values-v19.xml │ ├── values-v21/ │ │ └── values-v21.xml │ ├── values-v22/ │ │ └── values-v22.xml │ ├── values-vi/ │ │ └── values-vi.xml │ ├── values-zh-rCN/ │ │ └── values-zh-rCN.xml │ ├── values-zh-rHK/ │ │ └── values-zh-rHK.xml │ ├── values-zh-rTW/ │ │ └── values-zh-rTW.xml │ └── values-zu/ │ └── values-zu.xml ├── leanbackassistant/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── liskovsoft/ │ │ │ └── leanbackassistant/ │ │ │ ├── channels/ │ │ │ │ ├── ChannelsProvider.java │ │ │ │ ├── UpdateChannelsJobService.java │ │ │ │ ├── UpdateChannelsReceiver.java │ │ │ │ ├── UpdateChannelsTask.java │ │ │ │ └── UpdateChannelsWorker.java │ │ │ ├── media/ │ │ │ │ ├── Clip.java │ │ │ │ ├── ClipService.java │ │ │ │ ├── ClipServiceCached.java │ │ │ │ ├── Playlist.java │ │ │ │ └── scheduler/ │ │ │ │ └── ClipData.java │ │ │ ├── recommendations/ │ │ │ │ ├── RecommendationBuilder.java │ │ │ │ └── RecommendationsProvider.java │ │ │ ├── search/ │ │ │ │ ├── MockDatabase.java │ │ │ │ ├── SearchableActivity.java │ │ │ │ └── VideoContentProvider.java │ │ │ └── utils/ │ │ │ └── AppUtil.java │ │ └── res/ │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ └── xml/ │ │ └── searchable.xml │ ├── stbeta/ │ │ ├── AndroidManifest.xml │ │ └── res/ │ │ ├── values/ │ │ │ └── strings.xml │ │ └── xml/ │ │ └── searchable.xml │ ├── stfdroid/ │ │ ├── AndroidManifest.xml │ │ └── res/ │ │ ├── values/ │ │ │ └── strings.xml │ │ └── xml/ │ │ └── searchable.xml │ └── ststable/ │ ├── AndroidManifest.xml │ └── res/ │ ├── values/ │ │ └── strings.xml │ └── xml/ │ └── searchable.xml ├── settings.gradle ├── slidableactivity/ │ ├── .gitignore │ ├── LICENSE.md │ ├── README.md │ ├── build.gradle │ ├── gradle.properties │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── r0adkll/ │ │ │ └── slidr/ │ │ │ ├── ColorPanelSlideListener.java │ │ │ ├── ConfigPanelSlideListener.java │ │ │ ├── FragmentPanelSlideListener.java │ │ │ ├── Slidr.java │ │ │ ├── model/ │ │ │ │ ├── SlidrConfig.java │ │ │ │ ├── SlidrInterface.java │ │ │ │ ├── SlidrListener.java │ │ │ │ ├── SlidrListenerAdapter.java │ │ │ │ └── SlidrPosition.java │ │ │ ├── util/ │ │ │ │ └── ViewDragHelper.java │ │ │ └── widget/ │ │ │ ├── ScrimRenderer.java │ │ │ └── SliderPanel.java │ │ └── res/ │ │ └── values/ │ │ └── ids.xml │ └── test/ │ └── java/ │ └── com/ │ └── r0adkll/ │ └── slidr/ │ └── widget/ │ ├── ScrimRendererTest.java │ └── SliderPanelTest.java └── smarttubetv/ ├── build.gradle ├── google-services.json ├── multidex-keep.pro ├── proguard-rules.pro └── src/ ├── main/ │ ├── AndroidManifest.xml │ ├── assets/ │ │ └── common.properties │ ├── java/ │ │ └── com/ │ │ └── liskovsoft/ │ │ └── smartyoutubetv2/ │ │ └── tv/ │ │ ├── adapter/ │ │ │ ├── DeferredVideoGroupObjectAdapter.java │ │ │ ├── HeaderVideoGroupObjectAdapter.java │ │ │ ├── VideoGroupObjectAdapter.java │ │ │ └── vineyard/ │ │ │ ├── PaginationAdapter.java │ │ │ └── TagAdapter.java │ │ ├── launchers/ │ │ │ ├── ChannelsLauncherActivity.java │ │ │ ├── GamesLauncherActivity.java │ │ │ ├── HistoryLauncherActivity.java │ │ │ ├── HomeLauncherActivity.java │ │ │ ├── MusicLauncherActivity.java │ │ │ ├── NewsLauncherActivity.java │ │ │ ├── PlaylistsLauncherActivity.java │ │ │ ├── SearchLauncherActivity.java │ │ │ └── SubscriptionsLauncherActivity.java │ │ ├── presenter/ │ │ │ ├── ChannelCardPresenter.java │ │ │ ├── ChannelHeaderPresenter.java │ │ │ ├── CustomListRowPresenter.java │ │ │ ├── CustomVerticalGridPresenter.java │ │ │ ├── DetailsDescriptionPresenter.java │ │ │ ├── GridItemPresenter.java │ │ │ ├── IconHeaderItemPresenter.java │ │ │ ├── SearchFieldPresenter.java │ │ │ ├── SettingsCardPresenter.java │ │ │ ├── ShortsCardPresenter.java │ │ │ ├── TinyCardPresenter.java │ │ │ ├── VideoCardPresenter.java │ │ │ ├── base/ │ │ │ │ ├── LongClickPresenter.java │ │ │ │ └── OnItemLongPressedListener.java │ │ │ └── vineyard/ │ │ │ ├── IconItemPresenter.java │ │ │ ├── LoadingPresenter.java │ │ │ └── TagPresenter.java │ │ ├── ui/ │ │ │ ├── adddevice/ │ │ │ │ ├── AddDeviceActivity.java │ │ │ │ └── AddDeviceFragment.java │ │ │ ├── browse/ │ │ │ │ ├── BrowseActivity.java │ │ │ │ ├── BrowseFragment.java │ │ │ │ ├── BrowseSectionFragmentFactory.java │ │ │ │ ├── CategoryFragmentFactory.java.old │ │ │ │ ├── SectionHeaderItem.java │ │ │ │ ├── dialog/ │ │ │ │ │ └── ErrorDialogFragment.java │ │ │ │ ├── interfaces/ │ │ │ │ │ ├── Section.java │ │ │ │ │ ├── SettingsSection.java │ │ │ │ │ └── VideoSection.java │ │ │ │ ├── settings/ │ │ │ │ │ └── SettingsGridFragment.java │ │ │ │ └── video/ │ │ │ │ ├── GridFragmentHelper.java │ │ │ │ ├── MultiVideoGridFragment.java │ │ │ │ ├── MultipleRowsFragment.java │ │ │ │ ├── ShortsGridFragment.java │ │ │ │ ├── VideoGridFragment.java │ │ │ │ └── VideoRowsFragment.java │ │ │ ├── channel/ │ │ │ │ ├── ChannelActivity.java │ │ │ │ └── ChannelFragment.java │ │ │ ├── channeluploads/ │ │ │ │ ├── ChannelUploadsActivity.java │ │ │ │ └── ChannelUploadsFragment.java │ │ │ ├── common/ │ │ │ │ ├── DisplayUtils.java │ │ │ │ ├── LeanbackActivity.java │ │ │ │ ├── UriBackgroundManager.java │ │ │ │ └── keyhandler/ │ │ │ │ ├── DoubleBackManager.java │ │ │ │ ├── DoubleBackManager2.java │ │ │ │ └── LongClickManager.java │ │ │ ├── dialogs/ │ │ │ │ ├── AppDialogActivity.java │ │ │ │ ├── AppDialogFragment.java │ │ │ │ ├── AppPreferenceManager.java │ │ │ │ └── other/ │ │ │ │ ├── ChatPreference.java │ │ │ │ ├── ChatPreferenceDialogFragment.java │ │ │ │ ├── CommentsPreference.java │ │ │ │ ├── CommentsPreferenceDialogFragment.java │ │ │ │ ├── RadioListPreferenceDialogFragment.java │ │ │ │ ├── StringListPreference.java │ │ │ │ └── StringListPreferenceDialogFragment.java │ │ │ ├── main/ │ │ │ │ ├── MainApplication.java │ │ │ │ └── SplashActivity.java │ │ │ ├── mod/ │ │ │ │ ├── clickable/ │ │ │ │ │ ├── FindAddress.java │ │ │ │ │ ├── LinkifyCompat.java │ │ │ │ │ ├── PatternsCompat.java │ │ │ │ │ └── TextViewLinkHandler.java │ │ │ │ ├── fragments/ │ │ │ │ │ ├── ErrorSupportFragment.java │ │ │ │ │ ├── GridFragment.java │ │ │ │ │ └── MultiGridFragment.java │ │ │ │ └── leanback/ │ │ │ │ ├── headers/ │ │ │ │ │ └── ExtendedHeadersSupportFragment.java │ │ │ │ ├── misc/ │ │ │ │ │ ├── CustomBrowseSupportFragment.java │ │ │ │ │ ├── ProgressBarManager.java │ │ │ │ │ └── SeekBar.java │ │ │ │ ├── playerglue/ │ │ │ │ │ ├── MathUtil.java │ │ │ │ │ ├── framedrops/ │ │ │ │ │ │ ├── PlaybackBaseControlGlue.java │ │ │ │ │ │ └── PlaybackTransportControlGlue.java │ │ │ │ │ ├── seekpreview/ │ │ │ │ │ │ └── ThumbsBar.java │ │ │ │ │ ├── tooltips/ │ │ │ │ │ │ ├── ControlButtonPresenterSelector.java │ │ │ │ │ │ ├── TooltipCompatHandler.java │ │ │ │ │ │ └── TooltipPopup.java │ │ │ │ │ └── tweaks/ │ │ │ │ │ ├── ControlBar.java │ │ │ │ │ ├── ControlBarPresenter.java │ │ │ │ │ ├── MaxControlsVideoPlayerGlue.java │ │ │ │ │ ├── PlaybackControlsPresenter.java │ │ │ │ │ ├── PlaybackTransportRowPresenter.java │ │ │ │ │ └── PlaybackTransportRowView.java │ │ │ │ ├── preference/ │ │ │ │ │ ├── LeanbackListPreferenceDialogFragment.java │ │ │ │ │ ├── LeanbackPreferenceDialogFragment.java │ │ │ │ │ └── LeanbackPreferenceFragmentTransitionHelperApi21.java │ │ │ │ ├── search/ │ │ │ │ │ ├── NoScrollRowsSupportFragment.java │ │ │ │ │ └── SearchSupportFragment.java │ │ │ │ ├── transition/ │ │ │ │ │ ├── FadeAndShortSlide.java │ │ │ │ │ └── TranslationAnimationCreator.java │ │ │ │ └── widget/ │ │ │ │ └── OnActionLongClickedListener.java │ │ │ ├── playback/ │ │ │ │ ├── PlaybackActivity.java │ │ │ │ ├── PlaybackFragment.java │ │ │ │ ├── actions/ │ │ │ │ │ ├── AFRAction.java │ │ │ │ │ ├── ActionHelpers.java │ │ │ │ │ ├── ChannelAction.java │ │ │ │ │ ├── ChatAction.java │ │ │ │ │ ├── ClosedCaptioningAction.java │ │ │ │ │ ├── ContentBlockAction.java │ │ │ │ │ ├── FlipAction.java │ │ │ │ │ ├── HighQualityAction.java │ │ │ │ │ ├── PaddingAction.java │ │ │ │ │ ├── PipAction.java │ │ │ │ │ ├── PlaybackModeAction.java │ │ │ │ │ ├── PlaybackQueueAction.java │ │ │ │ │ ├── PlaylistAddAction.java │ │ │ │ │ ├── RotateAction.java │ │ │ │ │ ├── ScreenDimmingAction.java │ │ │ │ │ ├── SearchAction.java │ │ │ │ │ ├── SeekIntervalAction.java │ │ │ │ │ ├── ShareAction.java │ │ │ │ │ ├── SoundOffAction.java │ │ │ │ │ ├── SubscribeAction.java │ │ │ │ │ ├── ThumbsDownAction.java │ │ │ │ │ ├── ThumbsUpAction.java │ │ │ │ │ ├── TwoStateAction.java │ │ │ │ │ ├── VideoInfoAction.java │ │ │ │ │ ├── VideoSpeedAction.java │ │ │ │ │ ├── VideoStatsAction.java │ │ │ │ │ └── VideoZoomAction.java │ │ │ │ ├── mod/ │ │ │ │ │ ├── EventsOverridePlaybackFragment.java │ │ │ │ │ ├── SeekModePlaybackFragment.java │ │ │ │ │ └── surface/ │ │ │ │ │ ├── SurfacePlaybackFragment.java │ │ │ │ │ ├── SurfacePlaybackFragmentGlueHost.java │ │ │ │ │ ├── SurfaceViewWrapper.java │ │ │ │ │ ├── SurfaceWrapper.java │ │ │ │ │ ├── TextureViewSurfaceHolder.java │ │ │ │ │ └── TextureViewWrapper.java │ │ │ │ ├── other/ │ │ │ │ │ ├── BackboneQueueNavigator.java │ │ │ │ │ └── VideoPlayerGlue.java │ │ │ │ └── previewtimebar/ │ │ │ │ ├── GlideThumbnailTransformation.java │ │ │ │ ├── StoryboardManager.java │ │ │ │ └── StoryboardSeekDataProvider.java │ │ │ ├── search/ │ │ │ │ └── tags/ │ │ │ │ ├── SearchTagsActivity.java │ │ │ │ ├── SearchTagsFragment.java │ │ │ │ └── vineyard/ │ │ │ │ └── SearchTagsFragmentBase.java │ │ │ ├── signin/ │ │ │ │ ├── SignInActivity.java │ │ │ │ └── SignInFragment.java │ │ │ ├── webbrowser/ │ │ │ │ ├── WebBrowserActivity.java │ │ │ │ └── WebBrowserFragment.java │ │ │ └── widgets/ │ │ │ ├── browse/ │ │ │ │ └── NavigateTitleView.java │ │ │ ├── chat/ │ │ │ │ ├── ChatItemAuthor.java │ │ │ │ ├── ChatItemMessage.java │ │ │ │ └── LiveChatView.java │ │ │ ├── complexcardview/ │ │ │ │ ├── ComplexImageCardView.java │ │ │ │ └── ComplexImageView.java │ │ │ ├── embedplayer/ │ │ │ │ └── EmbedPlayerView.java │ │ │ ├── focus/ │ │ │ │ └── FocusFixBrowseFrameLayout.java │ │ │ ├── layout/ │ │ │ │ ├── TouchHorizontalGridView.java │ │ │ │ └── TouchVerticalGridView.java │ │ │ ├── marqueetextview/ │ │ │ │ ├── HeaderMarqueeTextView.java │ │ │ │ ├── MarqueeTextView.java │ │ │ │ └── TitleMarqueeTextView.java │ │ │ ├── marqueetextviewcompat/ │ │ │ │ ├── HeaderMarqueeTextViewCompat.java │ │ │ │ ├── MarqueeTextViewCompat.java │ │ │ │ └── TitleMarqueeTextViewCompat.java │ │ │ ├── search/ │ │ │ │ ├── LongClickSearchOrbView.java │ │ │ │ └── SearchSettingsOrbView.java │ │ │ ├── speedmarquee/ │ │ │ │ └── SpeedMarquee.java │ │ │ ├── styled/ │ │ │ │ └── CardProgressBar.java │ │ │ ├── test/ │ │ │ │ └── TestVerticalGridView.java │ │ │ ├── time/ │ │ │ │ ├── DateTimeView.java │ │ │ │ └── EndingTimeView.java │ │ │ └── vineyard/ │ │ │ ├── IconCardView.java │ │ │ ├── LoadingCardView.java │ │ │ ├── TagCardView.java │ │ │ └── videoview/ │ │ │ ├── LoopingVideoView.java │ │ │ ├── PreviewCardView.java │ │ │ └── VideoCardView.java │ │ └── util/ │ │ ├── GlideCachingModule.java │ │ ├── LongPressHandler.java │ │ ├── ViewUtil.java │ │ └── vineyard/ │ │ ├── NetworkUtil.java │ │ └── ToastFactory.java │ └── res/ │ ├── anim/ │ │ └── scroll_animation.xml │ ├── drawable/ │ │ ├── lb_search_orb.xml │ │ ├── player_background_controls.xml │ │ ├── player_background_controls_new.xml │ │ ├── player_background_suggestions.xml │ │ ├── progress_bar_grey.xml │ │ ├── progress_bar_red.xml │ │ ├── progress_bar_semi_red.xml │ │ ├── rounded_search_bg.xml │ │ ├── search_bar_cursor.xml │ │ ├── text_bg.xml │ │ ├── tooltip_frame_dark_mod.xml │ │ ├── tooltip_frame_light_mod.xml │ │ └── transparent_dialog_item_bg.xml │ ├── drawable-xhdpi/ │ │ └── default_background_gradient.xml │ ├── layout/ │ │ ├── abc_tooltip.xml │ │ ├── activity_playback.xml │ │ ├── channel_card.xml │ │ ├── channel_card_old.xml │ │ ├── channel_header.xml │ │ ├── chat_preference_fragment.xml │ │ ├── dialog_list_preference_item_multi.xml │ │ ├── fragment_app_settings.xml │ │ ├── fragment_channel.xml │ │ ├── fragment_channel_uploads.xml │ │ ├── fragment_grid.xml │ │ ├── fragment_main.xml │ │ ├── fragment_multi_grid.xml │ │ ├── fragment_playback.xml │ │ ├── fragment_search_tags.xml │ │ ├── fragment_signin.xml │ │ ├── fragment_webbrowser.xml │ │ ├── guidedstep_second_guidance.xml │ │ ├── icon_header_item.xml │ │ ├── lb_browse_title.xml │ │ ├── lb_control_bar.xml │ │ ├── lb_image_card_view.xml │ │ ├── lb_image_card_view_themed_content.xml │ │ ├── lb_image_card_view_themed_title.xml │ │ ├── lb_playback_fragment.xml │ │ ├── lb_playback_transport_controls_row.xml │ │ ├── lb_search_bar.xml │ │ ├── lb_title_view.xml │ │ ├── lb_title_view_logo.xml │ │ ├── lb_vertical_grid.xml │ │ ├── lb_vertical_grid1.xml │ │ ├── lb_vertical_grid2.xml │ │ ├── lb_video_card_view.xml │ │ ├── lb_video_surface.xml │ │ ├── lb_video_texture.xml │ │ ├── leanback_list_preference_fragment.xml │ │ ├── leanback_preference_fragment.xml │ │ ├── search_field.xml │ │ ├── settings_card.xml │ │ ├── text_badge_image_view.xml │ │ ├── text_badge_image_view_red.xml │ │ ├── view_loading_card.xml │ │ ├── view_options_item.xml │ │ ├── view_tag_card.xml │ │ ├── webbrowser.xml │ │ └── widget_preview_card.xml │ ├── layout-ldrtl/ │ │ └── lb_title_view.xml │ ├── raw/ │ │ └── keep.xml │ ├── values/ │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── marqueetextviewcompat.xml │ │ ├── speedmarquee.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ └── themes_old.xml │ └── xml/ │ ├── settings.xml │ └── whisperplay.xml ├── stbeta/ │ └── res/ │ └── values/ │ └── strings.xml ├── stfdroid/ │ └── res/ │ └── values/ │ └── strings.xml └── ststable/ └── res/ └── values/ └── strings.xml