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