Bugfix: crash on select all tracks or all markers.

Fixes #2231.
This commit is contained in:
Dennis Guse
2025-12-12 21:59:45 +01:00
parent 693904529d
commit d43efad52a
3 changed files with 17 additions and 13 deletions
@@ -38,7 +38,7 @@ public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
private final SparseBooleanArray selection = new SparseBooleanArray();
private RecordingStatus recordingStatus;
private UnitSystem unitSystem;
private TrackListIterator cursor;
private TrackListIterator trackIterator;
private boolean selectionMode = false;
private ActivityUtils.ContextualActionModeCallback actionModeCallback;
private ActionMode actionMode;
@@ -66,26 +66,26 @@ public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolder viewHolder = (ViewHolder) holder;
cursor.moveToPosition(position);
viewHolder.bind(cursor);
trackIterator.moveToPosition(position);
viewHolder.bind(trackIterator);
}
@Override
public long getItemId(int position) {
cursor.moveToPosition(position);
return cursor.get().id().id();
trackIterator.moveToPosition(position);
return trackIterator.get().id().id();
}
@Override
public int getItemCount() {
if (cursor == null) {
if (trackIterator == null) {
return 0;
}
return cursor.getCount();
return trackIterator.getCount();
}
public void swapData(TrackListIterator cursor) {
this.cursor = cursor;
this.trackIterator = cursor;
this.notifyDataSetChanged();
}
@@ -132,10 +132,10 @@ public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
public void setAllSelected(boolean isSelected) {
if (isSelected) {
cursor.moveToPosition(-1);
while (cursor.hasNext()) {
selection.put((int) cursor.get().id().id(), true);
cursor.next();
trackIterator.moveToFirst();
while (trackIterator.hasNext()) {
selection.put((int) trackIterator.get().id().id(), true);
trackIterator.next();
}
} else {
selection.clear();
@@ -136,7 +136,7 @@ public class MarkerListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
public void setAllSelected(boolean isSelected) {
if (isSelected) {
markerIterator.moveToPosition(-1);
markerIterator.moveToFirst();
while (markerIterator.hasNext()) {
selection.put((int) markerIterator.get().id().id(), true);
markerIterator.next();
@@ -29,6 +29,10 @@ public abstract class AutoCloseableIterator<T> implements Iterator<T>, AutoClose
return cursor.getPosition();
}
public final boolean moveToFirst() {
return cursor.moveToFirst();
}
public final boolean moveToPosition(int position) {
return cursor.moveToPosition(position);
}