mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-02-01 19:26:46 +01:00
Fix multiselect with lazy loading on podcast screen (#7614)
This commit is contained in:
parent
22ebef5c41
commit
e48af3f094
@ -64,6 +64,7 @@ import de.danoeh.antennapod.ui.screen.episode.ItemPagerFragment;
|
||||
import de.danoeh.antennapod.ui.screen.feed.preferences.FeedSettingsFragment;
|
||||
import de.danoeh.antennapod.ui.screen.subscriptions.FeedMenuHandler;
|
||||
import de.danoeh.antennapod.ui.swipeactions.SwipeActions;
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Maybe;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
@ -201,14 +202,36 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
|
||||
Snackbar.LENGTH_SHORT);
|
||||
return false;
|
||||
}
|
||||
new EpisodeMultiSelectActionHandler(getActivity(), menuItem.getItemId())
|
||||
.handleAction(adapter.getSelectedItems());
|
||||
adapter.endSelectMode();
|
||||
EpisodeMultiSelectActionHandler handler
|
||||
= new EpisodeMultiSelectActionHandler(getActivity(), menuItem.getItemId());
|
||||
Completable.fromAction(() -> handleActionForAllSelectedItems(handler))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(() -> adapter.endSelectMode(),
|
||||
error -> Log.e(TAG, Log.getStackTraceString(error)));
|
||||
return true;
|
||||
});
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
private void handleActionForAllSelectedItems(EpisodeMultiSelectActionHandler handler) {
|
||||
handler.handleAction(adapter.getSelectedItems());
|
||||
if (adapter.shouldSelectLazyLoadedItems()) {
|
||||
int applyPage = page + 1;
|
||||
List<FeedItem> nextPage;
|
||||
do {
|
||||
nextPage = loadMoreData(applyPage);
|
||||
handler.handleAction(nextPage);
|
||||
applyPage++;
|
||||
} while (nextPage.size() == EPISODES_PER_PAGE);
|
||||
}
|
||||
}
|
||||
|
||||
private List<FeedItem> loadMoreData(int page) {
|
||||
Feed feed = DBReader.getFeed(feedID, true, (page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE);
|
||||
return feed != null ? feed.getItems() : Collections.emptyList();
|
||||
}
|
||||
|
||||
private void updateRecyclerPadding() {
|
||||
boolean hasMorePages = feed != null && feed.isPaged() && feed.getNextPageLink() != null;
|
||||
boolean pageLoaderVisible = viewBinding.recyclerView.isScrolledToBottom() && hasMorePages;
|
||||
@ -619,20 +642,19 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
|
||||
isLoadingMore = true;
|
||||
adapter.setDummyViews(1);
|
||||
adapter.notifyItemInserted(adapter.getItemCount() - 1);
|
||||
disposable = Observable.fromCallable(() -> DBReader.getFeed(feedID, true,
|
||||
(page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE))
|
||||
disposable = Observable.fromCallable(() -> loadMoreData(page))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
data -> {
|
||||
if (data.getItems().size() < EPISODES_PER_PAGE) {
|
||||
items -> {
|
||||
if (items.size() < EPISODES_PER_PAGE) {
|
||||
hasMoreItems = false;
|
||||
}
|
||||
feed.getItems().addAll(data.getItems());
|
||||
feed.getItems().addAll(items);
|
||||
adapter.setDummyViews(0);
|
||||
adapter.updateItems(feed.getItems());
|
||||
if (adapter.shouldSelectLazyLoadedItems()) {
|
||||
adapter.setSelected(feed.getItems().size() - data.getItems().size(),
|
||||
adapter.setSelected(feed.getItems().size() - items.size(),
|
||||
feed.getItems().size(), true);
|
||||
}
|
||||
}, error -> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user