Fixing issue where overview->normal workspace mode cannot be done by tapping
b/31458165

Because workspaceInModalState makes the VerticalFlingDetector
to consume the touch input, click is not detected in Overview mode.

Placed pulldown to search behind a feature flag.

Change-Id: I31ab69f57944a18e6b264c4f2ed2d0c1175cd940
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 0bb8cbf..c499bee 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -594,18 +594,31 @@
         }
         // Add the first page
         CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, 0);
-        final VerticalFlingDetector detector = new VerticalFlingDetector(mLauncher){
-            @Override
-            public boolean onTouch(View v, MotionEvent ev) {
-                if (shouldConsumeTouch(v)) return true;
-                if (super.onTouch(v, ev)) {
-                    mLauncher.startSearch("", false, null, false);
+        if (FeatureFlags.PULLDOWN_SEARCH) {
+            firstPage.setOnTouchListener(new VerticalFlingDetector(mLauncher) {
+                // detect fling when touch started from empty space
+                @Override
+                public boolean onTouch(View v, MotionEvent ev) {
+                    if (workspaceInModalState()) return false;
+                    if (shouldConsumeTouch(v)) return true;
+                    if (super.onTouch(v, ev)) {
+                        mLauncher.startSearch("", false, null, false);
+                    }
+                    return false;
                 }
-                return false;
-            }
-        };
-        firstPage.setOnTouchListener(detector);
-        firstPage.setOnInterceptTouchListener(detector);
+            });
+            firstPage.setOnInterceptTouchListener(new VerticalFlingDetector(mLauncher) {
+                // detect fling when touch started from on top of the icons
+                @Override
+                public boolean onTouch(View v, MotionEvent ev) {
+                    if (shouldConsumeTouch(v)) return true;
+                    if (super.onTouch(v, ev)) {
+                        mLauncher.startSearch("", false, null, false);
+                    }
+                    return false;
+                }
+            });
+        }
         // Always add a QSB on the first screen.
         if (qsb == null) {
             // In transposed layout, we add the QSB in the Grid. As workspace does not touch the
diff --git a/src/com/android/launcher3/util/VerticalFlingDetector.java b/src/com/android/launcher3/util/VerticalFlingDetector.java
index 5f2b3f3..7236c2d 100644
--- a/src/com/android/launcher3/util/VerticalFlingDetector.java
+++ b/src/com/android/launcher3/util/VerticalFlingDetector.java
@@ -79,6 +79,9 @@
     }
 
     private void cleanUp() {
+        if (mVelocityTracker == null) {
+            return;
+        }
         mVelocityTracker.recycle();
         mVelocityTracker = null;
     }
diff --git a/src_config/com/android/launcher3/config/FeatureFlags.java b/src_config/com/android/launcher3/config/FeatureFlags.java
index 81fa337..13acc4a 100644
--- a/src_config/com/android/launcher3/config/FeatureFlags.java
+++ b/src_config/com/android/launcher3/config/FeatureFlags.java
@@ -31,8 +31,10 @@
     public static boolean LAUNCHER3_DISABLE_PINCH_TO_OVERVIEW = false;
     public static boolean LAUNCHER3_ALL_APPS_PULL_UP = true;
 
-    // Feature flag to enable moving the QSB on the 0th screen of the workspace
+    // Feature flag to enable moving the QSB on the 0th screen of the workspace.
     public static final boolean QSB_ON_FIRST_SCREEN = true;
     // When enabled the all-apps icon is not added to the hotseat.
     public static final boolean NO_ALL_APPS_ICON = true;
+    // When enabled fling down gesture on the first workspace triggers search.
+    public static final boolean PULLDOWN_SEARCH = true;
 }