├── .gitignore ├── LICENSE ├── README.md ├── app ├── build.gradle ├── proguard-rules.pro ├── schemas │ └── org.schabi.newpipe.database.AppDatabase │ │ ├── 2.json │ │ ├── 3.json │ │ ├── 4.json │ │ ├── 5.json │ │ └── 6.json └── src │ ├── androidTest │ └── java │ │ └── org │ │ └── schabi │ │ └── newpipe │ │ ├── database │ │ └── DatabaseMigrationTest.kt │ │ ├── error │ │ └── ErrorInfoTest.java │ │ ├── local │ │ ├── history │ │ │ └── HistoryRecordManagerTest.kt │ │ └── playlist │ │ │ └── LocalPlaylistManagerTest.kt │ │ ├── testUtil │ │ ├── TestDatabase.kt │ │ └── TrampolineSchedulerRule.kt │ │ └── util │ │ └── StreamItemAdapterTest.kt │ ├── debug │ ├── AndroidManifest.xml │ └── java │ │ └── org │ │ └── schabi │ │ └── newpipe │ │ ├── DebugApp.kt │ │ └── settings │ │ └── DebugSettingsBVDLeakCanary.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── apache2.html │ │ ├── epl1.html │ │ ├── gpl_3.html │ │ ├── mit.html │ │ └── mpl2.html │ ├── java │ │ ├── androidx │ │ │ └── fragment │ │ │ │ └── app │ │ │ │ └── FragmentStatePagerAdapterMenuWorkaround.java │ │ ├── com │ │ │ └── google │ │ │ │ └── android │ │ │ │ └── material │ │ │ │ └── appbar │ │ │ │ └── FlingBehavior.java │ │ ├── org │ │ │ ├── apache │ │ │ │ └── commons │ │ │ │ │ └── text │ │ │ │ │ └── similarity │ │ │ │ │ └── FuzzyScore.java │ │ │ └── schabi │ │ │ │ └── newpipe │ │ │ │ ├── App.java │ │ │ │ ├── BaseFragment.java │ │ │ │ ├── DownloaderImpl.java │ │ │ │ ├── ExitActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── NewPipeDatabase.java │ │ │ │ ├── NewVersionWorker.kt │ │ │ │ ├── PanicResponderActivity.java │ │ │ │ ├── QueueItemMenuUtil.java │ │ │ │ ├── RouterActivity.java │ │ │ │ ├── about │ │ │ │ ├── AboutActivity.kt │ │ │ │ ├── License.kt │ │ │ │ ├── LicenseFragment.kt │ │ │ │ ├── LicenseFragmentHelper.kt │ │ │ │ ├── SoftwareComponent.kt │ │ │ │ └── StandardLicenses.kt │ │ │ │ ├── database │ │ │ │ ├── AppDatabase.java │ │ │ │ ├── BasicDAO.java │ │ │ │ ├── Converters.kt │ │ │ │ ├── LocalItem.java │ │ │ │ ├── Migrations.java │ │ │ │ ├── feed │ │ │ │ │ ├── dao │ │ │ │ │ │ ├── FeedDAO.kt │ │ │ │ │ │ └── FeedGroupDAO.kt │ │ │ │ │ └── model │ │ │ │ │ │ ├── FeedEntity.kt │ │ │ │ │ │ ├── FeedGroupEntity.kt │ │ │ │ │ │ ├── FeedGroupSubscriptionEntity.kt │ │ │ │ │ │ └── FeedLastUpdatedEntity.kt │ │ │ │ ├── history │ │ │ │ │ ├── dao │ │ │ │ │ │ ├── HistoryDAO.java │ │ │ │ │ │ ├── SearchHistoryDAO.java │ │ │ │ │ │ └── StreamHistoryDAO.java │ │ │ │ │ └── model │ │ │ │ │ │ ├── SearchHistoryEntry.kt │ │ │ │ │ │ ├── StreamHistoryEntity.java │ │ │ │ │ │ └── StreamHistoryEntry.kt │ │ │ │ ├── playlist │ │ │ │ │ ├── PlaylistDuplicatesEntry.java │ │ │ │ │ ├── PlaylistLocalItem.java │ │ │ │ │ ├── PlaylistMetadataEntry.java │ │ │ │ │ ├── PlaylistStreamEntry.kt │ │ │ │ │ ├── dao │ │ │ │ │ │ ├── PlaylistDAO.java │ │ │ │ │ │ ├── PlaylistRemoteDAO.java │ │ │ │ │ │ └── PlaylistStreamDAO.java │ │ │ │ │ └── model │ │ │ │ │ │ ├── PlaylistEntity.java │ │ │ │ │ │ ├── PlaylistRemoteEntity.java │ │ │ │ │ │ └── PlaylistStreamEntity.java │ │ │ │ ├── sponsorblock │ │ │ │ │ └── dao │ │ │ │ │ │ ├── SponsorBlockWhitelistDAO.java │ │ │ │ │ │ └── SponsorBlockWhitelistEntry.java │ │ │ │ ├── stream │ │ │ │ │ ├── StreamStatisticsEntry.kt │ │ │ │ │ ├── StreamWithState.kt │ │ │ │ │ ├── dao │ │ │ │ │ │ ├── StreamDAO.kt │ │ │ │ │ │ └── StreamStateDAO.java │ │ │ │ │ └── model │ │ │ │ │ │ ├── StreamEntity.kt │ │ │ │ │ │ └── StreamStateEntity.java │ │ │ │ └── subscription │ │ │ │ │ ├── NotificationMode.java │ │ │ │ │ ├── SubscriptionDAO.kt │ │ │ │ │ └── SubscriptionEntity.java │ │ │ │ ├── download │ │ │ │ ├── DownloadActivity.java │ │ │ │ └── DownloadDialog.java │ │ │ │ ├── error │ │ │ │ ├── AcraReportSender.java │ │ │ │ ├── AcraReportSenderFactory.java │ │ │ │ ├── ErrorActivity.java │ │ │ │ ├── ErrorInfo.kt │ │ │ │ ├── ErrorPanelHelper.kt │ │ │ │ ├── ErrorUtil.kt │ │ │ │ ├── ReCaptchaActivity.java │ │ │ │ └── UserAction.java │ │ │ │ ├── fragments │ │ │ │ ├── BackPressable.java │ │ │ │ ├── BaseStateFragment.java │ │ │ │ ├── BlankFragment.java │ │ │ │ ├── EmptyFragment.java │ │ │ │ ├── MainFragment.java │ │ │ │ ├── OnScrollBelowItemsListener.java │ │ │ │ ├── ViewContract.java │ │ │ │ ├── detail │ │ │ │ │ ├── DescriptionFragment.java │ │ │ │ │ ├── StackItem.java │ │ │ │ │ ├── TabAdapter.java │ │ │ │ │ ├── VideoDetailFragment.java │ │ │ │ │ └── VideoDetailPlayerCrasher.java │ │ │ │ └── list │ │ │ │ │ ├── BaseListFragment.java │ │ │ │ │ ├── BaseListInfoFragment.java │ │ │ │ │ ├── ListViewContract.java │ │ │ │ │ ├── channel │ │ │ │ │ ├── ChannelFragment.java │ │ │ │ │ ├── ChannelInfoFragment.java │ │ │ │ │ ├── ChannelTabFragment.java │ │ │ │ │ └── ChannelVideosFragment.java │ │ │ │ │ ├── comments │ │ │ │ │ ├── CommentReplyFragment.java │ │ │ │ │ ├── CommentUtils.java │ │ │ │ │ ├── CommentsFragment.java │ │ │ │ │ └── CommentsFragmentContainer.java │ │ │ │ │ ├── kiosk │ │ │ │ │ ├── DefaultKioskFragment.java │ │ │ │ │ └── KioskFragment.java │ │ │ │ │ ├── playlist │ │ │ │ │ └── PlaylistFragment.java │ │ │ │ │ ├── search │ │ │ │ │ ├── SearchFragment.java │ │ │ │ │ ├── SuggestionItem.java │ │ │ │ │ ├── SuggestionListAdapter.java │ │ │ │ │ └── filter │ │ │ │ │ │ ├── SearchFilterLogic.java │ │ │ │ │ │ └── SearchFilterUI.java │ │ │ │ │ ├── sponsorblock │ │ │ │ │ ├── SponsorBlockFragment.java │ │ │ │ │ ├── SponsorBlockFragmentListener.java │ │ │ │ │ ├── SponsorBlockSegmentListAdapter.java │ │ │ │ │ └── SponsorBlockSegmentListAdapterListener.java │ │ │ │ │ └── videos │ │ │ │ │ └── RelatedItemsFragment.java │ │ │ │ ├── info_list │ │ │ │ ├── InfoItemBuilder.java │ │ │ │ ├── InfoListAdapter.java │ │ │ │ ├── ItemViewMode.java │ │ │ │ ├── StreamSegmentAdapter.kt │ │ │ │ ├── StreamSegmentItem.kt │ │ │ │ ├── dialog │ │ │ │ │ ├── InfoItemDialog.java │ │ │ │ │ ├── PictureDialog.kt │ │ │ │ │ ├── StreamDialogDefaultEntry.java │ │ │ │ │ └── StreamDialogEntry.java │ │ │ │ └── holder │ │ │ │ │ ├── ChannelGridInfoItemHolder.java │ │ │ │ │ ├── ChannelInfoItemHolder.java │ │ │ │ │ ├── ChannelMiniInfoItemHolder.java │ │ │ │ │ ├── CommentsInfoItemHolder.java │ │ │ │ │ ├── CommentsMiniInfoItemHolder.java │ │ │ │ │ ├── InfoItemHolder.java │ │ │ │ │ ├── PlaylistCardInfoItemHolder.java │ │ │ │ │ ├── PlaylistGridInfoItemHolder.java │ │ │ │ │ ├── PlaylistInfoItemHolder.java │ │ │ │ │ ├── PlaylistMiniInfoItemHolder.java │ │ │ │ │ ├── RepliesHandler.java │ │ │ │ │ ├── StaffInfoItemHolder.java │ │ │ │ │ ├── StreamCardInfoItemHolder.java │ │ │ │ │ ├── StreamGridInfoItemHolder.java │ │ │ │ │ ├── StreamInfoItemHolder.java │ │ │ │ │ └── StreamMiniInfoItemHolder.java │ │ │ │ ├── ktx │ │ │ │ ├── TextView.kt │ │ │ │ ├── Throwable.kt │ │ │ │ └── View.kt │ │ │ │ ├── local │ │ │ │ ├── BaseLocalListFragment.java │ │ │ │ ├── HeaderFooterHolder.java │ │ │ │ ├── LocalItemBuilder.java │ │ │ │ ├── LocalItemListAdapter.java │ │ │ │ ├── bookmark │ │ │ │ │ └── BookmarkFragment.java │ │ │ │ ├── dialog │ │ │ │ │ ├── PlaylistAppendDialog.java │ │ │ │ │ ├── PlaylistCreationDialog.java │ │ │ │ │ └── PlaylistDialog.java │ │ │ │ ├── feed │ │ │ │ │ ├── FeedDatabaseManager.kt │ │ │ │ │ ├── FeedFragment.kt │ │ │ │ │ ├── FeedState.kt │ │ │ │ │ ├── FeedViewModel.kt │ │ │ │ │ ├── item │ │ │ │ │ │ └── StreamItem.kt │ │ │ │ │ ├── notifications │ │ │ │ │ │ ├── NotificationHelper.kt │ │ │ │ │ │ ├── NotificationWorker.kt │ │ │ │ │ │ └── ScheduleOptions.kt │ │ │ │ │ └── service │ │ │ │ │ │ ├── FeedEventManager.kt │ │ │ │ │ │ ├── FeedLoadManager.kt │ │ │ │ │ │ ├── FeedLoadService.kt │ │ │ │ │ │ ├── FeedLoadState.kt │ │ │ │ │ │ ├── FeedResultsHolder.kt │ │ │ │ │ │ └── FeedUpdateInfo.kt │ │ │ │ ├── history │ │ │ │ │ ├── HistoryEntryAdapter.java │ │ │ │ │ ├── HistoryRecordManager.java │ │ │ │ │ └── StatisticsPlaylistFragment.java │ │ │ │ ├── holder │ │ │ │ │ ├── LocalBookmarkPlaylistItemHolder.java │ │ │ │ │ ├── LocalItemHolder.java │ │ │ │ │ ├── LocalPlaylistCardItemHolder.java │ │ │ │ │ ├── LocalPlaylistGridItemHolder.java │ │ │ │ │ ├── LocalPlaylistItemHolder.java │ │ │ │ │ ├── LocalPlaylistStreamCardItemHolder.java │ │ │ │ │ ├── LocalPlaylistStreamGridItemHolder.java │ │ │ │ │ ├── LocalPlaylistStreamItemHolder.java │ │ │ │ │ ├── LocalStatisticStreamCardItemHolder.java │ │ │ │ │ ├── LocalStatisticStreamGridItemHolder.java │ │ │ │ │ ├── LocalStatisticStreamItemHolder.java │ │ │ │ │ ├── PlaylistItemHolder.java │ │ │ │ │ ├── RemoteBookmarkPlaylistItemHolder.java │ │ │ │ │ ├── RemotePlaylistCardItemHolder.java │ │ │ │ │ ├── RemotePlaylistGridItemHolder.java │ │ │ │ │ └── RemotePlaylistItemHolder.java │ │ │ │ ├── playlist │ │ │ │ │ ├── LocalPlaylistFragment.java │ │ │ │ │ ├── LocalPlaylistManager.java │ │ │ │ │ └── RemotePlaylistManager.java │ │ │ │ ├── sponsorblock │ │ │ │ │ └── SponsorBlockDataManager.java │ │ │ │ └── subscription │ │ │ │ │ ├── FeedGroupIcon.kt │ │ │ │ │ ├── ImportConfirmationDialog.java │ │ │ │ │ ├── SubscriptionFragment.kt │ │ │ │ │ ├── SubscriptionManager.kt │ │ │ │ │ ├── SubscriptionViewModel.kt │ │ │ │ │ ├── SubscriptionsImportFragment.java │ │ │ │ │ ├── decoration │ │ │ │ │ └── FeedGroupCarouselDecoration.kt │ │ │ │ │ ├── dialog │ │ │ │ │ ├── FeedGroupDialog.kt │ │ │ │ │ ├── FeedGroupDialogViewModel.kt │ │ │ │ │ ├── FeedGroupReorderDialog.kt │ │ │ │ │ └── FeedGroupReorderDialogViewModel.kt │ │ │ │ │ ├── item │ │ │ │ │ ├── ChannelItem.kt │ │ │ │ │ ├── EmptyPlaceholderItem.kt │ │ │ │ │ ├── FeedGroupAddItem.kt │ │ │ │ │ ├── FeedGroupCardItem.kt │ │ │ │ │ ├── FeedGroupCarouselItem.kt │ │ │ │ │ ├── FeedGroupReorderItem.kt │ │ │ │ │ ├── FeedImportExportItem.kt │ │ │ │ │ ├── HeaderWithMenuItem.kt │ │ │ │ │ ├── PickerIconItem.kt │ │ │ │ │ └── PickerSubscriptionItem.kt │ │ │ │ │ └── services │ │ │ │ │ ├── BaseImportExportService.java │ │ │ │ │ ├── ImportExportEventListener.java │ │ │ │ │ ├── ImportExportJsonHelper.java │ │ │ │ │ ├── SubscriptionsExportService.java │ │ │ │ │ └── SubscriptionsImportService.java │ │ │ │ ├── player │ │ │ │ ├── AudioServiceLeakFix.java │ │ │ │ ├── MainPlayer.java │ │ │ │ ├── NotificationConstants.java │ │ │ │ ├── NotificationUtil.java │ │ │ │ ├── PlayQueueActivity.java │ │ │ │ ├── Player.java │ │ │ │ ├── PlayerServiceBinder.java │ │ │ │ ├── PlayerState.java │ │ │ │ ├── PlayerType.java │ │ │ │ ├── bulletComments │ │ │ │ │ └── MovieBulletCommentsPlayer.java │ │ │ │ ├── datasource │ │ │ │ │ └── YoutubeHttpDataSource.java │ │ │ │ ├── event │ │ │ │ │ ├── BasePlayerGestureListener.kt │ │ │ │ │ ├── CustomBottomSheetBehavior.java │ │ │ │ │ ├── DisplayPortion.kt │ │ │ │ │ ├── DoubleTapListener.kt │ │ │ │ │ ├── OnKeyDownListener.java │ │ │ │ │ ├── PlayerEventListener.java │ │ │ │ │ ├── PlayerGestureListener.java │ │ │ │ │ ├── PlayerServiceEventListener.java │ │ │ │ │ └── PlayerServiceExtendedEventListener.java │ │ │ │ ├── helper │ │ │ │ │ ├── AudioReactor.java │ │ │ │ │ ├── CacheFactory.java │ │ │ │ │ ├── CustomMediaCodecVideoRenderer.java │ │ │ │ │ ├── CustomRenderersFactory.java │ │ │ │ │ ├── LoadController.java │ │ │ │ │ ├── LockManager.java │ │ │ │ │ ├── MediaSessionManager.java │ │ │ │ │ ├── NiconicoLiveDataSource.java │ │ │ │ │ ├── NiconicoLiveHttpDataSource.java │ │ │ │ │ ├── NonUriHlsPlaylistParserFactory.java │ │ │ │ │ ├── PlaybackParameterDialog.java │ │ │ │ │ ├── PlayerDataSource.java │ │ │ │ │ ├── PlayerHelper.java │ │ │ │ │ ├── PlayerHolder.java │ │ │ │ │ ├── PlayerSemitoneHelper.java │ │ │ │ │ ├── PurifiedDataSource.java │ │ │ │ │ └── PurifiedHttpDataSource.java │ │ │ │ ├── listeners │ │ │ │ │ └── view │ │ │ │ │ │ ├── PlaybackSpeedClickListener.kt │ │ │ │ │ │ └── QualityClickListener.kt │ │ │ │ ├── mediaitem │ │ │ │ │ ├── ExceptionTag.java │ │ │ │ │ ├── MediaItemTag.java │ │ │ │ │ ├── PlaceholderTag.java │ │ │ │ │ └── StreamInfoTag.java │ │ │ │ ├── mediasession │ │ │ │ │ ├── MediaSessionCallback.java │ │ │ │ │ └── PlayQueueNavigator.java │ │ │ │ ├── mediasource │ │ │ │ │ ├── FailedMediaSource.java │ │ │ │ │ ├── LoadedMediaSource.java │ │ │ │ │ ├── ManagedMediaSource.java │ │ │ │ │ ├── ManagedMediaSourcePlaylist.java │ │ │ │ │ └── PlaceholderMediaSource.java │ │ │ │ ├── playback │ │ │ │ │ ├── MediaSourceManager.java │ │ │ │ │ ├── PlaybackListener.java │ │ │ │ │ ├── PlayerMediaSession.java │ │ │ │ │ └── SurfaceHolderCallback.java │ │ │ │ ├── playqueue │ │ │ │ │ ├── AbstractInfoPlayQueue.java │ │ │ │ │ ├── ChannelPlayQueue.java │ │ │ │ │ ├── PlayQueue.java │ │ │ │ │ ├── PlayQueueAdapter.java │ │ │ │ │ ├── PlayQueueItem.java │ │ │ │ │ ├── PlayQueueItemBuilder.java │ │ │ │ │ ├── PlayQueueItemHolder.java │ │ │ │ │ ├── PlayQueueItemTouchCallback.java │ │ │ │ │ ├── PlaylistPlayQueue.java │ │ │ │ │ ├── SinglePlayQueue.java │ │ │ │ │ └── events │ │ │ │ │ │ ├── AppendEvent.java │ │ │ │ │ │ ├── ErrorEvent.java │ │ │ │ │ │ ├── InitEvent.java │ │ │ │ │ │ ├── MoveEvent.java │ │ │ │ │ │ ├── PlayQueueEvent.java │ │ │ │ │ │ ├── PlayQueueEventType.java │ │ │ │ │ │ ├── RecoveryEvent.java │ │ │ │ │ │ ├── RemoveEvent.java │ │ │ │ │ │ ├── ReorderEvent.java │ │ │ │ │ │ └── SelectEvent.java │ │ │ │ ├── resolver │ │ │ │ │ ├── AudioPlaybackResolver.java │ │ │ │ │ ├── CustomDataSourceFactory.java │ │ │ │ │ ├── PlaybackResolver.java │ │ │ │ │ ├── QualityResolver.java │ │ │ │ │ ├── Resolver.java │ │ │ │ │ └── VideoPlaybackResolver.java │ │ │ │ └── seekbarpreview │ │ │ │ │ ├── SeekbarPreviewThumbnailHelper.java │ │ │ │ │ └── SeekbarPreviewThumbnailHolder.java │ │ │ │ ├── settings │ │ │ │ ├── AccountSettingsFragment.java │ │ │ │ ├── AdvancedSettingsFragment.java │ │ │ │ ├── AppearanceSettingsFragment.java │ │ │ │ ├── BackupSettingsFragment.java │ │ │ │ ├── BaseFilterListActivity.java │ │ │ │ ├── BasePreferenceFragment.java │ │ │ │ ├── BehaviorSettingsFragment.java │ │ │ │ ├── BiliBiliAccountSettingsFragment.java │ │ │ │ ├── BulletCommentsSettingsFragment.java │ │ │ │ ├── ChannelFilterListActivity.java │ │ │ │ ├── ContentSettingsFragment.java │ │ │ │ ├── ContentSettingsManager.kt │ │ │ │ ├── DebugSettingsFragment.java │ │ │ │ ├── DownloadSettingsFragment.java │ │ │ │ ├── ExoPlayerSettingsFragment.java │ │ │ │ ├── FilterSettingsFragment.java │ │ │ │ ├── GestureSettingsFragment.java │ │ │ │ ├── HistorySettingsFragment.java │ │ │ │ ├── KeywordFilterListActivity.java │ │ │ │ ├── MainSettingsFragment.java │ │ │ │ ├── NewPipeFileLocator.kt │ │ │ │ ├── NewPipeSettings.java │ │ │ │ ├── NicoNicoAccountSettingsFragment.java │ │ │ │ ├── NotificationsSettingsFragment.kt │ │ │ │ ├── PeertubeInstanceListFragment.java │ │ │ │ ├── PlayerNotificationSettingsFragment.kt │ │ │ │ ├── ProxySettingsFragment.java │ │ │ │ ├── SelectChannelFragment.java │ │ │ │ ├── SelectKioskFragment.java │ │ │ │ ├── SelectPlaylistFragment.java │ │ │ │ ├── SettingMigrations.java │ │ │ │ ├── SettingsActivity.java │ │ │ │ ├── SettingsResourceRegistry.java │ │ │ │ ├── SponsorBlockCategoriesSettingsFragment.java │ │ │ │ ├── SponsorBlockSettingsFragment.java │ │ │ │ ├── UpdateSettingsFragment.java │ │ │ │ ├── VideoAudioSettingsFragment.java │ │ │ │ ├── YouTubeAccountSettingsFragment.java │ │ │ │ ├── custom │ │ │ │ │ ├── DurationListPreference.kt │ │ │ │ │ ├── EditColorPreference.java │ │ │ │ │ ├── NotificationActionsPreference.java │ │ │ │ │ └── SponsorBlockApiUrlPreference.java │ │ │ │ ├── notifications │ │ │ │ │ ├── NotificationModeConfigAdapter.kt │ │ │ │ │ └── NotificationModeConfigFragment.kt │ │ │ │ ├── preferencesearch │ │ │ │ │ ├── PreferenceFuzzySearchFunction.java │ │ │ │ │ ├── PreferenceParser.java │ │ │ │ │ ├── PreferenceSearchAdapter.java │ │ │ │ │ ├── PreferenceSearchConfiguration.java │ │ │ │ │ ├── PreferenceSearchFragment.java │ │ │ │ │ ├── PreferenceSearchItem.java │ │ │ │ │ ├── PreferenceSearchResultHighlighter.java │ │ │ │ │ ├── PreferenceSearchResultListener.java │ │ │ │ │ ├── PreferenceSearcher.java │ │ │ │ │ └── package-info.java │ │ │ │ └── tabs │ │ │ │ │ ├── AddTabDialog.java │ │ │ │ │ ├── ChooseTabsFragment.java │ │ │ │ │ ├── Tab.java │ │ │ │ │ ├── TabsJsonHelper.java │ │ │ │ │ └── TabsManager.java │ │ │ │ ├── sleep │ │ │ │ ├── SleepTimerService.java │ │ │ │ └── TimerStopReceiver.java │ │ │ │ ├── streams │ │ │ │ ├── DataReader.java │ │ │ │ ├── Mp4DashReader.java │ │ │ │ ├── Mp4FromDashWriter.java │ │ │ │ ├── OggFromWebMWriter.java │ │ │ │ ├── SrtFromTtmlWriter.java │ │ │ │ ├── WebMReader.java │ │ │ │ ├── WebMWriter.java │ │ │ │ └── io │ │ │ │ │ ├── NoFileManagerSafeGuard.java │ │ │ │ │ ├── SharpInputStream.java │ │ │ │ │ ├── SharpOutputStream.java │ │ │ │ │ ├── SharpStream.java │ │ │ │ │ ├── StoredDirectoryHelper.java │ │ │ │ │ └── StoredFileHelper.java │ │ │ │ ├── util │ │ │ │ ├── AnnouncementParser.java │ │ │ │ ├── ChannelTabHelper.java │ │ │ │ ├── CommentTextOnTouchListener.java │ │ │ │ ├── Constants.kt │ │ │ │ ├── CookieUtils.java │ │ │ │ ├── DebounceSavable.java │ │ │ │ ├── DebounceSaver.java │ │ │ │ ├── DeviceUtils.java │ │ │ │ ├── ErrorMatcher.java │ │ │ │ ├── ExtractorHelper.java │ │ │ │ ├── FallbackViewHolder.java │ │ │ │ ├── FilePickerActivityHelper.java │ │ │ │ ├── FilenameUtils.java │ │ │ │ ├── FilterPreferenceMigrator.java │ │ │ │ ├── InfoCache.java │ │ │ │ ├── KeyboardUtil.java │ │ │ │ ├── KioskTranslator.java │ │ │ │ ├── ListHelper.java │ │ │ │ ├── Localization.java │ │ │ │ ├── NavigationHelper.java │ │ │ │ ├── NewPipeTextViewHelper.java │ │ │ │ ├── OnClickGesture.java │ │ │ │ ├── PeertubeHelper.java │ │ │ │ ├── PermissionChecker.java │ │ │ │ ├── PermissionHelper.java │ │ │ │ ├── PicassoHelper.java │ │ │ │ ├── RelatedItemInfo.java │ │ │ │ ├── ReleaseVersionUtil.kt │ │ │ │ ├── SavedState.kt │ │ │ │ ├── SecondaryStreamHelper.java │ │ │ │ ├── SerializedCache.java │ │ │ │ ├── SerializedUtils.java │ │ │ │ ├── ServiceHelper.java │ │ │ │ ├── SimpleOnSeekBarChangeListener.kt │ │ │ │ ├── SliderStrategy.java │ │ │ │ ├── SortMode.java │ │ │ │ ├── SparseItemUtil.java │ │ │ │ ├── SponsorBlockHelper.java │ │ │ │ ├── SponsorBlockMode.java │ │ │ │ ├── SponsorBlockSecondaryMode.java │ │ │ │ ├── StateSaver.java │ │ │ │ ├── StreamFailureDetailActivity.java │ │ │ │ ├── StreamItemAdapter.java │ │ │ │ ├── StreamProcessor.java │ │ │ │ ├── StreamTypeUtil.java │ │ │ │ ├── TLSSocketFactoryCompat.java │ │ │ │ ├── ThemeHelper.java │ │ │ │ ├── TimeUtils.java │ │ │ │ ├── YtdlpHelper.java │ │ │ │ ├── ZipHelper.java │ │ │ │ ├── external_communication │ │ │ │ │ ├── InternalUrlsHandler.java │ │ │ │ │ ├── KoreUtils.java │ │ │ │ │ ├── ShareUtils.java │ │ │ │ │ ├── TextLinkifier.java │ │ │ │ │ └── TimestampExtractor.java │ │ │ │ ├── image │ │ │ │ │ ├── ImageStrategy.java │ │ │ │ │ └── PreferredImageQuality.java │ │ │ │ ├── service_display │ │ │ │ │ ├── BiliBiliLocalizationService.kt │ │ │ │ │ └── LocalizationService.kt │ │ │ │ ├── urlfinder │ │ │ │ │ ├── PatternsCompat.java │ │ │ │ │ └── UrlFinder.kt │ │ │ │ └── utils.java │ │ │ │ └── views │ │ │ │ ├── AnimatedProgressBar.java │ │ │ │ ├── BiliBiliLoginWebViewActivity.java │ │ │ │ ├── BulletCommentsView.java │ │ │ │ ├── CollapsibleView.java │ │ │ │ ├── CustomCollapsingToolbarLayout.java │ │ │ │ ├── ExpandableSurfaceView.java │ │ │ │ ├── FocusAwareCoordinator.java │ │ │ │ ├── FocusAwareDrawerLayout.java │ │ │ │ ├── FocusAwareSeekBar.java │ │ │ │ ├── FocusOverlayView.java │ │ │ │ ├── MarkableSeekBar.java │ │ │ │ ├── NewPipeEditText.java │ │ │ │ ├── NewPipeRecyclerView.java │ │ │ │ ├── NewPipeTextView.java │ │ │ │ ├── NicoNicoLoginWebViewActivity.java │ │ │ │ ├── ScrollableTabLayout.java │ │ │ │ ├── SeekBarMarker.java │ │ │ │ ├── SuperScrollLayoutManager.java │ │ │ │ ├── YouTubeLoginWebViewActivity.java │ │ │ │ └── player │ │ │ │ ├── CircleClipTapView.kt │ │ │ │ ├── PlayerFastSeekOverlay.kt │ │ │ │ └── SecondsView.kt │ │ └── us │ │ │ └── shandian │ │ │ └── giga │ │ │ ├── get │ │ │ ├── DirectDownloader.java │ │ │ ├── DownloadInitializer.java │ │ │ ├── DownloadMission.java │ │ │ ├── DownloadMissionRecover.java │ │ │ ├── DownloadRunnable.java │ │ │ ├── DownloadRunnableFallback.java │ │ │ ├── FinishedMission.java │ │ │ ├── Mission.java │ │ │ ├── MissionRecoveryInfo.kt │ │ │ └── sqlite │ │ │ │ └── FinishedMissionStore.java │ │ │ ├── io │ │ │ ├── ChunkFileInputStream.java │ │ │ ├── CircularFileWriter.java │ │ │ ├── FileStream.java │ │ │ ├── FileStreamSAF.java │ │ │ └── ProgressReport.java │ │ │ ├── postprocessing │ │ │ ├── BiliBiliMp4Muxer.java │ │ │ ├── M4aNoDash.java │ │ │ ├── Mp4FromDashMuxer.java │ │ │ ├── NicoNicoMuxer.java │ │ │ ├── OggFromWebmDemuxer.java │ │ │ ├── Postprocessing.java │ │ │ ├── TtmlConverter.java │ │ │ └── WebMMuxer.java │ │ │ ├── service │ │ │ ├── DownloadManager.java │ │ │ ├── DownloadManagerService.java │ │ │ └── MissionState.java │ │ │ ├── ui │ │ │ ├── adapter │ │ │ │ └── MissionAdapter.java │ │ │ ├── common │ │ │ │ ├── Deleter.java │ │ │ │ ├── ProgressDrawable.java │ │ │ │ └── ToolbarActivity.java │ │ │ └── fragment │ │ │ │ └── MissionsFragment.java │ │ │ └── util │ │ │ └── Utility.java │ └── res │ │ ├── animator │ │ ├── custom_fade_in.xml │ │ └── custom_fade_out.xml │ │ ├── drawable-hdpi │ │ ├── ic_close_white.png │ │ ├── ic_hourglass_top_white.png │ │ ├── ic_newpipe_triangle_white.png │ │ ├── ic_newpipe_update.png │ │ └── ic_replay_white.png │ │ ├── drawable-mdpi │ │ ├── ic_close_white.png │ │ ├── ic_hourglass_top_white.png │ │ ├── ic_newpipe_triangle_white.png │ │ ├── ic_newpipe_update.png │ │ └── ic_replay_white.png │ │ ├── drawable-night-v23 │ │ └── splash_background.xml │ │ ├── drawable-night │ │ ├── ic_heart.xml │ │ └── splash_background.xml │ │ ├── drawable-nodpi │ │ ├── background_header.png │ │ ├── buddy.png │ │ ├── buddy_channel_item.png │ │ ├── channel_banner.png │ │ ├── dummy_thumbnail.png │ │ ├── dummy_thumbnail_dark.png │ │ ├── dummy_thumbnail_playlist.png │ │ ├── newpipe_logo_nude_shadow.png │ │ ├── place_holder_bandcamp.png │ │ ├── place_holder_bilibili.png │ │ ├── place_holder_circle.png │ │ ├── place_holder_cloud.png │ │ ├── place_holder_gadse.png │ │ ├── place_holder_niconico.png │ │ ├── place_holder_peertube.png │ │ └── place_holder_youtube.png │ │ ├── drawable-v23 │ │ └── splash_background.xml │ │ ├── drawable-xhdpi │ │ ├── ic_close_white.png │ │ ├── ic_hourglass_top_white.png │ │ ├── ic_newpipe_triangle_white.png │ │ ├── ic_newpipe_update.png │ │ └── ic_replay_white.png │ │ ├── drawable-xxhdpi │ │ ├── ic_close_white.png │ │ ├── ic_hourglass_top_white.png │ │ ├── ic_newpipe_triangle_white.png │ │ ├── ic_newpipe_update.png │ │ └── ic_replay_white.png │ │ ├── drawable-xxxhdpi │ │ ├── ic_close_white.png │ │ ├── ic_hourglass_top_white.png │ │ ├── ic_newpipe_triangle_white.png │ │ ├── ic_newpipe_update.png │ │ └── ic_replay_white.png │ │ ├── drawable │ │ ├── background_oval_black_transparent.xml │ │ ├── background_rectangle_black_transparent.xml │ │ ├── baseline_search_24.xml │ │ ├── dashed_border_black.xml │ │ ├── dashed_border_dark.xml │ │ ├── dashed_border_light.xml │ │ ├── drawer_header_bottom_background.xml │ │ ├── ic_account.xml │ │ ├── ic_add.xml │ │ ├── ic_add_circle_outline.xml │ │ ├── ic_advanced.xml │ │ ├── ic_apps.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_arrow_drop_down.xml │ │ ├── ic_arrow_drop_up.xml │ │ ├── ic_art_track.xml │ │ ├── ic_asterisk.xml │ │ ├── ic_attach_money.xml │ │ ├── ic_backup.xml │ │ ├── ic_bilibili.xml │ │ ├── ic_blocking.xml │ │ ├── ic_bookmark.xml │ │ ├── ic_brightness_high.xml │ │ ├── ic_brightness_low.xml │ │ ├── ic_brightness_medium.xml │ │ ├── ic_bug_report.xml │ │ ├── ic_bullet_comment_disabled.xml │ │ ├── ic_bullet_comment_enabled.xml │ │ ├── ic_button_pointer.xml │ │ ├── ic_campaign.xml │ │ ├── ic_cast.xml │ │ ├── ic_checklist.xml │ │ ├── ic_chevron_left.xml │ │ ├── ic_chevron_right.xml │ │ ├── ic_child_care.xml │ │ ├── ic_close.xml │ │ ├── ic_cloud_download.xml │ │ ├── ic_comment.xml │ │ ├── ic_computer.xml │ │ ├── ic_content_save.xml │ │ ├── ic_crop_portrait.xml │ │ ├── ic_delete.xml │ │ ├── ic_description.xml │ │ ├── ic_directions_bike.xml │ │ ├── ic_directions_car.xml │ │ ├── ic_done.xml │ │ ├── ic_drag_handle.xml │ │ ├── ic_expand_more.xml │ │ ├── ic_explore.xml │ │ ├── ic_fast_forward.xml │ │ ├── ic_fast_rewind.xml │ │ ├── ic_fastfood.xml │ │ ├── ic_favorite.xml │ │ ├── ic_file_download.xml │ │ ├── ic_filter_list.xml │ │ ├── ic_fitness_center.xml │ │ ├── ic_format_list_numbered.xml │ │ ├── ic_fullscreen.xml │ │ ├── ic_fullscreen_exit.xml │ │ ├── ic_headset.xml │ │ ├── ic_headset_shadow.xml │ │ ├── ic_heart.xml │ │ ├── ic_help.xml │ │ ├── ic_history.xml │ │ ├── ic_home.xml │ │ ├── ic_hourglass_top.xml │ │ ├── ic_info_outline.xml │ │ ├── ic_insert_emoticon.xml │ │ ├── ic_language.xml │ │ ├── ic_list.xml │ │ ├── ic_live_tv.xml │ │ ├── ic_mic.xml │ │ ├── ic_more_vert.xml │ │ ├── ic_motorcycle.xml │ │ ├── ic_movie.xml │ │ ├── ic_music_note.xml │ │ ├── ic_next.xml │ │ ├── ic_notifications.xml │ │ ├── ic_palette.xml │ │ ├── ic_pause.xml │ │ ├── ic_people.xml │ │ ├── ic_person.xml │ │ ├── ic_pets.xml │ │ ├── ic_picture_in_picture.xml │ │ ├── ic_pin.xml │ │ ├── ic_pipepipe.xml │ │ ├── ic_play_arrow.xml │ │ ├── ic_play_arrow_shadow.xml │ │ ├── ic_play_seek_triangle.xml │ │ ├── ic_playlist_add.xml │ │ ├── ic_playlist_add_check.xml │ │ ├── ic_playlist_play.xml │ │ ├── ic_podcast.xml │ │ ├── ic_previous.xml │ │ ├── ic_proxy.xml │ │ ├── ic_public.xml │ │ ├── ic_radio.xml │ │ ├── ic_refresh.xml │ │ ├── ic_repeat.xml │ │ ├── ic_replay.xml │ │ ├── ic_restaurant.xml │ │ ├── ic_rss_feed.xml │ │ ├── ic_save.xml │ │ ├── ic_school.xml │ │ ├── ic_search.xml │ │ ├── ic_search_add.xml │ │ ├── ic_select_all.xml │ │ ├── ic_settings.xml │ │ ├── ic_settings_backup_restore.xml │ │ ├── ic_share.xml │ │ ├── ic_shopping_cart.xml │ │ ├── ic_shuffle.xml │ │ ├── ic_sort.xml │ │ ├── ic_sponsor_block_disable.xml │ │ ├── ic_sponsor_block_enable.xml │ │ ├── ic_sponsor_block_exclude.xml │ │ ├── ic_stars.xml │ │ ├── ic_subscriptions.xml │ │ ├── ic_subtitles.xml │ │ ├── ic_telescope.xml │ │ ├── ic_thumb_down.xml │ │ ├── ic_thumb_up.xml │ │ ├── ic_timer.xml │ │ ├── ic_timer_off.xml │ │ ├── ic_trending_up.xml │ │ ├── ic_tv.xml │ │ ├── ic_update_new.xml │ │ ├── ic_upload.xml │ │ ├── ic_videogame_asset.xml │ │ ├── ic_visibility_off.xml │ │ ├── ic_visibility_on.xml │ │ ├── ic_volume_down.xml │ │ ├── ic_volume_mute.xml │ │ ├── ic_volume_off.xml │ │ ├── ic_volume_up.xml │ │ ├── ic_watch_later.xml │ │ ├── ic_wb_sunny.xml │ │ ├── ic_whatshot.xml │ │ ├── ic_work.xml │ │ ├── ic_youtube.xml │ │ ├── not_available_monkey.xml │ │ ├── placeholder_thumbnail_playlist.xml │ │ ├── placeholder_thumbnail_video.xml │ │ ├── player_controls_background.xml │ │ ├── player_controls_top_background.xml │ │ ├── progress_circular_white.xml │ │ ├── progress_soundcloud_horizontal_dark.xml │ │ ├── progress_soundcloud_horizontal_light.xml │ │ ├── progress_youtube_horizontal_dark.xml │ │ ├── progress_youtube_horizontal_light.xml │ │ ├── selector_checked_dark.xml │ │ ├── selector_checked_light.xml │ │ ├── selector_dark.xml │ │ ├── selector_focused_dark.xml │ │ ├── selector_focused_light.xml │ │ ├── selector_light.xml │ │ ├── shuffle_disabled.xml │ │ ├── splash_background.xml │ │ ├── splash_foreground.xml │ │ ├── toolbar_shadow_dark.xml │ │ └── toolbar_shadow_light.xml │ │ ├── font │ │ └── lxgw_wenkai.ttf │ │ ├── layout-land │ │ └── activity_player_queue_control.xml │ │ ├── layout-large-land │ │ └── fragment_video_detail.xml │ │ ├── layout │ │ ├── activity_about.xml │ │ ├── activity_downloader.xml │ │ ├── activity_error.xml │ │ ├── activity_filter_list.xml │ │ ├── activity_main.xml │ │ ├── activity_player_queue_control.xml │ │ ├── activity_recaptcha.xml │ │ ├── bullet_comments_player.xml │ │ ├── channel_header.xml │ │ ├── chip.xml │ │ ├── dialog_add_filter.xml │ │ ├── dialog_edit_text.xml │ │ ├── dialog_feed_group_create.xml │ │ ├── dialog_feed_group_reorder.xml │ │ ├── dialog_pictures.xml │ │ ├── dialog_playback_parameter.xml │ │ ├── dialog_playlists.xml │ │ ├── dialog_sponsor_block_api_url.xml │ │ ├── dialog_sponsor_block_api_url_help.xml │ │ ├── dialog_title.xml │ │ ├── download_dialog.xml │ │ ├── drawer_header.xml │ │ ├── drawer_layout.xml │ │ ├── error_panel.xml │ │ ├── feed_group_add_new_item.xml │ │ ├── feed_group_card_item.xml │ │ ├── feed_group_reorder_item.xml │ │ ├── feed_import_export_group.xml │ │ ├── feed_item_carousel.xml │ │ ├── fragment_about.xml │ │ ├── fragment_blank.xml │ │ ├── fragment_bookmarks.xml │ │ ├── fragment_channel.xml │ │ ├── fragment_channel_info.xml │ │ ├── fragment_channel_tab.xml │ │ ├── fragment_channel_videos.xml │ │ ├── fragment_channels_notifications.xml │ │ ├── fragment_choose_tabs.xml │ │ ├── fragment_comments.xml │ │ ├── fragment_comments_reply.xml │ │ ├── fragment_container.xml │ │ ├── fragment_description.xml │ │ ├── fragment_empty.xml │ │ ├── fragment_feed.xml │ │ ├── fragment_import.xml │ │ ├── fragment_instance_list.xml │ │ ├── fragment_kiosk.xml │ │ ├── fragment_licenses.xml │ │ ├── fragment_main.xml │ │ ├── fragment_playlist.xml │ │ ├── fragment_related_items.xml │ │ ├── fragment_search.xml │ │ ├── fragment_sponsor_block.xml │ │ ├── fragment_subscription.xml │ │ ├── fragment_video_detail.xml │ │ ├── header_with_menu_item.xml │ │ ├── instance_spinner_item.xml │ │ ├── instance_spinner_layout.xml │ │ ├── item_filter.xml │ │ ├── item_instance.xml │ │ ├── item_metadata.xml │ │ ├── item_metadata_tags.xml │ │ ├── item_notification_config.xml │ │ ├── item_search_suggestion.xml │ │ ├── item_software_component.xml │ │ ├── item_stream_segment.xml │ │ ├── list_channel_grid_item.xml │ │ ├── list_channel_item.xml │ │ ├── list_channel_mini_item.xml │ │ ├── list_choose_tabs.xml │ │ ├── list_choose_tabs_dialog.xml │ │ ├── list_comments_item.xml │ │ ├── list_comments_mini_item.xml │ │ ├── list_empty_view.xml │ │ ├── list_playlist_bookmark_item.xml │ │ ├── list_playlist_card_item.xml │ │ ├── list_playlist_grid_item.xml │ │ ├── list_playlist_item.xml │ │ ├── list_playlist_mini_item.xml │ │ ├── list_radio_icon_item.xml │ │ ├── list_segments_item.xml │ │ ├── list_staff_item.xml │ │ ├── list_stream_card_item.xml │ │ ├── list_stream_grid_item.xml │ │ ├── list_stream_item.xml │ │ ├── list_stream_mini_item.xml │ │ ├── list_stream_playlist_card_item.xml │ │ ├── list_stream_playlist_grid_item.xml │ │ ├── list_stream_playlist_item.xml │ │ ├── local_playlist_header.xml │ │ ├── local_playlist_search_toolbar.xml │ │ ├── login_webview.xml │ │ ├── main_bg.xml │ │ ├── mission_item.xml │ │ ├── mission_item_linear.xml │ │ ├── missions.xml │ │ ├── missions_header.xml │ │ ├── picker_icon_item.xml │ │ ├── picker_subscription_item.xml │ │ ├── pignate_footer.xml │ │ ├── play_queue_item.xml │ │ ├── player.xml │ │ ├── player_fast_seek_overlay.xml │ │ ├── player_fast_seek_seconds_view.xml │ │ ├── player_popup_close_overlay.xml │ │ ├── playlist_control.xml │ │ ├── playlist_header.xml │ │ ├── preference_edit_color.xml │ │ ├── related_items_header.xml │ │ ├── select_channel_fragment.xml │ │ ├── select_channel_item.xml │ │ ├── select_kiosk_fragment.xml │ │ ├── select_kiosk_item.xml │ │ ├── select_playlist_fragment.xml │ │ ├── settings_category_header_layout.xml │ │ ├── settings_category_header_title.xml │ │ ├── settings_layout.xml │ │ ├── settings_notification.xml │ │ ├── settings_notification_action.xml │ │ ├── settings_preferencesearch_fragment.xml │ │ ├── settings_preferencesearch_list_item_result.xml │ │ ├── single_choice_dialog_view.xml │ │ ├── statistic_playlist_control.xml │ │ ├── stream_quality_item.xml │ │ ├── subscription_import_export_item.xml │ │ ├── toolbar_layout.xml │ │ └── toolbar_search_layout.xml │ │ ├── menu │ │ ├── dialog_url.xml │ │ ├── download_menu.xml │ │ ├── drawer_items.xml │ │ ├── error_menu.xml │ │ ├── filter_list_menu.xml │ │ ├── menu_channel.xml │ │ ├── menu_chooser_fragment.xml │ │ ├── menu_feed_fragment.xml │ │ ├── menu_feed_group_dialog.xml │ │ ├── menu_history.xml │ │ ├── menu_local_playlist.xml │ │ ├── menu_main_fragment.xml │ │ ├── menu_notifications_channels.xml │ │ ├── menu_play_queue.xml │ │ ├── menu_play_queue_bg.xml │ │ ├── menu_play_queue_item.xml │ │ ├── menu_playlist.xml │ │ ├── menu_recaptcha.xml │ │ ├── menu_settings_main_fragment.xml │ │ └── mission.xml │ │ ├── mipmap-anydpi-v26 │ │ └── ic_launcher.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── tv_banner.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_foreground.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_foreground.png │ │ ├── values-ace │ │ └── strings.xml │ │ ├── values-af │ │ └── strings.xml │ │ ├── values-ar-rLY │ │ └── strings.xml │ │ ├── values-ar │ │ └── strings.xml │ │ ├── values-ars │ │ └── strings.xml │ │ ├── values-az │ │ └── strings.xml │ │ ├── values-b+ast │ │ └── strings.xml │ │ ├── values-b+uz+Latn │ │ └── strings.xml │ │ ├── values-bar │ │ └── strings.xml │ │ ├── values-be │ │ └── strings.xml │ │ ├── values-ber │ │ └── strings.xml │ │ ├── values-bg │ │ └── strings.xml │ │ ├── values-bn-rBD │ │ └── strings.xml │ │ ├── values-bn-rIN │ │ └── strings.xml │ │ ├── values-bn │ │ └── strings.xml │ │ ├── values-bs │ │ └── strings.xml │ │ ├── values-ca │ │ └── strings.xml │ │ ├── values-ckb │ │ └── strings.xml │ │ ├── values-cs │ │ └── strings.xml │ │ ├── values-da │ │ └── strings.xml │ │ ├── values-de │ │ └── strings.xml │ │ ├── values-dum │ │ └── strings.xml │ │ ├── values-el │ │ └── strings.xml │ │ ├── values-enm │ │ └── strings.xml │ │ ├── values-eo │ │ └── strings.xml │ │ ├── values-es │ │ └── strings.xml │ │ ├── values-et │ │ └── strings.xml │ │ ├── values-eu │ │ └── strings.xml │ │ ├── values-fa │ │ └── strings.xml │ │ ├── values-fi │ │ └── strings.xml │ │ ├── values-fil │ │ └── strings.xml │ │ ├── values-fr │ │ └── strings.xml │ │ ├── values-gl │ │ └── strings.xml │ │ ├── values-gu │ │ └── strings.xml │ │ ├── values-he │ │ └── strings.xml │ │ ├── values-hi │ │ └── strings.xml │ │ ├── values-hr │ │ └── strings.xml │ │ ├── values-hu │ │ └── strings.xml │ │ ├── values-hy │ │ └── strings.xml │ │ ├── values-ia │ │ └── strings.xml │ │ ├── values-in │ │ └── strings.xml │ │ ├── values-it │ │ └── strings.xml │ │ ├── values-iw │ │ ├── values-ja │ │ └── strings.xml │ │ ├── values-jv │ │ └── strings.xml │ │ ├── values-kab │ │ └── strings.xml │ │ ├── values-kmr │ │ └── strings.xml │ │ ├── values-ko │ │ └── strings.xml │ │ ├── values-ks │ │ └── strings.xml │ │ ├── values-ku │ │ └── strings.xml │ │ ├── values-la │ │ └── strings.xml │ │ ├── values-land │ │ └── dimens.xml │ │ ├── values-lt │ │ └── strings.xml │ │ ├── values-lv │ │ └── strings.xml │ │ ├── values-mk │ │ └── strings.xml │ │ ├── values-ml │ │ └── strings.xml │ │ ├── values-mr │ │ └── strings.xml │ │ ├── values-ms │ │ └── strings.xml │ │ ├── values-nap │ │ └── strings.xml │ │ ├── values-nb-rNO │ │ └── strings.xml │ │ ├── values-nds │ │ └── strings.xml │ │ ├── values-ne │ │ └── strings.xml │ │ ├── values-night-v21 │ │ └── styles.xml │ │ ├── values-night │ │ └── colors.xml │ │ ├── values-nl-rBE │ │ └── strings.xml │ │ ├── values-nl │ │ └── strings.xml │ │ ├── values-oc │ │ └── strings.xml │ │ ├── values-or │ │ └── strings.xml │ │ ├── values-pa │ │ └── strings.xml │ │ ├── values-pl │ │ └── strings.xml │ │ ├── values-pt-rBR │ │ └── strings.xml │ │ ├── values-pt-rPT │ │ └── strings.xml │ │ ├── values-pt │ │ └── strings.xml │ │ ├── values-ro │ │ └── strings.xml │ │ ├── values-ru │ │ └── strings.xml │ │ ├── values-sat │ │ └── strings.xml │ │ ├── values-sc │ │ └── strings.xml │ │ ├── values-scn │ │ └── strings.xml │ │ ├── values-si │ │ └── strings.xml │ │ ├── values-sk │ │ └── strings.xml │ │ ├── values-sl │ │ └── strings.xml │ │ ├── values-so │ │ └── strings.xml │ │ ├── values-sq │ │ └── strings.xml │ │ ├── values-sr │ │ └── strings.xml │ │ ├── values-sv │ │ └── strings.xml │ │ ├── values-sw │ │ └── strings.xml │ │ ├── values-sw600dp-land │ │ └── dimens.xml │ │ ├── values-sw600dp │ │ └── dimens.xml │ │ ├── values-ta │ │ └── strings.xml │ │ ├── values-te │ │ └── strings.xml │ │ ├── values-th │ │ └── strings.xml │ │ ├── values-tl │ │ └── strings.xml │ │ ├── values-tr │ │ └── strings.xml │ │ ├── values-tzm │ │ └── strings.xml │ │ ├── values-uk │ │ └── strings.xml │ │ ├── values-ur │ │ └── strings.xml │ │ ├── values-v21 │ │ ├── styles.xml │ │ └── styles_services.xml │ │ ├── values-v27 │ │ └── styles.xml │ │ ├── values-v29 │ │ └── styles.xml │ │ ├── values-vi │ │ └── strings.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── bools.xml │ │ ├── colors.xml │ │ ├── colors_services.xml │ │ ├── dimens.xml │ │ ├── donottranslate.xml │ │ ├── settings_keys.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── styles_misc.xml │ │ └── styles_services.xml │ │ └── xml │ │ ├── account_settings.xml │ │ ├── account_settings_bilibili.xml │ │ ├── account_settings_niconico.xml │ │ ├── account_settings_youtube.xml │ │ ├── advanced_settings.xml │ │ ├── appearance_settings.xml │ │ ├── backup_settings.xml │ │ ├── behavior_settings.xml │ │ ├── bullet_comments_settings.xml │ │ ├── content_settings.xml │ │ ├── debug_settings.xml │ │ ├── download_settings.xml │ │ ├── exoplayer_settings.xml │ │ ├── filter_settings.xml │ │ ├── gesture_settings.xml │ │ ├── history_settings.xml │ │ ├── main_settings.xml │ │ ├── notifications_settings.xml │ │ ├── player_notification_settings.xml │ │ ├── provider_paths.xml │ │ ├── proxy_settings.xml │ │ ├── sponsor_block_category_settings.xml │ │ ├── sponsor_block_settings.xml │ │ ├── update_settings.xml │ │ └── video_audio_settings.xml │ └── test │ ├── java │ └── org │ │ └── schabi │ │ └── newpipe │ │ ├── NewVersionManagerTest.kt │ │ ├── error │ │ ├── ErrorActivityTest.java │ │ └── ReCaptchaActivityTest.kt │ │ ├── ktx │ │ └── ThrowableExtensionsTest.kt │ │ ├── local │ │ └── subscription │ │ │ ├── FeedGroupIconTest.kt │ │ │ └── services │ │ │ └── ImportExportJsonHelperTest.java │ │ ├── player │ │ └── playqueue │ │ │ ├── PlayQueueItemTest.java │ │ │ └── PlayQueueTest.java │ │ ├── settings │ │ ├── ContentSettingsManagerTest.kt │ │ └── tabs │ │ │ ├── TabTest.java │ │ │ └── TabsJsonHelperTest.java │ │ └── util │ │ ├── ListHelperTest.java │ │ ├── LocalizationTest.kt │ │ ├── QuadraticSliderStrategyTest.java │ │ ├── external_communication │ │ └── TimestampExtractorTest.java │ │ └── urlfinder │ │ └── UrlFinderTest.kt │ └── resources │ ├── import_export_test.json │ └── settings │ ├── empty.zip │ ├── newpipe.db │ ├── newpipe.settings │ └── newpipe.zip ├── assets ├── BETA_new_pipe_icon_5.svg ├── NP logo v2.svg ├── NewPipe_background_just1.svg ├── android-tv-banner.svg ├── bitcoin_qr_code.png ├── bountysource_qr_code.png ├── buddy_channel_item.svg ├── budy.svg ├── channel_banner_desktop.svg ├── channel_banner_mobild.svg ├── dummi_thumbnail.svg ├── dummi_thumbnail_backup.svg ├── dummi_thumbnail_playlist.svg ├── dummi_thumbnail_playlist_background.svg ├── ic_play_circle_transparent.svg ├── ic_play_circle_transparent_80px.svg ├── icon_5.png ├── liberapay_donate_button.svg ├── liberapay_qr_code.png ├── media_gadse.svg ├── new_pipe_icon_4.svg ├── new_pipe_icon_5.png ├── new_pipe_icon_5.svg ├── new_pipe_icon_5_beta2.svg ├── new_play_arrow.svg ├── not_available_monkey.svg ├── pure_logo.svg ├── service.svg └── thumbs_up.png ├── build.gradle ├── checkstyle ├── checkstyle.xml └── suppressions.xml ├── doc ├── README.es.md ├── README.hi.md ├── README.ja.md ├── README.ko.md ├── README.pl.md ├── README.pt_BR.md ├── README.ro.md ├── README.so.md ├── README.tr.md ├── README.zh_TW.md └── gradle.md ├── ffmpeg ├── build.gradle.kts └── ffmpeg-kit.aar ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── translator.py /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | local.properties 3 | .DS_Store 4 | build/ 5 | captures/ 6 | .idea/ 7 | *.iml 8 | *~ 9 | .weblate 10 | *.class 11 | app/debug/ 12 | app/release/ 13 | 14 | # vscode / eclipse files 15 | *.classpath 16 | *.project 17 | *.settings 18 | bin/ 19 | .vscode/ 20 | *.code-workspace 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## README 2 | 3 | The client of [PipePipe](https://codeberg.org/NullPointerException/PipePipe). 4 | -------------------------------------------------------------------------------- /app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsBVDLeakCanary.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import android.content.Intent; 4 | 5 | import leakcanary.LeakCanary; 6 | 7 | /** 8 | * Build variant dependent (BVD) leak canary API implementation for the debug settings fragment. 9 | * This class is loaded via reflection by 10 | * {@link DebugSettingsFragment.DebugSettingsBVDLeakCanaryAPI}. 11 | */ 12 | @SuppressWarnings("unused") // Class is used but loaded via reflection 13 | public class DebugSettingsBVDLeakCanary 14 | implements DebugSettingsFragment.DebugSettingsBVDLeakCanaryAPI { 15 | 16 | @Override 17 | public Intent getNewLeakDisplayActivityIntent() { 18 | return LeakCanary.INSTANCE.newLeakDisplayActivityIntent(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/about/License.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.about 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import java.io.Serializable 6 | 7 | /** 8 | * Class for storing information about a software license. 9 | */ 10 | @Parcelize 11 | class License(val name: String, val abbreviation: String, val filename: String) : Parcelable, Serializable 12 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/about/SoftwareComponent.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.about 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | class SoftwareComponent 8 | @JvmOverloads 9 | constructor( 10 | val name: String, 11 | val years: String, 12 | val copyrightOwner: String, 13 | val link: String, 14 | val license: License, 15 | val version: String? = null 16 | ) : Parcelable 17 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/about/StandardLicenses.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.about 2 | 3 | /** 4 | * Class containing information about standard software licenses. 5 | */ 6 | object StandardLicenses { 7 | @JvmField 8 | val GPL3 = License("GNU General Public License, Version 3.0", "GPLv3", "gpl_3.html") 9 | 10 | @JvmField 11 | val APACHE2 = License("Apache License, Version 2.0", "ALv2", "apache2.html") 12 | 13 | @JvmField 14 | val MPL2 = License("Mozilla Public License, Version 2.0", "MPL 2.0", "mpl2.html") 15 | 16 | @JvmField 17 | val MIT = License("MIT License", "MIT", "mit.html") 18 | 19 | @JvmField 20 | val EPL1 = License("Eclipse Public License, Version 1.0", "EPL 1.0", "epl1.html") 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/database/LocalItem.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.database; 2 | 3 | public interface LocalItem { 4 | LocalItemType getLocalItemType(); 5 | 6 | enum LocalItemType { 7 | PLAYLIST_LOCAL_ITEM, 8 | PLAYLIST_REMOTE_ITEM, 9 | 10 | PLAYLIST_STREAM_ITEM, 11 | STATISTIC_STREAM_ITEM, 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.database.history.dao; 2 | 3 | import org.schabi.newpipe.database.BasicDAO; 4 | 5 | public interface HistoryDAO extends BasicDAO { 6 | T getLatestEntry(); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/database/stream/StreamWithState.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.database.stream 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Embedded 5 | import org.schabi.newpipe.database.stream.model.StreamEntity 6 | import org.schabi.newpipe.database.stream.model.StreamStateEntity 7 | 8 | data class StreamWithState( 9 | @Embedded 10 | val stream: StreamEntity, 11 | 12 | @ColumnInfo(name = StreamStateEntity.STREAM_PROGRESS_MILLIS) 13 | val stateProgressMillis: Long? 14 | ) 15 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/database/subscription/NotificationMode.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.database.subscription; 2 | 3 | import androidx.annotation.IntDef; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | 7 | @IntDef({NotificationMode.DISABLED, NotificationMode.ENABLED}) 8 | @Retention(RetentionPolicy.SOURCE) 9 | public @interface NotificationMode { 10 | 11 | int DISABLED = 0; 12 | int ENABLED = 1; 13 | //other values reserved for the future 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/BackPressable.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments; 2 | 3 | /** 4 | * Indicates that the current fragment can handle back presses. 5 | */ 6 | public interface BackPressable { 7 | /** 8 | * A back press was delegated to this fragment. 9 | * 10 | * @return if the back press was handled 11 | */ 12 | boolean onBackPressed(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/ViewContract.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments; 2 | 3 | public interface ViewContract { 4 | void showLoading(); 5 | 6 | void hideLoading(); 7 | 8 | void showEmptyState(); 9 | 10 | void handleResult(I result); 11 | 12 | void handleError(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/list/ListViewContract.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments.list; 2 | 3 | import org.schabi.newpipe.fragments.ViewContract; 4 | 5 | public interface ListViewContract extends ViewContract { 6 | void showListFooter(boolean show); 7 | 8 | void handleNextItems(N result); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentUtils.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments.list.comments; 2 | 3 | import org.schabi.newpipe.extractor.comments.CommentsInfo; 4 | import org.schabi.newpipe.extractor.comments.CommentsInfoItem; 5 | import org.schabi.newpipe.util.SerializedUtils; 6 | 7 | import java.io.IOException; 8 | 9 | final class CommentUtils { 10 | private CommentUtils() { 11 | } 12 | 13 | public static CommentsInfo clone( 14 | final CommentsInfo item 15 | ) throws IOException, SecurityException, NullPointerException, ClassNotFoundException { 16 | return SerializedUtils.clone(item, CommentsInfo.class); 17 | } 18 | 19 | public static CommentsInfoItem clone( 20 | final CommentsInfoItem item 21 | ) throws IOException, SecurityException, NullPointerException, ClassNotFoundException { 22 | return SerializedUtils.clone(item, CommentsInfoItem.class); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/list/search/SuggestionItem.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments.list.search; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | public class SuggestionItem { 6 | final boolean fromHistory; 7 | public final String query; 8 | 9 | public SuggestionItem(final boolean fromHistory, final String query) { 10 | this.fromHistory = fromHistory; 11 | this.query = query; 12 | } 13 | 14 | @Override 15 | public boolean equals(final Object o) { 16 | if (o instanceof SuggestionItem) { 17 | return query.equals(((SuggestionItem) o).query); 18 | } 19 | return false; 20 | } 21 | 22 | @Override 23 | public int hashCode() { 24 | return query.hashCode(); 25 | } 26 | 27 | @NonNull 28 | @Override 29 | public String toString() { 30 | return "[" + fromHistory + "→" + query + "]"; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/list/sponsorblock/SponsorBlockFragmentListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments.list.sponsorblock; 2 | 3 | import org.schabi.newpipe.extractor.sponsorblock.SponsorBlockSegment; 4 | 5 | public interface SponsorBlockFragmentListener { 6 | void onSkippingEnabledChanged(boolean newValue); 7 | void onRequestNewPendingSegment(int startTime, int endTime); 8 | void onRequestClearPendingSegment(); 9 | void onRequestSubmitPendingSegment(SponsorBlockSegment newSegment); 10 | void onSeekToRequested(long positionMillis); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/fragments/list/sponsorblock/SponsorBlockSegmentListAdapterListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.fragments.list.sponsorblock; 2 | 3 | public interface SponsorBlockSegmentListAdapterListener { 4 | void onSkipToTimestampRequested(long positionMillis); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/ItemViewMode.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list; 2 | 3 | /** 4 | * Item view mode for streams & playlist listing screens. 5 | */ 6 | public enum ItemViewMode { 7 | /** 8 | * Default mode. 9 | */ 10 | AUTO, 11 | /** 12 | * Full width list item with thumb on the left and two line title & uploader in right. 13 | */ 14 | LIST, 15 | /** 16 | * Grid mode places two cards per row. 17 | */ 18 | GRID, 19 | /** 20 | * A full width card in phone - portrait. 21 | */ 22 | CARD 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelGridInfoItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.info_list.InfoItemBuilder; 7 | 8 | public class ChannelGridInfoItemHolder extends ChannelMiniInfoItemHolder { 9 | public ChannelGridInfoItemHolder(final InfoItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_channel_grid_item, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistCardInfoItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.info_list.InfoItemBuilder; 7 | 8 | /** 9 | * Playlist card layout. 10 | */ 11 | public class PlaylistCardInfoItemHolder extends PlaylistMiniInfoItemHolder { 12 | 13 | public PlaylistCardInfoItemHolder(final InfoItemBuilder infoItemBuilder, 14 | final ViewGroup parent) { 15 | super(infoItemBuilder, R.layout.list_playlist_card_item, parent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistGridInfoItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.info_list.InfoItemBuilder; 7 | 8 | public class PlaylistGridInfoItemHolder extends PlaylistMiniInfoItemHolder { 9 | public PlaylistGridInfoItemHolder(final InfoItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_playlist_grid_item, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistInfoItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.info_list.InfoItemBuilder; 7 | 8 | public class PlaylistInfoItemHolder extends PlaylistMiniInfoItemHolder { 9 | public PlaylistInfoItemHolder(final InfoItemBuilder infoItemBuilder, final ViewGroup parent) { 10 | super(infoItemBuilder, R.layout.list_playlist_item, parent); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/holder/StreamCardInfoItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.info_list.InfoItemBuilder; 7 | 8 | /** 9 | * Card layout for stream. 10 | */ 11 | public class StreamCardInfoItemHolder extends StreamInfoItemHolder { 12 | 13 | public StreamCardInfoItemHolder(final InfoItemBuilder infoItemBuilder, final ViewGroup parent) { 14 | super(infoItemBuilder, R.layout.list_stream_card_item, parent); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/info_list/holder/StreamGridInfoItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.info_list.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.info_list.InfoItemBuilder; 7 | 8 | public class StreamGridInfoItemHolder extends StreamInfoItemHolder { 9 | public StreamGridInfoItemHolder(final InfoItemBuilder infoItemBuilder, final ViewGroup parent) { 10 | super(infoItemBuilder, R.layout.list_stream_grid_item, parent); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/HeaderFooterHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local; 2 | 3 | import android.view.View; 4 | 5 | import androidx.recyclerview.widget.RecyclerView; 6 | 7 | public class HeaderFooterHolder extends RecyclerView.ViewHolder { 8 | public View view; 9 | 10 | public HeaderFooterHolder(final View v) { 11 | super(v); 12 | view = v; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/feed/FeedState.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.feed 2 | 3 | import androidx.annotation.StringRes 4 | import org.schabi.newpipe.local.feed.item.StreamItem 5 | import java.time.OffsetDateTime 6 | 7 | sealed class FeedState { 8 | data class ProgressState( 9 | val currentProgress: Int = -1, 10 | val maxProgress: Int = -1, 11 | @StringRes val progressMessage: Int = 0 12 | ) : FeedState() 13 | 14 | data class LoadedState( 15 | val items: List, 16 | val oldestUpdate: OffsetDateTime? = null, 17 | val notLoadedCount: Long, 18 | val itemsErrors: List = emptyList() 19 | ) : FeedState() 20 | 21 | data class ErrorState( 22 | val error: Throwable? = null 23 | ) : FeedState() 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadState.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.feed.service 2 | 3 | data class FeedLoadState( 4 | val updateDescription: String, 5 | val maxProgress: Int, 6 | val currentProgress: Int, 7 | ) 8 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/feed/service/FeedResultsHolder.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.feed.service 2 | 3 | class FeedResultsHolder { 4 | /** 5 | * List of errors that may have happen during loading. 6 | */ 7 | val itemsErrors: List 8 | get() = itemsErrorsHolder 9 | 10 | private val itemsErrorsHolder: MutableList = ArrayList() 11 | 12 | fun addError(error: Throwable) { 13 | itemsErrorsHolder.add(error) 14 | } 15 | 16 | fun addErrors(errors: List) { 17 | itemsErrorsHolder.addAll(errors) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistCardItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | /** 9 | * Playlist card layout. 10 | */ 11 | public class LocalPlaylistCardItemHolder extends LocalPlaylistItemHolder { 12 | 13 | public LocalPlaylistCardItemHolder(final LocalItemBuilder infoItemBuilder, 14 | final ViewGroup parent) { 15 | super(infoItemBuilder, R.layout.list_playlist_card_item, parent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistGridItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | public class LocalPlaylistGridItemHolder extends LocalPlaylistItemHolder { 9 | public LocalPlaylistGridItemHolder(final LocalItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_playlist_grid_item, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamCardItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | /** 9 | * Local playlist stream UI. This also includes a handle to rearrange the videos. 10 | */ 11 | public class LocalPlaylistStreamCardItemHolder extends LocalPlaylistStreamItemHolder { 12 | 13 | public LocalPlaylistStreamCardItemHolder(final LocalItemBuilder infoItemBuilder, 14 | final ViewGroup parent) { 15 | super(infoItemBuilder, R.layout.list_stream_playlist_card_item, parent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamGridItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | public class LocalPlaylistStreamGridItemHolder extends LocalPlaylistStreamItemHolder { 9 | public LocalPlaylistStreamGridItemHolder(final LocalItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_stream_playlist_grid_item, parent); // TODO 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamCardItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | public class LocalStatisticStreamCardItemHolder extends LocalStatisticStreamItemHolder { 9 | public LocalStatisticStreamCardItemHolder(final LocalItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_stream_card_item, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamGridItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | public class LocalStatisticStreamGridItemHolder extends LocalStatisticStreamItemHolder { 9 | public LocalStatisticStreamGridItemHolder(final LocalItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_stream_grid_item, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistCardItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | /** 9 | * Playlist card UI for list item. 10 | */ 11 | public class RemotePlaylistCardItemHolder extends RemotePlaylistItemHolder { 12 | 13 | public RemotePlaylistCardItemHolder(final LocalItemBuilder infoItemBuilder, 14 | final ViewGroup parent) { 15 | super(infoItemBuilder, R.layout.list_playlist_card_item, parent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistGridItemHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.holder; 2 | 3 | import android.view.ViewGroup; 4 | 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.local.LocalItemBuilder; 7 | 8 | public class RemotePlaylistGridItemHolder extends RemotePlaylistItemHolder { 9 | public RemotePlaylistGridItemHolder(final LocalItemBuilder infoItemBuilder, 10 | final ViewGroup parent) { 11 | super(infoItemBuilder, R.layout.list_playlist_grid_item, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/subscription/item/EmptyPlaceholderItem.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.subscription.item 2 | 3 | import android.view.View 4 | import com.xwray.groupie.viewbinding.BindableItem 5 | import org.schabi.newpipe.R 6 | import org.schabi.newpipe.databinding.ListEmptyViewBinding 7 | 8 | class EmptyPlaceholderItem : BindableItem() { 9 | override fun getLayout(): Int = R.layout.list_empty_view 10 | override fun bind(viewBinding: ListEmptyViewBinding, position: Int) {} 11 | override fun getSpanSize(spanCount: Int, position: Int): Int = spanCount 12 | override fun initializeViewBinding(view: View) = ListEmptyViewBinding.bind(view) 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/subscription/item/FeedGroupAddItem.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.subscription.item 2 | 3 | import android.view.View 4 | import com.xwray.groupie.viewbinding.BindableItem 5 | import org.schabi.newpipe.R 6 | import org.schabi.newpipe.databinding.FeedGroupAddNewItemBinding 7 | 8 | class FeedGroupAddItem : BindableItem() { 9 | override fun getLayout(): Int = R.layout.feed_group_add_new_item 10 | override fun bind(viewBinding: FeedGroupAddNewItemBinding, position: Int) {} 11 | override fun initializeViewBinding(view: View) = FeedGroupAddNewItemBinding.bind(view) 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/subscription/item/PickerIconItem.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.subscription.item 2 | 3 | import android.view.View 4 | import androidx.annotation.DrawableRes 5 | import com.xwray.groupie.viewbinding.BindableItem 6 | import org.schabi.newpipe.R 7 | import org.schabi.newpipe.databinding.PickerIconItemBinding 8 | import org.schabi.newpipe.local.subscription.FeedGroupIcon 9 | 10 | class PickerIconItem( 11 | val icon: FeedGroupIcon 12 | ) : BindableItem() { 13 | @DrawableRes 14 | val iconRes: Int = icon.getDrawableRes() 15 | 16 | override fun getLayout(): Int = R.layout.picker_icon_item 17 | 18 | override fun bind(viewBinding: PickerIconItemBinding, position: Int) { 19 | viewBinding.iconView.setImageResource(iconRes) 20 | } 21 | 22 | override fun initializeViewBinding(view: View) = PickerIconItemBinding.bind(view) 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/local/subscription/services/ImportExportEventListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.local.subscription.services; 2 | 3 | public interface ImportExportEventListener { 4 | /** 5 | * Called when the size has been resolved. 6 | * 7 | * @param size how many items there are to import/export 8 | */ 9 | void onSizeReceived(int size); 10 | 11 | /** 12 | * Called every time an item has been parsed/resolved. 13 | * 14 | * @param itemName the name of the subscription item 15 | */ 16 | void onItemCompleted(String itemName); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/PlayerServiceBinder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player; 2 | 3 | import android.os.Binder; 4 | 5 | import androidx.annotation.NonNull; 6 | 7 | class PlayerServiceBinder extends Binder { 8 | private final Player player; 9 | 10 | PlayerServiceBinder(@NonNull final Player player) { 11 | this.player = player; 12 | } 13 | 14 | Player getPlayerInstance() { 15 | return player; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/event/DisplayPortion.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.event 2 | 3 | enum class DisplayPortion { 4 | LEFT, MIDDLE, RIGHT, LEFT_HALF, RIGHT_HALF 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/event/DoubleTapListener.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.event 2 | 3 | interface DoubleTapListener { 4 | fun onDoubleTapStarted(portion: DisplayPortion) {} 5 | fun onDoubleTapProgressDown(portion: DisplayPortion) {} 6 | fun onDoubleTapFinished() {} 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/event/OnKeyDownListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.event; 2 | 3 | public interface OnKeyDownListener { 4 | boolean onKeyDown(int keyCode); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/event/PlayerEventListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.event; 2 | 3 | 4 | import com.google.android.exoplayer2.PlaybackParameters; 5 | 6 | import org.schabi.newpipe.extractor.stream.StreamInfo; 7 | import org.schabi.newpipe.player.playqueue.PlayQueue; 8 | 9 | public interface PlayerEventListener { 10 | void onQueueUpdate(PlayQueue queue); 11 | void onPlaybackUpdate(int state, int repeatMode, boolean shuffled, 12 | PlaybackParameters parameters); 13 | void onProgressUpdate(int currentProgress, int duration, int bufferPercent); 14 | void onMetadataUpdate(StreamInfo info, PlayQueue queue); 15 | void onServiceStopped(); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/event/PlayerServiceEventListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.event; 2 | 3 | import com.google.android.exoplayer2.PlaybackException; 4 | 5 | public interface PlayerServiceEventListener extends PlayerEventListener { 6 | void onFullscreenStateChanged(boolean fullscreen); 7 | 8 | void onScreenRotationButtonClicked(); 9 | 10 | void onMoreOptionsLongClicked(); 11 | 12 | void onPlayerError(PlaybackException error, boolean isCatchableException); 13 | 14 | void hideSystemUiIfNeeded(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/event/PlayerServiceExtendedEventListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.event; 2 | 3 | import org.schabi.newpipe.player.MainPlayer; 4 | import org.schabi.newpipe.player.Player; 5 | 6 | public interface PlayerServiceExtendedEventListener extends PlayerServiceEventListener { 7 | void onServiceConnected(Player player, 8 | MainPlayer playerService, 9 | boolean playAfterConnect); 10 | void onServiceDisconnected(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionCallback.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.mediasession; 2 | 3 | import android.support.v4.media.MediaDescriptionCompat; 4 | 5 | public interface MediaSessionCallback { 6 | void playPrevious(); 7 | 8 | void playNext(); 9 | 10 | void playItemAtIndex(int index); 11 | 12 | int getCurrentPlayingIndex(); 13 | 14 | int getQueueSize(); 15 | 16 | MediaDescriptionCompat getQueueMetadata(int index); 17 | 18 | void play(); 19 | 20 | void pause(); 21 | void changePlayMode(); 22 | void close(); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/AppendEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class AppendEvent implements PlayQueueEvent { 4 | private final int amount; 5 | 6 | public AppendEvent(final int amount) { 7 | this.amount = amount; 8 | } 9 | 10 | @Override 11 | public PlayQueueEventType type() { 12 | return PlayQueueEventType.APPEND; 13 | } 14 | 15 | public int getAmount() { 16 | return amount; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/ErrorEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class ErrorEvent implements PlayQueueEvent { 4 | private final int errorIndex; 5 | private final int queueIndex; 6 | 7 | public ErrorEvent(final int errorIndex, final int queueIndex) { 8 | this.errorIndex = errorIndex; 9 | this.queueIndex = queueIndex; 10 | } 11 | 12 | @Override 13 | public PlayQueueEventType type() { 14 | return PlayQueueEventType.ERROR; 15 | } 16 | 17 | public int getErrorIndex() { 18 | return errorIndex; 19 | } 20 | 21 | public int getQueueIndex() { 22 | return queueIndex; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/InitEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class InitEvent implements PlayQueueEvent { 4 | @Override 5 | public PlayQueueEventType type() { 6 | return PlayQueueEventType.INIT; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/MoveEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class MoveEvent implements PlayQueueEvent { 4 | private final int fromIndex; 5 | private final int toIndex; 6 | 7 | public MoveEvent(final int oldIndex, final int newIndex) { 8 | this.fromIndex = oldIndex; 9 | this.toIndex = newIndex; 10 | } 11 | 12 | @Override 13 | public PlayQueueEventType type() { 14 | return PlayQueueEventType.MOVE; 15 | } 16 | 17 | public int getFromIndex() { 18 | return fromIndex; 19 | } 20 | 21 | public int getToIndex() { 22 | return toIndex; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/PlayQueueEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | import java.io.Serializable; 4 | 5 | public interface PlayQueueEvent extends Serializable { 6 | PlayQueueEventType type(); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/PlayQueueEventType.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public enum PlayQueueEventType { 4 | INIT, 5 | 6 | // sent when the index is changed 7 | SELECT, 8 | 9 | // sent when more streams are added to the play queue 10 | APPEND, 11 | 12 | // sent when a pending stream is removed from the play queue 13 | REMOVE, 14 | 15 | // sent when two streams swap place in the play queue 16 | MOVE, 17 | 18 | // sent when queue is shuffled 19 | REORDER, 20 | 21 | // sent when recovery record is set on a stream 22 | RECOVERY, 23 | 24 | // sent when the item at index has caused an exception 25 | ERROR 26 | } 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/RecoveryEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class RecoveryEvent implements PlayQueueEvent { 4 | private final int index; 5 | private final long position; 6 | 7 | public RecoveryEvent(final int index, final long position) { 8 | this.index = index; 9 | this.position = position; 10 | } 11 | 12 | @Override 13 | public PlayQueueEventType type() { 14 | return PlayQueueEventType.RECOVERY; 15 | } 16 | 17 | public int getIndex() { 18 | return index; 19 | } 20 | 21 | public long getPosition() { 22 | return position; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/RemoveEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class RemoveEvent implements PlayQueueEvent { 4 | private final int removeIndex; 5 | private final int queueIndex; 6 | 7 | public RemoveEvent(final int removeIndex, final int queueIndex) { 8 | this.removeIndex = removeIndex; 9 | this.queueIndex = queueIndex; 10 | } 11 | 12 | @Override 13 | public PlayQueueEventType type() { 14 | return PlayQueueEventType.REMOVE; 15 | } 16 | 17 | public int getQueueIndex() { 18 | return queueIndex; 19 | } 20 | 21 | public int getRemoveIndex() { 22 | return removeIndex; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/ReorderEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class ReorderEvent implements PlayQueueEvent { 4 | private final int fromSelectedIndex; 5 | private final int toSelectedIndex; 6 | 7 | public ReorderEvent(final int fromSelectedIndex, final int toSelectedIndex) { 8 | this.fromSelectedIndex = fromSelectedIndex; 9 | this.toSelectedIndex = toSelectedIndex; 10 | } 11 | 12 | @Override 13 | public PlayQueueEventType type() { 14 | return PlayQueueEventType.REORDER; 15 | } 16 | 17 | public int getFromSelectedIndex() { 18 | return fromSelectedIndex; 19 | } 20 | 21 | public int getToSelectedIndex() { 22 | return toSelectedIndex; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/playqueue/events/SelectEvent.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.playqueue.events; 2 | 3 | public class SelectEvent implements PlayQueueEvent { 4 | private final int oldIndex; 5 | private final int newIndex; 6 | 7 | public SelectEvent(final int oldIndex, final int newIndex) { 8 | this.oldIndex = oldIndex; 9 | this.newIndex = newIndex; 10 | } 11 | 12 | @Override 13 | public PlayQueueEventType type() { 14 | return PlayQueueEventType.SELECT; 15 | } 16 | 17 | public int getOldIndex() { 18 | return oldIndex; 19 | } 20 | 21 | public int getNewIndex() { 22 | return newIndex; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/resolver/QualityResolver.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.resolver; 2 | 3 | import org.schabi.newpipe.extractor.stream.AudioStream; 4 | import org.schabi.newpipe.extractor.stream.VideoStream; 5 | 6 | import java.util.List; 7 | 8 | public interface QualityResolver { 9 | int getDefaultResolutionIndex(List sortedVideos); 10 | 11 | int getOverrideResolutionIndex(List sortedVideos, int selectedIndex); 12 | 13 | int getCurrentAudioQualityIndex(List audioStreams); 14 | } -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/player/resolver/Resolver.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.player.resolver; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | public interface Resolver { 7 | @Nullable 8 | Product resolve(@NonNull Source source); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/AccountSettingsFragment.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import android.os.Bundle; 4 | import org.schabi.newpipe.R; 5 | 6 | public class AccountSettingsFragment extends BasePreferenceFragment { 7 | 8 | @Override 9 | public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { 10 | addPreferencesFromResource(R.xml.account_settings); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/AdvancedSettingsFragment.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import android.content.SharedPreferences; 4 | import android.os.Bundle; 5 | import org.schabi.newpipe.R; 6 | import org.schabi.newpipe.util.ServiceHelper; 7 | 8 | public class AdvancedSettingsFragment extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{ 9 | 10 | private SharedPreferences.OnSharedPreferenceChangeListener listener; 11 | 12 | @Override 13 | public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { 14 | addPreferencesFromResourceRegistry(); 15 | } 16 | 17 | @Override 18 | public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 19 | if(key.equals(getString(R.string.loading_timeout_key))) { 20 | ServiceHelper.initServices(this.getContext()); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/ChannelFilterListActivity.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import org.schabi.newpipe.R; 4 | 5 | public class ChannelFilterListActivity extends BaseFilterListActivity { 6 | @Override 7 | protected String getPreferenceKey() { 8 | return getString(R.string.filter_by_channel_key) + "_set"; 9 | } 10 | 11 | @Override 12 | protected String getEmptyViewText() { 13 | return getString(R.string.no_filters); 14 | } 15 | 16 | @Override 17 | protected String getAddDialogTitle() { 18 | return getString(R.string.add_filter); 19 | } 20 | 21 | @Override 22 | protected String getActivityTitle() { 23 | return getString(R.string.filter_by_channel_title); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/ExoPlayerSettingsFragment.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import android.os.Bundle; 4 | 5 | import androidx.annotation.Nullable; 6 | 7 | public class ExoPlayerSettingsFragment extends BasePreferenceFragment { 8 | 9 | @Override 10 | public void onCreatePreferences(@Nullable final Bundle savedInstanceState, 11 | @Nullable final String rootKey) { 12 | addPreferencesFromResourceRegistry(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/GestureSettingsFragment.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.Nullable; 5 | 6 | public class GestureSettingsFragment extends BasePreferenceFragment { 7 | 8 | @Override 9 | public void onCreatePreferences(@Nullable final Bundle savedInstanceState, 10 | @Nullable final String rootKey) { 11 | addPreferencesFromResourceRegistry(); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/KeywordFilterListActivity.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings; 2 | 3 | import org.schabi.newpipe.R; 4 | 5 | public class KeywordFilterListActivity extends BaseFilterListActivity { 6 | @Override 7 | protected String getPreferenceKey() { 8 | return getString(R.string.filter_by_keyword_key) + "_set"; 9 | } 10 | 11 | @Override 12 | protected String getEmptyViewText() { 13 | return getString(R.string.no_filters); 14 | } 15 | 16 | @Override 17 | protected String getAddDialogTitle() { 18 | return getString(R.string.add_filter); 19 | } 20 | 21 | @Override 22 | protected String getActivityTitle() { 23 | return getString(R.string.filter_by_keyword_title); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/NewPipeFileLocator.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings 2 | 3 | import java.io.File 4 | 5 | /** 6 | * Locates specific files of NewPipe based on the home directory of the app. 7 | */ 8 | class NewPipeFileLocator(private val homeDir: File) { 9 | 10 | val dbDir by lazy { File(homeDir, "/databases") } 11 | 12 | val db by lazy { File(homeDir, "/databases/newpipe.db") } 13 | 14 | val dbJournal by lazy { File(homeDir, "/databases/newpipe.db-journal") } 15 | 16 | val dbShm by lazy { File(homeDir, "/databases/newpipe.db-shm") } 17 | 18 | val dbWal by lazy { File(homeDir, "/databases/newpipe.db-wal") } 19 | 20 | val settings by lazy { File(homeDir, "/databases/newpipe.settings") } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/PlayerNotificationSettingsFragment.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings 2 | 3 | import android.os.Bundle 4 | 5 | class PlayerNotificationSettingsFragment : BasePreferenceFragment() { 6 | override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 7 | addPreferencesFromResourceRegistry() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultListener.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.settings.preferencesearch; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | public interface PreferenceSearchResultListener { 6 | void onSearchResultClicked(@NonNull PreferenceSearchItem result); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/settings/preferencesearch/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains classes for searching inside the preferences. 3 | *
4 | * This code is based on 5 | * ByteHamster/SearchPreference 6 | * (MIT license) but was heavily modified/refactored for our use. 7 | * 8 | * @author litetex 9 | */ 10 | package org.schabi.newpipe.settings.preferencesearch; 11 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/sleep/TimerStopReceiver.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.sleep; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | 7 | public class TimerStopReceiver extends BroadcastReceiver { 8 | @Override 9 | public void onReceive(Context context, Intent intent) { 10 | // Stop the service when the broadcast is received 11 | Intent serviceIntent = new Intent(context, SleepTimerService.class); 12 | context.stopService(serviceIntent); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/Constants.kt: -------------------------------------------------------------------------------- 1 | @file:JvmName("Constants") 2 | 3 | package org.schabi.newpipe.util 4 | 5 | /** 6 | * Default duration when using throttle functions across the app, in milliseconds. 7 | */ 8 | const val DEFAULT_THROTTLE_TIMEOUT = 120L 9 | 10 | const val KEY_SERVICE_ID = "key_service_id" 11 | const val KEY_URL = "key_url" 12 | const val KEY_TITLE = "key_title" 13 | const val KEY_LINK_TYPE = "key_link_type" 14 | const val KEY_OPEN_SEARCH = "key_open_search" 15 | const val KEY_SEARCH_STRING = "key_search_string" 16 | 17 | const val KEY_THEME_CHANGE = "key_theme_change" 18 | const val KEY_MAIN_PAGE_CHANGE = "key_main_page_change" 19 | 20 | const val NO_SERVICE_ID = -1 21 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/DebounceSavable.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | import org.schabi.newpipe.error.ErrorInfo; 4 | 5 | public interface DebounceSavable { 6 | 7 | /** 8 | * Execute operations to save the data.
9 | * Must set {@link DebounceSaver#setIsModified(boolean)} false in this method manually 10 | * after the data has been saved. 11 | */ 12 | void saveImmediate(); 13 | 14 | void showError(ErrorInfo errorInfo); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/FallbackViewHolder.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | import android.view.View; 4 | 5 | import androidx.recyclerview.widget.RecyclerView; 6 | 7 | public class FallbackViewHolder extends RecyclerView.ViewHolder { 8 | public FallbackViewHolder(final View itemView) { 9 | super(itemView); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/OnClickGesture.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | public abstract class OnClickGesture { 6 | 7 | public abstract void selected(T selectedItem); 8 | 9 | public void held(final T selectedItem) { 10 | // Optional gesture 11 | } 12 | 13 | public void drag(final T selectedItem, final RecyclerView.ViewHolder viewHolder) { 14 | // Optional gesture 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/SavedState.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | /** 7 | * Information about the saved state on the disk. 8 | */ 9 | @Parcelize 10 | class SavedState( 11 | /** 12 | * Get the prefix of the saved file. 13 | * 14 | * @return the file prefix 15 | */ 16 | val prefixFileSaved: String, 17 | /** 18 | * Get the path to the saved file. 19 | * 20 | * @return the path to the saved file 21 | */ 22 | val pathFileSaved: String 23 | ) : Parcelable { 24 | override fun toString() = "$prefixFileSaved > $pathFileSaved" 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/SimpleOnSeekBarChangeListener.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util 2 | 3 | import android.widget.SeekBar 4 | 5 | /** 6 | * Why the hell didn't they make a stub implementation for this? 7 | */ 8 | abstract class SimpleOnSeekBarChangeListener : SeekBar.OnSeekBarChangeListener { 9 | override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {} 10 | override fun onStartTrackingTouch(seekBar: SeekBar) {} 11 | override fun onStopTrackingTouch(seekBar: SeekBar) {} 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/SortMode.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | public enum SortMode { 4 | ORIGIN, 5 | ORIGIN_REVERSE, 6 | SORT_NAME, 7 | SORT_NAME_REVERSE 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/SponsorBlockMode.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | public enum SponsorBlockMode { 4 | DISABLED, 5 | ENABLED 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/SponsorBlockSecondaryMode.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | public enum SponsorBlockSecondaryMode { 4 | DISABLED, 5 | ENABLED, 6 | MANUAL, 7 | HIGHLIGHT 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | import org.schabi.newpipe.extractor.stream.StreamType; 4 | 5 | /** 6 | * Utility class for {@link org.schabi.newpipe.extractor.stream.StreamType}. 7 | */ 8 | public final class StreamTypeUtil { 9 | private StreamTypeUtil() { 10 | // No impl pls 11 | } 12 | 13 | /** 14 | * Checks if the streamType is a livestream. 15 | * 16 | * @param streamType 17 | * @return true when the streamType is a 18 | * {@link StreamType#LIVE_STREAM} or {@link StreamType#AUDIO_LIVE_STREAM} 19 | */ 20 | public static boolean isLiveStream(final StreamType streamType) { 21 | return streamType == StreamType.LIVE_STREAM 22 | || streamType == StreamType.AUDIO_LIVE_STREAM; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/TimeUtils.java: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util; 2 | 3 | import java.util.Locale; 4 | 5 | public final class TimeUtils { 6 | private TimeUtils() { 7 | } 8 | 9 | public static String millisecondsToString(final double milliseconds) { 10 | final int seconds = (int) (milliseconds / 1000) % 60; 11 | final int minutes = (int) ((milliseconds / (1000 * 60)) % 60); 12 | final int hours = (int) ((milliseconds / (1000 * 60 * 60)) % 24); 13 | 14 | return String.format(Locale.getDefault(), 15 | "%02d:%02d:%02d", hours, minutes, seconds); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/org/schabi/newpipe/util/urlfinder/UrlFinder.kt: -------------------------------------------------------------------------------- 1 | package org.schabi.newpipe.util.urlfinder 2 | 3 | import java.util.regex.Pattern 4 | 5 | class UrlFinder { 6 | companion object { 7 | private val WEB_URL_WITH_PROTOCOL = Pattern.compile(PatternsCompat.WEB_URL_WITH_PROTOCOL) 8 | 9 | /** 10 | * @return the first url found in the input, null otherwise. 11 | */ 12 | @JvmStatic 13 | fun firstUrlFromInput(input: String?): String? { 14 | if (input.isNullOrEmpty()) { 15 | return null 16 | } 17 | 18 | val matcher = WEB_URL_WITH_PROTOCOL.matcher(input) 19 | 20 | if (matcher.find()) { 21 | return matcher.group() 22 | } 23 | 24 | return null 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/us/shandian/giga/get/FinishedMission.java: -------------------------------------------------------------------------------- 1 | package us.shandian.giga.get; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | public class FinishedMission extends Mission { 6 | 7 | public FinishedMission() { 8 | } 9 | 10 | public FinishedMission(@NonNull DownloadMission mission) { 11 | source = mission.source; 12 | length = mission.length; 13 | timestamp = mission.timestamp; 14 | kind = mission.kind; 15 | storage = mission.storage; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/us/shandian/giga/io/ProgressReport.java: -------------------------------------------------------------------------------- 1 | package us.shandian.giga.io; 2 | 3 | public interface ProgressReport { 4 | 5 | /** 6 | * Report the size of the new file 7 | * 8 | * @param progress the new size 9 | */ 10 | void report(long progress); 11 | } -------------------------------------------------------------------------------- /app/src/main/java/us/shandian/giga/service/MissionState.java: -------------------------------------------------------------------------------- 1 | package us.shandian.giga.service; 2 | 3 | public enum MissionState { 4 | None, Pending, PendingRunning, Finished 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/us/shandian/giga/ui/common/ToolbarActivity.java: -------------------------------------------------------------------------------- 1 | package us.shandian.giga.ui.common; 2 | 3 | import android.os.Bundle; 4 | 5 | import androidx.appcompat.app.AppCompatActivity; 6 | import androidx.appcompat.widget.Toolbar; 7 | 8 | import org.schabi.newpipe.R; 9 | 10 | public abstract class ToolbarActivity extends AppCompatActivity { 11 | protected Toolbar mToolbar; 12 | 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(getLayoutResource()); 17 | 18 | mToolbar = this.findViewById(R.id.toolbar); 19 | 20 | setSupportActionBar(mToolbar); 21 | } 22 | 23 | protected abstract int getLayoutResource(); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/res/animator/custom_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/animator/custom_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_close_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-hdpi/ic_close_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_hourglass_top_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-hdpi/ic_hourglass_top_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_newpipe_triangle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-hdpi/ic_newpipe_triangle_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_newpipe_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-hdpi/ic_newpipe_update.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_replay_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-hdpi/ic_replay_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_close_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-mdpi/ic_close_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_hourglass_top_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-mdpi/ic_hourglass_top_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_newpipe_triangle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-mdpi/ic_newpipe_triangle_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_newpipe_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-mdpi/ic_newpipe_update.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_replay_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-mdpi/ic_replay_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-v23/splash_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-night/ic_heart.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-night/splash_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/background_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/background_header.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/buddy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/buddy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/buddy_channel_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/buddy_channel_item.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/channel_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/channel_banner.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/dummy_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/dummy_thumbnail.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/dummy_thumbnail_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/dummy_thumbnail_dark.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/dummy_thumbnail_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/dummy_thumbnail_playlist.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/newpipe_logo_nude_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/newpipe_logo_nude_shadow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_bandcamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_bandcamp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_bilibili.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_bilibili.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_cloud.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_gadse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_gadse.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_niconico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_niconico.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_peertube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_peertube.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/place_holder_youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-nodpi/place_holder_youtube.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v23/splash_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_close_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xhdpi/ic_close_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_hourglass_top_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xhdpi/ic_hourglass_top_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_newpipe_triangle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xhdpi/ic_newpipe_triangle_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_newpipe_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xhdpi/ic_newpipe_update.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_replay_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xhdpi/ic_replay_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_close_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxhdpi/ic_close_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_hourglass_top_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxhdpi/ic_hourglass_top_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_newpipe_triangle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxhdpi/ic_newpipe_triangle_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_newpipe_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxhdpi/ic_newpipe_update.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_replay_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxhdpi/ic_replay_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_close_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxxhdpi/ic_close_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_hourglass_top_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxxhdpi/ic_hourglass_top_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_newpipe_triangle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxxhdpi/ic_newpipe_triangle_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_newpipe_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxxhdpi/ic_newpipe_update.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_replay_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/drawable-xxxhdpi/ic_replay_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_oval_black_transparent.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_rectangle_black_transparent.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/baseline_search_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dashed_border_black.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dashed_border_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dashed_border_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawer_header_bottom_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_account.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_advanced.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_apps.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_art_track.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_asterisk.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_attach_money.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_backup.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_blocking.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmark.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_high.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_low.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_medium.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bug_report.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bullet_comment_disabled.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bullet_comment_enabled.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_button_pointer.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_campaign.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cast.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checklist.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_left.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cloud_download.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_comment.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_computer.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_content_save.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_crop_portrait.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_description.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_directions_bike.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_directions_car.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_done.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_drag_handle.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_more.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_explore.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fast_forward.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fast_rewind.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fastfood.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_file_download.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter_list.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fitness_center.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_format_list_numbered.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fullscreen.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fullscreen_exit.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_headset.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_headset_shadow.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_heart.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_help.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_hourglass_top.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_outline.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_insert_emoticon.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_list.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_live_tv.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mic.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_vert.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_motorcycle.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_movie.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_music_note.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_next.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notifications.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_palette.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pause.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_people.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_person.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_picture_in_picture.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pipepipe.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_arrow.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_seek_triangle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_add.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_add_check.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_play.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_previous.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_public.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_radio.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_repeat.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_replay.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_restaurant.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_rss_feed.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_school.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_add.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_select_all.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings_backup_restore.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_shopping_cart.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_shuffle.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_stars.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_subscriptions.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_subtitles.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_telescope.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thumb_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thumb_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_timer.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_timer_off.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_trending_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tv.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_update_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_upload.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_videogame_asset.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_visibility_on.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_mute.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_off.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_watch_later.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wb_sunny.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_whatshot.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_work.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_youtube.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_thumbnail_playlist.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_thumbnail_video.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_controls_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_controls_top_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_circular_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_soundcloud_horizontal_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_soundcloud_horizontal_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_youtube_horizontal_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_youtube_horizontal_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_checked_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_checked_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_focused_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_focused_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shuffle_disabled.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toolbar_shadow_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toolbar_shadow_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/font/lxgw_wenkai.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/font/lxgw_wenkai.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_downloader.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_recaptcha.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/chip.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_add_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_edit_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/drawer_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/feed_item_carousel.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_channels_notifications.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/instance_spinner_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/instance_spinner_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_notification_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_radio_icon_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/login_webview.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/missions.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 10 | 11 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/missions_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/picker_icon_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/pignate_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/player_popup_close_overlay.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/preference_edit_color.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/settings_category_header_title.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/settings_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/single_choice_dialog_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/menu/dialog_url.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/drawer_items.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/menu/error_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/filter_list_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_chooser_fragment.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_feed_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_feed_group_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_history.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_notifications_channels.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_play_queue_bg.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_play_queue_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 10 | 13 | 16 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_recaptcha.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_settings_main_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/tv_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xhdpi/tv_banner.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/values-af/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Geen stream-speler gevind nie. Installeer VLC\? 4 | Tik op \"Soek\" om aan die gang te kom 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-ars/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-dum/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-enm/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-iw: -------------------------------------------------------------------------------- 1 | values-he/ -------------------------------------------------------------------------------- /app/src/main/res/values-ks/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-nds/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/white 4 | @color/white 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-scn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-si/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | තොරතුරු පෙන්වන්න 4 | ඔබ අදහස් කළේ \"%1$s\" ද\? 5 | සැකසුම් 6 | සොයන්න 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-v29/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 13 | 19 | 25 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /assets/bitcoin_qr_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/assets/bitcoin_qr_code.png -------------------------------------------------------------------------------- /assets/bountysource_qr_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/assets/bountysource_qr_code.png -------------------------------------------------------------------------------- /assets/icon_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/assets/icon_5.png -------------------------------------------------------------------------------- /assets/liberapay_qr_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/assets/liberapay_qr_code.png -------------------------------------------------------------------------------- /assets/new_pipe_icon_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/assets/new_pipe_icon_5.png -------------------------------------------------------------------------------- /assets/thumbs_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/assets/thumbs_up.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext.kotlin_version = '1.6.21' 5 | repositories { 6 | google() 7 | mavenCentral() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:7.3.0' 11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 12 | 13 | // NOTE: Do not place your application dependencies here; they belong 14 | // in the individual module build.gradle files 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | google() 21 | mavenCentral() 22 | maven { url "https://jitpack.io" } 23 | maven { url "https://clojars.org/repo" } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /checkstyle/suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 10 | 11 | 13 | 14 | -------------------------------------------------------------------------------- /doc/gradle.md: -------------------------------------------------------------------------------- 1 | # Custom gradle parameters 2 | 3 | You can use these parameters by specifying them inside the `gradle.properties` file as 4 | `systemProp.=` or passing them through the CLI with `-D=`. 5 | 6 | ## packageSuffix 7 | This allows you to specify a suffix, which will be added on release builds to the application id, 8 | the `app_name` string and the apk file. 9 | No validation is made, so make sure to pass in a valid value. 10 | 11 | ## skipFormatKtlint 12 | This allows you to skip the `formatKtLint` task. 13 | No value is needed. 14 | It is used for CI in order to check for badly formatted files. 15 | -------------------------------------------------------------------------------- /ffmpeg/build.gradle.kts: -------------------------------------------------------------------------------- 1 | configurations.maybeCreate("default") 2 | 3 | 4 | artifacts.add("default", file("ffmpeg-kit.aar")) -------------------------------------------------------------------------------- /ffmpeg/ffmpeg-kit.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/ffmpeg/ffmpeg-kit.aar -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableJetifier=true 2 | android.useAndroidX=true 3 | org.gradle.jvmargs=-Xmx2048M 4 | org.gradle.unsafe.configuration-cache=true 5 | systemProp.file.encoding=utf-8 6 | org.gradle.unsafe.configuration-cache-problems=warn 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | include ':ffmpeg' 4 | 5 | // Use a local copy of NewPipe Extractor by uncommenting the lines below. 6 | // We assume, that NewPipe and NewPipe Extractor have the same parent directory. 7 | // If this is not the case, please change the path in includeBuild(). 8 | 9 | includeBuild('../PipePipeExtractor') { 10 | dependencySubstitution { 11 | substitute module('com.github.TeamNewPipe:NewPipeExtractor') using project(':extractor') 12 | } 13 | } 14 | 15 | --------------------------------------------------------------------------------