Merge "Caching external icons in LauncherModel"
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 0a3f915..f866b22 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -107,6 +107,8 @@
     private ObjectAnimator mBackgroundFadeInAnimation;
     private ObjectAnimator mBackgroundFadeOutAnimation;
     private Drawable mBackground;
+    private Drawable mCustomizeTrayBackground;
+    private boolean mDrawCustomizeTrayBackground;
     private float mBackgroundAlpha = 0;
     private float mOverScrollMaxBackgroundAlpha = 0.0f;
     private int mOverScrollPageIndex = -1;
@@ -249,6 +251,7 @@
         try {
             final Resources res = getResources();
             mBackground = res.getDrawable(R.drawable.all_apps_bg_gradient);
+            mCustomizeTrayBackground = res.getDrawable(R.drawable.customize_bg_gradient);
         } catch (Resources.NotFoundException e) {
             // In this case, we will skip drawing background protection
         }
@@ -261,6 +264,7 @@
             @Override
             public void onAnimationEndOrCancel(Animator animation) {
                 mIsInUnshrinkAnimation = false;
+                mDrawCustomizeTrayBackground = false;
             }
         };
         mSnapVelocity = 600;
@@ -588,7 +592,12 @@
         return mChildrenOutlineAlpha;
     }
 
-    public void showBackgroundGradient() {
+    private void showBackgroundGradientForCustomizeTray() {
+        showBackgroundGradient();
+        mDrawCustomizeTrayBackground = true;
+    }
+
+    private void showBackgroundGradient() {
         if (mBackground == null) return;
         if (mBackgroundFadeOutAnimation != null) mBackgroundFadeOutAnimation.cancel();
         if (mBackgroundFadeInAnimation != null) mBackgroundFadeInAnimation.cancel();
@@ -598,7 +607,7 @@
         mBackgroundFadeInAnimation.start();
     }
 
-    public void hideBackgroundGradient() {
+    private void hideBackgroundGradient() {
         if (mBackground == null) return;
         if (mBackgroundFadeInAnimation != null) mBackgroundFadeInAnimation.cancel();
         if (mBackgroundFadeOutAnimation != null) mBackgroundFadeOutAnimation.cancel();
@@ -731,9 +740,16 @@
     protected void onDraw(Canvas canvas) {
         // Draw the background gradient if necessary
         if (mBackground != null && mBackgroundAlpha > 0.0f) {
-            mBackground.setAlpha((int) (mBackgroundAlpha * 255));
+            int alpha = (int) (mBackgroundAlpha * 255);
+            mBackground.setAlpha(alpha);
             mBackground.setBounds(mScrollX, 0, mScrollX + getMeasuredWidth(), getMeasuredHeight());
             mBackground.draw(canvas);
+            if (mDrawCustomizeTrayBackground) {
+                mCustomizeTrayBackground.setAlpha(alpha);
+                mCustomizeTrayBackground.setBounds(mScrollX, 0, mScrollX + getMeasuredWidth(),
+                        getMeasuredHeight());
+                mCustomizeTrayBackground.draw(canvas);
+            }
         }
 
         super.onDraw(canvas);
@@ -918,7 +934,6 @@
 
     // we use this to shrink the workspace for the all apps view and the customize view
     private void shrink(ShrinkPosition shrinkPosition, boolean animated) {
-        showBackgroundGradient();
 
         if (mFirstLayout) {
             // (mFirstLayout == "first layout has not happened yet")
@@ -1039,6 +1054,12 @@
             mAnimator.start();
         }
         setChildrenDrawnWithCacheEnabled(true);
+
+        if (shrinkPosition == ShrinkPosition.SHRINK_TO_TOP) {
+            showBackgroundGradientForCustomizeTray();
+        } else {
+            showBackgroundGradient();
+        }
     }
 
     /*
@@ -1191,8 +1212,6 @@
     }
 
     void unshrink(boolean animated) {
-        hideBackgroundGradient();
-
         if (mIsSmall) {
             mIsSmall = false;
             if (mAnimator != null) {
@@ -1246,6 +1265,8 @@
                 mAnimator.start();
             }
         }
+
+        hideBackgroundGradient();
     }
 
     /**