diff --git a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java index 7093084825..8f564e44b2 100644 --- a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java +++ b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java @@ -394,7 +394,7 @@ public class DefaultSelectionTracker extends SelectionTracker implements R @SuppressWarnings({"WeakerAccess", "unchecked"}) /* synthetic access */ void onDataSetChanged() { - mSelection.clearProvisionalSelection(); + //mSelection.clearProvisionalSelection(); notifySelectionRefresh(); diff --git a/patches/selection-tracker.patch b/patches/selection-tracker.patch new file mode 100644 index 0000000000..0fde5ac97e --- /dev/null +++ b/patches/selection-tracker.patch @@ -0,0 +1,47 @@ +--- /home/marcel/support/recyclerview/recyclerview-selection/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java 2020-03-23 17:03:46.043122318 +0100 ++++ app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java 2020-06-26 16:44:56.973294109 +0200 +@@ -379,6 +379,10 @@ public class DefaultSelectionTracker + return mRange != null; + } + ++ boolean isOverlapping(int position, int count) { ++ return (mRange != null && mRange.isOverlapping(position, count)); ++ } ++ + private boolean canSetState(@NonNull K key, boolean nextState) { + return mSelectionPredicate.canSetStateForKey(key, nextState); + } +@@ -390,7 +394,7 @@ public class DefaultSelectionTracker + + @SuppressWarnings({"WeakerAccess", "unchecked"}) /* synthetic access */ + void onDataSetChanged() { +- mSelection.clearProvisionalSelection(); ++ //mSelection.clearProvisionalSelection(); + + notifySelectionRefresh(); + +@@ -601,17 +605,21 @@ public class DefaultSelectionTracker + + @Override + public void onItemRangeInserted(int startPosition, int itemCount) { +- mSelectionTracker.endRange(); ++ if (mSelectionTracker.isOverlapping(startPosition, itemCount)) ++ mSelectionTracker.endRange(); + } + + @Override + public void onItemRangeRemoved(int startPosition, int itemCount) { +- mSelectionTracker.endRange(); ++ if (mSelectionTracker.isOverlapping(startPosition, itemCount)) ++ mSelectionTracker.endRange(); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { +- mSelectionTracker.endRange(); ++ if (mSelectionTracker.isOverlapping(fromPosition, itemCount) || ++ mSelectionTracker.isOverlapping(toPosition, itemCount)) ++ mSelectionTracker.endRange(); + } + } + }