Skip to content

Commit 8925d8a

Browse files
committed
feat: option to hide upcoming videos from feed
1 parent 6c0ac68 commit 8925d8a

6 files changed

Lines changed: 32 additions & 4 deletions

File tree

app/src/main/java/com/github/libretube/constants/IntentData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,5 @@ object IntentData {
5858
const val chapters = "chapters"
5959
const val segments = "segments"
6060
const val alreadyStarted = "alreadyStarted"
61+
const val showUpcoming = "showUpcoming"
6162
}

app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ object PreferenceKeys {
112112

113113
// Subscriptions
114114
const val HIDE_WATCHED_FROM_FEED = "hide_watched_from_feed"
115+
const val SHOW_UPCOMING_IN_FEED = "show_upcoming_in_feed"
115116
const val SELECTED_FEED_FILTERS = "filter_feed"
116117
const val FEED_SORT_ORDER = "sort_oder_feed"
117118
const val LOCAL_FEED_EXTRACTION = "local_feed_extraction"

app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub
8080
field = value
8181
}
8282

83+
private var showUpcoming =
84+
PreferenceHelper.getBoolean(PreferenceKeys.SHOW_UPCOMING_IN_FEED, true)
85+
set(value) {
86+
PreferenceHelper.putBoolean(PreferenceKeys.SHOW_UPCOMING_IN_FEED, value)
87+
field = value
88+
}
89+
8390
private var subChannelsRecyclerViewState: Parcelable? = null
8491
private var subFeedRecyclerViewState: Parcelable? = null
8592

@@ -256,14 +263,16 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub
256263
) { _, resultBundle ->
257264
selectedSortOrder = resultBundle.getInt(IntentData.sortOptions)
258265
hideWatched = resultBundle.getBoolean(IntentData.hideWatched)
266+
showUpcoming = resultBundle.getBoolean(IntentData.showUpcoming)
259267
showFeed()
260268
}
261269

262270
FilterSortBottomSheet()
263271
.apply {
264272
arguments = bundleOf(
265273
IntentData.sortOptions to fetchSortOptions(),
266-
IntentData.hideWatched to hideWatched
274+
IntentData.hideWatched to hideWatched,
275+
IntentData.showUpcoming to showUpcoming,
267276
)
268277
}
269278
.show(childFragmentManager)
@@ -366,6 +375,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment(R.layout.fragment_sub
366375
binding.subRefresh.isRefreshing = false
367376
val feed = videoFeed
368377
.filterByGroup(selectedFilterGroup)
378+
.filter { showUpcoming || !it.isUpcoming }
369379
.let {
370380
DatabaseHelper.filterByStatusAndWatchPosition(it, hideWatched)
371381
}

app/src/main/java/com/github/libretube/ui/sheets/FilterSortBottomSheet.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) {
2020

2121
private var selectedIndex = 0
2222
private var hideWatched = false
23+
private var showUpcoming = true
2324

2425
override fun onCreate(savedInstanceState: Bundle?) {
2526
val arguments = requireArguments()
2627
sortOptions = arguments.parcelableArrayList(IntentData.sortOptions)!!
2728
hideWatched = arguments.getBoolean(IntentData.hideWatched)
29+
showUpcoming = arguments.getBoolean(IntentData.showUpcoming)
2830
super.onCreate(savedInstanceState)
2931
}
3032

@@ -34,7 +36,7 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) {
3436
setInitialFiltersState()
3537

3638
observeSortChanges()
37-
observeHideWatchedChanges()
39+
observeCheckboxFilters()
3840
observeFiltersChanges()
3941
}
4042

@@ -73,11 +75,16 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) {
7375
}
7476
}
7577

76-
private fun observeHideWatchedChanges() {
78+
private fun observeCheckboxFilters() {
7779
binding.hideWatchedCheckbox.setOnCheckedChangeListener { _, checked ->
7880
hideWatched = checked
7981
notifyChange()
8082
}
83+
84+
binding.showUpcomingCheckbox.setOnCheckedChangeListener { _, checked ->
85+
showUpcoming = checked
86+
notifyChange()
87+
}
8188
}
8289

8390
private fun observeFiltersChanges() {
@@ -94,7 +101,8 @@ class FilterSortBottomSheet : ExpandedBottomSheet(R.layout.filter_sort_sheet) {
94101
requestKey = FILTER_SORT_REQUEST_KEY,
95102
result = bundleOf(
96103
IntentData.sortOptions to selectedIndex,
97-
IntentData.hideWatched to hideWatched
104+
IntentData.hideWatched to hideWatched,
105+
IntentData.showUpcoming to showUpcoming
98106
)
99107
)
100108
}

app/src/main/res/layout/filter_sort_sheet.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,13 @@
8989
android:layout_height="wrap_content"
9090
android:paddingHorizontal="16dp"/>
9191

92+
<CheckBox
93+
android:id="@+id/show_upcoming_checkbox"
94+
android:layout_width="wrap_content"
95+
android:layout_height="wrap_content"
96+
android:text="@string/show_upcoming_videos"
97+
android:layout_marginStart="16dp"/>
98+
9299
<CheckBox
93100
android:id="@+id/hide_watched_checkbox"
94101
android:layout_width="wrap_content"

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@
530530
<string name="delete_only_watched_videos">Only delete already watched videos</string>
531531
<string name="local_feed_extraction">Local feed extraction</string>
532532
<string name="local_feed_extraction_summary">Directly fetch the feed from YouTube. This may be significantly slower.</string>
533+
<string name="show_upcoming_videos">Show upcoming videos</string>
533534

534535
<!-- Notification channel strings -->
535536
<string name="download_channel_name">Download Service</string>

0 commit comments

Comments
 (0)