Merge "Crash fixes for Gesture selection in Picker mode." into nyc-andromeda-dev
diff --git a/src/com/android/documentsui/base/EventHandler.java b/src/com/android/documentsui/base/EventHandler.java
index c0667b6..93e575d 100644
--- a/src/com/android/documentsui/base/EventHandler.java
+++ b/src/com/android/documentsui/base/EventHandler.java
@@ -23,4 +23,22 @@
@FunctionalInterface
public interface EventHandler<T> {
boolean accept(T event);
+
+ public static <T> EventHandler<T> createStub(boolean reply) {
+ return new Stub<T>(reply);
+ }
+
+ public static final class Stub<T> implements EventHandler<T> {
+
+ private boolean mReply;
+
+ private Stub(boolean reply) {
+ mReply = reply;}
+
+ @Override
+ public boolean accept(T event) {
+ return mReply;
+ }
+
+ }
}
\ No newline at end of file
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index 1d29ba8..74b41fc 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -77,6 +77,7 @@
import com.android.documentsui.Snackbars;
import com.android.documentsui.ThumbnailCache;
import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.EventListener;
import com.android.documentsui.base.Events.InputEvent;
import com.android.documentsui.base.Events.MotionInputEvent;
@@ -318,6 +319,9 @@
getContext().getDrawable(com.android.internal.R.drawable.ic_doc_generic))
: DragStartListener.DUMMY;
+ EventHandler<InputEvent> gestureHandler = state.allowMultiple
+ ? gestureSel::start
+ : EventHandler.createStub(false);
mInputHandler = new UserInputHandler<>(
mSelectionMgr,
mFocusManager,
@@ -331,7 +335,7 @@
(DocumentDetails details) -> mTuner.onDocumentPicked(details.getModelId()),
(DocumentDetails ignored) -> onDeleteSelectedDocuments(), // delete handler
mDragStartListener::onTouchDragEvent,
- gestureSel::start);
+ gestureHandler);
new ListeningGestureDetector(
this.getContext(),
diff --git a/src/com/android/documentsui/dirlist/UserInputHandler.java b/src/com/android/documentsui/dirlist/UserInputHandler.java
index 9db6599..b03247f 100644
--- a/src/com/android/documentsui/dirlist/UserInputHandler.java
+++ b/src/com/android/documentsui/dirlist/UserInputHandler.java
@@ -279,7 +279,11 @@
} else {
if (!mSelectionMgr.getSelection().contains(doc.getModelId())) {
selectDocument(doc);
- mGestureSelectHandler.accept(event);
+ // If we cannot select it, we didn't apply anchoring - therefore should not
+ // start gesture selection
+ if (mSelectable.test(doc)) {
+ mGestureSelectHandler.accept(event);
+ }
} else {
// We only initiate drag and drop on long press for touch to allow regular
// touch-based scrolling