Merge "Preventing activity from rotating while the user is dragging an item. (Bug 6240922)" into jb-dev
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index 0c1a195..35f1a08 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -27,8 +27,10 @@
         android:id="@+id/workspace"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:paddingLeft="@dimen/qsb_bar_height"
-        android:paddingRight="@dimen/button_bar_height"
+        android:paddingLeft="@dimen/workspace_left_padding"
+        android:paddingRight="@dimen/workspace_right_padding"
+        android:paddingTop="@dimen/workspace_top_padding"
+        android:paddingBottom="@dimen/workspace_bottom_padding"
         launcher:defaultScreen="2"
         launcher:cellCountX="@integer/cell_count_x"
         launcher:cellCountY="@integer/cell_count_y"
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index f6ff2e8..6030382 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -44,8 +44,10 @@
         android:id="@+id/workspace"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:paddingTop="@dimen/qsb_bar_height_inset"
-        android:paddingBottom="@dimen/button_bar_height"
+        android:paddingLeft="@dimen/workspace_left_padding"
+        android:paddingRight="@dimen/workspace_right_padding"
+        android:paddingTop="@dimen/workspace_top_padding"
+        android:paddingBottom="@dimen/workspace_bottom_padding"
         launcher:defaultScreen="2"
         launcher:cellCountX="@integer/cell_count_x"
         launcher:cellCountY="@integer/cell_count_y"
diff --git a/res/layout-sw720dp/workspace.xml b/res/layout-sw720dp/workspace.xml
index 327afaf..5658a4b 100644
--- a/res/layout-sw720dp/workspace.xml
+++ b/res/layout-sw720dp/workspace.xml
@@ -19,7 +19,10 @@
 <com.android.launcher2.Workspace
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-    android:paddingTop="@dimen/workspace_content_large_only_top_margin"
+    android:paddingLeft="@dimen/workspace_left_padding"
+    android:paddingRight="@dimen/workspace_right_padding"
+    android:paddingTop="@dimen/workspace_top_padding"
+    android:paddingBottom="@dimen/workspace_bottom_padding"
     launcher:defaultScreen="2"
     launcher:pageSpacing="@dimen/workspace_page_spacing">
       <include android:id="@+id/cell1" layout="@layout/workspace_screen" />
diff --git a/res/layout-sw720dp/workspace_screen.xml b/res/layout-sw720dp/workspace_screen.xml
deleted file mode 100644
index 52f9def..0000000
--- a/res/layout-sw720dp/workspace_screen.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<com.android.launcher2.CellLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:paddingLeft="@dimen/workspace_left_padding"
-    android:paddingRight="@dimen/workspace_right_padding"
-    android:paddingTop="@dimen/workspace_top_padding"
-    android:paddingBottom="@dimen/workspace_bottom_padding"
-    android:hapticFeedbackEnabled="false"
-
-    launcher:cellWidth="@dimen/workspace_cell_width"
-    launcher:cellHeight="@dimen/workspace_cell_height"
-    launcher:widthGap="@dimen/workspace_width_gap"
-    launcher:heightGap="@dimen/workspace_height_gap"
-    launcher:maxGap="@dimen/workspace_max_gap" />
diff --git a/res/layout/workspace_screen.xml b/res/layout/workspace_screen.xml
index 23e1def..d6e66f6 100644
--- a/res/layout/workspace_screen.xml
+++ b/res/layout/workspace_screen.xml
@@ -17,16 +17,17 @@
 <com.android.launcher2.CellLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-    style="@style/WorkspaceScreen"
 
-    android:paddingLeft="@dimen/workspace_left_padding"
-    android:paddingRight="@dimen/workspace_right_padding"
-    android:paddingTop="@dimen/workspace_top_padding"
-    android:paddingBottom="@dimen/workspace_bottom_padding"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingLeft="@dimen/cell_layout_left_padding"
+    android:paddingRight="@dimen/cell_layout_right_padding"
+    android:paddingTop="@dimen/cell_layout_top_padding"
+    android:paddingBottom="@dimen/cell_layout_bottom_padding"
     android:hapticFeedbackEnabled="false"
 
     launcher:cellWidth="@dimen/workspace_cell_width"
     launcher:cellHeight="@dimen/workspace_cell_height"
     launcher:widthGap="@dimen/workspace_width_gap"
     launcher:heightGap="@dimen/workspace_height_gap"
