Fixed selection/update

Where did this patch go?
This commit is contained in:
M66B
2020-01-26 12:16:28 +01:00
parent 256bb77c90
commit 23aac74a04
3 changed files with 21 additions and 8 deletions

View File

@@ -379,6 +379,10 @@ public class DefaultSelectionTracker<K> extends SelectionTracker<K> 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<K> extends SelectionTracker<K> 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();
}
}
}

View File

@@ -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 + "}";