Fix bug 2250457 - Open folder on home screen changes changes the behaviour of the home button

Now, home always goes to the center worksapce screen and back from an
app goes to all apps if it was open.

Getting that animations smooth took a little bit of work.
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 6a0978b..ce3d5a7 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -192,7 +192,6 @@
 
     private boolean mRestoring;
     private boolean mWaitingForResult;
-    private boolean mExitingBecauseOfLaunch;
 
     private Bundle mSavedInstanceState;
 
@@ -446,10 +445,6 @@
     @Override
     protected void onPause() {
         super.onPause();
-        if (mExitingBecauseOfLaunch) {
-            mExitingBecauseOfLaunch = false;
-            closeAllApps(false);
-        }
         dismissPreview(mPreviousView);
         dismissPreview(mNextView);
     }
@@ -511,6 +506,11 @@
             return;
         }
 
+        final boolean allApps = savedState.getBoolean(RUNTIME_STATE_ALL_APPS_FOLDER, false);
+        if (allApps) {
+            showAllApps(false);
+        }
+
         final int currentScreen = savedState.getInt(RUNTIME_STATE_CURRENT_SCREEN, -1);
         if (currentScreen > -1) {
             mWorkspace.setCurrentScreen(currentScreen);
@@ -856,23 +856,17 @@
             // for example onResume being called when the user pressed the 'back' button.
             mIsNewIntent = true;
 
-            if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=
-                    Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) {
+            if (!mWorkspace.isDefaultScreenShowing()) {
+                mWorkspace.moveToDefaultScreen();
+            }
 
-                if (!mWorkspace.isDefaultScreenShowing()) {
-                    mWorkspace.moveToDefaultScreen();
-                }
+            closeAllApps(false);
 
-                closeAllApps(true);
-
-                final View v = getWindow().peekDecorView();
-                if (v != null && v.getWindowToken() != null) {
-                    InputMethodManager imm = (InputMethodManager)getSystemService(
-                            INPUT_METHOD_SERVICE);
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            } else {
-                closeAllApps(false);
+            final View v = getWindow().peekDecorView();
+            if (v != null && v.getWindowToken() != null) {
+                InputMethodManager imm = (InputMethodManager)getSystemService(
+                        INPUT_METHOD_SERVICE);
+                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
             }
         }
     }
@@ -902,10 +896,8 @@
 
         final boolean isConfigurationChange = getChangingConfigurations() != 0;
 
-        // When the drawer is opened and we are saving the state because of a
-        // configuration change
         // TODO should not do this if the drawer is currently closing.
-        if (isAllAppsVisible() && isConfigurationChange) {
+        if (isAllAppsVisible()) {
             outState.putBoolean(RUNTIME_STATE_ALL_APPS_FOLDER, true);
         }
 
@@ -1408,7 +1400,6 @@
             // Open shortcut
             final Intent intent = ((ApplicationInfo) tag).intent;
             startActivitySafely(intent);
-            mExitingBecauseOfLaunch = true;
         } else if (tag instanceof FolderInfo) {
             handleFolderClick((FolderInfo) tag);
         } else if (v == mHandleView) {
@@ -1416,7 +1407,7 @@
             if (isAllAppsVisible()) {
                 closeAllApps(true);
             } else {
-                showAllApps();
+                showAllApps(true);
             }
         }
     }
@@ -1819,10 +1810,16 @@
         return mAllAppsGrid.isVisible();
     }
 
-    void showAllApps() {
-        mAllAppsGrid.zoom(1.0f);
+    boolean isAllAppsOpaque() {
+        return mAllAppsGrid.isOpaque();
+    }
+
+    void showAllApps(boolean animated) {
+        mAllAppsGrid.zoom(1.0f, animated);
         //mWorkspace.hide();
 
+        mWorkspace.startFading(false);
+
         mAllAppsGrid.setFocusable(true);
         mAllAppsGrid.requestFocus();
         
@@ -1833,10 +1830,10 @@
 
     void closeAllApps(boolean animated) {
         if (mAllAppsGrid.isVisible()) {
-            mAllAppsGrid.zoom(0.0f);
+            mAllAppsGrid.zoom(0.0f, animated);
             mAllAppsGrid.setFocusable(false);
             mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus();
-
+            mWorkspace.startFading(true);
 
             // TODO: fade these two too
             /*
@@ -2138,11 +2135,6 @@
                 }
             }
 
-            final boolean allApps = mSavedState.getBoolean(RUNTIME_STATE_ALL_APPS_FOLDER, false);
-            if (allApps) {
-                showAllApps();
-            }
-
             mSavedState = null;
         }