Speeding up the first time All Apps and Configure is launched

Change-Id: Ic9503f62ee4458b7797add4ac9a2cb4b0a186a30
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index dc2e5de..5779c6a 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -88,6 +88,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
+import android.view.View.OnClickListener;
 import android.view.View.OnLongClickListener;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.DecelerateInterpolator;
@@ -1053,6 +1054,31 @@
         mAllAppsButton = findViewById(R.id.all_apps_button);
         mDivider = findViewById(R.id.divider);
         mConfigureButton = findViewById(R.id.configure_button);
+
+        // We had previously set these click handlers in XML, but the first time we launched
+        // Configure or All Apps we had an extra 50ms of delay while the java reflection methods
+        // found the right handler. Setting the handlers directly here eliminates that cost.
+        if (mConfigureButton != null) {
+            mConfigureButton.setOnClickListener(new OnClickListener() {
+                public void onClick(View v) {
+                    onClickConfigureButton(v);
+                }
+            });
+        }
+        if (mDivider != null) {
+            mDivider.setOnClickListener(new OnClickListener() {
+                public void onClick(View v) {
+                    onClickAllAppsButton(v);
+                }
+            });
+        }
+        if (mAllAppsButton != null) {
+            mAllAppsButton.setOnClickListener(new OnClickListener() {
+                public void onClick(View v) {
+                    onClickAllAppsButton(v);
+                }
+            });
+        }
     }
 
     @SuppressWarnings({"UnusedDeclaration"})
@@ -2577,8 +2603,13 @@
                 getResources().getInteger(R.integer.config_toolbarButtonFadeOutTime);
 
         if (seq != null) {
-            Animator anim = ObjectAnimator.ofFloat(view, "alpha", show ? 1.0f : 0.0f);
+            ValueAnimator anim = ValueAnimator.ofFloat(view.getAlpha(), show ? 1.0f : 0.0f);
             anim.setDuration(duration);
+            anim.addUpdateListener(new AnimatorUpdateListener() {
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    view.setAlpha((Float) animation.getAnimatedValue());
+                }
+            });
             anim.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationStart(Animator animation) {
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 0daed37..2ea4931 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -108,8 +108,8 @@
     private float mChildrenOutlineAlpha = 0;
 
     // These properties refer to the background protection gradient used for AllApps and Customize
-    private ObjectAnimator mBackgroundFadeInAnimation;
-    private ObjectAnimator mBackgroundFadeOutAnimation;
+    private ValueAnimator mBackgroundFadeInAnimation;
+    private ValueAnimator mBackgroundFadeOutAnimation;
     private Drawable mBackground;
     private Drawable mCustomizeTrayBackground;
     private boolean mDrawCustomizeTrayBackground;
@@ -938,7 +938,12 @@
         if (mBackground == null) return;
         if (mBackgroundFadeOutAnimation != null) mBackgroundFadeOutAnimation.cancel();
         if (mBackgroundFadeInAnimation != null) mBackgroundFadeInAnimation.cancel();
-        mBackgroundFadeInAnimation = ObjectAnimator.ofFloat(this, "backgroundAlpha", 1.0f);
+        mBackgroundFadeInAnimation = ValueAnimator.ofFloat(getBackgroundAlpha(), 1f);
+        mBackgroundFadeInAnimation.addUpdateListener(new AnimatorUpdateListener() {
+            public void onAnimationUpdate(ValueAnimator animation) {
+                setBackgroundAlpha(((Float) animation.getAnimatedValue()).floatValue());
+            }
+        });
         mBackgroundFadeInAnimation.setInterpolator(new DecelerateInterpolator(1.5f));
         mBackgroundFadeInAnimation.setDuration(BACKGROUND_FADE_IN_DURATION);
         mBackgroundFadeInAnimation.start();
@@ -948,7 +953,12 @@
         if (mBackground == null) return;
         if (mBackgroundFadeInAnimation != null) mBackgroundFadeInAnimation.cancel();
         if (mBackgroundFadeOutAnimation != null) mBackgroundFadeOutAnimation.cancel();
-        mBackgroundFadeOutAnimation = ObjectAnimator.ofFloat(this, "backgroundAlpha", 0.0f);
+        mBackgroundFadeOutAnimation = ValueAnimator.ofFloat(getBackgroundAlpha(), 0f);
+        mBackgroundFadeOutAnimation.addUpdateListener(new AnimatorUpdateListener() {
+            public void onAnimationUpdate(ValueAnimator animation) {
+                setBackgroundAlpha(((Float) animation.getAnimatedValue()).floatValue());
+            }
+        });
         mBackgroundFadeOutAnimation.setInterpolator(new DecelerateInterpolator(1.5f));
         mBackgroundFadeOutAnimation.setDuration(BACKGROUND_FADE_OUT_DURATION);
         mBackgroundFadeOutAnimation.start();