diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 0df776afa3..bdc83a197d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -134,6 +134,7 @@ public class FragmentMessages extends FragmentBase { private AdapterMessage adapter; private AdapterMessage.ViewType viewType; + private SelectionPredicateMessage selectionPredicate = null; private SelectionTracker selectionTracker = null; private Long previous = null; @@ -424,7 +425,7 @@ public class FragmentMessages extends FragmentBase { }); } else { - final SelectionPredicateMessage predicate = new SelectionPredicateMessage(rvMessage); + selectionPredicate = new SelectionPredicateMessage(rvMessage); selectionTracker = new SelectionTracker.Builder<>( "messages-selection", @@ -432,7 +433,7 @@ public class FragmentMessages extends FragmentBase { new ItemKeyProviderMessage(rvMessage), new ItemDetailsLookupMessage(rvMessage), StorageStrategy.createLongStorage()) - .withSelectionPredicate(predicate) + .withSelectionPredicate(selectionPredicate) .build(); adapter.setSelectionTracker(selectionTracker); @@ -690,6 +691,9 @@ public class FragmentMessages extends FragmentBase { AdapterMessage.ViewHolder holder = ((AdapterMessage.ViewHolder) viewHolder); holder.setDisplacement(dX); + if (selectionPredicate != null) + selectionPredicate.setEnabled(!isCurrentlyActive); + TupleMessageEx message = getMessage(viewHolder); if (message == null) return; diff --git a/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java b/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java index ef07968089..671789ab89 100644 --- a/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java +++ b/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java @@ -24,14 +24,23 @@ import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.widget.RecyclerView; public class SelectionPredicateMessage extends SelectionTracker.SelectionPredicate { + private boolean enabled; private RecyclerView recyclerView; SelectionPredicateMessage(RecyclerView recyclerView) { + this.enabled = true; this.recyclerView = recyclerView; } + void setEnabled(boolean enabled) { + this.enabled = enabled; + } + @Override public boolean canSetStateForKey(@NonNull Long key, boolean nextState) { + if (!enabled) + return false; + AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter(); TupleMessageEx message = adapter.getItemForKey(key); @@ -43,6 +52,9 @@ public class SelectionPredicateMessage extends SelectionTracker.SelectionPredica @Override public boolean canSetStateAtPosition(int position, boolean nextState) { + if (!enabled) + return false; + AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter(); TupleMessageEx message = adapter.getItemAtPosition(position);