diff --git a/quickstep/src/com/android/launcher3/uioverrides/DragPauseDetector.java b/quickstep/src/com/android/launcher3/uioverrides/DragPauseDetector.java
index 1977e93..6df1aba 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/DragPauseDetector.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/DragPauseDetector.java
@@ -29,8 +29,8 @@
     private final Alarm mAlarm;
     private final Runnable mOnPauseCallback;
 
-    private boolean mEnabled = true;
     private boolean mTriggered = false;
+    private int mDisabledFlags = 0;
 
     public DragPauseDetector(Runnable onPauseCallback) {
         mOnPauseCallback = onPauseCallback;
@@ -40,8 +40,8 @@
         mAlarm.setAlarm(PAUSE_DURATION);
     }
 
-    public void onDrag(float displacement, float velocity) {
-        if (mTriggered || !mEnabled) {
+    public void onDrag(float velocity) {
+        if (mTriggered || !isEnabled()) {
             return;
         }
 
@@ -53,7 +53,7 @@
 
     @Override
     public void onAlarm(Alarm alarm) {
-        if (!mTriggered && mEnabled) {
+        if (!mTriggered && isEnabled()) {
             mTriggered = true;
             mOnPauseCallback.run();
         }
@@ -64,17 +64,29 @@
     }
 
     public boolean isEnabled() {
-        return mEnabled;
+        return mDisabledFlags == 0;
     }
 
-    public void setEnabled(boolean isEnabled) {
-        if (mEnabled != isEnabled) {
-            mEnabled = isEnabled;
-            if (isEnabled && !mTriggered) {
-                mAlarm.setAlarm(PAUSE_DURATION);
-            } else if (!isEnabled) {
-                mAlarm.cancelAlarm();
-            }
+    public void addDisabledFlags(int flags) {
+        boolean wasEnabled = isEnabled();
+        mDisabledFlags |= flags;
+        resetAlarm(wasEnabled);
+    }
+
+    public void clearDisabledFlags(int flags) {
+        boolean wasEnabled = isEnabled();
+        mDisabledFlags  &= ~flags;
+        resetAlarm(wasEnabled);
+    }
+
+    private void resetAlarm(boolean wasEnabled) {
+        boolean isEnabled = isEnabled();
+        if (wasEnabled == isEnabled) {
+          // Nothing has changed
+        } if (isEnabled && !mTriggered) {
+            mAlarm.setAlarm(PAUSE_DURATION);
+        } else if (!isEnabled) {
+            mAlarm.cancelAlarm();
         }
     }
 }
diff --git a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java
index 3458a3f..267c4d0 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java
@@ -57,6 +57,11 @@
     }
 
     @Override
+    public float getHoseatAlpha(Launcher launcher) {
+        return launcher.getDeviceProfile().isVerticalBarLayout() ? 0 : 1;
+    }
+
+    @Override
     public void onStateEnabled(Launcher launcher) {
         RecentsView rv = launcher.getOverviewPanel();
         rv.setOverviewStateEnabled(true);
diff --git a/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java b/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
index 299db47..20cda1c 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/TwoStepSwipeController.java
@@ -48,6 +48,7 @@
 import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
 import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
 import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
+import com.android.launcher3.util.FloatRange;
 import com.android.launcher3.util.TouchController;
 
 import java.util.ArrayList;
@@ -78,6 +79,14 @@
      */
     private static final int OTHER_HANDLERS_START_INDEX = SWIPE_HANDLER_INDEX + 1;
 
+    // Swipe progress range (when starting from NORMAL state) where OVERVIEW state is allowed
+    private static final float MIN_PROGRESS_TO_OVERVIEW = 0.1f;
+    private static final float MAX_PROGRESS_TO_OVERVIEW = 0.4f;
+
+    private static final int FLAG_OVERVIEW_DISABLED_OUT_OF_RANGE = 1 << 0;
+    private static final int FLAG_OVERVIEW_DISABLED_FLING = 1 << 1;
+    private static final int FLAG_OVERVIEW_DISABLED_CANCEL_STATE = 1 << 2;
+
     private final Launcher mLauncher;
     private final SwipeDetector mDetector;
 
@@ -85,6 +94,7 @@
     private int mStartContainerType;
 
     private DragPauseDetector mDragPauseDetector;
+    private FloatRange mOverviewProgressRange;
     private TaggedAnimatorSetBuilder mTaggedAnimatorSetBuilder;
     private AnimatorSet mQuickOverviewAnimation;
     private boolean mAnimatingToOverview;
@@ -221,10 +231,17 @@
             long maxAccuracy = (long) (2 * range);
 
             mDragPauseDetector = new DragPauseDetector(this::onDragPauseDetected);
-            mTaggedAnimatorSetBuilder = new TaggedAnimatorSetBuilder();
+            mDragPauseDetector.addDisabledFlags(FLAG_OVERVIEW_DISABLED_OUT_OF_RANGE);
+            mOverviewProgressRange = new FloatRange();
+            mOverviewProgressRange.start = mLauncher.isInState(NORMAL)
+                    ? MIN_PROGRESS_TO_OVERVIEW
+                    : 1 - MAX_PROGRESS_TO_OVERVIEW;
+            mOverviewProgressRange.end = mOverviewProgressRange.start
+                    + MAX_PROGRESS_TO_OVERVIEW - MIN_PROGRESS_TO_OVERVIEW;
 
             // Build current animation
             mToState = mLauncher.isInState(ALL_APPS) ? NORMAL : ALL_APPS;
+            mTaggedAnimatorSetBuilder = new TaggedAnimatorSetBuilder();
             mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(
                     mToState, mTaggedAnimatorSetBuilder, maxAccuracy);
 
@@ -235,6 +252,9 @@
         } else {
             mCurrentAnimation.pause();
             mStartProgress = mCurrentAnimation.getProgressFraction();
+
+            mDragPauseDetector.clearDisabledFlags(FLAG_OVERVIEW_DISABLED_FLING);
+            updatePauseDetectorRangeFlag();
         }
 
         for (SpringAnimationHandler h : mSpringHandlers) {
@@ -248,13 +268,23 @@
 
     @Override
     public boolean onDrag(float displacement, float velocity) {
-        mDragPauseDetector.onDrag(displacement, velocity);
-
         float deltaProgress = mProgressMultiplier * displacement;
         mCurrentAnimation.setPlayFraction(deltaProgress + mStartProgress);
+
+        updatePauseDetectorRangeFlag();
+        mDragPauseDetector.onDrag(velocity);
+
         return true;
     }
 
+    private void updatePauseDetectorRangeFlag() {
+        if (mOverviewProgressRange.contains(mCurrentAnimation.getProgressFraction())) {
+            mDragPauseDetector.clearDisabledFlags(FLAG_OVERVIEW_DISABLED_OUT_OF_RANGE);
+        } else {
+            mDragPauseDetector.addDisabledFlags(FLAG_OVERVIEW_DISABLED_OUT_OF_RANGE);
+        }
+    }
+
     @Override
     public void onDragEnd(float velocity, boolean fling) {
         if (!fling && mDragPauseDetector.isEnabled() && mDragPauseDetector.isTriggered()) {
@@ -262,6 +292,8 @@
             return;
         }
 
+        mDragPauseDetector.addDisabledFlags(FLAG_OVERVIEW_DISABLED_FLING);
+
         final long animationDuration;
         final int logAction;
         final LauncherState targetState;
@@ -306,9 +338,6 @@
         anim.setDuration(animationDuration);
         anim.setInterpolator(scrollInterpolatorForVelocity(velocity));
         anim.start();
-
-        // TODO: Re-enable later
-        mDragPauseDetector.setEnabled(false);
     }
 
     private void onSwipeInteractionCompleted(LauncherState targetState, int logAction) {
@@ -413,7 +442,7 @@
         mCurrentAnimation = null;
         mTaggedAnimatorSetBuilder = null;
         if (mDragPauseDetector != null) {
-            mDragPauseDetector.setEnabled(false);
+            mDragPauseDetector.addDisabledFlags(FLAG_OVERVIEW_DISABLED_CANCEL_STATE);
         }
         mDragPauseDetector = null;
 
diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java
index 0a0bb85..2beaca1 100644
--- a/src/com/android/launcher3/LauncherState.java
+++ b/src/com/android/launcher3/LauncherState.java
@@ -140,6 +140,10 @@
         return new float[] {1, 0};
     }
 
+    public float getHoseatAlpha(Launcher launcher) {
+        return 1f;
+    }
+
     public void onStateEnabled(Launcher launcher) {
         dispatchWindowStateChanged(launcher);
     }
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
index a8a2b38..8a20bb9 100644
--- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
+++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
@@ -18,6 +18,7 @@
 
 import static com.android.launcher3.LauncherAnimUtils.DRAWABLE_ALPHA;
 import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
+import static com.android.launcher3.Partner.TAG;
 import static com.android.launcher3.compat.AccessibilityManagerCompat.isAccessibilityEnabled;
 
 import android.animation.Animator;
@@ -25,6 +26,7 @@
 import android.animation.ObjectAnimator;
 import android.animation.TimeInterpolator;
 import android.animation.ValueAnimator;
+import android.util.Log;
 import android.util.Property;
 import android.view.View;
 
@@ -138,6 +140,10 @@
         propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y,
                 finalWorkspaceTranslationY, Interpolators.ZOOM_IN);
 
+        float hotseatAlpha = state.getHoseatAlpha(mLauncher);
+        propertySetter.setViewAlpha(mWorkspace.createHotseatAlphaAnimator(hotseatAlpha),
+                mLauncher.getHotseat(), hotseatAlpha);
+
         // Set scrim
         propertySetter.setInt(mLauncher.getDragLayer().getScrim(), DRAWABLE_ALPHA,
                 state.hasScrim ? mWorkspaceScrimAlpha : 0, Interpolators.DEACCEL_1_5);
@@ -159,6 +165,7 @@
     public static class PropertySetter {
 
         public void setViewAlpha(Animator anim, View view, float alpha) {
+            Log.d(TAG, "setViewAlpha: " + anim + " " + alpha);
             if (anim != null) {
                 anim.end();
                 return;
diff --git a/src/com/android/launcher3/util/FloatRange.java b/src/com/android/launcher3/util/FloatRange.java
new file mode 100644
index 0000000..12772f3
--- /dev/null
+++ b/src/com/android/launcher3/util/FloatRange.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.launcher3.util;
+
+/**
+ * A mutable class for describing the range of two int values.
+ */
+public class FloatRange {
+
+    public float start, end;
+
+    public FloatRange() { }
+
+    public FloatRange(float s, float e) {
+        set(s, e);
+    }
+
+    public void set(float s, float e) {
+        start = s;
+        end = e;
+    }
+
+    public boolean contains(float value) {
+        return value >= start && value <= end;
+    }
+}
diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/OverviewPanel.java b/src_ui_overrides/com/android/launcher3/uioverrides/OverviewPanel.java
index b23927b..26dd68f 100644
--- a/src_ui_overrides/com/android/launcher3/uioverrides/OverviewPanel.java
+++ b/src_ui_overrides/com/android/launcher3/uioverrides/OverviewPanel.java
@@ -173,13 +173,8 @@
     }
 
     private void setState(LauncherState state, PropertySetter setter) {
-        boolean isOverview = state == LauncherState.OVERVIEW;
-        float finalHotseatAlpha = isOverview ? 0 : 1;
-
-        setter.setViewAlpha(null, this, isOverview ? 1 : 0);
-        setter.setViewAlpha(
-                mLauncher.getWorkspace().createHotseatAlphaAnimator(finalHotseatAlpha),
-                mLauncher.getHotseat(), finalHotseatAlpha);
+        float hotseatAlpha = state.getHoseatAlpha(mLauncher);
+        setter.setViewAlpha(null, this, 1f - hotseatAlpha);
     }
 
     public static int getButtonBarHeight(Launcher launcher) {
diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java b/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java
index bcbe61c..73f208e 100644
--- a/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java
+++ b/src_ui_overrides/com/android/launcher3/uioverrides/OverviewState.java
@@ -63,6 +63,11 @@
     }
 
     @Override
+    public float getHoseatAlpha(Launcher launcher) {
+        return 0;
+    }
+
+    @Override
     public void onStateEnabled(Launcher launcher) {
         launcher.getWorkspace().setPageRearrangeEnabled(true);
 
