Automatically select lazy loaded items if necessary

This commit is contained in:
ByteHamster 2022-05-08 10:21:39 +02:00
parent 1fa0c32142
commit 7c0d084ffc
3 changed files with 17 additions and 4 deletions

View File

@ -48,6 +48,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
public void updateItems(List<FeedItem> items) {
episodes = items;
notifyDataSetChanged();
updateTitle();
}
@Override
@ -195,6 +196,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
return true;
} else if (item.getItemId() == R.id.select_all_below) {
setSelected(longPressedPosition + 1, getItemCount(), true);
shouldSelectLazyLoadedItems = true;
return true;
}
return false;

View File

@ -20,6 +20,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
private final HashSet<Long> selectedIds = new HashSet<>();
private final Activity activity;
private OnSelectModeListener onSelectModeListener;
boolean shouldSelectLazyLoadedItems = false;
public SelectableAdapter(Activity activity) {
this.activity = activity;
@ -34,6 +35,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
onSelectModeListener.onStartSelectMode();
}
shouldSelectLazyLoadedItems = false;
selectedIds.clear();
selectedIds.add(getItemId(pos));
notifyDataSetChanged();
@ -56,9 +58,10 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == R.id.select_toggle) {
boolean allSelected = selectedIds.size() == getItemCount();
setSelected(0, getItemCount(), !allSelected);
toggleSelectAllIcon(item, !allSelected);
boolean selectAll = selectedIds.size() != getItemCount();
shouldSelectLazyLoadedItems = selectAll;
setSelected(0, getItemCount(), selectAll);
toggleSelectAllIcon(item, selectAll);
updateTitle();
return true;
}
@ -69,6 +72,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
public void onDestroyActionMode(ActionMode mode) {
callOnEndSelectMode();
actionMode = null;
shouldSelectLazyLoadedItems = false;
selectedIds.clear();
notifyDataSetChanged();
}
@ -147,7 +151,7 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
}
}
private void updateTitle() {
void updateTitle() {
if (actionMode == null) {
return;
}
@ -166,6 +170,10 @@ abstract class SelectableAdapter<T extends RecyclerView.ViewHolder> extends Recy
}
}
public boolean shouldSelectLazyLoadedItems() {
return shouldSelectLazyLoadedItems;
}
public interface OnSelectModeListener {
void onStartSelectMode();

View File

@ -283,6 +283,9 @@ public abstract class EpisodesListFragment extends Fragment implements EpisodeIt
}
episodes.addAll(data);
onFragmentLoaded(episodes);
if (listAdapter.shouldSelectLazyLoadedItems()) {
listAdapter.setSelected(episodes.size() - data.size(), episodes.size(), true);
}
}, error -> Log.e(TAG, Log.getStackTraceString(error)),
() -> {
recyclerView.post(() -> isLoadingMore = false); // Make sure to not always load 2 pages at once