-    launcher:maxGap="@dimen/workspace_max_gap" />
+    launcher:maxGap="@dimen/workspace_max_gap" />
\ No newline at end of file
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 5f03510..69d68be 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -24,21 +24,26 @@
     <dimen name="workspace_cell_height">74dp</dimen>
     <dimen name="hotseat_cell_width">64dp</dimen>
     <dimen name="hotseat_cell_height">58dp</dimen>
-    <!-- Block spacing on each side of the screen -->
-    <dimen name="workspace_left_padding">0dp</dimen>
-    <dimen name="workspace_right_padding">0dp</dimen>
-    <!-- We need top/bottom padding for portals to look right, but
-         really only in spring loaded mode... -->
-    <dimen name="workspace_top_padding">0dp</dimen>
-    <dimen name="workspace_bottom_padding">0dp</dimen>
     <!-- We really want the page spacing to be the max of either the button bar
-         height or the qsb bar height -->
+     height or the qsb bar height -->
     <dimen name="workspace_page_spacing">-1dp</dimen>
     <dimen name="workspace_divider_padding_left">0dp</dimen>
     <dimen name="workspace_divider_padding_right">0dp</dimen>
     <dimen name="workspace_divider_padding_top">12dp</dimen>
     <dimen name="workspace_divider_padding_bottom">12dp</dimen>
 
+    <!-- Block spacing on each side of the screen.  And also padding
+         for the portals to look right. -->
+    <dimen name="cell_layout_left_padding">@dimen/cell_layout_left_padding_land</dimen>
+    <dimen name="cell_layout_right_padding">@dimen/cell_layout_right_padding_land</dimen>
+    <dimen name="cell_layout_top_padding">@dimen/cell_layout_top_padding_land</dimen>
+    <dimen name="cell_layout_bottom_padding">@dimen/cell_layout_bottom_padding_land</dimen>
+    <!-- Workspace padding -->
+    <dimen name="workspace_left_padding">@dimen/workspace_left_padding_land</dimen>
+    <dimen name="workspace_right_padding">@dimen/workspace_right_padding_land</dimen>
+    <dimen name="workspace_top_padding">@dimen/workspace_top_padding_land</dimen>
+    <dimen name="workspace_bottom_padding">@dimen/workspace_bottom_padding_land</dimen>
+
     <dimen name="app_icon_padding_top">6dp</dimen>
 
     <!-- height of the bottom row of controls -->
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
index 71ab658..f4519ab 100644
--- a/res/values-land/styles.xml
+++ b/res/values-land/styles.xml
@@ -18,12 +18,6 @@
 -->
 
 <resources>
-<!-- Workspace -->
-    <style name="WorkspaceScreen">
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-    </style>
-
 <!-- Search Bar -->
     <style name="QSBBar">
         <item name="android:orientation">vertical</item>
diff --git a/res/values-port/dimens.xml b/res/values-port/dimens.xml
index b7e8170..193f331 100644
--- a/res/values-port/dimens.xml
+++ b/res/values-port/dimens.xml
@@ -22,12 +22,18 @@
     <dimen name="qsb_padding_right">3dp</dimen>
 
 <!-- Workspace -->
-    <dimen name="workspace_left_padding">0dp</dimen>
-    <dimen name="workspace_right_padding">0dp</dimen>
     <!-- Block spacing on each side of the screen.  And also padding
          for the portals to look right. -->
-    <dimen name="workspace_top_padding">6dp</dimen>
-    <dimen name="workspace_bottom_padding">0dp</dimen>
+    <dimen name="cell_layout_left_padding">@dimen/cell_layout_left_padding_port</dimen>
+    <dimen name="cell_layout_right_padding">@dimen/cell_layout_right_padding_port</dimen>
+    <dimen name="cell_layout_top_padding">@dimen/cell_layout_top_padding_port</dimen>
+    <dimen name="cell_layout_bottom_padding">@dimen/cell_layout_bottom_padding_port</dimen>
+    <!-- Workspace padding -->
+    <dimen name="workspace_left_padding">@dimen/workspace_left_padding_port</dimen>
+    <dimen name="workspace_right_padding">@dimen/workspace_right_padding_port</dimen>
+    <dimen name="workspace_top_padding">@dimen/workspace_top_padding_port</dimen>
+    <dimen name="workspace_bottom_padding">@dimen/workspace_bottom_padding_port</dimen>
+
     <dimen name="workspace_page_spacing">-1dp</dimen>
 
 <!-- AppsCustomize -->
