workspace bug fixes

- fixed: pressing home sometimes left workspaces
in shrunken state
- fixed: position of delete zone (trash icon)
- fixed: workspace unshrink sometimes looked weird
when coming from all apps
- fixed: clicking power button and returning left
workspace in shrunken state

Change-Id: Ie974202926e6880ccda26ac9fe967fb587a9b7a3
diff --git a/res/layout-xlarge/launcher.xml b/res/layout-xlarge/launcher.xml
index 395b048..6eb9318 100644
--- a/res/layout-xlarge/launcher.xml
+++ b/res/layout-xlarge/launcher.xml
@@ -69,6 +69,16 @@
             android:onClick="onClickConfigureButton"
             android:focusable="true"
             android:clickable="true" />
+        <com.android.launcher2.DeleteZone
+            android:id="@+id/delete_zone"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingTop="@dimen/delete_zone_padding"
+
+            android:scaleType="center"
+            android:src="@drawable/delete_zone_selector"
+            android:visibility="gone"
+            launcher:direction="horizontal" />
         <ImageView
             android:id="@+id/all_apps_button"
             android:layout_width="wrap_content"
@@ -79,17 +89,6 @@
             android:onClick="onClickAllAppsButton"
             android:focusable="true"
             android:clickable="true" />
-        <com.android.launcher2.DeleteZone
-            android:id="@+id/delete_zone"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:paddingTop="@dimen/delete_zone_padding"
-            android:layout_toRightOf="@id/configure_button"
-
-            android:scaleType="center"
-            android:src="@drawable/delete_zone_selector"
-            android:visibility="gone"
-            launcher:direction="horizontal" />
     </RelativeLayout>
 
     <TabHost
diff --git a/res/values-xlarge/dimens.xml b/res/values-xlarge/dimens.xml
index 9e98e46..c9bd836 100644
--- a/res/values-xlarge/dimens.xml
+++ b/res/values-xlarge/dimens.xml
@@ -24,4 +24,7 @@
 
     <!-- vertical spacing between edge of screen and mini screen thumbnails -->
     <dimen name="smallScreenVerticalMargin">20dip</dimen>
+
+    <!-- padding above the delete zone -->
+    <dimen name="delete_zone_padding">6dip</dimen>
 </resources>
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 5184f80..008b636 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -1038,9 +1038,15 @@
                         != Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
             boolean allAppsVisible = isAllAppsVisible();
 
-            // TODO: Figure out the right thing to do in XLarge mode here
+            // in all these cases, only animate if we're already on home
+            if (LauncherApplication.isScreenXLarge()) {
+                mWorkspace.unshrink(alreadyOnHome);
+            }
             if (!mWorkspace.isDefaultScreenShowing()) {
-                mWorkspace.moveToDefaultScreen(alreadyOnHome && !allAppsVisible);
+                // on the phone, we don't animate the change to the workspace if all apps is visible
+                // on xlarge screens, however, we want an animated transition
+                mWorkspace.moveToDefaultScreen(alreadyOnHome &&
+                        (LauncherApplication.isScreenXLarge() || !allAppsVisible));
             }
             closeAllApps(alreadyOnHome && allAppsVisible);
             hideCustomizationDrawer();
@@ -2409,6 +2415,7 @@
                     animate = false;
                 }
                 closeAllApps(animate);
+                mWorkspace.unshrink(animate);
             }
         }
     }
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 26785c5..69a8686 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1149,15 +1149,21 @@
 
     // We call this when we trigger an unshrink by clicking on the CellLayout cl
     private void unshrink(CellLayout clThatWasClicked) {
-        if (mIsSmall) {
-            int newCurrentScreen = mCurrentScreen;
-            final int screenCount = getChildCount();
-            for (int i = 0; i < screenCount; i++) {
-                if (getChildAt(i) == clThatWasClicked) {
-                    newCurrentScreen = i;
-                }
+        int newCurrentScreen = mCurrentScreen;
+        final int screenCount = getChildCount();
+        for (int i = 0; i < screenCount; i++) {
+            if (getChildAt(i) == clThatWasClicked) {
+                newCurrentScreen = i;
             }
-            final int delta = (newCurrentScreen - mCurrentScreen)*getWidth();
+        }
+        unshrink(newCurrentScreen);
+    }
+
+    private void unshrink(int newCurrentScreen) {
+        if (mIsSmall) {
+            int delta = (newCurrentScreen - mCurrentScreen)*getWidth();
+
+            final int screenCount = getChildCount();
             for (int i = 0; i < screenCount; i++) {
                 CellLayout cl = (CellLayout) getChildAt(i);
                 cl.setX(cl.getX() + delta);
@@ -1169,20 +1175,32 @@
         }
     }
 
-    public void unshrink() {
+    void unshrink() {
+        unshrink(true);
+    }
+
+    void unshrink(boolean animated) {
         if (mIsSmall) {
             Sequencer s = new Sequencer();
             final int screenCount = getChildCount();
+
+            final int duration = getResources().getInteger(R.integer.config_workspaceUnshrinkTime);
             for (int i = 0; i < screenCount; i++) {
                 final CellLayout cl = (CellLayout)getChildAt(i);
-                final int duration =
-                    getResources().getInteger(R.integer.config_workspaceUnshrinkTime);
-                s.playTogether(
-                        new PropertyAnimator(duration, cl, "translationX", 0.0f),
-                        new PropertyAnimator(duration, cl, "translationY", 0.0f),
-                        new PropertyAnimator(duration, cl, "scaleX", 1.0f),
-                        new PropertyAnimator(duration, cl, "scaleY", 1.0f),
-                        new PropertyAnimator(duration, cl, "dimmedBitmapAlpha", 0.0f));
+                if (animated) {
+                    s.playTogether(
+                            new PropertyAnimator(duration, cl, "translationX", 0.0f),
+                            new PropertyAnimator(duration, cl, "translationY", 0.0f),
+                            new PropertyAnimator(duration, cl, "scaleX", 1.0f),
+                            new PropertyAnimator(duration, cl, "scaleY", 1.0f),
+                            new PropertyAnimator(duration, cl, "dimmedBitmapAlpha", 0.0f));
+                } else {
+                    cl.setTranslationX(0.0f);
+                    cl.setTranslationY(0.0f);
+                    cl.setScaleX(1.0f);
+                    cl.setScaleY(1.0f);
+                    cl.setDimmedBitmapAlpha(0.0f);
+                }
             }
             s.addListener(mUnshrinkAnimationListener);
             s.start();
@@ -1830,7 +1848,11 @@
 
     void moveToDefaultScreen(boolean animate) {
         if (animate) {
-            snapToScreen(mDefaultScreen);
+            if (mIsSmall) {
+                unshrink(mDefaultScreen);
+            } else {
+                snapToScreen(mDefaultScreen);
+            }
         } else {
             setCurrentScreen(mDefaultScreen);
         }