├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature-request.yml │ └── report_bug.yml ├── runOnRelease.py ├── uploader.py └── workflows │ ├── ci.yml │ ├── codeql-analysis.yml │ └── run-on-release.yml ├── .gitignore ├── .idea └── icon.svg ├── CODE_OF_CONDUCT.md ├── LICENSE ├── PRIVACY_POLICY.md ├── README.md ├── ROADMAP.md ├── SCREEN_SHOT.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro ├── schemas │ └── com.github.libretube.db.AppDatabase │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 14.json │ │ ├── 15.json │ │ ├── 16.json │ │ ├── 17.json │ │ ├── 18.json │ │ ├── 19.json │ │ ├── 20.json │ │ ├── 7.json │ │ ├── 8.json │ │ └── 9.json └── src │ ├── debug │ └── res │ │ ├── drawable │ │ └── ic_launcher_monochrome.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ └── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── gpl3.html │ │ └── po_token.html │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── libretube │ │ │ ├── LibreTubeApp.kt │ │ │ ├── api │ │ │ ├── ExternalApi.kt │ │ │ ├── InstanceRepository.kt │ │ │ ├── JsonHelper.kt │ │ │ ├── LocalStreamsExtractionPipedMediaServiceRepository.kt │ │ │ ├── MediaServiceRepository.kt │ │ │ ├── NewPipeMediaServiceRepository.kt │ │ │ ├── PipedApi.kt │ │ │ ├── PipedAuthApi.kt │ │ │ ├── PipedMediaServiceRepository.kt │ │ │ ├── PlaylistsHelper.kt │ │ │ ├── ResettableLazy.kt │ │ │ ├── RetrofitInstance.kt │ │ │ ├── SubscriptionHelper.kt │ │ │ ├── obj │ │ │ │ ├── Channel.kt │ │ │ │ ├── ChannelTab.kt │ │ │ │ ├── ChannelTabResponse.kt │ │ │ │ ├── ChapterSegment.kt │ │ │ │ ├── Comment.kt │ │ │ │ ├── CommentsPage.kt │ │ │ │ ├── ContentItem.kt │ │ │ │ ├── DeArrowBody.kt │ │ │ │ ├── DeArrowContent.kt │ │ │ │ ├── DeArrowThumbnail.kt │ │ │ │ ├── DeArrowTitle.kt │ │ │ │ ├── DeleteUserRequest.kt │ │ │ │ ├── EditPlaylistBody.kt │ │ │ │ ├── Login.kt │ │ │ │ ├── Message.kt │ │ │ │ ├── MetaInfo.kt │ │ │ │ ├── PipedConfig.kt │ │ │ │ ├── PipedInstance.kt │ │ │ │ ├── PipedStream.kt │ │ │ │ ├── Playlist.kt │ │ │ │ ├── Playlists.kt │ │ │ │ ├── PreviewFrames.kt │ │ │ │ ├── SearchResult.kt │ │ │ │ ├── Segment.kt │ │ │ │ ├── SegmentData.kt │ │ │ │ ├── StreamItem.kt │ │ │ │ ├── Streams.kt │ │ │ │ ├── SubmitSegmentResponse.kt │ │ │ │ ├── Subscribe.kt │ │ │ │ ├── Subscribed.kt │ │ │ │ ├── Subscription.kt │ │ │ │ ├── Subtitle.kt │ │ │ │ ├── Token.kt │ │ │ │ └── VoteInfo.kt │ │ │ └── poToken │ │ │ │ ├── JavaScriptUtil.kt │ │ │ │ ├── PoTokenGenerator.kt │ │ │ │ └── PoTokenWebView.kt │ │ │ ├── compat │ │ │ ├── PictureInPictureCompat.kt │ │ │ └── PictureInPictureParamsCompat.kt │ │ │ ├── constants │ │ │ ├── IntentData.kt │ │ │ └── PreferenceKeys.kt │ │ │ ├── db │ │ │ ├── AppDatabase.kt │ │ │ ├── Converters.kt │ │ │ ├── DatabaseHelper.kt │ │ │ ├── DatabaseHolder.kt │ │ │ ├── dao │ │ │ │ ├── CustomInstanceDao.kt │ │ │ │ ├── DownloadDao.kt │ │ │ │ ├── LocalPlaylistsDao.kt │ │ │ │ ├── LocalSubscriptionDao.kt │ │ │ │ ├── PlaylistBookmarkDao.kt │ │ │ │ ├── SearchHistoryDao.kt │ │ │ │ ├── SubscriptionGroupsDao.kt │ │ │ │ ├── SubscriptionsFeedDao.kt │ │ │ │ ├── WatchHistoryDao.kt │ │ │ │ └── WatchPositionDao.kt │ │ │ └── obj │ │ │ │ ├── CustomInstance.kt │ │ │ │ ├── Download.kt │ │ │ │ ├── DownloadChapter.kt │ │ │ │ ├── DownloadItem.kt │ │ │ │ ├── DownloadWithItems.kt │ │ │ │ ├── LocalPlaylist.kt │ │ │ │ ├── LocalPlaylistItem.kt │ │ │ │ ├── LocalPlaylistWithVideos.kt │ │ │ │ ├── LocalSubscription.kt │ │ │ │ ├── PlaylistBookmark.kt │ │ │ │ ├── SearchHistoryItem.kt │ │ │ │ ├── SubscriptionGroup.kt │ │ │ │ ├── SubscriptionsFeedItem.kt │ │ │ │ ├── WatchHistoryItem.kt │ │ │ │ └── WatchPosition.kt │ │ │ ├── enums │ │ │ ├── AudioQuality.kt │ │ │ ├── ContentFilter.kt │ │ │ ├── FileType.kt │ │ │ ├── ImportFormat.kt │ │ │ ├── NotificationId.kt │ │ │ ├── PlayerCommand.kt │ │ │ ├── PlayerEvent.kt │ │ │ ├── PlaylistType.kt │ │ │ ├── SbSkipOptions.kt │ │ │ └── ShareObjectType.kt │ │ │ ├── extensions │ │ │ ├── AnyChildFocused.kt │ │ │ ├── Bundle.kt │ │ │ ├── ContentLength.kt │ │ │ ├── DpToPx.kt │ │ │ ├── FormatFileSize.kt │ │ │ ├── FormatShort.kt │ │ │ ├── GetWhileDigit.kt │ │ │ ├── Int.kt │ │ │ ├── Intent.kt │ │ │ ├── LocalDate.kt │ │ │ ├── MediaController.kt │ │ │ ├── Move.kt │ │ │ ├── MutableLiveDataExt.kt │ │ │ ├── Normalize.kt │ │ │ ├── ParallelMap.kt │ │ │ ├── Path.kt │ │ │ ├── Player.kt │ │ │ ├── Query.kt │ │ │ ├── RecyclerViewAdapter.kt │ │ │ ├── Round.kt │ │ │ ├── RunCatchingIO.kt │ │ │ ├── RunSafely.kt │ │ │ ├── SeekBy.kt │ │ │ ├── SetMetadata.kt │ │ │ ├── ShaSum.kt │ │ │ ├── Tag.kt │ │ │ ├── ToID.kt │ │ │ ├── ToastFromMainThread.kt │ │ │ └── UpdateParameters.kt │ │ │ ├── helpers │ │ │ ├── AudioHelper.kt │ │ │ ├── BackgroundHelper.kt │ │ │ ├── BackupHelper.kt │ │ │ ├── BrightnessHelper.kt │ │ │ ├── ClipboardHelper.kt │ │ │ ├── ContextHelper.kt │ │ │ ├── DashHelper.kt │ │ │ ├── DisplayHelper.kt │ │ │ ├── DownloadHelper.kt │ │ │ ├── ImageHelper.kt │ │ │ ├── ImportHelper.kt │ │ │ ├── IntentHelper.kt │ │ │ ├── LocaleHelper.kt │ │ │ ├── NavBarHelper.kt │ │ │ ├── NavigationHelper.kt │ │ │ ├── NetworkHelper.kt │ │ │ ├── NewPipeExtractorInstance.kt │ │ │ ├── NotificationHelper.kt │ │ │ ├── PlayerHelper.kt │ │ │ ├── PreferenceHelper.kt │ │ │ ├── ProxyHelper.kt │ │ │ ├── ShortcutHelper.kt │ │ │ ├── ThemeHelper.kt │ │ │ └── WindowHelper.kt │ │ │ ├── json │ │ │ └── SafeInstantSerializer.kt │ │ │ ├── obj │ │ │ ├── AppShortcut.kt │ │ │ ├── BackupFile.kt │ │ │ ├── BottomSheetItem.kt │ │ │ ├── Country.kt │ │ │ ├── DownloadStatus.kt │ │ │ ├── DownloadedFile.kt │ │ │ ├── FreeTubeImportPlaylist.kt │ │ │ ├── FreeTubeVideo.kt │ │ │ ├── FreetubeSubscription.kt │ │ │ ├── FreetubeSubscriptions.kt │ │ │ ├── NewPipeSubscription.kt │ │ │ ├── NewPipeSubscriptions.kt │ │ │ ├── PipedImportPlaylist.kt │ │ │ ├── PipedPlaylistFile.kt │ │ │ ├── PreferenceItem.kt │ │ │ ├── PreviewFrame.kt │ │ │ ├── SelectableOption.kt │ │ │ ├── ShareData.kt │ │ │ ├── VideoResolution.kt │ │ │ ├── VideoStats.kt │ │ │ ├── YouTubeWatchHistoryChannelInfo.kt │ │ │ ├── YouTubeWatchHistoryFileItem.kt │ │ │ └── update │ │ │ │ └── UpdateInfo.kt │ │ │ ├── parcelable │ │ │ ├── DownloadData.kt │ │ │ └── PlayerData.kt │ │ │ ├── receivers │ │ │ ├── DownloadReceiver.kt │ │ │ └── NotificationReceiver.kt │ │ │ ├── repo │ │ │ ├── AccountSubscriptionsRepository.kt │ │ │ ├── FeedRepository.kt │ │ │ ├── LocalFeedRepository.kt │ │ │ ├── LocalPlaylistsRepository.kt │ │ │ ├── LocalSubscriptionsRepository.kt │ │ │ ├── PipedAccountFeedRepository.kt │ │ │ ├── PipedLocalSubscriptionsRepository.kt │ │ │ ├── PipedNoAccountFeedRepository.kt │ │ │ ├── PipedPlaylistRepository.kt │ │ │ ├── PlaylistRepository.kt │ │ │ └── SubscriptionsRepository.kt │ │ │ ├── services │ │ │ ├── AbstractPlayerService.kt │ │ │ ├── DownloadService.kt │ │ │ ├── OfflinePlayerService.kt │ │ │ ├── OnClearFromRecentService.kt │ │ │ ├── OnlinePlayerService.kt │ │ │ └── PlaylistDownloadEnqueueService.kt │ │ │ ├── ui │ │ │ ├── activities │ │ │ │ ├── AboutActivity.kt │ │ │ │ ├── AddToPlaylistActivity.kt │ │ │ │ ├── AddToQueueActivity.kt │ │ │ │ ├── DownloadActivity.kt │ │ │ │ ├── HelpActivity.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── NoInternetActivity.kt │ │ │ │ ├── OfflinePlayerActivity.kt │ │ │ │ ├── RouterActivity.kt │ │ │ │ ├── SettingsActivity.kt │ │ │ │ ├── VideoTagsAdapter.kt │ │ │ │ ├── WelcomeActivity.kt │ │ │ │ └── ZoomableImageActivity.kt │ │ │ ├── adapters │ │ │ │ ├── AddChannelToGroupAdapter.kt │ │ │ │ ├── BottomSheetAdapter.kt │ │ │ │ ├── ChaptersAdapter.kt │ │ │ │ ├── CommentPagingAdapter.kt │ │ │ │ ├── CustomInstancesAdapter.kt │ │ │ │ ├── DownloadsAdapter.kt │ │ │ │ ├── IconsSheetAdapter.kt │ │ │ │ ├── InstancesAdapter.kt │ │ │ │ ├── IntentChooserAdapter.kt │ │ │ │ ├── LegacySubscriptionAdapter.kt │ │ │ │ ├── NavBarOptionsAdapter.kt │ │ │ │ ├── PlayingQueueAdapter.kt │ │ │ │ ├── PlaylistAdapter.kt │ │ │ │ ├── PlaylistBookmarkAdapter.kt │ │ │ │ ├── PlaylistsAdapter.kt │ │ │ │ ├── SearchHistoryAdapter.kt │ │ │ │ ├── SearchResultsAdapter.kt │ │ │ │ ├── SearchSuggestionsAdapter.kt │ │ │ │ ├── SliderLabelsAdapter.kt │ │ │ │ ├── SubscriptionChannelAdapter.kt │ │ │ │ ├── SubscriptionGroupChannelsAdapter.kt │ │ │ │ ├── SubscriptionGroupsAdapter.kt │ │ │ │ ├── VideoCardsAdapter.kt │ │ │ │ ├── VideosAdapter.kt │ │ │ │ ├── WatchHistoryAdapter.kt │ │ │ │ └── callbacks │ │ │ │ │ └── DiffUtilCallback.kt │ │ │ ├── base │ │ │ │ ├── BaseActivity.kt │ │ │ │ ├── BasePreferenceFragment.kt │ │ │ │ └── DynamicLayoutManagerFragment.kt │ │ │ ├── dialogs │ │ │ │ ├── AddToPlaylistDialog.kt │ │ │ │ ├── BackupDialog.kt │ │ │ │ ├── ColorPickerDialog.kt │ │ │ │ ├── CreateCustomInstanceDialog.kt │ │ │ │ ├── CreatePlaylistDialog.kt │ │ │ │ ├── CustomInstancesListDialog.kt │ │ │ │ ├── DeleteAccountDialog.kt │ │ │ │ ├── DeletePlaylistDialog.kt │ │ │ │ ├── DownloadDialog.kt │ │ │ │ ├── DownloadPlaylistDialog.kt │ │ │ │ ├── ErrorDialog.kt │ │ │ │ ├── ImportTempPlaylistDialog.kt │ │ │ │ ├── LoginDialog.kt │ │ │ │ ├── LogoutDialog.kt │ │ │ │ ├── NavBarOptionsDialog.kt │ │ │ │ ├── PlayOfflineDialog.kt │ │ │ │ ├── PlaylistDescriptionDialog.kt │ │ │ │ ├── RenamePlaylistDialog.kt │ │ │ │ ├── RequireRestartDialog.kt │ │ │ │ ├── ShareDialog.kt │ │ │ │ ├── SubmitDeArrowDialog.kt │ │ │ │ ├── SubmitSegmentDialog.kt │ │ │ │ └── UpdateAvailableDialog.kt │ │ │ ├── extensions │ │ │ │ ├── Activity.kt │ │ │ │ ├── FilterNonEmptyComments.kt │ │ │ │ ├── OnBackPressed.kt │ │ │ │ ├── RecyclerView.kt │ │ │ │ ├── SetDrawables.kt │ │ │ │ ├── SetFormattedDuration.kt │ │ │ │ ├── SetWatchProgressLength.kt │ │ │ │ ├── SetupFragmentAnimation.kt │ │ │ │ ├── SetupNotificationBell.kt │ │ │ │ ├── SetupSubscriptionButton.kt │ │ │ │ └── ViewAnimations.kt │ │ │ ├── fragments │ │ │ │ ├── AudioPlayerFragment.kt │ │ │ │ ├── ChannelContentFragment.kt │ │ │ │ ├── ChannelFragment.kt │ │ │ │ ├── CommentsMainFragment.kt │ │ │ │ ├── CommentsRepliesFragment.kt │ │ │ │ ├── DownloadsFragment.kt │ │ │ │ ├── HomeFragment.kt │ │ │ │ ├── LibraryFragment.kt │ │ │ │ ├── NoInternetFragment.kt │ │ │ │ ├── PlayerFragment.kt │ │ │ │ ├── PlaylistFragment.kt │ │ │ │ ├── SearchResultFragment.kt │ │ │ │ ├── SearchSuggestionsFragment.kt │ │ │ │ ├── SubscriptionsFragment.kt │ │ │ │ ├── TrendsFragment.kt │ │ │ │ └── WatchHistoryFragment.kt │ │ │ ├── interfaces │ │ │ │ ├── AudioPlayerOptions.kt │ │ │ │ ├── OnlinePlayerOptions.kt │ │ │ │ ├── PlayerGestureOptions.kt │ │ │ │ ├── PlayerOptions.kt │ │ │ │ └── TimeFrameReceiver.kt │ │ │ ├── listeners │ │ │ │ ├── AudioPlayerThumbnailListener.kt │ │ │ │ ├── PlayerGestureController.kt │ │ │ │ └── SeekbarPreviewListener.kt │ │ │ ├── models │ │ │ │ ├── ChaptersViewModel.kt │ │ │ │ ├── CommentsViewModel.kt │ │ │ │ ├── CommonPlayerViewModel.kt │ │ │ │ ├── CustomInstancesModel.kt │ │ │ │ ├── EditChannelGroupsModel.kt │ │ │ │ ├── HomeViewModel.kt │ │ │ │ ├── PlayerViewModel.kt │ │ │ │ ├── PlaylistViewModel.kt │ │ │ │ ├── SearchResultViewModel.kt │ │ │ │ ├── SearchViewModel.kt │ │ │ │ ├── SubscriptionsViewModel.kt │ │ │ │ ├── TrendsViewModel.kt │ │ │ │ ├── WatchHistoryModel.kt │ │ │ │ ├── WelcomeViewModel.kt │ │ │ │ └── sources │ │ │ │ │ ├── ChannelTabPagingSource.kt │ │ │ │ │ ├── CommentPagingSource.kt │ │ │ │ │ ├── CommentRepliesPagingSource.kt │ │ │ │ │ └── SearchPagingSource.kt │ │ │ ├── preferences │ │ │ │ ├── AdvancedSettings.kt │ │ │ │ ├── AppearanceSettings.kt │ │ │ │ ├── AudioVideoSettings.kt │ │ │ │ ├── BackupRestoreSettings.kt │ │ │ │ ├── EditNumberPreference.kt │ │ │ │ ├── GeneralSettings.kt │ │ │ │ ├── HistorySettings.kt │ │ │ │ ├── InstanceSettings.kt │ │ │ │ ├── MainSettings.kt │ │ │ │ ├── NotificationSettings.kt │ │ │ │ ├── PlayerSettings.kt │ │ │ │ └── SponsorBlockSettings.kt │ │ │ ├── sheets │ │ │ │ ├── AddChannelToGroupSheet.kt │ │ │ │ ├── BaseBottomSheet.kt │ │ │ │ ├── ChannelGroupsSheet.kt │ │ │ │ ├── ChannelOptionsBottomSheet.kt │ │ │ │ ├── ChaptersBottomSheet.kt │ │ │ │ ├── CommentsSheet.kt │ │ │ │ ├── DownloadOptionsBottomSheet.kt │ │ │ │ ├── EditChannelGroupSheet.kt │ │ │ │ ├── ExpandablePlayerSheet.kt │ │ │ │ ├── ExpandedBottomSheet.kt │ │ │ │ ├── FilterSortBottomSheet.kt │ │ │ │ ├── IconsBottomSheet.kt │ │ │ │ ├── IntentChooserSheet.kt │ │ │ │ ├── PlaybackOptionsSheet.kt │ │ │ │ ├── PlayingQueueSheet.kt │ │ │ │ ├── PlaylistOptionsBottomSheet.kt │ │ │ │ ├── SleepTimerSheet.kt │ │ │ │ ├── StatsSheet.kt │ │ │ │ ├── UndimmedBottomSheet.kt │ │ │ │ └── VideoOptionsBottomSheet.kt │ │ │ ├── tools │ │ │ │ └── SleepTimer.kt │ │ │ ├── viewholders │ │ │ │ ├── AddChannelToGroupViewHolder.kt │ │ │ │ ├── BottomSheetViewHolder.kt │ │ │ │ ├── ChaptersViewHolder.kt │ │ │ │ ├── CommentsViewHolder.kt │ │ │ │ ├── CustomInstancesViewHolder.kt │ │ │ │ ├── DownloadsViewHolder.kt │ │ │ │ ├── IconsSheetViewHolder.kt │ │ │ │ ├── InstancesViewHolder.kt │ │ │ │ ├── IntentChooserViewHolder.kt │ │ │ │ ├── LegacySubscriptionViewHolder.kt │ │ │ │ ├── NavBarOptionsViewHolder.kt │ │ │ │ ├── PlayingQueueViewHolder.kt │ │ │ │ ├── PlaylistBookmarkViewHolder.kt │ │ │ │ ├── PlaylistViewHolder.kt │ │ │ │ ├── PlaylistsViewHolder.kt │ │ │ │ ├── SearchViewHolder.kt │ │ │ │ ├── SliderLabelViewHolder.kt │ │ │ │ ├── SubscriptionChannelViewHolder.kt │ │ │ │ ├── SubscriptionGroupChannelRowViewHolder.kt │ │ │ │ ├── SubscriptionGroupsViewHolder.kt │ │ │ │ ├── SuggestionsViewHolder.kt │ │ │ │ ├── VideoCardsViewHolder.kt │ │ │ │ ├── VideoTagsViewHolder.kt │ │ │ │ ├── VideosViewHolder.kt │ │ │ │ └── WatchHistoryViewHolder.kt │ │ │ └── views │ │ │ │ ├── AppIconHeader.kt │ │ │ │ ├── AutoplayCountdownView.kt │ │ │ │ ├── ColorPreference.kt │ │ │ │ ├── CustomExoPlayerView.kt │ │ │ │ ├── CustomSwipeToRefresh.kt │ │ │ │ ├── DescriptionLayout.kt │ │ │ │ ├── DismissableTimeBar.kt │ │ │ │ ├── DoubleTapOverlay.kt │ │ │ │ ├── DrawableTextView.kt │ │ │ │ ├── DropdownMenu.kt │ │ │ │ ├── ExpandableTextView.kt │ │ │ │ ├── MarkableTimeBar.kt │ │ │ │ ├── OfflinePlayerView.kt │ │ │ │ ├── OnlinePlayerView.kt │ │ │ │ ├── PlayerGestureControlsView.kt │ │ │ │ ├── SbSpinnerPreference.kt │ │ │ │ ├── SingleViewTouchableMotionLayout.kt │ │ │ │ ├── SliderPreference.kt │ │ │ │ ├── TimePickerPreference.kt │ │ │ │ └── ZoomableImageView.kt │ │ │ ├── util │ │ │ ├── DataSaverMode.kt │ │ │ ├── DeArrowUtil.kt │ │ │ ├── ExceptionHandler.kt │ │ │ ├── HtmlParser.kt │ │ │ ├── LinkHandler.kt │ │ │ ├── NewPipeDownloaderImpl.kt │ │ │ ├── NowPlayingNotification.kt │ │ │ ├── OfflineTimeFrameReceiver.kt │ │ │ ├── OnlineTimeFrameReceiver.kt │ │ │ ├── PauseableTimer.kt │ │ │ ├── PlayingQueue.kt │ │ │ ├── TextUtils.kt │ │ │ ├── UpdateChecker.kt │ │ │ └── YouTubeHlsPlaylistParser.kt │ │ │ └── workers │ │ │ └── NotificationWorker.kt │ └── res │ │ ├── drawable │ │ ├── circle.xml │ │ ├── circular_progress.xml │ │ ├── comment_channel_owner_bg.xml │ │ ├── controls_layout_bg.xml │ │ ├── ic_add.xml │ │ ├── ic_add_instance.xml │ │ ├── ic_arrow_down.xml │ │ ├── ic_arrow_downward.xml │ │ ├── ic_arrow_left_right.xml │ │ ├── ic_arrow_right.xml │ │ ├── ic_arrow_up_down.xml │ │ ├── ic_arrow_up_left.xml │ │ ├── ic_aspect_ratio.xml │ │ ├── ic_audio.xml │ │ ├── ic_auth.xml │ │ ├── ic_awesome.xml │ │ ├── ic_backup.xml │ │ ├── ic_badge.xml │ │ ├── ic_bell.xml │ │ ├── ic_block.xml │ │ ├── ic_bookmark.xml │ │ ├── ic_bookmark_outlined.xml │ │ ├── ic_brightness.xml │ │ ├── ic_brightness_auto.xml │ │ ├── ic_cache.xml │ │ ├── ic_call.xml │ │ ├── ic_caption.xml │ │ ├── ic_check.xml │ │ ├── ic_close.xml │ │ ├── ic_color.xml │ │ ├── ic_comment.xml │ │ ├── ic_copy.xml │ │ ├── ic_data_saver.xml │ │ ├── ic_dearrow.xml │ │ ├── ic_delete.xml │ │ ├── ic_device.xml │ │ ├── ic_dislike.xml │ │ ├── ic_donate.xml │ │ ├── ic_done.xml │ │ ├── ic_download.xml │ │ ├── ic_download_filled.xml │ │ ├── ic_download_folder.xml │ │ ├── ic_drag.xml │ │ ├── ic_drag_handle.xml │ │ ├── ic_edit.xml │ │ ├── ic_empty_playlist.xml │ │ ├── ic_equalizer.xml │ │ ├── ic_eye.xml │ │ ├── ic_filter.xml │ │ ├── ic_filter_sort.xml │ │ ├── ic_flip.xml │ │ ├── ic_forward.xml │ │ ├── ic_forward_md.xml │ │ ├── ic_frame.xml │ │ ├── ic_fullscreen.xml │ │ ├── ic_fullscreen_exit.xml │ │ ├── ic_github.xml │ │ ├── ic_grid.xml │ │ ├── ic_hd.xml │ │ ├── ic_headphones.xml │ │ ├── ic_hearted.xml │ │ ├── ic_help.xml │ │ ├── ic_history.xml │ │ ├── ic_history_filled.xml │ │ ├── ic_home.xml │ │ ├── ic_home_dark.xml │ │ ├── ic_home_outlined.xml │ │ ├── ic_image.xml │ │ ├── ic_info.xml │ │ ├── ic_invert_colors.xml │ │ ├── ic_label.xml │ │ ├── ic_launcher_light_foreground.xml │ │ ├── ic_launcher_lockscreen.xml │ │ ├── ic_launcher_monochrome.xml │ │ ├── ic_lemmy.xml │ │ ├── ic_library.xml │ │ ├── ic_license.xml │ │ ├── ic_like.xml │ │ ├── ic_list.xml │ │ ├── ic_locked.xml │ │ ├── ic_login_filled.xml │ │ ├── ic_mastodon.xml │ │ ├── ic_matrix.xml │ │ ├── ic_movie.xml │ │ ├── ic_music.xml │ │ ├── ic_next.xml │ │ ├── ic_next_outlined.xml │ │ ├── ic_no_wifi.xml │ │ ├── ic_notification.xml │ │ ├── ic_open.xml │ │ ├── ic_pause.xml │ │ ├── ic_pause_circle.xml │ │ ├── ic_pause_filled.xml │ │ ├── ic_pinch_gesture.xml │ │ ├── ic_pinned.xml │ │ ├── ic_piped.xml │ │ ├── ic_play.xml │ │ ├── ic_play_circle.xml │ │ ├── ic_play_filled.xml │ │ ├── ic_player_settings.xml │ │ ├── ic_playlist.xml │ │ ├── ic_playlist_add.xml │ │ ├── ic_prev.xml │ │ ├── ic_prev_outlined.xml │ │ ├── ic_queue.xml │ │ ├── ic_region.xml │ │ ├── ic_remove.xml │ │ ├── ic_repeat.xml │ │ ├── ic_repeat_one.xml │ │ ├── ic_reset.xml │ │ ├── ic_restart.xml │ │ ├── ic_restore.xml │ │ ├── ic_rewind.xml │ │ ├── ic_rewind_md.xml │ │ ├── ic_rotating_circle.xml │ │ ├── ic_save.xml │ │ ├── ic_sb_disabled.xml │ │ ├── ic_sb_enabled.xml │ │ ├── ic_screen_rotation.xml │ │ ├── ic_search.xml │ │ ├── ic_server.xml │ │ ├── ic_settings.xml │ │ ├── ic_share.xml │ │ ├── ic_shuffle.xml │ │ ├── ic_signal.xml │ │ ├── ic_skip.xml │ │ ├── ic_sleep.xml │ │ ├── ic_sort.xml │ │ ├── ic_speed.xml │ │ ├── ic_stop.xml │ │ ├── ic_subscriptions.xml │ │ ├── ic_suggestions.xml │ │ ├── ic_swipe_gesture.xml │ │ ├── ic_text.xml │ │ ├── ic_theme.xml │ │ ├── ic_three_dots.xml │ │ ├── ic_thumb_up.xml │ │ ├── ic_time.xml │ │ ├── ic_time_outlined.xml │ │ ├── ic_translate.xml │ │ ├── ic_trash.xml │ │ ├── ic_trending.xml │ │ ├── ic_unlocked.xml │ │ ├── ic_update.xml │ │ ├── ic_upload.xml │ │ ├── ic_upload_segment.xml │ │ ├── ic_verified.xml │ │ ├── ic_video.xml │ │ ├── ic_videocam.xml │ │ ├── ic_volume_off.xml │ │ ├── ic_volume_up.xml │ │ ├── ic_weblate.xml │ │ ├── ic_window.xml │ │ ├── ic_zoom.xml │ │ ├── player_switch_thumb.xml │ │ ├── player_switch_track.xml │ │ ├── rounded_ripple.xml │ │ ├── splash_anim.xml │ │ ├── splash_icon.xml │ │ └── vertical_progressbar.xml │ │ ├── font │ │ └── roboto.ttf │ │ ├── layout-land │ │ └── fragment_player.xml │ │ ├── layout │ │ ├── activity_about.xml │ │ ├── activity_help.xml │ │ ├── activity_main.xml │ │ ├── activity_nointernet.xml │ │ ├── activity_offline_player.xml │ │ ├── activity_settings.xml │ │ ├── activity_welcome.xml │ │ ├── activity_zoomable_image.xml │ │ ├── add_channel_to_group_row.xml │ │ ├── all_caught_up_row.xml │ │ ├── app_icon_header.xml │ │ ├── app_icon_item.xml │ │ ├── autoplay_countdown.xml │ │ ├── bottom_sheet.xml │ │ ├── bottom_sheet_item.xml │ │ ├── channel_row.xml │ │ ├── channel_subscription_row.xml │ │ ├── chapters_row.xml │ │ ├── color_preference.xml │ │ ├── comments_row.xml │ │ ├── comments_sheet.xml │ │ ├── custom_instance_row.xml │ │ ├── description_layout.xml │ │ ├── dialog_add_channel_to_group.xml │ │ ├── dialog_add_to_playlist.xml │ │ ├── dialog_color_picker.xml │ │ ├── dialog_create_playlist.xml │ │ ├── dialog_custom_instance.xml │ │ ├── dialog_custom_intances_list.xml │ │ ├── dialog_delete_account.xml │ │ ├── dialog_download.xml │ │ ├── dialog_download_playlist.xml │ │ ├── dialog_edit_channel_group.xml │ │ ├── dialog_login.xml │ │ ├── dialog_play_offline.xml │ │ ├── dialog_share.xml │ │ ├── dialog_slider.xml │ │ ├── dialog_stats.xml │ │ ├── dialog_submit_dearrow.xml │ │ ├── dialog_submit_segment.xml │ │ ├── dialog_subscription_groups.xml │ │ ├── dialog_text_preference.xml │ │ ├── double_tap_overlay.xml │ │ ├── dropdown_item.xml │ │ ├── dropdown_menu.xml │ │ ├── exo_styled_player_control_view.xml │ │ ├── filter_chip.xml │ │ ├── filter_sort_sheet.xml │ │ ├── fragment_audio_player.xml │ │ ├── fragment_channel.xml │ │ ├── fragment_channel_content.xml │ │ ├── fragment_comments.xml │ │ ├── fragment_download_content.xml │ │ ├── fragment_downloads.xml │ │ ├── fragment_home.xml │ │ ├── fragment_library.xml │ │ ├── fragment_nointernet.xml │ │ ├── fragment_player.xml │ │ ├── fragment_playlist.xml │ │ ├── fragment_search_result.xml │ │ ├── fragment_search_suggestions.xml │ │ ├── fragment_subscriptions.xml │ │ ├── fragment_trends.xml │ │ ├── fragment_watch_history.xml │ │ ├── instance_row.xml │ │ ├── intent_chooser_item.xml │ │ ├── legacy_subscription_channel.xml │ │ ├── nav_options_item.xml │ │ ├── playback_bottom_sheet.xml │ │ ├── player_gesture_controls_view.xml │ │ ├── playlist_bookmark_row.xml │ │ ├── playlists_row.xml │ │ ├── queue_bottom_sheet.xml │ │ ├── queue_row.xml │ │ ├── simple_options_recycler.xml │ │ ├── sleep_timer_sheet.xml │ │ ├── slider_label_item.xml │ │ ├── spinner_preference.xml │ │ ├── subscription_group_channel_row.xml │ │ ├── subscription_group_row.xml │ │ ├── suggestion_row.xml │ │ ├── trending_row.xml │ │ ├── video_row.xml │ │ ├── video_tag_row.xml │ │ └── view_preference_switch.xml │ │ ├── menu │ │ ├── action_bar.xml │ │ └── bottom_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_bird.xml │ │ ├── ic_bird_round.xml │ │ ├── ic_fire.xml │ │ ├── ic_fire_round.xml │ │ ├── ic_flame.xml │ │ ├── ic_flame_round.xml │ │ ├── ic_gradient.xml │ │ ├── ic_gradient_round.xml │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_light.xml │ │ ├── ic_launcher_light_round.xml │ │ ├── ic_launcher_round.xml │ │ ├── ic_legacy.xml │ │ ├── ic_legacy_round.xml │ │ ├── ic_shaped.xml │ │ ├── ic_shaped_round.xml │ │ ├── ic_torch.xml │ │ └── ic_torch_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_bird.png │ │ ├── ic_bird_foreground.png │ │ ├── ic_bird_round.png │ │ ├── ic_fire.png │ │ ├── ic_fire_foreground.png │ │ ├── ic_fire_round.png │ │ ├── ic_flame.png │ │ ├── ic_flame_foreground.png │ │ ├── ic_flame_round.png │ │ ├── ic_gradient.png │ │ ├── ic_gradient_foreground.png │ │ ├── ic_gradient_round.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_light.png │ │ ├── ic_launcher_light_round.png │ │ ├── ic_launcher_round.png │ │ ├── ic_legacy.png │ │ ├── ic_legacy_foreground.png │ │ ├── ic_legacy_round.png │ │ ├── ic_shaped.png │ │ ├── ic_shaped_foreground.png │ │ ├── ic_shaped_round.png │ │ ├── ic_torch.png │ │ ├── ic_torch_foreground.png │ │ └── ic_torch_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_bird.png │ │ ├── ic_bird_foreground.png │ │ ├── ic_bird_round.png │ │ ├── ic_fire.png │ │ ├── ic_fire_foreground.png │ │ ├── ic_fire_round.png │ │ ├── ic_flame.png │ │ ├── ic_flame_foreground.png │ │ ├── ic_flame_round.png │ │ ├── ic_gradient.png │ │ ├── ic_gradient_foreground.png │ │ ├── ic_gradient_round.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_light.png │ │ ├── ic_launcher_light_round.png │ │ ├── ic_launcher_round.png │ │ ├── ic_legacy.png │ │ ├── ic_legacy_foreground.png │ │ ├── ic_legacy_round.png │ │ ├── ic_shaped.png │ │ ├── ic_shaped_foreground.png │ │ ├── ic_shaped_round.png │ │ ├── ic_torch.png │ │ ├── ic_torch_foreground.png │ │ └── ic_torch_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_bird.png │ │ ├── ic_bird_foreground.png │ │ ├── ic_bird_round.png │ │ ├── ic_fire.png │ │ ├── ic_fire_foreground.png │ │ ├── ic_fire_round.png │ │ ├── ic_flame.png │ │ ├── ic_flame_foreground.png │ │ ├── ic_flame_round.png │ │ ├── ic_gradient.png │ │ ├── ic_gradient_foreground.png │ │ ├── ic_gradient_round.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_light.png │ │ ├── ic_launcher_light_round.png │ │ ├── ic_launcher_round.png │ │ ├── ic_legacy.png │ │ ├── ic_legacy_foreground.png │ │ ├── ic_legacy_round.png │ │ ├── ic_shaped.png │ │ ├── ic_shaped_foreground.png │ │ ├── ic_shaped_round.png │ │ ├── ic_torch.png │ │ ├── ic_torch_foreground.png │ │ └── ic_torch_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_bird.png │ │ ├── ic_bird_foreground.png │ │ ├── ic_bird_round.png │ │ ├── ic_fire.png │ │ ├── ic_fire_foreground.png │ │ ├── ic_fire_round.png │ │ ├── ic_flame.png │ │ ├── ic_flame_foreground.png │ │ ├── ic_flame_round.png │ │ ├── ic_gradient.png │ │ ├── ic_gradient_foreground.png │ │ ├── ic_gradient_round.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_light.png │ │ ├── ic_launcher_light_round.png │ │ ├── ic_launcher_round.png │ │ ├── ic_legacy.png │ │ ├── ic_legacy_foreground.png │ │ ├── ic_legacy_round.png │ │ ├── ic_shaped.png │ │ ├── ic_shaped_foreground.png │ │ ├── ic_shaped_round.png │ │ ├── ic_torch.png │ │ ├── ic_torch_foreground.png │ │ └── ic_torch_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_bird.png │ │ ├── ic_bird_foreground.png │ │ ├── ic_bird_round.png │ │ ├── ic_fire.png │ │ ├── ic_fire_foreground.png │ │ ├── ic_fire_round.png │ │ ├── ic_flame.png │ │ ├── ic_flame_foreground.png │ │ ├── ic_flame_round.png │ │ ├── ic_gradient.png │ │ ├── ic_gradient_foreground.png │ │ ├── ic_gradient_round.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_light.png │ │ ├── ic_launcher_light_round.png │ │ ├── ic_launcher_round.png │ │ ├── ic_legacy.png │ │ ├── ic_legacy_foreground.png │ │ ├── ic_legacy_round.png │ │ ├── ic_shaped.png │ │ ├── ic_shaped_foreground.png │ │ ├── ic_shaped_round.png │ │ ├── ic_torch.png │ │ ├── ic_torch_foreground.png │ │ └── ic_torch_round.png │ │ ├── navigation │ │ ├── nav.xml │ │ └── nav_nointernet.xml │ │ ├── values-af │ │ └── strings.xml │ │ ├── values-ar │ │ └── strings.xml │ │ ├── values-as │ │ └── strings.xml │ │ ├── values-ast │ │ └── strings.xml │ │ ├── values-az │ │ └── strings.xml │ │ ├── values-azb │ │ └── strings.xml │ │ ├── values-b+en+Shaw │ │ └── strings.xml │ │ ├── values-b+es+419 │ │ └── strings.xml │ │ ├── values-be │ │ └── strings.xml │ │ ├── values-bg │ │ └── strings.xml │ │ ├── values-bn │ │ └── strings.xml │ │ ├── values-ca │ │ └── strings.xml │ │ ├── values-ckb │ │ └── strings.xml │ │ ├── values-cs │ │ └── strings.xml │ │ ├── values-da │ │ └── strings.xml │ │ ├── values-de │ │ └── strings.xml │ │ ├── values-el │ │ └── 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-gu │ │ └── 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-is │ │ └── strings.xml │ │ ├── values-it │ │ └── strings.xml │ │ ├── values-iw │ │ └── strings.xml │ │ ├── values-ja │ │ └── strings.xml │ │ ├── values-km │ │ └── strings.xml │ │ ├── values-ko │ │ └── strings.xml │ │ ├── values-large │ │ └── integers.xml │ │ ├── values-lt │ │ └── strings.xml │ │ ├── values-lv │ │ └── strings.xml │ │ ├── values-ml │ │ └── strings.xml │ │ ├── values-mr │ │ └── strings.xml │ │ ├── values-ms │ │ └── strings.xml │ │ ├── values-nb-rNO │ │ └── strings.xml │ │ ├── values-ne │ │ └── strings.xml │ │ ├── values-night-v31 │ │ └── themes.xml │ │ ├── values-night │ │ ├── colors.xml │ │ └── themes.xml │ │ ├── values-nl │ │ └── strings.xml │ │ ├── values-or │ │ └── strings.xml │ │ ├── values-pa │ │ └── strings.xml │ │ ├── values-pl │ │ └── strings.xml │ │ ├── values-pt-rBR │ │ └── strings.xml │ │ ├── values-pt │ │ └── strings.xml │ │ ├── values-ro │ │ └── strings.xml │ │ ├── values-ru │ │ └── strings.xml │ │ ├── values-si │ │ └── strings.xml │ │ ├── values-sk │ │ └── strings.xml │ │ ├── values-sr │ │ └── strings.xml │ │ ├── values-sv │ │ └── strings.xml │ │ ├── values-ta │ │ └── strings.xml │ │ ├── values-television │ │ └── config.xml │ │ ├── values-th │ │ └── strings.xml │ │ ├── values-ti │ │ └── strings.xml │ │ ├── values-tk │ │ └── strings.xml │ │ ├── values-tr │ │ └── strings.xml │ │ ├── values-uk │ │ └── strings.xml │ │ ├── values-ur │ │ └── strings.xml │ │ ├── values-v31 │ │ └── themes.xml │ │ ├── values-vi │ │ └── strings.xml │ │ ├── values-xlarge │ │ └── integers.xml │ │ ├── values-yue │ │ └── strings.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ ├── values │ │ ├── array.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── config.xml │ │ ├── ic_bird_background.xml │ │ ├── ic_fire_background.xml │ │ ├── ic_flame_background.xml │ │ ├── ic_gradient_background.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_light_background.xml │ │ ├── ic_legacy_background.xml │ │ ├── ic_shaped_background.xml │ │ ├── ic_torch_background.xml │ │ ├── integers.xml │ │ ├── strings.xml │ │ ├── style.xml │ │ └── themes.xml │ │ └── xml │ │ ├── activity_main_scene.xml │ │ ├── advanced_settings.xml │ │ ├── appearance_settings.xml │ │ ├── audio_player_scene.xml │ │ ├── audio_video_settings.xml │ │ ├── general_settings.xml │ │ ├── history_settings.xml │ │ ├── import_export_settings.xml │ │ ├── instance_settings.xml │ │ ├── network_security_config.xml │ │ ├── notification_settings.xml │ │ ├── player_scene.xml │ │ ├── player_settings.xml │ │ ├── settings.xml │ │ └── sponsorblock_settings.xml │ ├── release │ └── generated │ │ └── baselineProfiles │ │ ├── baseline-prof.txt │ │ └── startup-prof.txt │ └── test │ └── java │ └── com │ └── github │ └── libretube │ └── TextParserTest.kt ├── baselineprofile ├── .gitignore ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── github │ └── libretube │ └── baselineprofile │ ├── BaselineProfileGenerator.kt │ └── StartupBenchmarks.kt ├── build.gradle.kts ├── changelog.sh ├── fastlane └── metadata │ └── android │ └── en-US │ ├── changelogs │ ├── 11.txt │ ├── 12.txt │ ├── 13.txt │ ├── 14.txt │ ├── 16.txt │ ├── 17.txt │ ├── 18.txt │ ├── 19.txt │ ├── 20.txt │ ├── 21.txt │ ├── 22.txt │ ├── 23.txt │ ├── 24.txt │ ├── 25.txt │ ├── 26.txt │ ├── 27.txt │ ├── 28.txt │ ├── 29.txt │ ├── 30.txt │ ├── 31.txt │ ├── 32.txt │ ├── 33.txt │ ├── 34.txt │ ├── 35.txt │ ├── 36.txt │ ├── 37.txt │ ├── 38.txt │ ├── 39.txt │ ├── 40.txt │ ├── 41.txt │ ├── 42.txt │ ├── 43.txt │ ├── 44.txt │ ├── 45.txt │ ├── 46.txt │ ├── 47.txt │ ├── 48.txt │ ├── 49.txt │ ├── 5.txt │ ├── 50.txt │ ├── 51.txt │ ├── 52.txt │ ├── 53.txt │ ├── 54.txt │ ├── 55.txt │ ├── 56.txt │ ├── 57.txt │ ├── 58.txt │ ├── 59.txt │ ├── 60.txt │ ├── 61.txt │ └── 62.txt │ ├── full_description.txt │ ├── images │ ├── icon.png │ ├── phoneScreenshots │ │ ├── Screenshot_1.jpg │ │ ├── Screenshot_10.jpg │ │ ├── Screenshot_11.jpg │ │ ├── Screenshot_12.jpg │ │ ├── Screenshot_2.jpg │ │ ├── Screenshot_3.jpg │ │ ├── Screenshot_4.jpg │ │ ├── Screenshot_5.jpg │ │ ├── Screenshot_6.jpg │ │ ├── Screenshot_7.jpg │ │ ├── Screenshot_8.jpg │ │ └── Screenshot_9.jpg │ └── readme │ │ ├── about.svg │ │ ├── community.svg │ │ ├── donate.svg │ │ ├── feature.svg │ │ ├── ltvnp.svg │ │ ├── phone.svg │ │ └── privacy.svg │ └── short_description.txt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── renovate.json └── settings.gradle.kts /.gitattributes: -------------------------------------------------------------------------------- 1 | app/src/main/assets/* linguist-vendored 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: Bnyro 2 | liberapay: Bnyro 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Gradle files 2 | .gradle/ 3 | build/ 4 | 5 | # Local configuration file (sdk path, etc) 6 | local.properties 7 | 8 | # Log/OS Files 9 | *.log 10 | 11 | # Android Studio generated files and folders 12 | captures/ 13 | .externalNativeBuild/ 14 | .cxx/ 15 | *.apk 16 | output.json 17 | app/release/ 18 | 19 | # IntelliJ 20 | *.iml 21 | .idea/ 22 | 23 | # Keystore files 24 | *.jks 25 | *.keystore 26 | 27 | # Google Services (e.g. APIs or Firebase) 28 | google-services.json 29 | 30 | # Android Profiling 31 | *.hprof 32 | .DS_Store 33 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/JsonHelper.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api 2 | 3 | import kotlinx.serialization.json.Json 4 | 5 | object JsonHelper { 6 | val json = Json { 7 | ignoreUnknownKeys = true 8 | coerceInputValues = true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/LocalStreamsExtractionPipedMediaServiceRepository.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api 2 | 3 | class LocalStreamsExtractionPipedMediaServiceRepository: PipedMediaServiceRepository() { 4 | private val newPipeDelegate = NewPipeMediaServiceRepository() 5 | 6 | override suspend fun getStreams(videoId: String) = newPipeDelegate.getStreams(videoId) 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Channel.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Channel( 7 | val id: String? = null, 8 | val name: String? = null, 9 | val avatarUrl: String? = null, 10 | val bannerUrl: String? = null, 11 | val description: String? = null, 12 | var nextpage: String? = null, 13 | val subscriberCount: Long = 0, 14 | val verified: Boolean = false, 15 | var relatedStreams: List = emptyList(), 16 | val tabs: List = emptyList() 17 | ) 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/ChannelTab.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Parcelize 9 | data class ChannelTab( 10 | val name: String, 11 | val data: String 12 | ) : Parcelable 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/ChannelTabResponse.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class ChannelTabResponse( 7 | var content: List = emptyList(), 8 | val nextpage: String? = null 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/CommentsPage.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class CommentsPage( 7 | var comments: List = emptyList(), 8 | val disabled: Boolean = false, 9 | val nextpage: String? = null, 10 | val commentCount: Long = 0 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/DeArrowBody.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class DeArrowBody( 7 | val videoID: String, 8 | val userID: String, 9 | val userAgent: String, 10 | val title: DeArrowSubmitTitle?, 11 | val thumbnail: DeArrowSubmitThumbnail?, 12 | val downvote: Boolean = false 13 | ) 14 | 15 | @Serializable 16 | data class DeArrowSubmitTitle( 17 | val title: String 18 | ) 19 | 20 | @Serializable 21 | data class DeArrowSubmitThumbnail( 22 | val timestamp: Float 23 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/DeArrowContent.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class DeArrowContent( 7 | val thumbnails: List, 8 | val titles: List, 9 | val randomTime: Float?, 10 | val videoDuration: Float? 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/DeArrowThumbnail.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class DeArrowThumbnail( 7 | val UUID: String, 8 | val locked: Boolean, 9 | val original: Boolean, 10 | val thumbnail: String? = null, 11 | val timestamp: Float?, 12 | val votes: Int 13 | ) 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/DeArrowTitle.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class DeArrowTitle( 8 | @SerialName("UUID") val uuid: String, 9 | val locked: Boolean, 10 | val original: Boolean, 11 | val title: String, 12 | val votes: Int 13 | ) 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/DeleteUserRequest.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class DeleteUserRequest(val password: String) 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/EditPlaylistBody.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class EditPlaylistBody( 7 | val playlistId: String? = null, 8 | val videoId: String? = null, 9 | val videoIds: List = emptyList(), 10 | val newName: String? = null, 11 | val description: String? = null, 12 | val index: Int = -1 13 | ) 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Login.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Login( 7 | val username: String, 8 | val password: String 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Message.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Message( 7 | val error: String? = null, 8 | val message: String? = null 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/MetaInfo.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Parcelize 9 | data class MetaInfo( 10 | val title: String, 11 | val description: String, 12 | val urls: List, 13 | val urlTexts: List 14 | ): Parcelable 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/PipedConfig.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class PipedConfig( 7 | val donationUrl: String? = null, 8 | val statusPageUrl: String? = null, 9 | val imageProxyUrl: String? = null 10 | ) 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Playlists.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Parcelize 9 | data class Playlists( 10 | val id: String? = null, 11 | var name: String? = null, 12 | var shortDescription: String? = null, 13 | val thumbnail: String? = null, 14 | val videos: Long = 0 15 | ) : Parcelable 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/PreviewFrames.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Parcelize 9 | data class PreviewFrames( 10 | val urls: List, 11 | val frameWidth: Int, 12 | val frameHeight: Int, 13 | val totalCount: Int, 14 | val durationPerFrame: Long, 15 | val framesPerPageX: Int, 16 | val framesPerPageY: Int 17 | ): Parcelable 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/SearchResult.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class SearchResult( 7 | var items: List = emptyList(), 8 | val nextpage: String? = null, 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/SegmentData.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class SegmentData( 7 | val hash: String? = null, 8 | val segments: List = listOf(), 9 | val videoID: String? = null 10 | ) 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/SubmitSegmentResponse.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class SubmitSegmentResponse( 8 | @SerialName("UUID") val uuid: String, 9 | val category: String, 10 | val segment: List 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Subscribe.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Subscribe(val channelId: String) 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Subscribed.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Subscribed(val subscribed: Boolean? = null) 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Subscription.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Subscription( 7 | val url: String, 8 | val name: String, 9 | val avatar: String? = null, 10 | val verified: Boolean 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/Token.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Token( 7 | val token: String? = null, 8 | val error: String? = null 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/api/obj/VoteInfo.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.api.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Parcelize 9 | data class VoteInfo( 10 | val likes: Long, 11 | val rawDislikes: Long, 12 | val rawLikes: Long, 13 | val dislikes: Long, 14 | val rating: Float, 15 | val viewCount: Long, 16 | val deleted: Boolean 17 | ) : Parcelable 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/CustomInstance.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import android.os.Parcelable 4 | import androidx.room.ColumnInfo 5 | import androidx.room.Entity 6 | import androidx.room.PrimaryKey 7 | import kotlinx.parcelize.Parcelize 8 | import kotlinx.serialization.Serializable 9 | 10 | @Serializable 11 | @Entity(tableName = "customInstance") 12 | @Parcelize 13 | class CustomInstance( 14 | @PrimaryKey var name: String = "", 15 | @ColumnInfo var apiUrl: String = "", 16 | @ColumnInfo var frontendUrl: String = "" 17 | ) : Parcelable 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/DownloadChapter.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | import com.github.libretube.api.obj.ChapterSegment 6 | 7 | @Entity(tableName = "downloadChapters") 8 | data class DownloadChapter( 9 | @PrimaryKey(autoGenerate = true) val id: Long = 0, 10 | val videoId: String, 11 | val name: String, 12 | val start: Long, 13 | val thumbnailUrl: String 14 | ) { 15 | fun toChapterSegment(): ChapterSegment { 16 | return ChapterSegment(name, thumbnailUrl, start) 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/LocalPlaylist.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Entity 9 | data class LocalPlaylist( 10 | @PrimaryKey(autoGenerate = true) 11 | var id: Int = 0, 12 | var name: String = "", 13 | var thumbnailUrl: String = "", 14 | var description: String? = "" 15 | ) 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/LocalPlaylistWithVideos.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import androidx.room.Embedded 4 | import androidx.room.Relation 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | data class LocalPlaylistWithVideos( 9 | @Embedded val playlist: LocalPlaylist = LocalPlaylist(), 10 | @Relation( 11 | parentColumn = "id", 12 | entityColumn = "playlistId" 13 | ) 14 | val videos: List = listOf() 15 | ) 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/PlaylistBookmark.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Entity(tableName = "playlistBookmark") 9 | data class PlaylistBookmark( 10 | @PrimaryKey 11 | val playlistId: String = "", 12 | var playlistName: String? = null, 13 | var thumbnailUrl: String? = null, 14 | var uploader: String? = null, 15 | var uploaderUrl: String? = null, 16 | var uploaderAvatar: String? = null, 17 | var videos: Int = 0 18 | ) 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/SearchHistoryItem.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | @Entity(tableName = "searchHistoryItem") 9 | data class SearchHistoryItem( 10 | @PrimaryKey val query: String = "" 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/db/obj/WatchPosition.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.db.obj 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.PrimaryKey 6 | import kotlinx.serialization.Serializable 7 | 8 | /** 9 | * @param position: Position in milliseconds 10 | */ 11 | @Serializable 12 | @Entity(tableName = "watchPosition") 13 | data class WatchPosition( 14 | @PrimaryKey val videoId: String = "", 15 | @ColumnInfo val position: Long = 0L 16 | ) 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/AudioQuality.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class AudioQuality { 4 | BEST, 5 | WORST 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/FileType.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class FileType { 4 | AUDIO, 5 | VIDEO, 6 | SUBTITLE 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/ImportFormat.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | import androidx.annotation.StringRes 4 | import com.github.libretube.R 5 | 6 | enum class ImportFormat(@StringRes val value: Int, val fileExtension: String) { 7 | NEWPIPE(R.string.import_format_newpipe, "json"), 8 | FREETUBE(R.string.import_format_freetube, "db"), 9 | YOUTUBECSV(R.string.import_format_youtube_csv, "csv"), 10 | YOUTUBEJSON(R.string.youtube, "json"), 11 | PIPED(R.string.import_format_piped, "json"), 12 | URLSORIDS(R.string.import_format_list_of_urls, "txt") 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/NotificationId.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class NotificationId(val id: Int) { 4 | PLAYER_PLAYBACK(1), 5 | DOWNLOAD_IN_PROGRESS(2), 6 | ENQUEUE_PLAYLIST_DOWNLOAD(3) 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/PlayerCommand.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class PlayerCommand { 4 | SKIP_SILENCE, 5 | SET_VIDEO_TRACK_TYPE_DISABLED, 6 | SET_AUDIO_ROLE_FLAGS, 7 | SET_RESOLUTION, 8 | SET_AUDIO_LANGUAGE, 9 | SET_SUBTITLE, 10 | SET_SB_AUTO_SKIP_ENABLED, 11 | PLAY_VIDEO_BY_ID, 12 | SET_AUTOPLAY_COUNTDOWN_ENABLED, 13 | TOGGLE_AUDIO_ONLY_MODE 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/PlayerEvent.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class PlayerEvent { 4 | PlayPause, 5 | Forward, 6 | Rewind, 7 | Next, 8 | Prev, 9 | Background, 10 | Stop 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/PlaylistType.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class PlaylistType { 4 | /** 5 | * Local playlist 6 | */ 7 | LOCAL, 8 | 9 | /** 10 | * Piped playlist 11 | */ 12 | PRIVATE, 13 | 14 | /** 15 | * YouTube playlist 16 | */ 17 | PUBLIC 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/SbSkipOptions.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class SbSkipOptions { 4 | OFF, 5 | MANUAL, 6 | AUTOMATIC, 7 | AUTOMATIC_ONCE 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/enums/ShareObjectType.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.enums 2 | 3 | enum class ShareObjectType { 4 | VIDEO, 5 | PLAYLIST, 6 | CHANNEL 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/AnyChildFocused.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import androidx.core.view.children 6 | 7 | fun View.anyChildFocused(): Boolean { 8 | if (isFocused) return true 9 | 10 | if (this is ViewGroup) { 11 | return children.any { it.anyChildFocused() } 12 | } 13 | 14 | return false 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/DpToPx.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import android.content.res.Resources 4 | import androidx.core.util.TypedValueCompat 5 | 6 | /** 7 | * Convert dp to pixels 8 | */ 9 | fun Float.dpToPx(): Int { 10 | return (TypedValueCompat.dpToPx(this, Resources.getSystem().displayMetrics) + 0.5f).toInt() 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/FormatShort.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import android.icu.text.CompactDecimalFormat 4 | import com.github.libretube.helpers.LocaleHelper 5 | 6 | fun Long?.formatShort(): String = CompactDecimalFormat 7 | .getInstance(LocaleHelper.getAppLocale(), CompactDecimalFormat.CompactStyle.SHORT) 8 | .format(this ?: 0) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/GetWhileDigit.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | /** 4 | * Read a string as long as the char is a digit and return the number value as int 5 | */ 6 | fun String?.getWhileDigit(): Int? { 7 | return orEmpty().takeWhile { char -> 8 | char.isDigit() 9 | }.toIntOrNull() 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Int.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import kotlin.math.ceil 4 | 5 | fun Int.ceilHalf() = ceil((toDouble() / 2)).toInt() 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Intent.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import android.content.Intent 4 | import android.os.Parcelable 5 | import androidx.core.content.IntentCompat 6 | import java.io.Serializable 7 | 8 | inline fun Intent.parcelableExtra(name: String?): T? { 9 | return IntentCompat.getParcelableExtra(this, name, T::class.java) 10 | } 11 | 12 | inline fun Intent.serializableExtra(name: String?): T? { 13 | return IntentCompat.getSerializableExtra(this, name, T::class.java) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/MediaController.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import androidx.annotation.OptIn 4 | import androidx.core.os.bundleOf 5 | import androidx.media3.common.util.UnstableApi 6 | import androidx.media3.session.MediaController 7 | import com.github.libretube.enums.PlayerCommand 8 | import com.github.libretube.services.AbstractPlayerService 9 | 10 | @OptIn(UnstableApi::class) 11 | fun MediaController.navigateVideo(videoId: String) { 12 | sendCustomCommand( 13 | AbstractPlayerService.runPlayerActionCommand, 14 | bundleOf(PlayerCommand.PLAY_VIDEO_BY_ID.name to videoId) 15 | ) 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Move.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | fun MutableList.move(oldPosition: Int, newPosition: Int) { 4 | val item = this.get(oldPosition) 5 | this.removeAt(oldPosition) 6 | this.add(newPosition, item) 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/MutableLiveDataExt.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | 5 | fun MutableLiveData.updateIfChanged(newValue: T) { 6 | if (value != newValue) value = newValue 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/ParallelMap.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import kotlinx.coroutines.Dispatchers 4 | import kotlinx.coroutines.async 5 | import kotlinx.coroutines.awaitAll 6 | import kotlinx.coroutines.coroutineScope 7 | 8 | suspend fun List.parallelMap(f: suspend (A) -> B): List = coroutineScope { 9 | map { async(Dispatchers.IO) { f(it) } }.awaitAll() 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Path.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import android.net.Uri 4 | import androidx.core.net.toUri 5 | import java.nio.file.Path 6 | import kotlin.io.path.exists 7 | 8 | fun Path.toAndroidUriOrNull(): Uri? { 9 | return if (exists()) toAndroidUri() else null 10 | } 11 | 12 | fun Path.toAndroidUri(): Uri { 13 | return toFile().toUri() 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Player.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import androidx.media3.common.Player 4 | 5 | fun Player.togglePlayPauseState() { 6 | when { 7 | playerError != null -> { 8 | prepare() 9 | play() 10 | } 11 | 12 | !isPlaying && playbackState == Player.STATE_ENDED -> { 13 | seekTo(0) 14 | } 15 | 16 | !isPlaying -> play() 17 | 18 | else -> pause() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Query.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | fun query(block: () -> Unit) { 4 | Thread { 5 | try { 6 | block.invoke() 7 | } catch (e: Exception) { 8 | e.printStackTrace() 9 | } 10 | }.start() 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Round.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import kotlin.math.pow 4 | import kotlin.math.roundToInt 5 | 6 | fun Float.round(decimalPlaces: Int): Float { 7 | return (this * 10.0.pow(decimalPlaces.toDouble())).roundToInt() / 10.0.pow( 8 | decimalPlaces.toDouble() 9 | ) 10 | .toFloat() 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/RunCatchingIO.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import kotlinx.coroutines.CoroutineScope 4 | import kotlinx.coroutines.Dispatchers 5 | import kotlinx.coroutines.launch 6 | 7 | fun runCatchingIO(block: suspend () -> Unit) = CoroutineScope(Dispatchers.IO).launch { 8 | runCatching { 9 | block.invoke() 10 | } 11 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/SeekBy.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import androidx.media3.common.Player 4 | 5 | /** 6 | * Forward or rewind by the provided [timeDiff] in milliseconds 7 | */ 8 | fun Player.seekBy(timeDiff: Long) { 9 | seekTo(currentPosition + timeDiff) 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/ShaSum.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import java.security.MessageDigest 4 | 5 | /** 6 | * Calculates the SHA-256 hash of the String and returns the result in hexadecimal. 7 | */ 8 | @OptIn(ExperimentalStdlibApi::class) 9 | fun String.sha256Sum(): String = MessageDigest.getInstance("SHA-256") 10 | .digest(this.toByteArray()) 11 | .toHexString() 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/Tag.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | fun Any.TAG(): String = this::class.java.name 4 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/extensions/UpdateParameters.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.extensions 2 | 3 | import androidx.media3.exoplayer.trackselection.DefaultTrackSelector 4 | 5 | @androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class) 6 | inline fun DefaultTrackSelector.updateParameters( 7 | actions: DefaultTrackSelector.Parameters.Builder.() -> Unit 8 | ) = setParameters(buildUponParameters().apply(actions)) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/helpers/DisplayHelper.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.helpers 2 | 3 | import android.content.Context 4 | import androidx.core.content.ContextCompat 5 | 6 | object DisplayHelper { 7 | /** 8 | * Detect whether the device supports HDR as the ExoPlayer doesn't handle it properly 9 | * Returns false below SDK 24 10 | */ 11 | fun supportsHdr(context: Context) = ContextCompat.getDisplayOrDefault(context).isHdr 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/helpers/NewPipeExtractorInstance.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.helpers 2 | 3 | import com.github.libretube.util.NewPipeDownloaderImpl 4 | import org.schabi.newpipe.extractor.NewPipe 5 | import org.schabi.newpipe.extractor.ServiceList 6 | import org.schabi.newpipe.extractor.StreamingService 7 | 8 | object NewPipeExtractorInstance { 9 | val extractor: StreamingService by lazy { 10 | NewPipe.getService(ServiceList.YouTube.serviceId) 11 | } 12 | 13 | fun init() { 14 | NewPipe.init(NewPipeDownloaderImpl()) 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/AppShortcut.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import androidx.annotation.DrawableRes 4 | import androidx.annotation.StringRes 5 | 6 | data class AppShortcut( 7 | val action: String, 8 | @StringRes val label: Int, 9 | @DrawableRes val drawable: Int 10 | ) 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/BottomSheetItem.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | data class BottomSheetItem( 4 | var title: String, 5 | val drawable: Int? = null, 6 | val getCurrent: () -> String? = { null }, 7 | val onClick: () -> Unit = {} 8 | ) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/Country.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | data class Country( 4 | val name: String, 5 | val code: String 6 | ) 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/DownloadStatus.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | sealed class DownloadStatus { 4 | 5 | object Completed : DownloadStatus() 6 | 7 | object Paused : DownloadStatus() 8 | 9 | object Stopped : DownloadStatus() 10 | 11 | data class Progress( 12 | val progress: Long, 13 | val downloaded: Long, 14 | val total: Long 15 | ) : DownloadStatus() 16 | 17 | data class Error(val message: String, val cause: Throwable? = null) : DownloadStatus() 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/DownloadedFile.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import android.graphics.Bitmap 4 | import com.github.libretube.api.obj.Streams 5 | 6 | data class DownloadedFile( 7 | val name: String, 8 | val size: Long, 9 | var metadata: Streams? = null, 10 | var thumbnail: Bitmap? = null 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/FreeTubeImportPlaylist.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class FreeTubeImportPlaylist( 8 | @SerialName("playlistName") val name: String = "", 9 | var videos: List = listOf(), 10 | var protected: Boolean = true 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/FreeTubeVideo.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class FreeTubeVideo( 7 | val videoId: String, 8 | val title: String, 9 | val author: String, 10 | val authorId: String, 11 | val lengthSeconds: Long, 12 | val type: String = "video" 13 | ) 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/FreetubeSubscription.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import com.github.libretube.ui.dialogs.ShareDialog 4 | import kotlinx.serialization.SerialName 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | data class FreetubeSubscription( 9 | val name: String, 10 | @SerialName("id") val channelId: String, 11 | val url: String = "${ShareDialog.YOUTUBE_FRONTEND_URL}/channel/$channelId" 12 | ) 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/FreetubeSubscriptions.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class FreetubeSubscriptions( 8 | @SerialName("_id") val id: String = "", 9 | val name: String = "", 10 | val subscriptions: List = emptyList() 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/NewPipeSubscription.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class NewPipeSubscription( 8 | val name: String, 9 | @SerialName("service_id") val serviceId: Int, 10 | val url: String 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/NewPipeSubscriptions.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class NewPipeSubscriptions( 8 | @SerialName("app_version") val appVersion: String = "", 9 | @SerialName("app_version_int") val appVersionInt: Int = 0, 10 | val subscriptions: List = emptyList() 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/PipedImportPlaylist.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class PipedImportPlaylist( 7 | var name: String? = null, 8 | val type: String? = null, 9 | val visibility: String? = null, 10 | var videos: List = listOf() 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/PipedPlaylistFile.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class PipedPlaylistFile( 7 | val format: String = "Piped", 8 | val version: Int = 1, 9 | val playlists: List = emptyList() 10 | ) 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/PreferenceItem.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | import kotlinx.serialization.json.JsonNull 5 | import kotlinx.serialization.json.JsonPrimitive 6 | 7 | @Serializable 8 | data class PreferenceItem( 9 | val key: String? = null, 10 | val value: JsonPrimitive = JsonNull 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/PreviewFrame.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | data class PreviewFrame( 4 | val previewUrl: String, 5 | val positionX: Int, 6 | val positionY: Int, 7 | val frameWidth: Int, 8 | val frameHeight: Int 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/SelectableOption.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class SelectableOption( 8 | val isSelected: Boolean, 9 | val name: String 10 | ) : Parcelable 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/ShareData.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class ShareData( 8 | val currentChannel: String? = null, 9 | val currentVideo: String? = null, 10 | val currentPlaylist: String? = null, 11 | var currentPosition: Long? = null 12 | ) : Parcelable 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/VideoResolution.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | data class VideoResolution( 4 | val name: String, 5 | val resolution: Int 6 | ) 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/VideoStats.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class VideoStats( 8 | val videoId: String, 9 | var videoInfo: String, 10 | var videoQuality: String, 11 | var audioInfo: String 12 | ) : Parcelable 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/YouTubeWatchHistoryChannelInfo.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class YouTubeWatchHistoryChannelInfo( 7 | val name: String, 8 | val url: String 9 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/YouTubeWatchHistoryFileItem.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class YouTubeWatchHistoryFileItem( 7 | val header: String = "", 8 | val time: String = "", 9 | val title: String = "", 10 | val titleUrl: String = "", 11 | val activityControls: List = emptyList(), 12 | val products: List = emptyList(), 13 | val subtitles: List = emptyList() 14 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/obj/update/UpdateInfo.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.obj.update 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import kotlinx.serialization.SerialName 6 | import kotlinx.serialization.Serializable 7 | 8 | @Serializable 9 | @Parcelize 10 | data class UpdateInfo( 11 | val name: String, 12 | val body: String, 13 | @SerialName("html_url") val htmlUrl: String 14 | ) : Parcelable 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/parcelable/DownloadData.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.parcelable 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class DownloadData( 8 | val videoId: String, 9 | val fileName: String, 10 | val videoFormat: String?, 11 | val videoQuality: String?, 12 | val audioFormat: String?, 13 | val audioQuality: String?, 14 | val audioLanguage: String?, 15 | val subtitleCode: String? 16 | ) : Parcelable 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/parcelable/PlayerData.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.parcelable 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class PlayerData( 8 | val videoId: String, 9 | val playlistId: String? = null, 10 | val channelId: String? = null, 11 | val keepQueue: Boolean = false, 12 | val timestamp: Long = 0 13 | ) : Parcelable 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/repo/FeedRepository.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.repo 2 | 3 | import com.github.libretube.api.obj.StreamItem 4 | import com.github.libretube.db.obj.SubscriptionsFeedItem 5 | 6 | data class FeedProgress( 7 | val currentProgress: Int, 8 | val total: Int 9 | ) 10 | 11 | interface FeedRepository { 12 | suspend fun getFeed( 13 | forceRefresh: Boolean, 14 | onProgressUpdate: (FeedProgress) -> Unit 15 | ): List 16 | suspend fun submitFeedItemChange(feedItem: SubscriptionsFeedItem) {} 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/repo/PipedAccountFeedRepository.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.repo 2 | 3 | import com.github.libretube.api.RetrofitInstance 4 | import com.github.libretube.api.obj.StreamItem 5 | import com.github.libretube.helpers.PreferenceHelper 6 | 7 | class PipedAccountFeedRepository : FeedRepository { 8 | override suspend fun getFeed( 9 | forceRefresh: Boolean, 10 | onProgressUpdate: (FeedProgress) -> Unit 11 | ): List { 12 | val token = PreferenceHelper.getToken() 13 | 14 | return RetrofitInstance.authApi.getFeed(token) 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/repo/SubscriptionsRepository.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.repo 2 | 3 | import com.github.libretube.api.obj.Subscription 4 | 5 | interface SubscriptionsRepository { 6 | suspend fun subscribe(channelId: String, name: String, uploaderAvatar: String?, verified: Boolean) 7 | suspend fun unsubscribe(channelId: String) 8 | suspend fun isSubscribed(channelId: String): Boolean? 9 | suspend fun importSubscriptions(newChannels: List) 10 | suspend fun getSubscriptions(): List 11 | suspend fun getSubscriptionChannelIds(): List 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/extensions/FilterNonEmptyComments.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.extensions 2 | 3 | import com.github.libretube.api.obj.Comment 4 | 5 | fun List.filterNonEmptyComments(): List { 6 | return filter { !it.commentText.isNullOrEmpty() } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/extensions/RecyclerView.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.extensions 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | 5 | fun RecyclerView.addOnBottomReachedListener(onBottomReached: () -> Unit) { 6 | viewTreeObserver.addOnScrollChangedListener { 7 | if (!canScrollVertically(1)) onBottomReached() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/extensions/SetFormattedDuration.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.extensions 2 | 3 | import android.text.format.DateUtils 4 | import android.widget.TextView 5 | import com.github.libretube.R 6 | 7 | fun TextView.setFormattedDuration(duration: Long, isShort: Boolean?, uploadDate: Long) { 8 | this.text = when { 9 | isShort == true -> context.getString(R.string.yt_shorts) 10 | duration < 0L -> context.getString(R.string.live) 11 | uploadDate > System.currentTimeMillis() -> context.getString(R.string.upcoming) 12 | else -> DateUtils.formatElapsedTime(duration) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.interfaces 2 | 3 | interface AudioPlayerOptions { 4 | 5 | fun onSingleTap() 6 | 7 | fun onLongTap() 8 | 9 | fun onSwipe(distanceY: Float) 10 | 11 | fun onSwipeEnd() 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/interfaces/OnlinePlayerOptions.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.interfaces 2 | 3 | interface OnlinePlayerOptions { 4 | fun onCaptionsClicked() 5 | 6 | fun onQualityClicked() 7 | 8 | fun onAudioStreamClicked() 9 | 10 | fun onStatsClicked() 11 | 12 | fun exitFullscreen() 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/interfaces/PlayerOptions.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.interfaces 2 | 3 | interface PlayerOptions { 4 | 5 | fun onPlaybackSpeedClicked() 6 | 7 | fun onResizeModeClicked() 8 | 9 | fun onRepeatModeClicked() 10 | fun onSleepTimerClicked() 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/interfaces/TimeFrameReceiver.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.interfaces 2 | 3 | import android.graphics.Bitmap 4 | 5 | abstract class TimeFrameReceiver { 6 | abstract suspend fun getFrameAtTime(position: Long): Bitmap? 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/models/ChaptersViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.models 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import com.github.libretube.api.obj.ChapterSegment 6 | 7 | class ChaptersViewModel: ViewModel() { 8 | val chaptersLiveData = MutableLiveData>() 9 | val chapters get() = chaptersLiveData.value.orEmpty() 10 | val currentChapterIndex = MutableLiveData() 11 | var maxSheetHeightPx = 0 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/models/CommonPlayerViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.models 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import com.github.libretube.extensions.updateIfChanged 6 | 7 | class CommonPlayerViewModel : ViewModel() { 8 | val isMiniPlayerVisible = MutableLiveData(false) 9 | val isFullscreen = MutableLiveData(false) 10 | var maxSheetHeightPx = 0 11 | 12 | val sheetExpand = MutableLiveData() 13 | 14 | fun setSheetExpand(state: Boolean?) { 15 | sheetExpand.updateIfChanged(state) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/models/EditChannelGroupsModel.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.models 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | import com.github.libretube.db.obj.SubscriptionGroup 6 | 7 | class EditChannelGroupsModel : ViewModel() { 8 | val groups = MutableLiveData>() 9 | var groupToEdit: SubscriptionGroup? = null 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/models/SearchViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.models 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.ViewModel 5 | 6 | class SearchViewModel : ViewModel() { 7 | val searchQuery = MutableLiveData() 8 | fun setQuery(query: String?) { 9 | this.searchQuery.value = query 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/preferences/AudioVideoSettings.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.preferences 2 | 3 | import android.os.Bundle 4 | import com.github.libretube.R 5 | import com.github.libretube.ui.base.BasePreferenceFragment 6 | 7 | class AudioVideoSettings : BasePreferenceFragment() { 8 | override val titleResourceId: Int = R.string.audio_video 9 | 10 | override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 11 | setPreferencesFromResource(R.xml.audio_video_settings, rootKey) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/preferences/EditNumberPreference.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.preferences 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.preference.EditTextPreference 6 | import com.github.libretube.ui.base.BasePreferenceFragment 7 | 8 | /** 9 | * [EditTextPreference] that only allows numeric input. 10 | * The actual functionality is done in [BasePreferenceFragment]. 11 | */ 12 | class EditNumberPreference(context: Context, attributeSet: AttributeSet?): EditTextPreference(context, attributeSet) -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/preferences/SponsorBlockSettings.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.preferences 2 | 3 | import android.os.Bundle 4 | import com.github.libretube.R 5 | import com.github.libretube.ui.base.BasePreferenceFragment 6 | 7 | class SponsorBlockSettings : BasePreferenceFragment() { 8 | override val titleResourceId: Int = R.string.sponsorblock 9 | 10 | override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 11 | setPreferencesFromResource(R.xml.sponsorblock_settings, rootKey) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/AddChannelToGroupViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.AddChannelToGroupRowBinding 5 | 6 | class AddChannelToGroupViewHolder( 7 | val binding: AddChannelToGroupRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/BottomSheetViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.BottomSheetItemBinding 5 | 6 | class BottomSheetViewHolder( 7 | val binding: BottomSheetItemBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/ChaptersViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.ChaptersRowBinding 5 | 6 | class ChaptersViewHolder(val binding: ChaptersRowBinding) : RecyclerView.ViewHolder(binding.root) 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/CommentsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.CommentsRowBinding 5 | 6 | class CommentsViewHolder( 7 | val binding: CommentsRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/CustomInstancesViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.CustomInstanceRowBinding 5 | 6 | class CustomInstancesViewHolder( 7 | val binding: CustomInstanceRowBinding 8 | ): RecyclerView.ViewHolder(binding.root) -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/DownloadsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.VideoRowBinding 5 | 6 | class DownloadsViewHolder( 7 | val binding: VideoRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/IconsSheetViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.AppIconItemBinding 5 | 6 | class IconsSheetViewHolder( 7 | val binding: AppIconItemBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/InstancesViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.InstanceRowBinding 5 | 6 | class InstancesViewHolder( 7 | val binding: InstanceRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/IntentChooserViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.IntentChooserItemBinding 5 | 6 | class IntentChooserViewHolder( 7 | val binding: IntentChooserItemBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/LegacySubscriptionViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.LegacySubscriptionChannelBinding 5 | 6 | class LegacySubscriptionViewHolder( 7 | val binding: LegacySubscriptionChannelBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/NavBarOptionsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.NavOptionsItemBinding 5 | 6 | class NavBarOptionsViewHolder( 7 | val binding: NavOptionsItemBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/PlayingQueueViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.QueueRowBinding 5 | 6 | class PlayingQueueViewHolder( 7 | val binding: QueueRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/PlaylistViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.VideoRowBinding 5 | 6 | class PlaylistViewHolder( 7 | val binding: VideoRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/PlaylistsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.PlaylistsRowBinding 5 | 6 | class PlaylistsViewHolder( 7 | val binding: PlaylistsRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/SliderLabelViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.SliderLabelItemBinding 5 | 6 | class SliderLabelViewHolder( 7 | val binding: SliderLabelItemBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/SubscriptionChannelViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.ChannelSubscriptionRowBinding 5 | 6 | class SubscriptionChannelViewHolder( 7 | val binding: ChannelSubscriptionRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/SubscriptionGroupChannelRowViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.SubscriptionGroupChannelRowBinding 5 | 6 | class SubscriptionGroupChannelRowViewHolder( 7 | val binding: SubscriptionGroupChannelRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/SubscriptionGroupsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.SubscriptionGroupRowBinding 5 | 6 | class SubscriptionGroupsViewHolder( 7 | val binding: SubscriptionGroupRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/SuggestionsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.SuggestionRowBinding 5 | 6 | class SuggestionsViewHolder( 7 | val binding: SuggestionRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/VideoTagsViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.VideoTagRowBinding 5 | 6 | class VideoTagsViewHolder( 7 | val binding: VideoTagRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/VideosViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.VideoRowBinding 5 | 6 | class VideosViewHolder(val binding: VideoRowBinding) : RecyclerView.ViewHolder(binding.root) -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/viewholders/WatchHistoryViewHolder.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.viewholders 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | import com.github.libretube.databinding.VideoRowBinding 5 | 6 | class WatchHistoryViewHolder( 7 | val binding: VideoRowBinding 8 | ) : RecyclerView.ViewHolder(binding.root) 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/libretube/ui/views/DoubleTapOverlay.kt: -------------------------------------------------------------------------------- 1 | package com.github.libretube.ui.views 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.LayoutInflater 6 | import android.widget.LinearLayout 7 | import com.github.libretube.databinding.DoubleTapOverlayBinding 8 | 9 | class DoubleTapOverlay( 10 | context: Context, 11 | attrs: AttributeSet? = null 12 | ) : LinearLayout(context, attrs) { 13 | val binding = DoubleTapOverlayBinding.inflate(LayoutInflater.from(context), this, true) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/comment_channel_owner_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/controls_layout_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_instance.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_downward.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_left_right.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_right.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_up_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_audio.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_awesome.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_badge.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmark.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmark_outlined.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_auto.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_comment.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_copy.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dislike.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_done.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_folder.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_drag_handle.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_equalizer.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eye.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter_sort.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_forward_md.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_frame.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_grid.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history_filled.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_dark.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_outlined.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_image.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_invert_colors.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_label.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_list.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_locked.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_login_filled.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_movie.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_music.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_next.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_next_outlined.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pause.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pinned.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_add.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_prev.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_prev_outlined.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_queue.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_remove.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_repeat.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_repeat_one.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_rewind_md.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_shuffle.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_signal.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_skip.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sleep.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_stop.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_text.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_three_dots.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thumb_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_time.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_trash.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_video.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_videocam.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_window.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_zoom.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_switch_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/player_switch_track.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/font/roboto.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/font/roboto.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_custom_intances_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dropdown_item.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/filter_chip.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/simple_options_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_preference_switch.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_bird.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_bird_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_fire.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_fire_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_flame.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_flame_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_gradient_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_legacy.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_legacy_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_shaped.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_shaped_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_torch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_torch_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_bird.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_bird_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_bird_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_bird_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_bird_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_fire.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_fire_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_fire_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_fire_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_fire_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_flame.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_flame_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_flame_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_flame_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_flame_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_gradient.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_gradient_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_gradient_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_gradient_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_gradient_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_launcher_light.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_light_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_launcher_light_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_legacy.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_legacy_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_legacy_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_legacy_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_legacy_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_shaped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_shaped.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_shaped_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_shaped_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_shaped_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_shaped_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_torch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_torch.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_torch_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_torch_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_torch_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-hdpi/ic_torch_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_bird.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_bird_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_bird_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_bird_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_bird_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_fire.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_fire_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_fire_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_fire_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_fire_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_flame.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_flame_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_flame_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_flame_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_flame_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_gradient.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_gradient_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_gradient_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_gradient_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_gradient_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_launcher_light.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_light_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_launcher_light_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_legacy.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_legacy_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_legacy_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_legacy_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_legacy_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_shaped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_shaped.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_shaped_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_shaped_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_shaped_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_shaped_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_torch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_torch.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_torch_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_torch_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_torch_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-mdpi/ic_torch_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_bird.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_bird_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_bird_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_bird_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_bird_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_fire.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_fire_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_fire_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_fire_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_fire_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_flame.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_flame_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_flame_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_flame_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_flame_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_gradient.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_gradient_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_gradient_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_gradient_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_gradient_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_launcher_light.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_light_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_launcher_light_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_legacy.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_legacy_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_legacy_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_legacy_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_legacy_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_shaped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_shaped.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_shaped_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_shaped_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_shaped_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_shaped_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_torch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_torch.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_torch_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_torch_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_torch_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xhdpi/ic_torch_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_bird.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_bird_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_bird_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_bird_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_bird_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_fire.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_fire_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_fire_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_fire_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_fire_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_flame.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_flame_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_flame_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_flame_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_flame_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_gradient.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_gradient_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_gradient_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_gradient_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_gradient_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_launcher_light.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_light_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_legacy.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_legacy_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_legacy_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_legacy_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_legacy_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_shaped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_shaped.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_shaped_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_shaped_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_shaped_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_shaped_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_torch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_torch.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_torch_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_torch_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_torch_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxhdpi/ic_torch_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_bird.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_bird_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_bird_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_bird_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_bird_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_fire.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_fire_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_fire_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_fire_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_fire_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_flame.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_flame_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_flame_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_flame_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_flame_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_gradient.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_gradient_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_gradient_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_gradient_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_gradient_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_legacy.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_legacy_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_legacy_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_legacy_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_legacy_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_shaped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_shaped.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_shaped_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_shaped_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_shaped_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_shaped_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_torch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_torch.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_torch_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_torch_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_torch_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/app/src/main/res/mipmap-xxxhdpi/ic_torch_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-af/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Accueil 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-as/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | PiP 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-ast/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-hr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-large/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2 4 | 4 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v31/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ccc 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-television/config.xml: -------------------------------------------------------------------------------- 1 | 2 | landscape 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-ti/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-xlarge/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 3 4 | 6 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/config.xml: -------------------------------------------------------------------------------- 1 | 2 | portrait 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_bird_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #CE1332 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_fire_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #030416 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_flame_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #B00000 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_gradient_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #161316 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_light_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #F2EEFF 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_legacy_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #CD5757 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_shaped_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #151515 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_torch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 2 5 | -------------------------------------------------------------------------------- /baselineprofile/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | 3 | -------------------------------------------------------------------------------- /baselineprofile/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/11.txt: -------------------------------------------------------------------------------- 1 | Added Option to change the app icon 2 | You can now open YouTube/Piped links with the app 3 | New video options dialog on longpressing a video 4 | Audio only mode 5 | Aspect ratio option in player 6 | And many bug fixes :) 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/12.txt: -------------------------------------------------------------------------------- 1 | Subscribed Channels Rework 2 | Update Checker 3 | About Section in Settings 4 | Live videos fix and indication 5 | Comment replies 6 | Search suggestions rewrite 7 | Custom instance option 8 | Video chapters support 9 | Player notification thumbnail and description 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/13.txt: -------------------------------------------------------------------------------- 1 | Autoplay for videos and playlists 2 | Player improvements 3 | Clone YouTube Playlist Option 4 | Delete Account Option 5 | RYD Integration 6 | Added Watch History 7 | Remember watch position 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/14.txt: -------------------------------------------------------------------------------- 1 | Player refactor: 2 | - Double Tap to seek forward/backward 3 | - Ongoing chapter names of video chapters 4 | - Rewrite of the option dialogs 5 | - Use system default caption style 6 | 7 | Navbar label visibility option 8 | In-app updates (only when installed from GitHub) 9 | Community section in the settings 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/16.txt: -------------------------------------------------------------------------------- 1 | Auto-scroll to current chapter and highlight it 2 | Refactor background play (now supports SponsorBlock too) 3 | Audio quality and format settings 4 | Option to set default subtitle language 5 | Watch progress on the video thumbnail 6 | Push notifications for new streams (unstable) 7 | New Toolbar Design 8 | Search Refactor 9 | In-app crash handler 10 | Subscriptions without account 11 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/18.txt: -------------------------------------------------------------------------------- 1 | Add option for the legacy subscriptions view by @Bnyro in #1134 2 | Add device info dialog by @Bnyro in #1136 3 | better split screen support by @Bnyro in #1152 4 | Grouped notifications by @Bnyro in #1162 5 | Continuous playback speed slider by @Bnyro in #1163 6 | Toggle for sharing with time code by @Bnyro in #1168 7 | Better break reminder pref by @Bnyro in #1128 8 | Load feed in background by @Bnyro in #1176 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/21.txt: -------------------------------------------------------------------------------- 1 | * New playing queue ft. shuffing playlists and more 2 | * Support for channel tabs (e.g. playlists) 3 | * Option to show SponsorBlock markers 4 | * Show the comment reply count 5 | * Added metadata to lockscreen 6 | * Sharing video or channel via email 7 | * Light App Icon Version ft. @XelXen by 8 | * Alternative subscriptions layout 9 | * Option to customize the share time code 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/22.txt: -------------------------------------------------------------------------------- 1 | * Add launcher icon shortcuts 2 | * Subscription bell for channels to become notified 3 | * Playlist page redesign 4 | * Option to set a notification sync start and end time 5 | * [Option] New Player UI 6 | * Option to confirm unsubscribing 7 | * Improved notifications icon & Replay button when the video ended 8 | * Reset buttons for speed and pitch 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/23.txt: -------------------------------------------------------------------------------- 1 | * Implement proper dash support 2 | -> Way faster loading speed of videos 3 | -> Faster times for seeking to an other playback position 4 | -> Faster switching of qualities 5 | 6 | * Option to change the audio language 7 | * New Home Page UI 8 | * Playlist bookmarks in the home page an library 9 | * Option to open queue from background notification 10 | * Queue: Reverse and repeat controls 11 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/24.txt: -------------------------------------------------------------------------------- 1 | * Local playlists without an account 2 | * Support for swipe gestures 3 | * Pinch to zoom 4 | * Preview App icons in Appearance Settings 5 | * Option to set default start tab 6 | * Indicator that the feed got caught up for subscriptions 7 | * Option to share channels and play their latest videos 8 | * Comments redesign 9 | * Playlists import & export 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/25.txt: -------------------------------------------------------------------------------- 1 | * Library fragment redesign 2 | * Playlists import from YouTube 3 | * Clone playlists without account 4 | * Dracula/Versatile Violet theme 5 | * Highlight the current resolution in the quality selection 6 | * Show/Hide exact view count with description toggle 7 | * Use the translated language name for the language preferences 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/26.txt: -------------------------------------------------------------------------------- 1 | * Preview on SeekBar for videos 2 | * Option to hide watched videos from the feed 3 | * Splash screen animation for A12+ 4 | * Playlist bookmarks in the library fragment 5 | * Play all and clear actions to the watch history 6 | * Clone Playlist action to the create playlist dialog 7 | * Bookmark option to playlist options bottom sheet 8 | * Shorts filter to the feed 9 | * Shuffle button for private playlists 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/27.txt: -------------------------------------------------------------------------------- 1 | * New custom downloader 2 | * Picture in Picture: Forward and Rewind actions 3 | * Improved player notification 4 | * New audio player, when clicking the notification from background mode 5 | * New audio only mode, behaving similar to a music player 6 | * [Audio Mode] Share, playback, queue and open video controls 7 | * Option to convert queued videos in a playlist 8 | * Ability to skip silence when playing videos 9 | * Netflix-like animation for double tap to seek 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/28.txt: -------------------------------------------------------------------------------- 1 | * Fix channel crashes 2 | * Fix backup backwards compatibility 3 | * Fix unresponsiveness when opening watch history 4 | * Fix that clicking description links plays next video 5 | * Keep the screen on while playing in the offline player 6 | * [Audio mode] Show video options when clicking thumbnail 7 | * Reduce the player top bar margin 8 | * Minor player view improvements 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/29.txt: -------------------------------------------------------------------------------- 1 | * Multi-level comments and replies display 2 | * [Audio Player] Gesture controls on the video thumbnail 3 | * Preference to choose video codecs 4 | * Enter/Exit Fullscreen swipe gestures 5 | * Remember the last download selections 6 | * Option to mark videos as watched 7 | * Original comment as the first item in replies 8 | * New Autoplay switch design 9 | * Option to disable watch positions in audio mode 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/30.txt: -------------------------------------------------------------------------------- 1 | * Stats for nerds dialog containing video info 2 | * Support for LBRY HLS 3 | * Autoplay Countdown when the video ended 4 | * Clickable comment timestamps 5 | * Display the video category in the description 6 | * Restore the orientation when leaving PiP 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/31.txt: -------------------------------------------------------------------------------- 1 | * Audio mini player 2 | * Option to disable Piped proxy 3 | * Current time display within the seekbar preview 4 | * Option for auto fullscreen on shorts 5 | * Selectable comments text 6 | * Hide button to delete playlist and playlist videos 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/32.txt: -------------------------------------------------------------------------------- 1 | * Fix crash when closing mini player 2 | * Fix crash when watching geo-blocked video 3 | * Fix duplicated error messages during playlist actions 4 | * Close playlist rename dialog if name matched 5 | * Correct Kurdish (Central) native language name 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/33.txt: -------------------------------------------------------------------------------- 1 | * Subscription groups 2 | * Audio/background player for downloads 3 | * Support sharing live links to LibreTube 4 | * Preference to not play videos automatically 5 | * In-built browser intent chooser 6 | * Update displayed chapter while scrubbing time bar 7 | * Separate swipe gestures and fullscreen gestures 8 | * Improve notification grouping for new streams 9 | * Allow the app to being found as music player 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/34.txt: -------------------------------------------------------------------------------- 1 | * Display stream notification thumbnails 2 | * Ability to interact with player while viewing comments 3 | * Sort menu for local and private playliss 4 | * Improvement to links in description and comment texts 5 | * Remember the comments progress 6 | * Scroll to top button for comments 7 | * Unlimited search history preference 8 | * Automatically scroll to the currently playing video in the queue 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/35.txt: -------------------------------------------------------------------------------- 1 | * Support for playlist descriptions 2 | * Support import/export for FreeTube subscriptions 3 | * Support FreeTube playlists import/export 4 | * Show file size in download dialog 5 | * Add feed filter for livestreams 6 | * Option to disable new video notifications for shorts videos 7 | * Convert subscription groups dialogs to bottom sheets 8 | * Navigate to channel when selected in channel groups dialog 9 | * Allow importing multiple playlists at once 10 | * Enter/Exit fullscreen gesture on whole screen if swipe gestures disabled 11 | * Add button to close audio player 12 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/36.txt: -------------------------------------------------------------------------------- 1 | * Welcome Activity to choose instance on first app startup 2 | * Significantly increase download speed using range requests 3 | * Support for editing the playlist description 4 | * Much faster audio only/background player with less buffering (using DASH) 5 | * Show currently applied playlist sort order 6 | * Preference to edit the home tab content 7 | * Show 'mark as unwatched' in video options sheet if already watched 8 | * Improve offline player appearance and behavior 9 | * Improve autoplay switch (show pause icon if disabled) 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/37.txt: -------------------------------------------------------------------------------- 1 | * SponsorBlock color segments depending on what type they are 2 | * Add highlight from SponsorBlock to chapters 3 | * Ability to choose what SponsorBlock categories are skipped automatically 4 | * Add presets/shortcuts for playback speed/pitch 5 | * Notification action to stop download 6 | * Show time left when clicking player duration 7 | * Show the comment and reply count in the comments sheet 8 | * Preference to disable search suggestions 9 | * Chapters support in audio player 10 | * Refreshed playlist row design 11 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/38.txt: -------------------------------------------------------------------------------- 1 | * Automatically use Material You accent on first app startup when supported 2 | * Include playlist name in toast after successfully adding video 3 | * fix: too many chapters highlighted in dialog, crash on selection 4 | * fix: disabled proxy when lbry stream available 5 | * fix: watch positions don't retain 6 | * fix: Restoring SponsorBlock preferences from backup 7 | * fix: Appearance of SponsorBlock preference on small screens 8 | * fix: hide SponsorBlock skip button in miniplayer 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/39.txt: -------------------------------------------------------------------------------- 1 | * feat: support for DeArrow 2 | * feat: support hardware/bluetooth keys for playback control 3 | * feat: Video chapters redesign 4 | * feat: Support for different audio track types 5 | * feat: seekbar preview for downloaded videos 6 | * feat: support for video meta info 7 | * feat: add 'Continue watching' section to home tab 8 | * feat(queue): options to mark as (un)watched, and remove watched videos 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/40.txt: -------------------------------------------------------------------------------- 1 | * fix: persistence of sponsorblock category prefs 2 | * fix: crash when removing video from playlist 3 | * fix: download paused notification shown instead of completed 4 | * fix(import): prevent crash when importing 5 | * fix(import): correctly import playlist csv 6 | * fix: sort order of playlists isn't shown properly 7 | * fix: overflowing issue in sort order option in library 8 | * fix: restoring playback positions via notification controls 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/41.txt: -------------------------------------------------------------------------------- 1 | * support for submitting SponsorBlock segments 2 | * add sponsorblock option to skip only once 3 | * allow downloading audio tracks based on their language 4 | * allow resuming playback after disconnect 5 | * allow re-ordering of channel groups 6 | * disable video track loading while screen off 7 | * play all videos 8 | * show placeholders for all images 9 | * support for selecting auto-generated captions 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/42.txt: -------------------------------------------------------------------------------- 1 | * fix(channelgroups): update values on confirm 2 | * fix(player): allow pausing while loading 3 | * fix(player): rename SB Username to SB UserID 4 | * fix: crash when restoring backups 5 | * fix: crash when the app was closed for a while 6 | * fix: don't resume initial video on fragment recreation 7 | * fix: crash when view handler got destroyed 8 | * fix: default SponsorBlock categories are not being respected 9 | * fix: wrong channel group shown as selected 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/43.txt: -------------------------------------------------------------------------------- 1 | * feat: support for YouTube music artists as search filter 2 | * feat: zoomable preview of channel avatar and banner 3 | * feat: parse YouTube links in the search bar 4 | * feat: option to allow playback during call 5 | * feat: option to set a different default resolution when not in fullscreen 6 | * feat: option to autoplay videos in playlist 7 | * feat: option to set default playback speed manually 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/44.txt: -------------------------------------------------------------------------------- 1 | * feat: landscape layout for player page 2 | * feat(comments): highlight creator comments 3 | * feat(comments): show if creator replied 4 | * feat: filter options for Watch History Tab 5 | * feat: add undo action after removing video from playlist 6 | * feat: support for up/downvoting SponsorBlock segments 7 | * feat: filter options for Watch History Tab 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/45.txt: -------------------------------------------------------------------------------- 1 | * fix: properly apply creator highlight 2 | * fix: restoring nav after process death 3 | * fix: auto fullscreen stops working after first rotation 4 | * fix: increase area that can be used to control the time bar 5 | * fix: crash when trying to vote while there are no sb segments yet 6 | * fix: related videos are truncated after rotation 7 | * fix: light theme setting doesn't work properly 8 | * fix: share dialog doesn't use shortened yt links for videos 9 | * fix: missing horizontal padding for player in landscape 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/46.txt: -------------------------------------------------------------------------------- 1 | * style: new player layout and various UI improvements 2 | * feat: support close video on MiniPlayer swipe down 3 | * feat: new sleep timer (integrated into the player UI) 4 | * feat: quick actions to add a channel to a group 5 | * feat: separate landscape grid columns pref + more impacted adapters 6 | * feat: show instance regions, uptime and registration status in settings 7 | * feat: automatically play the next downloaded video in offline audio mode 8 | * feat: add copy video ID button in stats sheet 9 | * feat: add preset to use 1.75x playback speed 10 | * feat: add Rich caption rendering setting 11 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/47.txt: -------------------------------------------------------------------------------- 1 | * fix: Audio Pausing on quickly volume level adjustment 2 | * fix: can't open playlists 3 | * fix: clarify setting description 4 | * fix: correctly display transparent channelImages 5 | * fix: crash on download menu 6 | * fix: Improve home feed layout and fix issue where incorrect cache size was defaulted. 7 | * fix: Improve player to mini-player transition + bottom space when there are no navigation tabs 8 | * fix: Incorrect actions management through bluetooth devices 9 | * fix: remove unnecessary subscription status api call in channel fragment -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/48.txt: -------------------------------------------------------------------------------- 1 | * feat: support for downloading whole playlist at once 2 | * feat(player): support for keyboard navigation 3 | * feat: support for exporting and importing channel groups 4 | * feat: support for filtering 5 | * feat: Support multiple filter selection 6 | * feat(ui): option for automatic update checks 7 | * feat: option to shuffle downloads in background 8 | * feat: add 'hide watched videos' to feed filter options 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/49.txt: -------------------------------------------------------------------------------- 1 | * fix: back gesture doesn't work on some devices 2 | * fix: respect feed filter on home tab 3 | * fix: search is showing inappropriate results 4 | * fix: autoplay stops after turning screen off 5 | * fix: auto rotation stops working after having entered the fullscreen player 6 | * fix: comment expands when tapping on timestamp 7 | * fix: crashes during pagination on server side cancelled requests 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Added support for download with ffmpeg 2 | Fixed subscribe button 3 | Update dependencies and show stream duration 4 | Added Share button for sharing url to videos 5 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/50.txt: -------------------------------------------------------------------------------- 1 | * fix: unable to view subscribed channels 2 | * fix: channel groups duplicated after updating name 3 | * fix: autofullscreen stops working after orientation change 4 | * fix: various comment/replies related issues 5 | * feat: improve video end screen 6 | * feat: show confirm modal before deleting channel group 7 | * feat: dismiss keyboard at back press on search page 8 | * chore: use hls if piped proxy disabled, remove piped proxy fallback option 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/51.txt: -------------------------------------------------------------------------------- 1 | * feat: chapters support for downloaded videos 2 | * feat: support for contributing to DeArrow 3 | * feat: support for importing temporary playlists from YouTube 4 | * feat: now playing notification for downloaded videos 5 | * feat: pip controls for offline player 6 | * feat: automatically scroll to current chapter 7 | * feat: preference to force maximum audio quality 8 | * feat: respect swipe controls option in audio mode 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/52.txt: -------------------------------------------------------------------------------- 1 | * fix: comments reloading on sheet reopen and scroll position not restored 2 | * fix: status bar doesn't follow app theme 3 | * fix: dearrow for playing video and watch history 4 | * fix: crash when trying to dearrow feed items 5 | * fix: auto fullscreen causes player layout issues 6 | * fix: crash when ending player service / fragment 7 | * fix: enter PiP mode when clicking link in description 8 | * fix: navigation bar missing when closing player in fullscreen 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/53.txt: -------------------------------------------------------------------------------- 1 | * fix: comments reloading on sheet reopen and scroll position not restored 2 | * fix: status bar doesn't follow app theme 3 | * fix: dearrow for playing video and watch history 4 | * fix: crash when trying to dearrow feed items 5 | * fix: auto fullscreen causes player layout issues 6 | * fix: crash when ending player service / fragment 7 | * fix: enter PiP mode when clicking link in description 8 | * fix: navigation bar missing when closing player in fullscreen 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/54.txt: -------------------------------------------------------------------------------- 1 | * feat: changed chips in channels to swipable tabs 2 | * feat: download popup that can be displayed over other apps 3 | * feat: support for external download apps 4 | * feat: remember selected channel group across app restarts 5 | * feat: support for duration inputs in submit segment dialog 6 | * style: make audio player align with status bar color 7 | * style: minor channel page header redesign 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/55.txt: -------------------------------------------------------------------------------- 1 | * feat: local streams extraction 2 | * feat: quick share action to add video to playlist 3 | * feat: share dialog redesign (including copy link feature) 4 | * feat: show total playlist duration 5 | * feat: button to screenshot/capture current frame 6 | * feat: improve about activity and device info dialog 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/56.txt: -------------------------------------------------------------------------------- 1 | * feat: local streams extraction 2 | * feat: quick share action to add video to playlist 3 | * feat: share dialog redesign (including copy link feature) 4 | * feat: show total playlist duration 5 | * feat: button to screenshot/capture current frame 6 | * feat: improve about activity and device info dialog 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/57.txt: -------------------------------------------------------------------------------- 1 | * feat: download support for local streams extractor 2 | * feat: support download of private playlists via external downloader 3 | * fix: related streams published 54 years ago with local extractor 4 | * fix: retain exoplayer on orientation change 5 | * fix: videos in watch history uploaded in 1970 6 | * fix: duplicated slash in custom instance's share url 7 | * fix: issues with channel name caused by textIsSelectable 8 | * fix: laggy behavior when using back gesture to minimize player 9 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/58.txt: -------------------------------------------------------------------------------- 1 | * feat: audio player support for no internet activity 2 | * feat: downloads fragment rework, playing queue and audio player support 3 | * feat: ask user to play downloaded version if video already downloaded 4 | * feat: support for importing watch history from YouTube 5 | * feat: support for shuffling downloaded audio content 6 | * feat: RYD support for local stream extraction 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/59.txt: -------------------------------------------------------------------------------- 1 | * feat: support for predictive back gestures 2 | * feat: support for local feed extraction 3 | * feat: support for exporting single playlists 4 | * feat: support for importing playlist as list of video ids / urls 5 | * feat: display full video sponsorblock categories 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/60.txt: -------------------------------------------------------------------------------- 1 | This release fixes the "iOS player response not valid" error yet another time. 2 | 3 | If you don't self-host a Piped instance and therefore use "Local streams extraction", please disable "Use HLS" in the instance settings. 4 | 5 | Please note that Android versions below 7.1.1 are no longer supported by LibreTube.! 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/61.txt: -------------------------------------------------------------------------------- 1 | * feat: add "full local mode" to use the app without Piped 2 | * feat: add progress indicator for local feed extraction 3 | * feat: implement local extraction support for SponsorBlock and DeArrow 4 | * feat: locally store channel info when local streams extraction enabled 5 | * feat: rebuild custom instances dialogs for better UX 6 | * feat(StreamsExtractor): generate PoToken 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/62.txt: -------------------------------------------------------------------------------- 1 | * fix: update NewPipeExtractor fork to latest version to fix playback issues 2 | * fix: support for adding downloads to playback queue 3 | * fix: don't block ui thread while filtering watched videos 4 | * fix: confirm unsubscribe preference only works if disabled instead of enabled 5 | * fix: channel avatar missing in subscriptions list when subbed from search 6 | * fix(Backup): use channel URL for subscription export 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_1.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_10.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_11.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_12.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_2.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_3.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_4.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_5.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_6.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_7.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_8.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/fastlane/metadata/android/en-US/images/phoneScreenshots/Screenshot_9.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Alternative frontend for YouTube with focus on privacy 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libre-tube/LibreTube/1e085cb3af0f4ca17cfeba8ff9a35ed3b46bf7d9/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-8.14-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | } 7 | } 8 | 9 | rootProject.name = "LibreTube" 10 | 11 | include(":app") 12 | include(":baselineprofile") 13 | --------------------------------------------------------------------------------