diff --git a/res/values-port/styles.xml b/res/values-port/styles.xml
index 20369c9..386653e 100644
--- a/res/values-port/styles.xml
+++ b/res/values-port/styles.xml
@@ -24,12 +24,6 @@
         <item name="android:paddingRight">8dp</item>
     </style>
 
-<!-- Workspace -->
-    <style name="WorkspaceScreen">
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-    </style>
-
 <!-- AppsCustomize -->
     <style name="TabIndicator.AppsCustomize">
         <item name="android:maxWidth">130dp</item>
diff --git a/res/values-sw340dp/dimens.xml b/res/values-sw340dp/dimens.xml
index 2a2dac6..8f5a367 100644
--- a/res/values-sw340dp/dimens.xml
+++ b/res/values-sw340dp/dimens.xml
@@ -21,10 +21,6 @@
 <!-- Workspace -->
     <dimen name="workspace_width_gap">0dp</dimen>
     <dimen name="workspace_height_gap">0dp</dimen>
-    <dimen name="workspace_top_padding">8dp</dimen>
-    <dimen name="workspace_bottom_padding">8dp</dimen>
-    <dimen name="workspace_left_padding">8dp</dimen>
-    <dimen name="workspace_right_padding">8dp</dimen>
 
 <!-- Hotseat -->
     <dimen name="hotseat_width_gap">0dp</dimen>
@@ -37,4 +33,14 @@
     <dimen name="button_bar_width_left_padding">8dp</dimen>
     <dimen name="button_bar_width_right_padding">8dp</dimen>
     <dimen name="button_bar_height_plus_padding">80dp</dimen>
+
+<!-- CellLayout padding land / port-->
+    <dimen name="cell_layout_left_padding_portrait">8dp</dimen>
+    <dimen name="cell_layout_left_padding_landscape">8dp</dimen>
+    <dimen name="cell_layout_right_padding_portrait">8dp</dimen>
+    <dimen name="cell_layout_right_padding_landscape">8dp</dimen>
+    <dimen name="cell_layout_top_padding_portrait">8dp</dimen>
+    <dimen name="cell_layout_top_padding_landscape">8dp</dimen>
+    <dimen name="cell_layout_bottom_padding_portrait">8dp</dimen>
+    <dimen name="cell_layout_bottom_padding_landscape">8dp</dimen>
 </resources>
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
index e7fe32c..2d39fc7 100644
--- a/res/values-sw720dp-land/dimens.xml
+++ b/res/values-sw720dp-land/dimens.xml
@@ -22,11 +22,6 @@
     <dimen name="apps_customize_pageLayoutPaddingRight">16dp</dimen>
 
 <!-- Workspace -->
-    <dimen name="workspace_left_padding">24dip</dimen>
-    <dimen name="workspace_right_padding">24dip</dimen>
-    <!-- We need padding on the screens for portals to look right -->
-    <dimen name="workspace_top_padding">12dip</dimen>
-    <dimen name="workspace_bottom_padding">12dip</dimen>
     <dimen name="workspace_width_gap">32dp</dimen>
     <dimen name="workspace_height_gap">2dp</dimen>
     <dimen name="workspace_page_spacing">50dp</dimen>
diff --git a/res/values-sw720dp-port/dimens.xml b/res/values-sw720dp-port/dimens.xml
index 2e0d74a..9a0261b 100644
--- a/res/values-sw720dp-port/dimens.xml
+++ b/res/values-sw720dp-port/dimens.xml
@@ -31,11 +31,6 @@
     <!-- the area at the edge of the screen that makes the workspace go left
          or right while you're dragging. -->
     <dimen name="scroll_zone">40dp</dimen>
-
-    <dimen name="workspace_left_padding">15dip</dimen>
-    <dimen name="workspace_right_padding">15dip</dimen>
-    <dimen name="workspace_top_padding">25dip</dimen>
-    <dimen name="workspace_bottom_padding">25dip</dimen>
     <dimen name="workspace_width_gap">0dp</dimen>
     <dimen name="workspace_height_gap">32dp</dimen>
     <dimen name="workspace_page_spacing">24dp</dimen>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 62bf9a8..dc1c65a 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -53,4 +53,24 @@
      the drag view should be offset from the position of the original view. -->
     <dimen name="dragViewOffsetX">0dp</dimen>
     <dimen name="dragViewOffsetY">0dp</dimen>
