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;
 
