Moving Workspace states into a separate file

Bug: 67678570
Change-Id: I5c63b4df29ca0f58a0223fb1919abc132576a1b6
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index a80e62b..24e7083 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -17,7 +17,7 @@
 package com.android.launcher3;
 
 import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_NEXT_FRAME;
-import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_SHORT_TIMEOUT;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
 import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
 import static com.android.launcher3.util.RunnableWithId.RUNNABLE_ID_BIND_APPS;
 import static com.android.launcher3.util.RunnableWithId.RUNNABLE_ID_BIND_WIDGETS;
@@ -581,7 +581,7 @@
         Runnable exitSpringLoaded = new Runnable() {
             @Override
             public void run() {
-                exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+                exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
             }
         };
 
@@ -761,7 +761,7 @@
                 @Override
                 public void run() {
                     completeAddAppWidget(appWidgetId, requestArgs, layout, null);
-                    exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+                    exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
                 }
             };
         } else if (resultCode == RESULT_CANCELED) {
@@ -1712,7 +1712,7 @@
                 @Override
                 public void run() {
                     // Exit spring loaded mode if necessary after adding the widget
-                    exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+                    exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
                 }
             };
             completeAddAppWidget(appWidgetId, info, boundWidget, addFlowHandler.getProviderInfo(this));
@@ -2460,11 +2460,11 @@
 
     public boolean showWorkspace(boolean animated, Runnable onCompleteRunnable) {
         boolean changed = mState != State.WORKSPACE ||
-                mWorkspace.getState() != Workspace.State.NORMAL;
+                mWorkspace.getState() != LauncherState.NORMAL;
         if (changed || mAllAppsController.isTransitioning()) {
             mWorkspace.setVisibility(View.VISIBLE);
             mStateTransitionAnimation.startAnimationToWorkspace(mState, mWorkspace.getState(),
-                    Workspace.State.NORMAL, animated, onCompleteRunnable);
+                    LauncherState.NORMAL, animated, onCompleteRunnable);
 
             // Set focus to the AppsCustomize button
             if (mAllAppsButton != null) {
@@ -2509,7 +2509,7 @@
         }
         mWorkspace.setVisibility(View.VISIBLE);
         mStateTransitionAnimation.startAnimationToWorkspace(mState, mWorkspace.getState(),
-                Workspace.State.OVERVIEW, animated, postAnimRunnable);
+                LauncherState.OVERVIEW, animated, postAnimRunnable);
         setState(State.WORKSPACE);
 
         // If animated from long press, then don't allow any of the controller in the drag
@@ -2583,7 +2583,7 @@
         InstallShortcutReceiver.enableInstallQueue(InstallShortcutReceiver.FLAG_DRAG_AND_DROP);
 
         mStateTransitionAnimation.startAnimationToWorkspace(mState, mWorkspace.getState(),
-                Workspace.State.SPRING_LOADED, true /* animated */,
+                LauncherState.SPRING_LOADED, true /* animated */,
                 null /* onCompleteRunnable */);
         setState(State.WORKSPACE_SPRING_LOADED);
     }
