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.feed.preferences.FeedSettingsFragment;
|
||||||
import de.danoeh.antennapod.ui.screen.subscriptions.FeedMenuHandler;
|
import de.danoeh.antennapod.ui.screen.subscriptions.FeedMenuHandler;
|
||||||
import de.danoeh.antennapod.ui.swipeactions.SwipeActions;
|
import de.danoeh.antennapod.ui.swipeactions.SwipeActions;
|
||||||
|
import io.reactivex.Completable;
|
||||||
import io.reactivex.Maybe;
|
import io.reactivex.Maybe;
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
@ -201,14 +202,36 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
|
|||||||
Snackbar.LENGTH_SHORT);
|
Snackbar.LENGTH_SHORT);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
new EpisodeMultiSelectActionHandler(getActivity(), menuItem.getItemId())
|
EpisodeMultiSelectActionHandler handler
|
||||||
.handleAction(adapter.getSelectedItems());
|
= new EpisodeMultiSelectActionHandler(getActivity(), menuItem.getItemId());
|
||||||
adapter.endSelectMode();
|
Completable.fromAction(() -> handleActionForAllSelectedItems(handler))
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(() -> adapter.endSelectMode(),
|
||||||
|
error -> Log.e(TAG, Log.getStackTraceString(error)));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
return viewBinding.getRoot();
|
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() {
|
private void updateRecyclerPadding() {
|
||||||
boolean hasMorePages = feed != null && feed.isPaged() && feed.getNextPageLink() != null;
|
boolean hasMorePages = feed != null && feed.isPaged() && feed.getNextPageLink() != null;
|
||||||
boolean pageLoaderVisible = viewBinding.recyclerView.isScrolledToBottom() && hasMorePages;
|
boolean pageLoaderVisible = viewBinding.recyclerView.isScrolledToBottom() && hasMorePages;
|
||||||
@ -619,20 +642,19 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
|
|||||||
isLoadingMore = true;
|
isLoadingMore = true;
|
||||||
adapter.setDummyViews(1);
|
adapter.setDummyViews(1);
|
||||||
adapter.notifyItemInserted(adapter.getItemCount() - 1);
|
adapter.notifyItemInserted(adapter.getItemCount() - 1);
|
||||||
disposable = Observable.fromCallable(() -> DBReader.getFeed(feedID, true,
|
disposable = Observable.fromCallable(() -> loadMoreData(page))
|
||||||
(page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE))
|
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(
|
.subscribe(
|
||||||
data -> {
|
items -> {
|
||||||
if (data.getItems().size() < EPISODES_PER_PAGE) {
|
if (items.size() < EPISODES_PER_PAGE) {
|
||||||
hasMoreItems = false;
|
hasMoreItems = false;
|
||||||
}
|
}
|
||||||
feed.getItems().addAll(data.getItems());
|
feed.getItems().addAll(items);
|
||||||
adapter.setDummyViews(0);
|
adapter.setDummyViews(0);
|
||||||
adapter.updateItems(feed.getItems());
|
adapter.updateItems(feed.getItems());
|
||||||
if (adapter.shouldSelectLazyLoadedItems()) {
|
if (adapter.shouldSelectLazyLoadedItems()) {
|
||||||
adapter.setSelected(feed.getItems().size() - data.getItems().size(),
|
adapter.setSelected(feed.getItems().size() - items.size(),
|
||||||
feed.getItems().size(), true);
|
feed.getItems().size(), true);
|
||||||
}
|
}
|
||||||
}, error -> {
|
}, error -> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user