From 23aac74a04c4f50fea87c474d661bc96f6c4c9fd Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 26 Jan 2020 12:16:28 +0100 Subject: [PATCH] Fixed selection/update Where did this patch go? --- .../selection/DefaultSelectionTracker.java | 14 +++++++++++--- .../androidx/recyclerview/selection/Range.java | 5 +++++ patches/selection-updated.patch | 10 +++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java index 61985cf8d4..7093084825 100644 --- a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java +++ b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java @@ -379,6 +379,10 @@ public class DefaultSelectionTracker extends SelectionTracker implements R 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); } @@ -601,17 +605,21 @@ public class DefaultSelectionTracker extends SelectionTracker implements R @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(); } } } diff --git a/app/src/main/java/androidx/recyclerview/selection/Range.java b/app/src/main/java/androidx/recyclerview/selection/Range.java index 433e0d2cb8..85ddeff947 100644 --- a/app/src/main/java/androidx/recyclerview/selection/Range.java +++ b/app/src/main/java/androidx/recyclerview/selection/Range.java @@ -169,6 +169,11 @@ final class Range { mCallbacks.updateForRange(begin, end, selected, type); } + boolean isOverlapping(int position, int count) { + return (position >= mBegin && position <= mEnd) || + (position + count >= mBegin && position + count <= mEnd); + } + @Override public String toString() { return "Range{begin=" + mBegin + ", end=" + mEnd + "}"; diff --git a/patches/selection-updated.patch b/patches/selection-updated.patch index e6f05267ca..cd10212214 100644 --- a/patches/selection-updated.patch +++ b/patches/selection-updated.patch @@ -1,8 +1,8 @@ diff --git a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java -index a513f5725..d8845a0b0 100644 +index 61985cf8d..709308482 100644 --- a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java +++ b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java -@@ -348,6 +348,10 @@ public class DefaultSelectionTracker extends SelectionTracker { +@@ -379,6 +379,10 @@ public class DefaultSelectionTracker extends SelectionTracker implements R return mRange != null; } @@ -13,7 +13,7 @@ index a513f5725..d8845a0b0 100644 private boolean canSetState(@NonNull K key, boolean nextState) { return mSelectionPredicate.canSetStateForKey(key, nextState); } -@@ -578,17 +582,21 @@ public class DefaultSelectionTracker +@@ -601,17 +605,21 @@ public class DefaultSelectionTracker extends SelectionTracker implements R @Override public void onItemRangeInserted(int startPosition, int itemCount) { @@ -39,10 +39,10 @@ index a513f5725..d8845a0b0 100644 } } diff --git a/app/src/main/java/androidx/recyclerview/selection/Range.java b/app/src/main/java/androidx/recyclerview/selection/Range.java -index 35fb3a8ba..b11a14a9a 100644 +index 433e0d2cb..85ddeff94 100644 --- a/app/src/main/java/androidx/recyclerview/selection/Range.java +++ b/app/src/main/java/androidx/recyclerview/selection/Range.java -@@ -170,6 +170,11 @@ final class Range { +@@ -169,6 +169,11 @@ final class Range { mCallbacks.updateForRange(begin, end, selected, type); }