@@ -2608,11 +2608,6 @@
         mExitSpringLoadedModeRunnable = new Runnable() {
             @Override
             public void run() {
-                // TODO(hyunyoungs): verify if this hack is still needed, if not, delete.
-                //
-                // Before we show workspace, hide all apps again because
-                // exitSpringLoadedDragMode made it visible. This is a bit hacky; we should
-                // clean up our state transition functions
                 showWorkspace(true, onCompleteRunnable);
                 mExitSpringLoadedModeRunnable = null;
             }
diff --git a/src/com/android/launcher3/LauncherAnimUtils.java b/src/com/android/launcher3/LauncherAnimUtils.java
index 02f05c3..3585110 100644
--- a/src/com/android/launcher3/LauncherAnimUtils.java
+++ b/src/com/android/launcher3/LauncherAnimUtils.java
@@ -37,7 +37,7 @@
     public static final int ALL_APPS_TRANSITION_MS = 320;
     public static final int OVERVIEW_TRANSITION_MS = 250;
     public static final int SPRING_LOADED_TRANSITION_MS = 150;
-    public static final int SPRING_LOADED_EXIT_SHORT_TIMEOUT = 500;
+    public static final int SPRING_LOADED_EXIT_DELAY = 500;
     public static final int SPRING_LOADED_EXIT_NEXT_FRAME = 0;
 
     static WeakHashMap<Animator, Object> sAnimators = new WeakHashMap<Animator, Object>();
diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java
new file mode 100644
index 0000000..8ddc491
--- /dev/null
+++ b/src/com/android/launcher3/LauncherState.java
@@ -0,0 +1,71 @@
+/*
+ * 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;
+
+import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS;
+
+import static com.android.launcher3.LauncherAnimUtils.ALL_APPS_TRANSITION_MS;
+import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS;
+import static com.android.launcher3.StateFlags.FLAG_DISABLE_ACCESSIBILITY;
+import static com.android.launcher3.StateFlags.FLAG_HIDE_HOTSEAT;
+import static com.android.launcher3.StateFlags.FLAG_MULTI_PAGE;
+import static com.android.launcher3.StateFlags.FLAG_SHOW_SCRIM;
+
+import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
+
+interface StateFlags {
+    int FLAG_SHOW_SCRIM = 1 << 0;
+    int FLAG_MULTI_PAGE = 1 << 1;
+    int FLAG_HIDE_HOTSEAT = 1 << 2;
+    int FLAG_DISABLE_ACCESSIBILITY = 1 << 3;
+}
+
+/**
+ * Various states for launcher
+ */
+public enum LauncherState {
+
+    NORMAL          (ContainerType.WORKSPACE, 0, 0),
+    ALL_APPS        (ContainerType.ALLAPPS, ALL_APPS_TRANSITION_MS, FLAG_DISABLE_ACCESSIBILITY),
+    SPRING_LOADED   (ContainerType.WORKSPACE, SPRING_LOADED_TRANSITION_MS,
+            FLAG_SHOW_SCRIM | FLAG_MULTI_PAGE | FLAG_DISABLE_ACCESSIBILITY),
+    OVERVIEW        (ContainerType.OVERVIEW, OVERVIEW_TRANSITION_MS,
+            FLAG_SHOW_SCRIM | FLAG_MULTI_PAGE | FLAG_HIDE_HOTSEAT);
+
+    public final int containerType;
+
+    public final boolean hasMultipleVisiblePages;
+    public final int workspaceAccessibilityFlag;
+
+    // Properties related to state transition animation.
+    public final boolean hasScrim;
+    public final boolean hideHotseat;
+    public final int transitionDuration;
+
+    LauncherState(int containerType, int transitionDuration, int flags) {
+        this.containerType = containerType;
+        this.transitionDuration = transitionDuration;
+
+        this.hasScrim = (flags & FLAG_SHOW_SCRIM) != 0;
+        this.hasMultipleVisiblePages = (flags & FLAG_MULTI_PAGE) != 0;
+        this.hideHotseat = (flags & FLAG_HIDE_HOTSEAT) != 0;
+        this.workspaceAccessibilityFlag = (flags & FLAG_DISABLE_ACCESSIBILITY) != 0
+                ? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                : IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+    }
+}
diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java
index 9c83e3c..f07f1bf 100644
--- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java
+++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java
@@ -100,7 +100,7 @@
         cancelAnimation();
 
         if (!animated) {
-            mLauncher.getWorkspace().setState(Workspace.State.NORMAL_HIDDEN);
+            mLauncher.getWorkspace().setState(LauncherState.ALL_APPS);
 
             mAllAppsController.finishPullUp();
             toView.setTranslationX(0.0f);
@@ -129,7 +129,7 @@
 
         mConfig.reset();
         mAllAppsController.animateToAllApps(animation, mConfig);
-        mLauncher.getWorkspace().setStateWithAnimation(Workspace.State.NORMAL_HIDDEN,
+        mLauncher.getWorkspace().setStateWithAnimation(LauncherState.ALL_APPS,
                 layerViews, animation, mConfig);
 
         Runnable startAnimRunnable = new StartAnimRunnable(animation, toView);
@@ -146,11 +146,11 @@
      * Starts an animation to the workspace from the current overlay view.
      */
     public void startAnimationToWorkspace(final Launcher.State fromState,
-            final Workspace.State fromWorkspaceState, final Workspace.State toWorkspaceState,
+            final LauncherState fromWorkspaceState, final LauncherState toWorkspaceState,
             final boolean animated, final Runnable onCompleteRunnable) {
-        if (toWorkspaceState != Workspace.State.NORMAL &&
-                toWorkspaceState != Workspace.State.SPRING_LOADED &&
-                toWorkspaceState != Workspace.State.OVERVIEW) {
+        if (toWorkspaceState != LauncherState.NORMAL &&
+                toWorkspaceState != LauncherState.SPRING_LOADED &&
+                toWorkspaceState != LauncherState.OVERVIEW) {
             Log.e(TAG, "Unexpected call to startAnimationToWorkspace");
         }
 
@@ -166,8 +166,8 @@
     /**
      * Starts an animation to the workspace from the apps view.
      */
-    private void startAnimationToWorkspaceFromAllApps(final Workspace.State fromWorkspaceState,
-            final Workspace.State toWorkspaceState, boolean animated,
+    private void startAnimationToWorkspaceFromAllApps(final LauncherState fromWorkspaceState,
+            final LauncherState toWorkspaceState, boolean animated,
             final Runnable onCompleteRunnable) {
         final AllAppsContainerView fromView = mLauncher.getAppsView();
         // If for some reason our views aren't initialized, don't animate
@@ -180,7 +180,7 @@
         cancelAnimation();
 
         if (!animated) {
-            if (fromWorkspaceState == Workspace.State.NORMAL_HIDDEN) {
+            if (fromWorkspaceState == LauncherState.ALL_APPS) {
                 mAllAppsController.finishPullDown();
             }
             fromView.setVisibility(View.GONE);
@@ -233,8 +233,8 @@
     /**
      * Starts an animation to the workspace from another workspace state, e.g. normal to overview.
      */
-    private void startAnimationToNewWorkspaceState(final Workspace.State fromWorkspaceState,
-            final Workspace.State toWorkspaceState, final boolean animated,
+    private void startAnimationToNewWorkspaceState(final LauncherState fromWorkspaceState,
+            final LauncherState toWorkspaceState, final boolean animated,
             final Runnable onCompleteRunnable) {
         final View fromWorkspace = mLauncher.getWorkspace();
         // Cancel the current animation
diff --git a/src/com/android/launcher3/PinchAnimationManager.java b/src/com/android/launcher3/PinchAnimationManager.java
index 10f35bd..bbe8e89 100644
--- a/src/com/android/launcher3/PinchAnimationManager.java
+++ b/src/com/android/launcher3/PinchAnimationManager.java
@@ -28,8 +28,8 @@
 import com.android.launcher3.userevent.nano.LauncherLogProto.Action;
 import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
 
-import static com.android.launcher3.Workspace.State.NORMAL;
-import static com.android.launcher3.Workspace.State.OVERVIEW;
+import static com.android.launcher3.LauncherState.NORMAL;
+import static com.android.launcher3.LauncherState.OVERVIEW;
 
 /**
  * Manages the animations that play as the user pinches to/from overview mode.
@@ -141,12 +141,12 @@
      * @param threshold One of {@link PinchThresholdManager#THRESHOLD_ONE},
      *                  {@link PinchThresholdManager#THRESHOLD_TWO}, or
      *                  {@link PinchThresholdManager#THRESHOLD_THREE}
-     * @param startState {@link Workspace.State#NORMAL} or {@link Workspace.State#OVERVIEW}.
-     * @param goingTowards {@link Workspace.State#NORMAL} or {@link Workspace.State#OVERVIEW}.
+     * @param startState {@link LauncherState#NORMAL} or {@link LauncherState#OVERVIEW}.
+     * @param goingTowards {@link LauncherState#NORMAL} or {@link LauncherState#OVERVIEW}.
      *                     Note that this doesn't have to be the opposite of startState;
      */
-    public void animateThreshold(float threshold, Workspace.State startState,
-            Workspace.State goingTowards) {
+    public void animateThreshold(float threshold, LauncherState startState,
+            LauncherState goingTowards) {
         if (threshold == PinchThresholdManager.THRESHOLD_ONE) {
             if (startState == OVERVIEW) {
                 animateOverviewPanelButtons(goingTowards == OVERVIEW);
diff --git a/src/com/android/launcher3/PinchThresholdManager.java b/src/com/android/launcher3/PinchThresholdManager.java
index 52aac17..8cbc33d 100644
--- a/src/com/android/launcher3/PinchThresholdManager.java
+++ b/src/com/android/launcher3/PinchThresholdManager.java
@@ -68,10 +68,10 @@
         }
 
         if (mPassedThreshold != previousPassedThreshold) {
-            Workspace.State fromState = mWorkspace.isInOverviewMode() ? Workspace.State.OVERVIEW
-                    : Workspace.State.NORMAL;
-            Workspace.State toState = mWorkspace.isInOverviewMode() ? Workspace.State.NORMAL
-                    : Workspace.State.OVERVIEW;
+            LauncherState fromState = mWorkspace.isInOverviewMode() ? LauncherState.OVERVIEW
+                    : LauncherState.NORMAL;
+            LauncherState toState = mWorkspace.isInOverviewMode() ? LauncherState.NORMAL
+                    : LauncherState.OVERVIEW;
             float thresholdToAnimate = mPassedThreshold;
             if (mPassedThreshold < previousPassedThreshold) {
                 // User reversed pinch, so heading back to the state that they started from.
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index b57ce63..213eaad 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -17,8 +17,7 @@
 package com.android.launcher3;
 
 import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_NEXT_FRAME;
-import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_SHORT_TIMEOUT;
-import static com.android.launcher3.LauncherAnimUtils.ALL_APPS_TRANSITION_MS;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
 import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
 import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS;
 
@@ -185,33 +184,6 @@
     private SpringLoadedDragController mSpringLoadedDragController;
     private final float mOverviewModeShrinkFactor;
 
-    // State variable that indicates whether the pages are small (ie when you're
-    // in all apps or customize mode)
-
-    public enum State {
-        NORMAL          (false, ContainerType.WORKSPACE, false, 1, 0),
-        NORMAL_HIDDEN   (false, ContainerType.ALLAPPS, false, 1, ALL_APPS_TRANSITION_MS),
-        SPRING_LOADED   (true, ContainerType.WORKSPACE, true, 1, SPRING_LOADED_TRANSITION_MS),
-        OVERVIEW        (true, ContainerType.OVERVIEW, true, 0, OVERVIEW_TRANSITION_MS);
-
-        public final boolean hasMultipleVisiblePages;
-        public final int containerType;
-
-        // Properties related to state transition animation.
-        public final boolean hasScrim;
-        public final float hotseatAlpha;
-        public final int transitionDuration;
-
-        State(boolean hasMultipleVisiblePages, int containerType,
-                boolean hasScrim, float hotseatAlpha, int transitionDuration) {
-            this.hasMultipleVisiblePages = hasMultipleVisiblePages;
-            this.containerType = containerType;
-            this.hasScrim = hasScrim;
-            this.hotseatAlpha = hotseatAlpha;
-            this.transitionDuration = transitionDuration;
-        }
-    }
-
     // Direction used for moving the workspace and hotseat UI
     public enum Direction {
         X  (TRANSLATION_X),
@@ -238,7 +210,7 @@
     private final float[] mHotseatAlpha = new float[] {1, 1, 1};
 
     @ViewDebug.ExportedProperty(category = "launcher")
-    private State mState = State.NORMAL;
+    private LauncherState mState = LauncherState.NORMAL;
     private boolean mIsSwitchingState = false;
 
     boolean mChildrenLayersEnabled = true;
@@ -1447,16 +1419,16 @@
     }
 
     public boolean workspaceInModalState() {
-        return mState != State.NORMAL;
+        return mState != LauncherState.NORMAL;
     }
 
     /** Returns whether a drag should be allowed to be started from the current workspace state. */
     public boolean workspaceIconsCanBeDragged() {
-        return mState == State.NORMAL || mState == State.SPRING_LOADED;
+        return mState == LauncherState.NORMAL || mState == LauncherState.SPRING_LOADED;
     }
 
     private void updateChildrenLayersEnabled() {
-        boolean small = mState == State.OVERVIEW || mIsSwitchingState;
+        boolean small = mState == LauncherState.OVERVIEW || mIsSwitchingState;
         boolean enableChildrenLayers = small || isPageInTransition();
 
         if (enableChildrenLayers != mChildrenLayersEnabled) {
@@ -1576,7 +1548,7 @@
     }
 
     public boolean isInOverviewMode() {
-        return mState == State.OVERVIEW;
+        return mState == LauncherState.OVERVIEW;
     }
 
     public void snapToPageFromOverView(int whichPage) {
@@ -1626,9 +1598,9 @@
 
 
     /**
-     * Sets the current workspace {@link State} and updates the UI without any animations
+     * Sets the current workspace {@link LauncherState} and updates the UI without any animations
      */
-    public void setState(State toState) {
+    public void setState(LauncherState toState) {
         // Update the current state
         mState = toState;
         mStateTransitionAnimation.setState(mState);
@@ -1640,11 +1612,11 @@
     }
 
     /**
-     * Sets the current workspace {@link State}, while animating the UI
+     * Sets the current workspace {@link LauncherState}, then animates the UI
      */
-    public void setStateWithAnimation(State toState, AnimationLayerSet layerViews, AnimatorSet anim,
-            AnimationConfig config) {
-        final State fromState = mState;
+    public void setStateWithAnimation(LauncherState toState, AnimationLayerSet layerViews,
+            AnimatorSet anim, AnimationConfig config) {
+        final LauncherState fromState = mState;
 
         // Update the current state
         mState = toState;
@@ -1662,7 +1634,7 @@
         anim.addListener(listener);
     }
 
-    public State getState() {
+    public LauncherState getState() {
         return mState;
     }
 
@@ -1673,14 +1645,12 @@
             for (int i = 0; i < total; i++) {
                 updateAccessibilityFlags((CellLayout) getPageAt(i), i);
             }
-            setImportantForAccessibility((mState == State.NORMAL || mState == State.OVERVIEW)
-                    ? IMPORTANT_FOR_ACCESSIBILITY_AUTO
-                    : IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+            setImportantForAccessibility(mState.workspaceAccessibilityFlag);
         }
     }
 
     private void updateAccessibilityFlags(CellLayout page, int pageNo) {
-        if (mState == State.OVERVIEW) {
+        if (mState == LauncherState.OVERVIEW) {
             page.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
             page.getShortcutsAndWidgets().setImportantForAccessibility(
                     IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
@@ -1694,11 +1664,9 @@
                 page.setAccessibilityDelegate(mPagesAccessibilityDelegate);
             }
         } else {
-            int accessible = mState == State.NORMAL ?
-                    IMPORTANT_FOR_ACCESSIBILITY_AUTO :
-                        IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS;
             page.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-            page.getShortcutsAndWidgets().setImportantForAccessibility(accessible);
+            page.getShortcutsAndWidgets()
+                    .setImportantForAccessibility(mState.workspaceAccessibilityFlag);
             page.setContentDescription(null);
             page.setAccessibilityDelegate(null);
         }
@@ -1717,11 +1685,11 @@
     }
 
     private void onStartStateTransition() {
-        if (mState == State.SPRING_LOADED) {
+        if (mState == LauncherState.SPRING_LOADED) {
             // Show the page indicator at the same time as the rest of the transition.
             showPageIndicatorAtCurrentScroll();
         }
-        getPageIndicator().setShouldAutoHide(mState != State.SPRING_LOADED);
+        getPageIndicator().setShouldAutoHide(mState != LauncherState.SPRING_LOADED);
     }
 
     public void onEndStateTransition() {
@@ -1730,7 +1698,7 @@
         mForceDrawAdjacentPages = false;
         mTransitionProgress = 1;
 
-        if (mState == State.OVERVIEW) {
+        if (mState == LauncherState.OVERVIEW) {
             enableFreeScroll();
         } else {
             disableFreeScroll();
@@ -1840,7 +1808,7 @@
 
     private boolean transitionStateShouldAllowDrop() {
         return ((!isSwitchingState() || mTransitionProgress > ALLOW_DROP_TRANSITION_PROGRESS) &&
-                (mState == State.NORMAL || mState == State.SPRING_LOADED));
+                (mState == LauncherState.NORMAL || mState == LauncherState.SPRING_LOADED));
     }
 
     /**
@@ -2111,7 +2079,7 @@
                         dropTargetLayout, mTargetCell, distance, false, d.dragView) ||
                         addToExistingFolderIfNecessary(cell, dropTargetLayout, mTargetCell,
                                 distance, d, false)) {
-                    mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+                    mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
                     return;
                 }
 
@@ -2250,7 +2218,7 @@
             parent.onDropChild(cell);
 
             mLauncher.exitSpringLoadedDragMode(
-                    SPRING_LOADED_EXIT_SHORT_TIMEOUT, onCompleteRunnable);
+                    SPRING_LOADED_EXIT_DELAY, onCompleteRunnable);
         }
 
         if (d.stateAnnouncer != null && !droppedOnOriginalCell) {
@@ -2782,7 +2750,7 @@
         final long screenId = getIdForScreen(cellLayout);
         if (!mLauncher.isHotseatLayout(cellLayout)
                 && screenId != getScreenIdForPageIndex(mCurrentPage)
-                && mState != State.SPRING_LOADED) {
+                && mState != LauncherState.SPRING_LOADED) {
             snapToPage(getPageIndexForScreenId(screenId));
         }
 
@@ -2857,7 +2825,7 @@
                     animationStyle, finalView, true);
         } else {
             // This is for other drag/drop cases, like dragging from All Apps
-            mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+            mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
 
             View view;
 
@@ -3601,7 +3569,7 @@
 
     @Override
     public boolean enableFreeScroll() {
-        if (getState() == State.OVERVIEW) {
+        if (getState() == LauncherState.OVERVIEW) {
             return super.enableFreeScroll();
         } else {
             Log.w(TAG, "enableFreeScroll called but not in overview: state=" + getState());
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
index 9d9e9fb..8e215b0 100644
--- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
+++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
@@ -33,7 +33,6 @@
 import android.view.animation.DecelerateInterpolator;
 
 import com.android.launcher3.LauncherStateTransitionAnimation.AnimationConfig;
-import com.android.launcher3.Workspace.State;
 import com.android.launcher3.anim.AnimationLayerSet;
 
 /**
@@ -163,17 +162,17 @@
         mWorkspaceFadeInAdjacentScreens = grid.shouldFadeAdjacentWorkspaceScreens();
     }
 
-    public void setState(Workspace.State toState) {
+    public void setState(LauncherState toState) {
         setWorkspaceProperty(toState, NO_ANIM_PROPERTY_SETTER);
     }
 
-    public void setStateWithAnimation(Workspace.State fromState, Workspace.State toState,
+    public void setStateWithAnimation(LauncherState fromState, LauncherState toState,
             AnimatorSet anim, AnimationLayerSet layerViews, AnimationConfig config) {
-        long duration = config.getDuration(toState == State.NORMAL
+        long duration = config.getDuration(toState == LauncherState.NORMAL
                 ? fromState.transitionDuration : toState.transitionDuration);
-        AnimatedPropertySetter proertSetter =
+        AnimatedPropertySetter propertySetter =
                 new AnimatedPropertySetter(duration, layerViews, anim);
-        setWorkspaceProperty(toState, proertSetter);
+        setWorkspaceProperty(toState, propertySetter);
     }
 
     public float getFinalScale() {
@@ -183,7 +182,7 @@
     /**
      * Starts a transition animation for the workspace.
      */
-    private void setWorkspaceProperty(Workspace.State state, PropertySetter propertySetter) {
+    private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter) {
         // Update the workspace state
         int finalBackgroundAlpha = state.hasScrim ? 255 : 0;
 
@@ -211,13 +210,13 @@
 
             // Only animate the page alpha when we actually fade pages
             if (mWorkspaceFadeInAdjacentScreens) {
-                float finalAlpha = state == State.NORMAL && i != toPage ? 0 : 1f;
+                float finalAlpha = state == LauncherState.NORMAL && i != toPage ? 0 : 1f;
                 propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA,
                         finalAlpha, mZoomInInterpolator);
             }
         }
 
-        float finalHotseatAlpha = state.hotseatAlpha;
+        float finalHotseatAlpha = state.hideHotseat ? 0f : 1f;
 
         // This is true when transitioning between:
         // - Overview <-> Workspace
diff --git a/src/com/android/launcher3/dragndrop/DragController.java b/src/com/android/launcher3/dragndrop/DragController.java
index 8386f8f..10bd67d 100644
--- a/src/com/android/launcher3/dragndrop/DragController.java
+++ b/src/com/android/launcher3/dragndrop/DragController.java
@@ -16,7 +16,7 @@
 
 package com.android.launcher3.dragndrop;
 
-import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_SHORT_TIMEOUT;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
 
 import android.content.ComponentName;
 import android.content.res.Resources;
@@ -263,7 +263,7 @@
         if (!accepted) {
             // If it was not accepted, cleanup the state. If it was accepted, it is the
             // responsibility of the drop target to cleanup the state.
-            mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+            mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
             mDragObject.deferDragViewCleanupPostAnimation = false;
         }
 
diff --git a/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java b/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java
index 1da7834..52167bb 100644
--- a/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java
+++ b/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java
@@ -83,7 +83,7 @@
     public com.android.launcher3.ShortcutInfo createShortcutInfo() {
         // Total duration for the drop animation to complete.
         long duration = mContext.getResources().getInteger(R.integer.config_dropAnimMaxDuration) +
-                LauncherAnimUtils.SPRING_LOADED_EXIT_SHORT_TIMEOUT +
+                LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY +
                 LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS;
         // Delay the actual accept() call until the drop animation is complete.
         return LauncherAppsCompatVO.createShortcutInfoFromPinItemRequest(
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index fae420e..fcc4f0e 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -16,7 +16,7 @@
 
 package com.android.launcher3.folder;
 
-import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_SHORT_TIMEOUT;
+import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
@@ -1243,7 +1243,7 @@
             mInfo.setOption(FolderInfo.FLAG_MULTI_PAGE_ANIMATION, true, mLauncher.getModelWriter());
         }
 
-        mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_SHORT_TIMEOUT);
+        mLauncher.exitSpringLoadedDragMode(SPRING_LOADED_EXIT_DELAY);
         if (d.stateAnnouncer != null) {
             d.stateAnnouncer.completeAction(R.string.item_moved);
         }