From dd9a9dbdb20f0d295a4e4d93934c5dc7dcae3796 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 11 Mar 2019 10:20:34 +0000 Subject: [PATCH] Updated recyclerview selection to versio 1.1.0-alpha02 --- .../selection/DefaultSelectionTracker.java | 2 +- .../recyclerview/selection/GridModel.java | 2 +- .../selection/ItemDetailsLookup.java | 7 +--- .../recyclerview/selection/MotionEvents.java | 8 ++++ .../selection/SelectionTracker.java | 42 +++++-------------- .../selection/StableIdKeyProvider.java | 11 +++-- .../recyclerview/selection/package-info.java | 6 +-- 7 files changed, 32 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java index 0635f91ad8..014d2c64fa 100644 --- a/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java +++ b/app/src/main/java/androidx/recyclerview/selection/DefaultSelectionTracker.java @@ -348,7 +348,7 @@ public class DefaultSelectionTracker extends SelectionTracker { } @Override - protected AdapterDataObserver getAdapterDataObserver() { + AdapterDataObserver getAdapterDataObserver() { return mAdapterObserver; } diff --git a/app/src/main/java/androidx/recyclerview/selection/GridModel.java b/app/src/main/java/androidx/recyclerview/selection/GridModel.java index 8704d451b7..406ae618ff 100644 --- a/app/src/main/java/androidx/recyclerview/selection/GridModel.java +++ b/app/src/main/java/androidx/recyclerview/selection/GridModel.java @@ -259,7 +259,7 @@ final class GridModel { private void updateModel() { RelativePoint old = mRelPointer; mRelPointer = createRelativePoint(mPointer); - if (mRelPointer.equals(old)) { + if (old != null && mRelPointer.equals(old)) { return; } diff --git a/app/src/main/java/androidx/recyclerview/selection/ItemDetailsLookup.java b/app/src/main/java/androidx/recyclerview/selection/ItemDetailsLookup.java index d032e2b2a9..9cb6d34551 100644 --- a/app/src/main/java/androidx/recyclerview/selection/ItemDetailsLookup.java +++ b/app/src/main/java/androidx/recyclerview/selection/ItemDetailsLookup.java @@ -16,13 +16,10 @@ package androidx.recyclerview.selection; -import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; - import android.view.MotionEvent; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RestrictTo; import androidx.recyclerview.widget.RecyclerView; /** @@ -70,10 +67,8 @@ public abstract class ItemDetailsLookup { /** * @return true if there is an item w/ a stable ID at the event coordinates. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - protected boolean overItemWithSelectionKey(@NonNull MotionEvent e) { + final boolean overItemWithSelectionKey(@NonNull MotionEvent e) { return overItem(e) && hasSelectionKey(getItemDetails(e)); } diff --git a/app/src/main/java/androidx/recyclerview/selection/MotionEvents.java b/app/src/main/java/androidx/recyclerview/selection/MotionEvents.java index fbc4014b37..bc47a76ccf 100644 --- a/app/src/main/java/androidx/recyclerview/selection/MotionEvents.java +++ b/app/src/main/java/androidx/recyclerview/selection/MotionEvents.java @@ -33,10 +33,18 @@ final class MotionEvents { return e.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE; } + static boolean isTouchEvent(@NonNull MotionEvent e) { + return e.getToolType(0) == MotionEvent.TOOL_TYPE_FINGER; + } + static boolean isActionMove(@NonNull MotionEvent e) { return e.getActionMasked() == MotionEvent.ACTION_MOVE; } + static boolean isActionDown(@NonNull MotionEvent e) { + return e.getActionMasked() == MotionEvent.ACTION_DOWN; + } + static boolean isActionUp(@NonNull MotionEvent e) { return e.getActionMasked() == MotionEvent.ACTION_UP; } diff --git a/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java b/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java index 294fceff89..f59bd9b692 100644 --- a/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java +++ b/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java @@ -16,7 +16,6 @@ package androidx.recyclerview.selection; -import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; import static androidx.core.util.Preconditions.checkArgument; import android.content.Context; @@ -29,7 +28,6 @@ import android.view.MotionEvent; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RestrictTo; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver; import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener; @@ -179,9 +177,7 @@ public abstract class SelectionTracker { */ public abstract boolean deselect(@NonNull K key); - /** @hide */ - @RestrictTo(LIBRARY_GROUP) - protected abstract AdapterDataObserver getAdapterDataObserver(); + abstract AdapterDataObserver getAdapterDataObserver(); /** * Attempts to establish a range selection at {@code position}, selecting the item @@ -190,10 +186,8 @@ public abstract class SelectionTracker { * @param position The "anchor" position for the range. Subsequent range operations * (primarily keyboard and mouse based operations like SHIFT + click) * work with the established anchor point to define selection ranges. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - public abstract void startRange(int position); + abstract void startRange(int position); /** * Sets the end point for the active range selection. @@ -206,26 +200,20 @@ public abstract class SelectionTracker { * @param position The new end position for the selection range. * @throws IllegalStateException if a range selection is not active. Range selection * must have been started by a call to {@link #startRange(int)}. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - public abstract void extendRange(int position); + abstract void extendRange(int position); /** * Clears an in-progress range selection. Provisional range selection established * using {@link #extendProvisionalRange(int)} will be cleared (unless * {@link #mergeProvisionalSelection()} is called first.) - * @hide */ - @RestrictTo(LIBRARY_GROUP) - public abstract void endRange(); + abstract void endRange(); /** * @return Whether or not there is a current range selection active. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - public abstract boolean isRangeActive(); + abstract boolean isRangeActive(); /** * Establishes the "anchor" at which a selection range begins. This "anchor" is consulted @@ -235,42 +223,32 @@ public abstract class SelectionTracker { * TODO: Reconcile this with startRange. Maybe just docs need to be updated. * * @param position the anchor position. Must already be selected. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - public abstract void anchorRange(int position); + abstract void anchorRange(int position); /** * Creates a provisional selection from anchor to {@code position}. * * @param position the end point. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - protected abstract void extendProvisionalRange(int position); + abstract void extendProvisionalRange(int position); /** * Sets the provisional selection, replacing any existing selection. * @param newSelection - * @hide */ - @RestrictTo(LIBRARY_GROUP) - protected abstract void setProvisionalSelection(@NonNull Set newSelection); + abstract void setProvisionalSelection(@NonNull Set newSelection); /** * Clears any existing provisional selection - * @hide */ - @RestrictTo(LIBRARY_GROUP) - protected abstract void clearProvisionalSelection(); + abstract void clearProvisionalSelection(); /** * Converts the provisional selection into primary selection, then clears * provisional selection. - * @hide */ - @RestrictTo(LIBRARY_GROUP) - protected abstract void mergeProvisionalSelection(); + abstract void mergeProvisionalSelection(); /** * Preserves selection, if any. Call this method from Activity#onSaveInstanceState diff --git a/app/src/main/java/androidx/recyclerview/selection/StableIdKeyProvider.java b/app/src/main/java/androidx/recyclerview/selection/StableIdKeyProvider.java index bd529594e1..b6c9a36a88 100644 --- a/app/src/main/java/androidx/recyclerview/selection/StableIdKeyProvider.java +++ b/app/src/main/java/androidx/recyclerview/selection/StableIdKeyProvider.java @@ -21,10 +21,12 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.collection.LongSparseArray; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener; +import java.util.HashMap; +import java.util.Map; + /** * An {@link ItemKeyProvider} that provides stable ids by way of cached * {@link RecyclerView.Adapter} stable ids. Items enter the cache as they are laid out by @@ -38,7 +40,7 @@ import androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListene public final class StableIdKeyProvider extends ItemKeyProvider { private final SparseArray mPositionToKey = new SparseArray<>(); - private final LongSparseArray mKeyToPosition = new LongSparseArray<>(); + private final Map mKeyToPosition = new HashMap(); private final RecyclerView mRecyclerView; /** @@ -100,6 +102,9 @@ public final class StableIdKeyProvider extends ItemKeyProvider { @Override public int getPosition(@NonNull Long key) { - return mKeyToPosition.get(key, RecyclerView.NO_POSITION); + if (mKeyToPosition.containsKey(key)) { + return mKeyToPosition.get(key); + } + return RecyclerView.NO_POSITION; } } diff --git a/app/src/main/java/androidx/recyclerview/selection/package-info.java b/app/src/main/java/androidx/recyclerview/selection/package-info.java index f344ba227c..a3386ab9e2 100644 --- a/app/src/main/java/androidx/recyclerview/selection/package-info.java +++ b/app/src/main/java/androidx/recyclerview/selection/package-info.java @@ -116,9 +116,9 @@ * Include Selection in Activity lifecycle events * *

- * In order to preserve state, the author must include the selection library in the handling - * of Activity lifecycle events. See SelectionTracker#onSaveInstanceState and - * SelectionTracker#onRestoreInstanceState. + * In order to preserve state the author must the selection library in handling + * of Activity lifecycle events. See SelectionTracker#onSaveInstanceState + * and SelectionTracker#onRestoreInstanceState. * *

A unique selection id must be supplied to * {@link androidx.recyclerview.selection.SelectionTracker.Builder SelectionTracker.Builder}