Skip to content

Commit

Permalink
Marker List: Fix crashes in selection mode
Browse files Browse the repository at this point in the history
  • Loading branch information
lmarz authored and dennisguse committed Oct 8, 2023
1 parent 1708e09 commit 88b860a
Showing 1 changed file with 20 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,13 @@ public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
selectionMode = true;
actionModeCallback.onPrepare(menu, getCheckedPositions(), getCheckedIds(), true);
actionModeCallback.onPrepare(menu, null, getCheckedIds(), true);
return true;
}

@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
if (actionModeCallback.onClick(menuItem.getItemId(), getCheckedPositions(), getCheckedIds())) {
if (actionModeCallback.onClick(menuItem.getItemId(), null, getCheckedIds())) {
actionMode.finish();
}
return true;
Expand All @@ -130,37 +130,31 @@ public void onDestroyActionMode(ActionMode actionMode) {
selectionMode = false;

setAllSelected(false);
selection.clear();

actionModeCallback.onDestroy();
}

public void setAllSelected(boolean isSelected) {
for (int i = 0; i < getItemCount(); i++) {
ViewHolder holder = (ViewHolder) recyclerView.findViewHolderForLayoutPosition(i);
holder.setSelected(isSelected);
}
}

private int[] getCheckedPositions() {
List<Integer> positions = new ArrayList<>();

for (int i = 0; i < selection.size(); i++) {
if (selection.valueAt(i)) {
positions.add(selection.keyAt(i));
if (isSelected) {
for (Marker marker : markers) {
selection.put((int) marker.getId().id(), true);
}
} else {
selection.clear();
}

return positions.stream().mapToInt(i -> i).toArray();
for (int i = 0; i < recyclerView.getChildCount(); i++) {
ViewHolder holder = (ViewHolder) recyclerView.getChildViewHolder(recyclerView.getChildAt(i));
holder.setSelected(isSelected);
}
}

private long[] getCheckedIds() {
List<Long> ids = new ArrayList<>();

for (int i = 0; i < selection.size(); i++) {
if (selection.valueAt(i)) {
ViewHolder holder = (ViewHolder) recyclerView.findViewHolderForLayoutPosition(selection.keyAt(i));
ids.add(holder.getId());
ids.add((long) selection.keyAt(i));
}
}

Expand Down Expand Up @@ -209,11 +203,11 @@ public void bind(Marker marker) {
String categoryDescription = StringUtils.getCategoryDescription(marker.getCategory(), marker.getDescription());
viewBinding.markerListItemTimeDistance.setText(categoryDescription);

setSelected(selection.get(getLayoutPosition()));
setSelected(selection.get((int) getId()));
}

public void setSelected(boolean isSelected) {
selection.put(getLayoutPosition(), isSelected);
selection.put((int) getId(), isSelected);
view.setActivated(isSelected);
}

Expand All @@ -235,8 +229,12 @@ public void onClick(View view) {

@Override
public boolean onLongClick(View view) {
actionMode = context.startSupportActionMode(MarkerListAdapter.this);
setSelected(true);
setSelected(!view.isActivated());
if (!selectionMode) {
actionMode = context.startSupportActionMode(MarkerListAdapter.this);
} else {
actionMode.invalidate();
}
return true;
}
}
Expand Down

0 comments on commit 88b860a

Please sign in to comment.