Skip to content

Commit f6178fb

Browse files
committed
Added a cancel button and current channel name when reloading content feed in FeedFragment
1 parent 00208fa commit f6178fb

7 files changed

Lines changed: 42 additions & 18 deletions

File tree

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ import org.schabi.newpipe.util.ThemeHelper.resolveDrawable
8686
import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout
8787

8888
class FeedFragment : BaseStateFragment<FeedState>() {
89+
private lateinit var feedLoadServiceIntent: Intent
8990
private var _feedBinding: FragmentFeedBinding? = null
9091
private val feedBinding get() = _feedBinding!!
9192

@@ -200,6 +201,11 @@ class FeedFragment : BaseStateFragment<FeedState>() {
200201
hideNewItemsLoaded(true)
201202
feedBinding.itemsList.scrollToPosition(0)
202203
}
204+
feedBinding.cancelFeedReloadingButton.setOnClickListener {
205+
hideNewItemsLoaded(false)
206+
hideLoading()
207+
cancelReloadingContent()
208+
}
203209
}
204210

205211
// /////////////////////////////////////////////////////////////////////////
@@ -320,6 +326,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
320326
feedBinding.itemsList.animateHideRecyclerViewAllowingScrolling()
321327
feedBinding.refreshRootView.animate(false, 0)
322328
feedBinding.loadingProgressText.animate(true, 200)
329+
feedBinding.cancelFeedReloadingButton.animate(true, 200)
323330
feedBinding.swipeRefreshLayout.isRefreshing = true
324331
isRefreshing = true
325332
}
@@ -329,6 +336,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
329336
feedBinding.itemsList.animate(true, 0)
330337
feedBinding.refreshRootView.animate(true, 200)
331338
feedBinding.loadingProgressText.animate(false, 0)
339+
feedBinding.cancelFeedReloadingButton.animate(false, 0)
332340
feedBinding.swipeRefreshLayout.isRefreshing = false
333341
isRefreshing = false
334342
}
@@ -367,7 +375,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
367375
progressState.maxProgress == -1
368376

