Updating launcher transitions.

Change-Id: I32b35189fe05a1c0db0ac1d7f508b1560088f635
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 35bdf14..2935cea 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -518,12 +518,18 @@
         if (v instanceof PagedViewIcon) {
             // Animate some feedback to the click
             final ApplicationInfo appInfo = (ApplicationInfo) v.getTag();
-            mLauncher.startActivitySafely(appInfo.intent, appInfo);
 
             // Lock the drawable state to pressed until we return to Launcher
             if (mPressedIcon != null) {
                 mPressedIcon.lockDrawableState();
             }
+
+            // NOTE: we need to re-enable the wallpaper visibility if we want correct transitions
+            // between items that are launched from the workspace and all apps.  It will be disabled
+            // correctly the next time the window is visible in AppsCustomizeTabHost.
+            mLauncher.updateWallpaperVisibility(true);
+            mLauncher.startActivitySafely(v, appInfo.intent, appInfo);
+
         } else if (v instanceof PagedViewWidget) {
             // Let the user know that they have to long press to add a widget
             Toast.makeText(getContext(), R.string.long_press_widget_to_add,
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index 0c5bbeb..21842da 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -57,6 +57,8 @@
     private boolean mResetAfterTransition;
     private Runnable mRelayoutAndMakeVisible;
 
+    private Launcher mLauncher;
+
     public AppsCustomizeTabHost(Context context, AttributeSet attrs) {
         super(context, attrs);
         mLayoutInflater = LayoutInflater.from(context);
@@ -68,6 +70,10 @@
             };
     }
 
+    public void setup(Launcher launcher) {
+        mLauncher = launcher;
+    }
+
     /**
      * Convenience methods to select specific tabs.  We want to set the content type immediately
      * in these cases, but we note that we still call setCurrentTabByTag() so that the tab view
@@ -463,6 +469,17 @@
             // Load the current page synchronously, and the neighboring pages asynchronously
             mAppsCustomizePane.loadAssociatedPages(mAppsCustomizePane.getCurrentPage(), true);
             mAppsCustomizePane.loadAssociatedPages(mAppsCustomizePane.getCurrentPage());
+
+            // We had to enable the wallpaper visibility when launching apps from all apps (so that
+            // the transitions would be the same as when launching from workspace) so we need to
+            // re-disable the wallpaper visibility to ensure performance.
+            int duration = getResources().getInteger(android.R.integer.config_shortAnimTime);
+            postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    mLauncher.updateWallpaperVisibility(false);
+                }
+            }, duration);
         }
     }
 
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index fcaf020..01939f8 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -194,7 +194,8 @@
             v.getLocationOnScreen(pos);
             item.intent.setSourceBounds(new Rect(pos[0], pos[1],
                     pos[0] + v.getWidth(), pos[1] + v.getHeight()));
-            mLauncher.startActivitySafely(item.intent, item);
+
+            mLauncher.startActivitySafely(v, item.intent, item);
         }
     }
 
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 5965b5c..84a3b4f 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -26,6 +26,7 @@
 import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.ActivityOptions;
 import android.app.SearchManager;
 import android.appwidget.AppWidgetHostView;
 import android.appwidget.AppWidgetManager;
@@ -828,6 +829,7 @@
                 findViewById(R.id.apps_customize_pane);
         mAppsCustomizeContent = (AppsCustomizePagedView)
                 mAppsCustomizeTabHost.findViewById(R.id.apps_customize_pane_content);
+        mAppsCustomizeTabHost.setup(this);
         mAppsCustomizeContent.setup(this, dragController);
 
         // Get the all apps button
@@ -1766,7 +1768,8 @@
             v.getLocationOnScreen(pos);
             intent.setSourceBounds(new Rect(pos[0], pos[1],
                     pos[0] + v.getWidth(), pos[1] + v.getHeight()));
-            boolean success = startActivitySafely(intent, tag);
+
+            boolean success = startActivitySafely(v, intent, tag);
 
             if (success && v instanceof BubbleTextView) {
                 mWaitingForResume = (BubbleTextView) v;
@@ -1834,7 +1837,7 @@
 
     public void onClickAppMarketButton(View v) {
         if (mAppMarketIntent != null) {
-            startActivitySafely(mAppMarketIntent, "app market");
+            startActivitySafely(v, mAppMarketIntent, "app market");
         } else {
             Log.e(TAG, "Invalid app market intent.");
         }
@@ -1865,10 +1868,18 @@
         }
     }
 
-    boolean startActivitySafely(Intent intent, Object tag) {
+    boolean startActivitySafely(View v, Intent intent, Object tag) {
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
         try {
-            startActivity(intent);
+            if (v != null) {
+                ActivityOptions opts = ActivityOptions.makeScaleUpAnimation(v, 0, 0,
+                        v.getMeasuredWidth(), v.getMeasuredHeight());
+
+                startActivity(intent, opts.toBundle());
+            } else {
+                startActivity(intent);
+            }
             return true;
         } catch (ActivityNotFoundException e) {
             Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
@@ -2442,7 +2453,7 @@
     @Override
     public void onTrimMemory(int level) {
         super.onTrimMemory(level);
-        if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
+        if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
             mAppsCustomizeTabHost.onTrimMemory();
         }
     }