Merge "Fixing build." into ub-launcher3-burnaby
diff --git a/src/com/android/launcher3/AppsContainerRecyclerView.java b/src/com/android/launcher3/AppsContainerRecyclerView.java
index bb2aeb0..16244ee 100644
--- a/src/com/android/launcher3/AppsContainerRecyclerView.java
+++ b/src/com/android/launcher3/AppsContainerRecyclerView.java
@@ -196,21 +196,6 @@
                 }
                 break;
             case MotionEvent.ACTION_UP:
-                ViewConfiguration viewConfig = ViewConfiguration.get(getContext());
-                float dx = ev.getX() - mDownX;
-                float dy = ev.getY() - mDownY;
-                float distance = (float) Math.sqrt(dx * dx + dy * dy);
-                if (distance < viewConfig.getScaledTouchSlop()) {
-                    Rect backgroundPadding = new Rect();
-                    getBackground().getPadding(backgroundPadding);
-                    boolean isOutsideBounds = ev.getX() < backgroundPadding.left ||
-                            ev.getX() > (getWidth() - backgroundPadding.right);
-                    if (isOutsideBounds) {
-                        Launcher launcher = (Launcher) getContext();
-                        launcher.showWorkspace(true);
-                    }
-                }
-                // Fall through
             case MotionEvent.ACTION_CANCEL:
                 mDraggingFastScroller = false;
                 animateFastScrollerVisibility(false);
diff --git a/src/com/android/launcher3/AppsContainerView.java b/src/com/android/launcher3/AppsContainerView.java
index 5f1594f..b247145 100644
--- a/src/com/android/launcher3/AppsContainerView.java
+++ b/src/com/android/launcher3/AppsContainerView.java
@@ -64,7 +64,8 @@
     private EditText mSearchBarView;
     
     private int mNumAppsPerRow;
-    private Point mLastTouchDownPos = new Point();
+    private Point mLastTouchDownPos = new Point(-1, -1);
+    private Point mLastTouchPos = new Point();
     private Rect mInsets = new Rect();
     private Rect mFixedBounds = new Rect();
     private int mContentMarginStart;
@@ -236,11 +237,21 @@
     }
 
     @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        return handleTouchEvent(ev);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        return handleTouchEvent(ev);
+    }
+
+    @Override
     public boolean onTouch(View v, MotionEvent ev) {
         switch (ev.getAction()) {
             case MotionEvent.ACTION_DOWN:
             case MotionEvent.ACTION_MOVE:
-                mLastTouchDownPos.set((int) ev.getX(), (int) ev.getY());
+                mLastTouchPos.set((int) ev.getX(), (int) ev.getY());
                 break;
         }
         return false;
@@ -257,7 +268,7 @@
         if (!mLauncher.isDraggingEnabled()) return false;
 
         // Start the drag
-        mLauncher.getWorkspace().beginDragShared(v, mLastTouchDownPos, this, false);
+        mLauncher.getWorkspace().beginDragShared(v, mLastTouchPos, this, false);
 
         // We delay entering spring-loaded mode slightly to make sure the UI
         // thready is free of any work.
@@ -430,6 +441,54 @@
     }
 
     /**
+     * Handles the touch events to dismiss all apps when clicking outside the bounds of the
+     * recycler view.
+     */
+    private boolean handleTouchEvent(MotionEvent ev) {
+        LauncherAppState app = LauncherAppState.getInstance();
+        DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
+
+        switch (ev.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                if (!mFixedBounds.isEmpty()) {
+                    // Outset the fixed bounds and check if the touch is outside all apps
+                    Rect tmpRect = new Rect(mFixedBounds);
+                    tmpRect.inset(-grid.allAppsIconSizePx / 2, 0);
+                    if (ev.getX() < tmpRect.left || ev.getX() > tmpRect.right) {
+                        mLastTouchDownPos.set((int) ev.getX(), (int) ev.getY());
+                        return true;
+                    }
+                } else {
+                    // Check if the touch is outside all apps
+                    if (ev.getX() < getPaddingLeft() ||
+                            ev.getX() > (getWidth() - getPaddingRight())) {
+                        mLastTouchDownPos.set((int) ev.getX(), (int) ev.getY());
+                        return true;
+                    }
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                if (mLastTouchDownPos.x > -1) {
+                    ViewConfiguration viewConfig = ViewConfiguration.get(getContext());
+                    float dx = ev.getX() - mLastTouchDownPos.x;
+                    float dy = ev.getY() - mLastTouchDownPos.y;
+                    float distance = (float) Math.hypot(dx, dy);
+                    if (distance < viewConfig.getScaledTouchSlop()) {
+                        // The background was clicked, so just go home
+                        Launcher launcher = (Launcher) getContext();
+                        launcher.showWorkspace(true);
+                        return true;
+                    }
+                }
+                // Fall through
+            case MotionEvent.ACTION_CANCEL:
+                mLastTouchDownPos.set(-1, -1);
+                break;
+        }
+        return false;
+    }
+
+    /**
      * Update the padding of the Apps view and children.  To ensure that the RecyclerView has the
      * full width to handle touches right to the edge of the screen, we only apply the top and
      * bottom padding to the AppsContainerView and then the left/right padding on the RecyclerView
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 568fbb3..6b03e31 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -2265,7 +2265,9 @@
         float finalHotseatAndPageIndicatorAlpha = (stateIsNormal || stateIsSpringLoaded) ? 1f : 0f;
         float finalOverviewPanelAlpha = stateIsOverview ? 1f : 0f;
         // We keep the search bar visible on the workspace and in AllApps now
-        float finalSearchBarAlpha = (stateIsNormal || stateIsNormalHidden) ? 1f : 0f;
+        boolean showSearchBar = stateIsNormal ||
+                (mLauncher.isAllAppsSearchOverridden() && stateIsNormalHidden);
+        float finalSearchBarAlpha = showSearchBar ? 1f : 0f;
         float finalWorkspaceTranslationY = stateIsOverview || stateIsOverviewHidden ?
                 getOverviewModeTranslationY() : 0;