From 8925d8aa8bacb293b8c9c0ca4fd1e9d8e5b9ba77 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 5 Feb 2025 14:52:22 +0100 Subject: [PATCH] feat: option to hide upcoming videos from feed --- .../com/github/libretube/constants/IntentData.kt | 1 + .../github/libretube/constants/PreferenceKeys.kt | 1 + .../ui/fragments/SubscriptionsFragment.kt | 12 +++++++++++- .../libretube/ui/sheets/FilterSortBottomSheet.kt | 14 +++++++++++--- app/src/main/res/layout/filter_sort_sheet.xml | 7 +++++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/github/libretube/constants/IntentData.kt b/app/src/main/java/com/github/libretube/constants/IntentData.kt index cf69653c4..70a009dfd 100644 --- a/app/src/main/java/com/github/libretube/constants/IntentData.kt +++ b/app/src/main/java/com/github/libretube/constants/IntentData.kt @@ -58,4 +58,5 @@ object IntentData { const val chapters = "chapters" const val segments = "segments" const val alreadyStarted = "alreadyStarted" + const val showUpcoming = "showUpcoming" } diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt index 206cb9cb4..04ee5ef80 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -112,6 +112,7 @@ object PreferenceKeys { // Subscriptions const val HIDE_WATCHED_FROM_FEED = "hide_watched_from_feed" + const val SHOW_UPCOMING_IN_FEED = "show_upcoming_in_feed" const val SELECTED_FEED_FILTERS = "filter_feed" const val FEED_SORT_ORDER = "sort_oder_feed" const val LOCAL_FEED_EXTRACTION = "local_feed_extraction" diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt index 40272cb5a..48234b7a0 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt @@ -80,6 +80,13 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub field = value } + private var showUpcoming = + PreferenceHelper.getBoolean(PreferenceKeys.SHOW_UPCOMING_IN_FEED, true) + set(value) { + PreferenceHelper.putBoolean(PreferenceKeys.SHOW_UPCOMING_IN_FEED, value) + field = value + } + private var subChannelsRecyclerViewState: Parcelable? = null private var subFeedRecyclerViewState: Parcelable? = null @@ -256,6 +263,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub ) { _, resultBundle -> selectedSortOrder = resultBundle.getInt(IntentData.sortOptions) hideWatched = resultBundle.getBoolean(IntentData.hideWatched) + showUpcoming = resultBundle.getBoolean(IntentData.showUpcoming) showFeed() } @@ -263,7 +271,8 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub .apply { arguments = bundleOf( IntentData.sortOptions to fetchSortOptions(), - IntentData.hideWatched to hideWatched + IntentData.hideWatched to hideWatched, + IntentData.showUpcoming to showUpcoming, ) } .show(childFragmentManager) @@ -366,6 +375,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub binding.subRefresh.isRefreshing = false val feed = videoFeed .filterByGroup(selectedFilterGroup) + .filter { showUpcoming || !it.isUpcoming } .let { DatabaseHelper.filterByStatusAndWatchPosition(it, hideWatched) } diff --git a/app/src/main/java/com/github/libretube/ui/sheets/FilterSortBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/FilterSortBottomSheet.kt index 88118a483..7d6fdab79 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/FilterSortBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/FilterSortBottomSheet.kt @@ -20,11 +20,13 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) { private var selectedIndex = 0 private var hideWatched = false + private var showUpcoming = true override fun onCreate(savedInstanceState: Bundle?) { val arguments = requireArguments() sortOptions = arguments.parcelableArrayList(IntentData.sortOptions)!! hideWatched = arguments.getBoolean(IntentData.hideWatched) + showUpcoming = arguments.getBoolean(IntentData.showUpcoming) super.onCreate(savedInstanceState) } @@ -34,7 +36,7 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) { setInitialFiltersState() observeSortChanges() - observeHideWatchedChanges() + observeCheckboxFilters() observeFiltersChanges() } @@ -73,11 +75,16 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) { } } - private fun observeHideWatchedChanges() { + private fun observeCheckboxFilters() { binding.hideWatchedCheckbox.setOnCheckedChangeListener { _, checked -> hideWatched = checked notifyChange() } + + binding.showUpcomingCheckbox.setOnCheckedChangeListener { _, checked -> + showUpcoming = checked + notifyChange() + } } private fun observeFiltersChanges() { @@ -94,7 +101,8 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) { requestKey = FILTER_SORT_REQUEST_KEY, result = bundleOf( IntentData.sortOptions to selectedIndex, - IntentData.hideWatched to hideWatched + IntentData.hideWatched to hideWatched, + IntentData.showUpcoming to showUpcoming ) ) } diff --git a/app/src/main/res/layout/filter_sort_sheet.xml b/app/src/main/res/layout/filter_sort_sheet.xml index 6883156ba..db360f273 100644 --- a/app/src/main/res/layout/filter_sort_sheet.xml +++ b/app/src/main/res/layout/filter_sort_sheet.xml @@ -89,6 +89,13 @@ android:layout_height="wrap_content" android:paddingHorizontal="16dp"/> + + Only delete already watched videos Local feed extraction Directly fetch the feed from YouTube. This may be significantly slower. + Show upcoming videos Download Service