diff --git a/app/src/main/java/de/danoeh/antennapod/ui/screen/feed/RemoveFeedDialog.java b/app/src/main/java/de/danoeh/antennapod/ui/screen/feed/RemoveFeedDialog.java
index 3d41bbcf2..c2bc5821c 100644
--- a/app/src/main/java/de/danoeh/antennapod/ui/screen/feed/RemoveFeedDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/ui/screen/feed/RemoveFeedDialog.java
@@ -125,7 +125,9 @@ public class RemoveFeedDialog extends BottomSheetDialogFragment {
disposable = Completable.fromAction(
() -> {
- for (Feed feed : feeds) {
+ for (int i = 0; i < feeds.size(); i++) {
+ Feed feed = feeds.get(i);
+ updateProgressText(R.string.deleting_podcast_progress, i + 1, feeds.size());
DBWriter.deleteFeed(context, feed.getId()).get();
}
})
@@ -142,9 +144,45 @@ public class RemoveFeedDialog extends BottomSheetDialogFragment {
}
private void onArchiveButtonPressed() {
- dismiss();
- for (Feed feed : feeds) {
- DBWriter.setFeedState(getContext(), feed, Feed.STATE_ARCHIVED);
+ Context context = getContext();
+ if (context == null) {
+ return;
+ }
+
+ binding.progressBar.setVisibility(View.VISIBLE);
+ binding.removeButton.setVisibility(View.GONE);
+ binding.archiveButton.setVisibility(View.GONE);
+ binding.cancelButton.setVisibility(View.GONE);
+
+ disposable = Completable.fromAction(
+ () -> {
+ for (int i = 0; i < feeds.size(); i++) {
+ Feed feed = feeds.get(i);
+ updateProgressText(R.string.archiving_podcast_progress, i + 1, feeds.size());
+ DBWriter.setFeedState(context, feed, Feed.STATE_ARCHIVED).get();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ () -> {
+ Log.d(TAG, "Feed(s) archived");
+ dismiss();
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ dismiss();
+ });
+ }
+
+ private void updateProgressText(int stringResId, int currentIndex, int total) {
+ // Update UI on main thread if fragment is still attached
+ if (isAdded() && getActivity() != null) {
+ getActivity().runOnUiThread(() -> {
+ if (binding != null) {
+ String progressText = getString(stringResId, currentIndex, total);
+ binding.selectionText.setText(progressText);
+ }
+ });
}
}
diff --git a/ui/i18n/src/main/res/values/strings.xml b/ui/i18n/src/main/res/values/strings.xml
index 5be76a679..272676b10 100644
--- a/ui/i18n/src/main/res/values/strings.xml
+++ b/ui/i18n/src/main/res/values/strings.xml
@@ -214,6 +214,8 @@
Share file
Deleting will remove ALL its episodes including downloads, playback history, and statistics.
Archiving will hide it from the subscription list and avoid it getting updates. Downloads, statistics and playback state are kept.
+ Archiving podcast %1$d of %2$d…
+ Deleting podcast %1$d of %2$d…
Refresh complete podcast
Multi select
Select all above