+
+<!-- CellLayout padding land / port-->
+    <dimen name="cell_layout_left_padding_portrait">15dp</dimen>
+    <dimen name="cell_layout_left_padding_landscape">24dp</dimen>
+    <dimen name="cell_layout_right_padding_portrait">15dp</dimen>
+    <dimen name="cell_layout_right_padding_landscape">24dp</dimen>
+    <dimen name="cell_layout_top_padding_portrait">25dp</dimen>
+    <dimen name="cell_layout_top_padding_landscape">12dp</dimen>
+    <dimen name="cell_layout_bottom_padding_portrait">25dp</dimen>
+    <dimen name="cell_layout_bottom_padding_landscape">12dp</dimen>
+
+<!-- Workspace padding -->
+    <dimen name="workspace_left_padding_port">0dp</dimen>
+    <dimen name="workspace_left_padding_land">0dp</dimen>
+    <dimen name="workspace_right_padding_port">0dp</dimen>
+    <dimen name="workspace_right_padding_land">0dp</dimen>
+    <dimen name="workspace_top_padding_port">@dimen/workspace_content_large_only_top_margin</dimen>
+    <dimen name="workspace_top_padding_land">@dimen/workspace_content_large_only_top_margin</dimen>
+    <dimen name="workspace_bottom_padding_port">0dp</dimen>
+    <dimen name="workspace_bottom_padding_land">0dp</dimen>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 45e544a..ff17ec4 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -119,4 +119,25 @@
     <dimen name="folder_name_padding">10dp</dimen>
     <dimen name="folder_width_gap">0dp</dimen>
     <dimen name="folder_height_gap">0dp</dimen>
+
+<!-- CellLayout padding -->
+    <dimen name="cell_layout_left_padding_port">0dp</dimen>
+    <dimen name="cell_layout_left_padding_land">0dp</dimen>
+    <dimen name="cell_layout_right_padding_port">0dp</dimen>
+    <dimen name="cell_layout_right_padding_land">0dp</dimen>
+    <dimen name="cell_layout_top_padding_port">6dp</dimen>
+    <dimen name="cell_layout_top_padding_land">0dp</dimen>
+    <dimen name="cell_layout_bottom_padding_port">0dp</dimen>
+    <dimen name="cell_layout_bottom_padding_land">0dp</dimen>
+
+<!-- Workspace padding -->
+    <dimen name="workspace_left_padding_port">0dp</dimen>
+    <dimen name="workspace_left_padding_land">@dimen/qsb_bar_height</dimen>
+    <dimen name="workspace_right_padding_port">0dp</dimen>
+    <dimen name="workspace_right_padding_land">@dimen/button_bar_height</dimen>
+    <dimen name="workspace_top_padding_port">@dimen/qsb_bar_height_inset</dimen>
+    <dimen name="workspace_top_padding_land">0dp</dimen>
+    <dimen name="workspace_bottom_padding_port">@dimen/button_bar_height</dimen>
+    <dimen name="workspace_bottom_padding_land">0dp</dimen>
+
 </resources>
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 4958f03..3936e59 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -762,7 +762,12 @@
     }
 
     @Override
-    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+    public View getContent() {
+        return null;
+    }
+
+    @Override
+    public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) {
         mInTransition = true;
         if (toWorkspace) {
             cancelAllTasks();
@@ -770,8 +775,7 @@
     }
 
     @Override
-    public View getContent() {
-        return null;
+    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
     }
 
     @Override
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index 34b7c09..01c08c9 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -376,8 +376,8 @@
 
     /* LauncherTransitionable overrides */
     @Override
-    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
-        mAppsCustomizePane.onLauncherTransitionStart(l, animated, toWorkspace);
+    public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) {
+        mAppsCustomizePane.onLauncherTransitionPrepare(l, animated, toWorkspace);
         mInTransition = true;
         mTransitioningToWorkspace = toWorkspace;
 
@@ -404,7 +404,10 @@
             mAppsCustomizePane.reset();
             mResetAfterTransition = false;
         }
+    }
 
+    @Override
+    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
         if (animated) {
             enableAndBuildHardwareLayer();
         }
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index f605160..e5c62ad 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -2166,6 +2166,12 @@
         }
     }
 
