From 2e999aef6271664578f95a9cf2a365857525b4ac Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 8 May 2022 11:18:11 +0200 Subject: Apply action to items that are not loaded yet --- .../antennapod/fragment/AllEpisodesFragment.java | 2 +- .../antennapod/fragment/EpisodesListFragment.java | 27 ++++++++++++++++++---- .../fragment/FavoriteEpisodesFragment.java | 2 +- .../danoeh/antennapod/fragment/InboxFragment.java | 2 +- .../actions/EpisodeMultiSelectActionHandler.java | 15 +++++++----- 5 files changed, 34 insertions(+), 14 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 2627da3d9..51dcb664c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -102,7 +102,7 @@ public class AllEpisodesFragment extends EpisodesListFragment { @NonNull @Override - protected List loadMoreData() { + protected List loadMoreData(int page) { return DBReader.getRecentlyPublishedEpisodes((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE, feedItemFilter); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java index 06c8148e5..9409c7c3a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -36,6 +36,7 @@ import de.danoeh.antennapod.fragment.actions.EpisodeMultiSelectActionHandler; import de.danoeh.antennapod.ui.common.PagedToolbarFragment; import de.danoeh.antennapod.view.EpisodeItemListRecyclerView; import de.danoeh.antennapod.view.viewholder.EpisodeItemViewHolder; +import io.reactivex.Completable; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -246,9 +247,25 @@ public abstract class EpisodesListFragment extends Fragment implements EpisodeIt } }); speedDialView.setOnActionSelectedListener(actionItem -> { - new EpisodeMultiSelectActionHandler(((MainActivity) getActivity()), actionItem.getId()) - .handleAction(listAdapter.getSelectedItems()); - listAdapter.endSelectMode(); + EpisodeMultiSelectActionHandler handler = + new EpisodeMultiSelectActionHandler(((MainActivity) getActivity()), actionItem.getId()); + Completable.fromAction( + () -> { + handler.handleAction(listAdapter.getSelectedItems()); + if (listAdapter.shouldSelectLazyLoadedItems()) { + int applyPage = page + 1; + List nextPage; + do { + nextPage = loadMoreData(applyPage); + handler.handleAction(nextPage); + applyPage++; + } while (nextPage.size() == EPISODES_PER_PAGE); + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(() -> listAdapter.endSelectMode(), + error -> Log.e(TAG, Log.getStackTraceString(error))); return true; }); @@ -276,7 +293,7 @@ public abstract class EpisodesListFragment extends Fragment implements EpisodeIt } isLoadingMore = true; loadingMoreView.setVisibility(View.VISIBLE); - disposable = Observable.fromCallable(this::loadMoreData) + disposable = Observable.fromCallable(() -> loadMoreData(page)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(data -> { @@ -477,7 +494,7 @@ public abstract class EpisodesListFragment extends Fragment implements EpisodeIt * @return The items from the next page of data */ @NonNull - protected abstract List loadMoreData(); + protected abstract List loadMoreData(int page); /** * Returns the total number of items that would be returned if {@link #loadMoreData} was called often enough. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java index 56b2b433f..cc45a7d35 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java @@ -99,7 +99,7 @@ public class FavoriteEpisodesFragment extends EpisodesListFragment { @NonNull @Override - protected List loadMoreData() { + protected List loadMoreData(int page) { return DBReader.getFavoriteItemsList((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java index 14bfe2951..067e7466c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java @@ -116,7 +116,7 @@ public class InboxFragment extends EpisodesListFragment implements Toolbar.OnMen @NonNull @Override - protected List loadMoreData() { + protected List loadMoreData(int page) { return DBReader.getNewItemsList((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java b/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java index aad611e5d..0dc416e0e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java @@ -103,12 +103,15 @@ public class EpisodeMultiSelectActionHandler { private void showMessage(@PluralsRes int msgId, int numItems) { totalNumItems += numItems; - String text = activity.getResources().getQuantityString(msgId, totalNumItems, totalNumItems); - if (snackbar != null) { - snackbar.setText(text); - } else { - snackbar = activity.showSnackbarAbovePlayer(text, Snackbar.LENGTH_LONG); - } + activity.runOnUiThread(() -> { + String text = activity.getResources().getQuantityString(msgId, totalNumItems, totalNumItems); + if (snackbar != null) { + snackbar.setText(text); + snackbar.show(); // Resets the timeout + } else { + snackbar = activity.showSnackbarAbovePlayer(text, Snackbar.LENGTH_LONG); + } + }); } private long[] getSelectedIds(List items) { -- cgit v1.2.3