├── .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 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/drawer_items.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/error_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/filter_list_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_chooser_fragment.xml:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_feed_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_feed_group_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_history.xml:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_notifications_channels.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_play_queue_bg.xml:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_play_queue_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_recaptcha.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_settings_main_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
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 |
9 |
10 |
11 |
13 |
14 |
15 |
16 |
19 |
20 |
21 |
22 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_settings.xml:
--------------------------------------------------------------------------------
1 |
5 |
11 |
12 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/test/java/org/schabi/newpipe/player/playqueue/PlayQueueItemTest.java:
--------------------------------------------------------------------------------
1 | package org.schabi.newpipe.player.playqueue;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.assertEquals;
6 | import static org.junit.Assert.assertNotEquals;
7 |
8 | public class PlayQueueItemTest {
9 |
10 | public static final String URL = "MY_URL";
11 |
12 | @Test
13 | public void equalsMustNotBeOverloaded() {
14 | final PlayQueueItem a = PlayQueueTest.makeItemWithUrl(URL);
15 | final PlayQueueItem b = PlayQueueTest.makeItemWithUrl(URL);
16 | assertEquals(a, a);
17 | assertNotEquals(a, b); // they should compare different even if they have the same data
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/test/java/org/schabi/newpipe/settings/tabs/TabTest.java:
--------------------------------------------------------------------------------
1 | package org.schabi.newpipe.settings.tabs;
2 |
3 | import org.junit.Test;
4 |
5 | import java.util.HashSet;
6 | import java.util.Set;
7 |
8 | import static org.junit.Assert.assertTrue;
9 |
10 | public class TabTest {
11 | @Test
12 | public void checkIdDuplication() {
13 | final Set usedIds = new HashSet<>();
14 |
15 | for (final Tab.Type type : Tab.Type.values()) {
16 | final boolean added = usedIds.add(type.getTabId());
17 | assertTrue("Id was already used: " + type.getTabId(), added);
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/test/resources/settings/empty.zip:
--------------------------------------------------------------------------------
1 | PK
--------------------------------------------------------------------------------
/app/src/test/resources/settings/newpipe.db:
--------------------------------------------------------------------------------
1 | such db much wow
--------------------------------------------------------------------------------
/app/src/test/resources/settings/newpipe.settings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/test/resources/settings/newpipe.settings
--------------------------------------------------------------------------------
/app/src/test/resources/settings/newpipe.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfinityLoop1308/PipePipeClient/f5abe39a30bc78160117235e5fe79ea673c2dfeb/app/src/test/resources/settings/newpipe.zip
--------------------------------------------------------------------------------
/assets/NP logo v2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
--------------------------------------------------------------------------------