Skip to content

Commit b96c8a0

Browse files
authored
Merge pull request TeamNewPipe#8545 from carmebar/hide-future-videos
Add option to hide future videos in feed
2 parents d9af788 + a392a06 commit b96c8a0

6 files changed

Lines changed: 77 additions & 10 deletions

File tree

app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
9898

9999
private lateinit var groupAdapter: GroupieAdapter
100100
@State @JvmField var showPlayedItems: Boolean = true
101+
@State @JvmField var showFutureItems: Boolean = true
101102

102103
private var onSettingsChangeListener: SharedPreferences.OnSharedPreferenceChangeListener? = null
103104
private var updateListViewModeOnResume = false
@@ -137,6 +138,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
137138
val factory = FeedViewModel.Factory(requireContext(), groupId)
138139
viewModel = ViewModelProvider(this, factory).get(FeedViewModel::class.java)
139140
showPlayedItems = viewModel.getShowPlayedItemsFromPreferences()
141+
showFutureItems = viewModel.getShowFutureItemsFromPreferences()
140142
viewModel.stateLiveData.observe(viewLifecycleOwner) { it?.let(::handleResult) }
141143

142144
groupAdapter = GroupieAdapter().apply {
@@ -212,6 +214,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
212214

213215
inflater.inflate(R.menu.menu_feed_fragment, menu)
214216
updateTogglePlayedItemsButton(menu.findItem(R.id.menu_item_feed_toggle_played_items))
217+
updateToggleFutureItemsButton(menu.findItem(R.id.menu_item_feed_toggle_future_items))
215218
}
216219

217220
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -241,6 +244,11 @@ class FeedFragment : BaseStateFragment<FeedState>() {
241244
updateTogglePlayedItemsButton(item)
242245
viewModel.togglePlayedItems(showPlayedItems)
243246
viewModel.saveShowPlayedItemsToPreferences(showPlayedItems)
247+
} else if (item.itemId == R.id.menu_item_feed_toggle_future_items) {
248+
showFutureItems = !item.isChecked
249+
updateToggleFutureItemsButton(item)
250+
viewModel.toggleFutureItems(showFutureItems)
251+
viewModel.saveShowFutureItemsToPreferences(showFutureItems)
244252
}
245253

246254
return super.onOptionsItemSelected(item)
@@ -280,6 +288,14 @@ class FeedFragment : BaseStateFragment<FeedState>() {
280288
)
281289
}
282290

291+
private fun updateToggleFutureItemsButton(menuItem: MenuItem) {
292+
menuItem.isChecked = showFutureItems
293+
menuItem.icon = AppCompatResources.getDrawable(
294+
requireContext(),
295+
if (showFutureItems) R.drawable.ic_history_future else R.drawable.ic_history
296+
)
297+
}
298+
283299
// //////////////////////////////////////////////////////////////////////////
284300
// Handling
285301
// //////////////////////////////////////////////////////////////////////////