369377
feedBinding.loadingProgressText.text = if (!isIndeterminate) {
370-
"${progressState.currentProgress}/${progressState.maxProgress}"
378+
"${progressState.progressDescription} (${progressState.currentProgress}/${progressState.maxProgress})"
371379
} else if (progressState.progressMessage > 0) {
372380
getString(progressState.progressMessage)
373381
} else {
@@ -680,14 +688,18 @@ class FeedFragment : BaseStateFragment<FeedState>() {
680688
override fun reloadContent() {
681689
hideNewItemsLoaded(false)
682690

683-
getActivity()?.startService(
684-
Intent(requireContext(), FeedLoadService::class.java).apply {
685-
putExtra(FeedLoadService.EXTRA_GROUP_ID, groupId)
686-
}
687-
)
691+
feedLoadServiceIntent = Intent(requireContext(), FeedLoadService::class.java).apply {
692+
putExtra(FeedLoadService.EXTRA_GROUP_ID, groupId)
693+
}
694+
695+
getActivity()?.startService(feedLoadServiceIntent)
688696
listState = null
689697
}
690698

699+
fun cancelReloadingContent() {
700+
getActivity()?.stopService(feedLoadServiceIntent)
701+
}
702+
691703
companion object {
692704
const val KEY_GROUP_ID = "ARG_GROUP_ID"
693705
const val KEY_GROUP_NAME = "ARG_GROUP_NAME"

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ sealed class FeedState {
88
data class ProgressState(
99
val currentProgress: Int = -1,
1010
val maxProgress: Int = -1,
11-
@StringRes val progressMessage: Int = 0
11+
@StringRes val progressMessage: Int = 0,
12+
val progressDescription: String = ""
1213
) : FeedState()
1314

1415
data class LoadedState(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class FeedViewModel(
9494
mutableStateLiveData.postValue(
9595
when (event) {
9696
is IdleEvent -> FeedState.LoadedState(listFromDB.map { e -> StreamItem(e) }, oldestUpdate, notLoadedCount, listOf())
97-
is ProgressEvent -> FeedState.ProgressState(event.currentProgress, event.maxProgress, event.progressMessage)
97+
is ProgressEvent -> FeedState.ProgressState(event.currentProgress, event.maxProgress, event.progressMessage, event.progressDescription)
9898
is SuccessResultEvent -> FeedState.LoadedState(listFromDB.map { e -> StreamItem(e) }, oldestUpdate, notLoadedCount, event.itemsErrors)
9999
is ErrorResultEvent -> FeedState.ErrorState(event.error)
100100
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ object FeedEventManager {
2727

2828
sealed class Event {
2929
data object IdleEvent : Event()
30-
data class ProgressEvent(val currentProgress: Int = -1, val maxProgress: Int = -1, @StringRes val progressMessage: Int = 0) : Event() {
30+
data class ProgressEvent(val currentProgress: Int = -1, val maxProgress: Int = -1, @StringRes val progressMessage: Int = 0, val progressDescription: String = "") : Event() {
3131
constructor(@StringRes progressMessage: Int) : this(-1, -1, progressMessage)
3232
}
3333

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class FeedLoadManager(private val context: Context) {
3939

4040
private val notificationUpdater = PublishProcessor.create<String>()
4141
private val currentProgress = AtomicInteger(-1)
42+
private var currentProgressDescription = ""
4243
private val maxProgress = AtomicInteger(-1)
4344
private val cancelSignal = AtomicBoolean()
4445
private val feedResultsHolder = FeedResultsHolder()
@@ -148,7 +149,8 @@ class FeedLoadManager(private val context: Context) {
148149
FeedEventManager.postEvent(
149150
FeedEventManager.Event.ProgressEvent(
150151
currentProgress.get(),
151-
maxProgress.get()
152+
maxProgress.get(),
153+
progressDescription = currentProgressDescription
152154
)
153155
)
154156
}
@@ -278,7 +280,8 @@ class FeedLoadManager(private val context: Context) {
278280
private inner class NotificationConsumer : Consumer<Notification<FeedUpdateInfo>> {
279281
override fun accept(item: Notification<FeedUpdateInfo>) {
280282
currentProgress.incrementAndGet()
281-
notificationUpdater.onNext(item.value?.name.orEmpty())
283+
currentProgressDescription = item.value?.name.orEmpty()
284+
notificationUpdater.onNext(currentProgressDescription)
282285

283286
broadcastProgress()
284287
}

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import android.util.Log
3030
import androidx.core.app.NotificationCompat
3131
import androidx.core.app.NotificationManagerCompat
3232
import androidx.core.app.PendingIntentCompat
33-
import androidx.core.app.ServiceCompat
3433
import androidx.core.content.ContextCompat
3534
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
3635
import io.reactivex.rxjava3.core.Flowable
@@ -101,7 +100,7 @@ class FeedLoadService : Service() {
101100
handleError(error)
102101
return@subscribe
103102
}
104-
stopService()
103+
stopSelf()
105104
}
106105
return START_NOT_STICKY
107106
}
@@ -112,10 +111,8 @@ class FeedLoadService : Service() {
112111
notificationDisposable?.dispose()
113112
}
114113

115-
private fun stopService() {
114+
override fun onDestroy() {
116115
disposeAll()
117-
ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE)
118-
stopSelf()
119116
}
120117

121118
override fun onBind(intent: Intent): IBinder? {
@@ -213,6 +210,6 @@ class FeedLoadService : Service() {
213210

214211
private fun handleError(error: Throwable) {
215212
postEvent(ErrorResultEvent(error))
216-
stopService()
213+
stopSelf()
217214
}
218215
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,23 @@
122122
android:layout_width="wrap_content"
123123
android:layout_height="wrap_content"
124124
android:layout_marginTop="8dp"
125-
android:text="∞/∞"
125+
android:text=""
126126
android:textAppearance="@style/TextAppearance.AppCompat.Title"
127127
android:textSize="16sp"
128128
android:visibility="gone"
129129
tools:text="1/120"
130130
tools:visibility="visible" />
131+
132+
<Button
133+
android:id="@+id/cancel_feed_reloading_button"
134+
android:layout_width="wrap_content"
135+
android:layout_height="wrap_content"
136+
android:layout_marginTop="10sp"
137+
android:text="@string/cancel"
138+
android:textSize="12sp"
139+
android:theme="@style/Base"
140+
android:visibility="gone"
141+
tools:visibility="visible" />
131142
</LinearLayout>
132143

133144
<!--ERROR PANEL-->

0 commit comments

Comments
 (0)