+    private void dispatchOnLauncherTransitionPrepare(View v, boolean animated, boolean toWorkspace) {
+        if (v instanceof LauncherTransitionable) {
+            ((LauncherTransitionable) v).onLauncherTransitionPrepare(this, animated, toWorkspace);
+        }
+    }
+
     private void dispatchOnLauncherTransitionStart(View v, boolean animated, boolean toWorkspace) {
         if (v instanceof LauncherTransitionable) {
             ((LauncherTransitionable) v).onLauncherTransitionStart(this, animated, toWorkspace);
@@ -2246,7 +2252,7 @@
         final int fadeDuration = res.getInteger(R.integer.config_appsCustomizeFadeInTime);
         final float scale = (float) res.getInteger(R.integer.config_appsCustomizeZoomScaleFactor);
         final View fromView = mWorkspace;
-        final View toView = mAppsCustomizeTabHost;
+        final AppsCustomizeTabHost toView = mAppsCustomizeTabHost;
         final int startDelay =
                 res.getInteger(R.integer.config_workspaceAppsCustomizeAnimationStagger);
 
@@ -2326,8 +2332,8 @@
             boolean delayAnim = false;
             final ViewTreeObserver observer;
 
-            dispatchOnLauncherTransitionStart(fromView, animated, false);
-            dispatchOnLauncherTransitionStart(toView, animated, false);
+            dispatchOnLauncherTransitionPrepare(fromView, animated, false);
+            dispatchOnLauncherTransitionPrepare(toView, animated, false);
 
             // If any of the objects being animated haven't been measured/laid out
             // yet, delay the animation until we get a layout pass
@@ -2351,6 +2357,8 @@
                                 if (mStateAnimation == stateAnimation) {
                                     // Need to update pivots for zoom if layout changed
                                     setPivotsForZoom(toView, scale);
+                                    dispatchOnLauncherTransitionStart(fromView, animated, false);
+                                    dispatchOnLauncherTransitionStart(toView, animated, false);
                                     mStateAnimation.start();
                                 }
                             }
@@ -2361,6 +2369,8 @@
                 observer.addOnGlobalLayoutListener(delayedStart);
             } else {
                 setPivotsForZoom(toView, scale);
+                dispatchOnLauncherTransitionStart(fromView, animated, false);
+                dispatchOnLauncherTransitionStart(toView, animated, false);
                 mStateAnimation.start();
             }
         } else {
@@ -2376,8 +2386,10 @@
                 mWorkspace.hideScrollingIndicator(true);
                 hideDockDivider();
             }
+            dispatchOnLauncherTransitionPrepare(fromView, animated, false);
             dispatchOnLauncherTransitionStart(fromView, animated, false);
             dispatchOnLauncherTransitionEnd(fromView, animated, false);
+            dispatchOnLauncherTransitionPrepare(toView, animated, false);
             dispatchOnLauncherTransitionStart(toView, animated, false);
             dispatchOnLauncherTransitionEnd(toView, animated, false);
             updateWallpaperVisibility(false);
@@ -2442,8 +2454,8 @@
 
             mStateAnimation = new AnimatorSet();
 
-            dispatchOnLauncherTransitionStart(fromView, animated, true);
-            dispatchOnLauncherTransitionStart(toView, animated, true);
+            dispatchOnLauncherTransitionPrepare(fromView, animated, true);
+            dispatchOnLauncherTransitionPrepare(toView, animated, true);
 
             mStateAnimation.addListener(new AnimatorListenerAdapter() {
                 @Override
@@ -2465,11 +2477,15 @@
             if (workspaceAnim != null) {
                 mStateAnimation.play(workspaceAnim);
             }
+            dispatchOnLauncherTransitionStart(fromView, animated, true);
+            dispatchOnLauncherTransitionStart(toView, animated, true);
             mStateAnimation.start();
         } else {
             fromView.setVisibility(View.GONE);
+            dispatchOnLauncherTransitionPrepare(fromView, animated, true);
             dispatchOnLauncherTransitionStart(fromView, animated, true);
             dispatchOnLauncherTransitionEnd(fromView, animated, true);
+            dispatchOnLauncherTransitionPrepare(toView, animated, true);
             dispatchOnLauncherTransitionStart(toView, animated, true);
             dispatchOnLauncherTransitionEnd(toView, animated, true);
             mWorkspace.hideScrollingIndicator(false);
@@ -3453,6 +3469,7 @@
 
 interface LauncherTransitionable {
     View getContent();
+    void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace);
     void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace);
     void onLauncherTransitionStep(Launcher l, float t);
     void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace);
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index f5c845e..892000d 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1745,12 +1745,16 @@
     }
 
     @Override
-    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+    public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) {
         mIsSwitchingState = true;
         cancelScrollingIndicatorAnimations();
     }
 
     @Override
+    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+    }
+
+    @Override
     public void onLauncherTransitionStep(Launcher l, float t) {
         mTransitionProgress = t;
     }