app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import androidx.lifecycle.ViewModelProvider
99
import androidx.preference.PreferenceManager
1010
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
1111
import io.reactivex.rxjava3.core.Flowable
12-
import io.reactivex.rxjava3.functions.Function4
12+
import io.reactivex.rxjava3.functions.Function5
1313
import io.reactivex.rxjava3.processors.BehaviorProcessor
1414
import io.reactivex.rxjava3.schedulers.Schedulers
1515
import org.schabi.newpipe.R
@@ -28,7 +28,8 @@ import java.util.concurrent.TimeUnit
2828
class FeedViewModel(
2929
private val applicationContext: Context,
3030
groupId: Long = FeedGroupEntity.GROUP_ALL_ID,
31-
initialShowPlayedItems: Boolean = true
31+
initialShowPlayedItems: Boolean = true,
32+
initialShowFutureItems: Boolean = true
3233
) : ViewModel() {
3334
private var feedDatabaseManager: FeedDatabaseManager = FeedDatabaseManager(applicationContext)
3435

@@ -37,29 +38,36 @@ class FeedViewModel(
3738
.startWithItem(initialShowPlayedItems)
3839
.distinctUntilChanged()
3940

41+
private val toggleShowFutureItems = BehaviorProcessor.create<Boolean>()
42+
private val toggleShowFutureItemsFlowable = toggleShowFutureItems
43+
.startWithItem(initialShowFutureItems)
44+
.distinctUntilChanged()
45+
4046
private val mutableStateLiveData = MutableLiveData<FeedState>()
4147
val stateLiveData: LiveData<FeedState> = mutableStateLiveData
4248

4349
private var combineDisposable = Flowable
4450
.combineLatest(
4551
FeedEventManager.events(),
4652
toggleShowPlayedItemsFlowable,
53+
toggleShowFutureItemsFlowable,
4754
feedDatabaseManager.notLoadedCount(groupId),
4855
feedDatabaseManager.oldestSubscriptionUpdate(groupId),
4956

50-
Function4 { t1: FeedEventManager.Event, t2: Boolean,
51-
t3: Long, t4: List<OffsetDateTime> ->
52-
return@Function4 CombineResultEventHolder(t1, t2, t3, t4.firstOrNull())
57+
Function5 { t1: FeedEventManager.Event, t2: Boolean, t3: Boolean,
58+
t4: Long, t5: List<OffsetDateTime> ->
59+
return@Function5 CombineResultEventHolder(t1, t2, t3, t4, t5.firstOrNull())
5360
}
5461
)
5562
.throttleLatest(DEFAULT_THROTTLE_TIMEOUT, TimeUnit.MILLISECONDS)
5663
.subscribeOn(Schedulers.io())
5764
.observeOn(Schedulers.io())
58-
.map { (event, showPlayedItems, notLoadedCount, oldestUpdate) ->
65+
.map { (event, showPlayedItems, showFutureItems, notLoadedCount, oldestUpdate) ->
5966
val streamItems = if (event is SuccessResultEvent || event is IdleEvent)
6067
feedDatabaseManager
6168
.getStreams(groupId, showPlayedItems)
6269
.blockingGet(arrayListOf())
70+
.filter { s -> showFutureItems || s.stream.uploadDate?.isBefore(OffsetDateTime.now()) ?: true }
6371
else
6472
arrayListOf()
6573

@@ -89,8 +97,9 @@ class FeedViewModel(
8997
private data class CombineResultEventHolder(
9098
val t1: FeedEventManager.Event,
9199
val t2: Boolean,
92-
val t3: Long,
93-
val t4: OffsetDateTime?
100+
val t3: Boolean,
101+
val t4: Long,
102+
val t5: OffsetDateTime?
94103
)
95104

96105
private data class CombineResultDataHolder(
@@ -112,10 +121,25 @@ class FeedViewModel(
112121

113122
fun getShowPlayedItemsFromPreferences() = getShowPlayedItemsFromPreferences(applicationContext)
114123

124+
fun toggleFutureItems(showFutureItems: Boolean) {
125+
toggleShowFutureItems.onNext(showFutureItems)
126+
}
127+
128+
fun saveShowFutureItemsToPreferences(showFutureItems: Boolean) =
129+
PreferenceManager.getDefaultSharedPreferences(applicationContext).edit {
130+
this.putBoolean(applicationContext.getString(R.string.feed_show_future_items_key), showFutureItems)
131+
this.apply()
132+
}
133+
134+
fun getShowFutureItemsFromPreferences() = getShowFutureItemsFromPreferences(applicationContext)
135+
115136
companion object {
116137
private fun getShowPlayedItemsFromPreferences(context: Context) =
117138
PreferenceManager.getDefaultSharedPreferences(context)
118139
.getBoolean(context.getString(R.string.feed_show_played_items_key), true)
140+
private fun getShowFutureItemsFromPreferences(context: Context) =
141+
PreferenceManager.getDefaultSharedPreferences(context)
142+
.getBoolean(context.getString(R.string.feed_show_future_items_key), true)
119143
}
120144

121145
class Factory(
@@ -128,7 +152,8 @@ class FeedViewModel(
128152
context.applicationContext,
129153
groupId,
130154
// Read initial value from preferences
131-
getShowPlayedItemsFromPreferences(context.applicationContext)
155+
getShowPlayedItemsFromPreferences(context.applicationContext),
156+
getShowFutureItemsFromPreferences(context.applicationContext)
132157
) as T
133158
}
134159
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:tint="@color/defaultIconTint"
5+
android:viewportWidth="24"
6+
android:viewportHeight="24">
7+
<group
8+
android:name="flip"
9+
android:pivotX="12"
10+
android:scaleX="-1">
11+
<path
12+
android:fillColor="#FF000000"
13+
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z" />
14+
</group>
15+
</vector>

app/src/main/res/menu/menu_feed_fragment.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,19 @@
1111
android:title="@string/feed_toggle_show_played_items"
1212
app:showAsAction="ifRoom" />
1313

14+
<item
15+
android:id="@+id/menu_item_feed_toggle_future_items"
16+
android:orderInCategory="3"
17+
android:checkable="true"
18+
android:checked="true"
19+
android:icon="@drawable/ic_history_future"
20+
android:title="@string/feed_toggle_show_future_items"
21+
app:showAsAction="ifRoom" />
22+
1423
<item
1524
android:id="@+id/menu_item_feed_help"
1625
android:icon="@drawable/ic_help"
1726
android:title="@string/help"
18-
android:orderInCategory="3"
27+
android:orderInCategory="4"
1928
app:showAsAction="ifRoom" />
2029
</menu>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@
284284
<string name="feed_update_threshold_key">feed_update_threshold_key</string>
285285
<string name="feed_update_threshold_default_value">300</string>
286286
<string name="feed_show_played_items_key">feed_show_played_items</string>
287+
<string name="feed_show_future_items_key">feed_show_future_items</string>
287288

288289
<string name="show_thumbnail_key">show_thumbnail_key</string>
289290

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,4 +747,5 @@
747747
<string name="select_quality_external_players">Select quality for external players</string>
748748
<string name="unknown_format">Unknown format</string>
749749
<string name="unknown_quality">Unknown quality</string>
750+
<string name="feed_toggle_show_future_items">Show future videos</string>
750751
</resources>

0 commit comments

Comments
 (0)