Merge branch 'master' into honeycomb-release

* master:
  removing workaround for fixed animator bug
  updating assets for configure/all apps
diff --git a/res/drawable-hdpi/focused_application_background.9.png b/res/drawable-hdpi/focused_application_background.9.png
index 01c83c3..7bf37ef 100644
--- a/res/drawable-hdpi/focused_application_background.9.png
+++ b/res/drawable-hdpi/focused_application_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/pressed_application_background.9.png b/res/drawable-hdpi/pressed_application_background.9.png
index c7d0bd4..291af02 100644
--- a/res/drawable-hdpi/pressed_application_background.9.png
+++ b/res/drawable-hdpi/pressed_application_background.9.png
Binary files differ
diff --git a/res/drawable-mdpi/focused_application_background.9.png b/res/drawable-mdpi/focused_application_background.9.png
index 341a80b..17ee6ea 100644
--- a/res/drawable-mdpi/focused_application_background.9.png
+++ b/res/drawable-mdpi/focused_application_background.9.png
Binary files differ
diff --git a/res/drawable-mdpi/pressed_application_background.9.png b/res/drawable-mdpi/pressed_application_background.9.png
index 4b00eec..b09f595 100644
--- a/res/drawable-mdpi/pressed_application_background.9.png
+++ b/res/drawable-mdpi/pressed_application_background.9.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/all_apps_button_normal.9.png b/res/drawable-xlarge-hdpi/all_apps_button_normal.9.png
deleted file mode 100644
index 8aea26e..0000000
--- a/res/drawable-xlarge-hdpi/all_apps_button_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/all_apps_button_pressed.9.png b/res/drawable-xlarge-hdpi/all_apps_button_pressed.9.png
deleted file mode 100644
index 587f1f1..0000000
--- a/res/drawable-xlarge-hdpi/all_apps_button_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/configure_button_normal.png b/res/drawable-xlarge-hdpi/configure_button_normal.png
deleted file mode 100644
index 48ae0b2..0000000
--- a/res/drawable-xlarge-hdpi/configure_button_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/configure_button_pressed.png b/res/drawable-xlarge-hdpi/configure_button_pressed.png
deleted file mode 100644
index 54dea70..0000000
--- a/res/drawable-xlarge-hdpi/configure_button_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/info_button.png b/res/drawable-xlarge-hdpi/info_button.png
deleted file mode 100644
index e9ed1b1..0000000
--- a/res/drawable-xlarge-hdpi/info_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/all_apps_button_normal.9.png b/res/drawable-xlarge-mdpi/all_apps_button_normal.9.png
deleted file mode 100644
index a423145..0000000
--- a/res/drawable-xlarge-mdpi/all_apps_button_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/all_apps_button_pressed.9.png b/res/drawable-xlarge-mdpi/all_apps_button_pressed.9.png
deleted file mode 100644
index 5dbe77c..0000000
--- a/res/drawable-xlarge-mdpi/all_apps_button_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/configure_button_normal.png b/res/drawable-xlarge-mdpi/configure_button_normal.png
deleted file mode 100644
index 9b37eff..0000000
--- a/res/drawable-xlarge-mdpi/configure_button_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/configure_button_pressed.png b/res/drawable-xlarge-mdpi/configure_button_pressed.png
deleted file mode 100644
index 5f38db6..0000000
--- a/res/drawable-xlarge-mdpi/configure_button_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png b/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png
new file mode 100644
index 0000000..d3ab3ad
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/info_button.png b/res/drawable-xlarge-mdpi/info_button.png
deleted file mode 100644
index 253cdf7..0000000
--- a/res/drawable-xlarge-mdpi/info_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge/all_apps_button.xml b/res/drawable-xlarge/all_apps_button.xml
deleted file mode 100644
index 46bc632..0000000
--- a/res/drawable-xlarge/all_apps_button.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/all_apps_button_pressed" />
-    <item android:drawable="@drawable/all_apps_button_normal" />
-</selector>
diff --git a/res/drawable-xlarge/configure_button.xml b/res/drawable-xlarge/configure_button.xml
deleted file mode 100644
index ac87290..0000000
--- a/res/drawable-xlarge/configure_button.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/configure_button_pressed" />
-    <item android:drawable="@drawable/configure_button_normal" />
-</selector>
diff --git a/res/drawable-xlarge/delete_zone_selector.xml b/res/drawable-xlarge/delete_zone_selector.xml
new file mode 100644
index 0000000..e2b37f4
--- /dev/null
+++ b/res/drawable-xlarge/delete_zone_selector.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2007, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<transition xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/ic_home_delete_holo_dark"  />
+    <item android:drawable="@drawable/ic_home_delete_hover_holo_dark"  />
+</transition>
diff --git a/res/layout-xlarge-land/all_apps_tabbed.xml b/res/layout-xlarge-land/all_apps_tabbed.xml
index bb30c11..e1a37ff 100644
--- a/res/layout-xlarge-land/all_apps_tabbed.xml
+++ b/res/layout-xlarge-land/all_apps_tabbed.xml
@@ -39,7 +39,7 @@
                 android:layout_centerVertical="true">
                 <com.android.launcher2.ApplicationInfoDropTarget
                     android:id="@+id/all_apps_info_target"
-                    android:src="@drawable/info_button"
+                    android:src="@drawable/ic_home_info_holo_dark"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center"
diff --git a/res/layout-xlarge-land/launcher.xml b/res/layout-xlarge-land/launcher.xml
index e421e07..5c58a69 100644
--- a/res/layout-xlarge-land/launcher.xml
+++ b/res/layout-xlarge-land/launcher.xml
@@ -105,26 +105,47 @@
 
         <ImageView
             android:id="@+id/configure_button"
-            android:src="@drawable/configure_button"
+            android:src="@drawable/ic_home_add_holo_dark"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentTop="true"
             android:layout_alignParentRight="true"
-            android:layout_marginLeft="@dimen/toolbar_button_spacing"
-            android:layout_marginRight="@dimen/toolbar_button_spacing"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:background="@drawable/button_bg"
 
             android:onClick="onClickConfigureButton"
             android:focusable="true"
             android:clickable="true" />
+        <ImageView
+            android:id="@+id/divider"
+            android:src="@drawable/divider_launcher_holo"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_toLeftOf="@id/configure_button"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
+            android:onClick="onClickAllAppsButton"
+            android:focusable="true"
+            android:clickable="true" />
         <TextView
             android:id="@+id/all_apps_button"
             android:text="@string/all_apps_button_label"
-            android:background="@drawable/all_apps_button"
+            android:drawablePadding="@dimen/all_apps_drawable_padding"
+            android:drawableLeft="@drawable/ic_home_all_apps_holo_dark"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_toLeftOf="@id/configure_button"
-            android:layout_marginLeft="@dimen/toolbar_button_spacing"
-            android:layout_marginRight="@dimen/toolbar_button_spacing"
+            android:layout_height="wrap_content"
+            android:layout_toLeftOf="@id/divider"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:background="@drawable/button_bg"
+            
+            android:gravity="center_horizontal|center_vertical"
             android:textColor="#CCFFFFFF"
             android:textSize="18sp"
 
@@ -136,23 +157,41 @@
             android:onClick="onClickAllAppsButton"
             android:focusable="true"
             android:clickable="true" />
-
+        <ImageView
+            android:id="@+id/divider_during_drag"
+            android:src="@drawable/divider_launcher_holo"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_toLeftOf="@id/configure_button"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:visibility="gone"/>
         <com.android.launcher2.DeleteZone
             android:id="@+id/delete_zone"
             android:src="@drawable/delete_zone_selector"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:layout_alignRight="@id/all_apps_button"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:background="@drawable/button_bg"
 
             android:visibility="gone"
             launcher:direction="horizontal" />
 
         <com.android.launcher2.ApplicationInfoDropTarget
             android:id="@+id/info_button"
-            android:src="@drawable/info_button"
+            android:src="@drawable/ic_home_info_holo_dark"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:layout_alignLeft="@id/configure_button"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:background="@drawable/button_bg"
 
             android:visibility="gone"
             android:focusable="true"
diff --git a/res/layout-xlarge-port/all_apps_tabbed.xml b/res/layout-xlarge-port/all_apps_tabbed.xml
index 5571634..a593148 100644
--- a/res/layout-xlarge-port/all_apps_tabbed.xml
+++ b/res/layout-xlarge-port/all_apps_tabbed.xml
@@ -39,7 +39,7 @@
                 android:layout_centerVertical="true">
                 <com.android.launcher2.ApplicationInfoDropTarget
                     android:id="@+id/all_apps_info_target"
-                    android:src="@drawable/info_button"
+                    android:src="@drawable/ic_home_info_holo_dark"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center"
diff --git a/res/layout-xlarge-port/launcher.xml b/res/layout-xlarge-port/launcher.xml
index d9839da..7bc318c 100644
--- a/res/layout-xlarge-port/launcher.xml
+++ b/res/layout-xlarge-port/launcher.xml
@@ -105,28 +105,47 @@
 
         <ImageView
             android:id="@+id/configure_button"
-            android:src="@drawable/configure_button"
+            android:src="@drawable/ic_home_add_holo_dark"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentTop="true"
             android:layout_alignParentRight="true"
-            android:layout_marginLeft="@dimen/toolbar_button_spacing"
-            android:layout_marginRight="@dimen/toolbar_button_spacing"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
             android:onClick="onClickConfigureButton"
             android:focusable="true"
             android:clickable="true" />
+        <ImageView
+            android:id="@+id/divider"
+            android:src="@drawable/divider_launcher_holo"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_toLeftOf="@id/configure_button"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
+            android:onClick="onClickAllAppsButton"
+            android:focusable="true"
+            android:clickable="true" />
         <TextView
             android:id="@+id/all_apps_button"
             android:text="@string/all_apps_button_label"
-            android:background="@drawable/all_apps_button"
+            android:drawablePadding="@dimen/all_apps_drawable_padding"
+            android:drawableLeft="@drawable/ic_home_all_apps_holo_dark"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_toLeftOf="@id/configure_button"
-            android:layout_marginLeft="@dimen/toolbar_button_spacing"
-            android:layout_marginRight="@dimen/toolbar_button_spacing"
+            android:layout_height="wrap_content"
+            android:layout_toLeftOf="@id/divider"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            
+            android:gravity="center_horizontal|center_vertical"
             android:textColor="#CCFFFFFF"
-            android:textSize="18dp"
+            android:textSize="18sp"
 
             android:shadowColor="#A0000000"
             android:shadowDx="0.0"
@@ -136,36 +155,39 @@
             android:onClick="onClickAllAppsButton"
             android:focusable="true"
             android:clickable="true" />
-
-        <!-- The button to bring up the installed app market.
-             The icon for this button will be dynamically set. -->
         <ImageView
-            android:id="@+id/market_button"
+            android:id="@+id/divider_during_drag"
+            android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_alignLeft="@id/all_apps_button"
-
-            android:onClick="onClickAppMarketButton"
-            android:focusable="false"
-            android:clickable="false"
+            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_toLeftOf="@id/configure_button"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
             android:visibility="gone"/>
-
         <com.android.launcher2.DeleteZone
             android:id="@+id/delete_zone"
             android:src="@drawable/delete_zone_selector"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:layout_alignRight="@id/all_apps_button"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
             android:visibility="gone"
             launcher:direction="horizontal" />
 
         <com.android.launcher2.ApplicationInfoDropTarget
             android:id="@+id/info_button"
-            android:src="@drawable/info_button"
+            android:src="@drawable/ic_home_info_holo_dark"
             android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:layout_alignLeft="@id/configure_button"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
             android:visibility="gone"
             android:focusable="true"
diff --git a/res/values-xlarge/dimens.xml b/res/values-xlarge/dimens.xml
index 89722e4..972215a 100644
--- a/res/values-xlarge/dimens.xml
+++ b/res/values-xlarge/dimens.xml
@@ -42,9 +42,11 @@
     <dimen name="customizeSmallScreenVerticalMarginLandscape">90dip</dimen>
     <dimen name="customizeSmallScreenVerticalMarginPortrait">180dip</dimen>
 
-    <dimen name="toolbar_padding">10dip</dimen>
-
-    <dimen name="toolbar_button_spacing">20dip</dimen>
+    <dimen name="all_apps_drawable_padding">8dip</dimen>
+    <!--  toolbar divider height is 32dip plus 2*8dip for padding on top and bottom -->
+    <dimen name="toolbar_divider_height">48dip</dimen>
+    <dimen name="toolbar_button_vertical_padding">8dip</dimen>
+    <dimen name="toolbar_button_horizontal_padding">16dip</dimen>
 
     <!-- height & width of the drop rectangle for the trash icon -->
     <dimen name="delete_zone_size">50dip</dimen>
diff --git a/src/com/android/launcher2/AllAppsTabbed.java b/src/com/android/launcher2/AllAppsTabbed.java
index 4feb998..2cc0a6b 100644
--- a/src/com/android/launcher2/AllAppsTabbed.java
+++ b/src/com/android/launcher2/AllAppsTabbed.java
@@ -16,9 +16,10 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
+import com.android.launcher.R;
 
 import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
 import android.animation.ValueAnimator;
 import android.content.Context;
@@ -32,7 +33,7 @@
 import android.widget.TabWidget;
 import android.widget.TextView;
 
-import com.android.launcher.R;
+import java.util.ArrayList;
 
 /**
  * Implements a tabbed version of AllApps2D.
@@ -91,9 +92,9 @@
                 final float alpha = mAllApps.getAlpha();
                 ValueAnimator alphaAnim = ObjectAnimator.ofFloat(mAllApps, "alpha", alpha, 0.0f).
                         setDuration(duration);
-                alphaAnim.addListener(new LauncherAnimatorListenerAdapter() {
+                alphaAnim.addListener(new AnimatorListenerAdapter() {
                     @Override
-                    public void onAnimationEndOrCancel(Animator animation) {
+                    public void onAnimationEnd(Animator animation) {
                         String tag = getCurrentTabTag();
                         if (tag == TAG_ALL) {
                             mAllApps.setAppFilter(AllAppsPagedView.ALL_APPS_FLAG);
diff --git a/src/com/android/launcher2/ApplicationInfoDropTarget.java b/src/com/android/launcher2/ApplicationInfoDropTarget.java
index fdcbbd4..2ee3501 100644
--- a/src/com/android/launcher2/ApplicationInfoDropTarget.java
+++ b/src/com/android/launcher2/ApplicationInfoDropTarget.java
@@ -16,16 +16,18 @@
 
 package com.android.launcher2;
 
+import com.android.launcher.R;
+
 import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
+import android.animation.Animator.AnimatorListener;
 import android.content.ComponentName;
 import android.content.Context;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
 import android.util.AttributeSet;
-
-import com.android.launcher.R;
+import android.view.View;
 
 /**
  * Implements a DropTarget which allows applications to be dropped on it,
@@ -35,8 +37,9 @@
     private static final int sFadeInAnimationDuration = 200;
     private static final int sFadeOutAnimationDuration = 100;
 
-    private ObjectAnimator mFadeAnimator;
+    private AnimatorSet mFadeAnimator;
     private ObjectAnimator mHandleFadeAnimator;
+    private boolean mHandleWasVisibleOnDragStart;
 
     public ApplicationInfoDropTarget(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
@@ -87,13 +90,25 @@
             if (mActive) {
                 // Fade in this icon
                 if (mFadeAnimator != null) mFadeAnimator.cancel();
-                mFadeAnimator = ObjectAnimator.ofFloat(this, "alpha", 0.0f, 1.0f);
-                mFadeAnimator.setDuration(sFadeInAnimationDuration);
+                mFadeAnimator = new AnimatorSet();
+                Animator infoButtonAnimator = ObjectAnimator.ofFloat(this, "alpha", 0.0f, 1.0f);
+                infoButtonAnimator.setDuration(sFadeInAnimationDuration);
+
+                if (mHandle == mLauncher.findViewById(R.id.configure_button)) {
+                    final View divider = mLauncher.findViewById(R.id.divider_during_drag);
+                    divider.setVisibility(VISIBLE);
+                    Animator dividerAnimator = ObjectAnimator.ofFloat(divider, "alpha", 1.0f);
+                    dividerAnimator.setDuration(sFadeInAnimationDuration);
+                    mFadeAnimator.play(infoButtonAnimator).with(dividerAnimator);
+                } else {
+                    mFadeAnimator.play(infoButtonAnimator);
+                }
                 mFadeAnimator.start();
                 setVisibility(VISIBLE);
 
                 // Fade out the handle
                 if (mHandle != null) {
+                    mHandleWasVisibleOnDragStart = mHandle.getVisibility() == VISIBLE;
                     if (mHandleFadeAnimator != null) mHandleFadeAnimator.cancel();
                     mHandleFadeAnimator = ObjectAnimator.ofFloat(mHandle, "alpha", 0.0f);
                     mHandleFadeAnimator.setDuration(sFadeOutAnimationDuration);
@@ -123,8 +138,12 @@
 
         // Fade out this icon
         if (mFadeAnimator != null) mFadeAnimator.cancel();
-        mFadeAnimator = ObjectAnimator.ofFloat(this, "alpha", 0.0f);
-        mFadeAnimator.setDuration(sFadeOutAnimationDuration);
+        mFadeAnimator = new AnimatorSet();
+        Animator infoButtonAnimator = ObjectAnimator.ofFloat(this, "alpha", 0.0f);
+        infoButtonAnimator.setDuration(sFadeOutAnimationDuration);
+        final View divider = mLauncher.findViewById(R.id.divider_during_drag);
+        divider.setVisibility(VISIBLE);
+        Animator dividerAnimator = ObjectAnimator.ofFloat(divider, "alpha", 0.0f);
         mFadeAnimator.addListener(new AnimatorListener() {
             public void onAnimationStart(Animator animation) {}
             public void onAnimationRepeat(Animator animation) {}
@@ -136,13 +155,15 @@
             }
             private void onEndOrCancel() {
                 setVisibility(GONE);
+                divider.setVisibility(GONE);
                 mFadeAnimator = null;
             }
         });
+        mFadeAnimator.play(infoButtonAnimator).with(dividerAnimator);
         mFadeAnimator.start();
 
         // Fade in the handle
-        if (mHandle != null) {
+        if (mHandle != null && mHandleWasVisibleOnDragStart) {
             if (mHandleFadeAnimator != null) mHandleFadeAnimator.cancel();
             mHandleFadeAnimator = ObjectAnimator.ofFloat(mHandle, "alpha", 1.0f);
             mHandleFadeAnimator.setDuration(sFadeInAnimationDuration);
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index fd0ef51..ef4637e 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -304,13 +304,13 @@
             AnimatorSet bouncer = new AnimatorSet();
             bouncer.play(scaleUp).before(scaleDown);
             bouncer.play(scaleUp).with(alphaFadeOut);
-            bouncer.addListener(new LauncherAnimatorListenerAdapter() {
+            bouncer.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationStart(Animator animation) {
                     setHover(true);
                 }
                 @Override
-                public void onAnimationEndOrCancel(Animator animation) {
+                public void onAnimationEnd(Animator animation) {
                     setHover(false);
                     setHoverScale(1.0f);
                     setHoverAlpha(1.0f);
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index cfc15d1..5672921 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -599,8 +599,6 @@
      * in the customize drawer.
      */
     private Drawable parseWallpaperPreviewXml(ComponentName component, ResolveInfo ri) {
-        Drawable d = null;
-
         ActivityInfo activityInfo = ri.activityInfo;
         XmlResourceParser parser = null;
         try {
diff --git a/src/com/android/launcher2/InterruptibleInOutAnimator.java b/src/com/android/launcher2/InterruptibleInOutAnimator.java
index 570b9e7..be2fd04 100644
--- a/src/com/android/launcher2/InterruptibleInOutAnimator.java
+++ b/src/com/android/launcher2/InterruptibleInOutAnimator.java
@@ -52,9 +52,9 @@
         mOriginalFromValue = fromValue;
         mOriginalToValue = toValue;
 
-        mAnimator.addListener(new LauncherAnimatorListenerAdapter() {
+        mAnimator.addListener(new AnimatorListenerAdapter() {
             @Override
-            public void onAnimationEndOrCancel(Animator animation) {
+            public void onAnimationEnd(Animator animation) {
                 mDirection = STOPPED;
             }
         });
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 130cb76..40cd74b 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -22,6 +22,7 @@
 import com.android.launcher2.Workspace.ShrinkState;
 
 import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
@@ -337,9 +338,9 @@
                     ValueAnimator alphaAnim = ObjectAnimator.ofFloat(mCustomizePagedView,
                             "alpha", alpha, 0.0f);
                     alphaAnim.setDuration(duration);
-                    alphaAnim.addListener(new LauncherAnimatorListenerAdapter() {
+                    alphaAnim.addListener(new AnimatorListenerAdapter() {
                         @Override
-                        public void onAnimationEndOrCancel(Animator animation) {
+                        public void onAnimationEnd(Animator animation) {
                             String tag = mHomeCustomizationDrawer.getCurrentTabTag();
                             if (tag == WIDGETS_TAG) {
                                 mCustomizePagedView.setCustomizationFilter(
@@ -2541,13 +2542,13 @@
         if (seq != null) {
             Animator anim = ObjectAnimator.ofFloat(view, "alpha", show ? 1.0f : 0.0f);
             anim.setDuration(duration);
-            anim.addListener(new LauncherAnimatorListenerAdapter() {
+            anim.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationStart(Animator animation) {
                     if (showing) showToolbarButton(view);
                 }
                 @Override
-                public void onAnimationEndOrCancel(Animator animation) {
+                public void onAnimationEnd(Animator animation) {
                     if (hiding) hideToolbarButton(view);
                 }
             });
@@ -2572,23 +2573,27 @@
     private void hideAndShowToolbarButtons(State newState, AnimatorSet showSeq, AnimatorSet hideSeq) {
         final View searchButton = findViewById(R.id.search_button_cluster);
         final View allAppsButton = findViewById(R.id.all_apps_button);
+        final View divider = findViewById(R.id.divider);
         final View configureButton = findViewById(R.id.configure_button);
 
         switch (newState) {
         case WORKSPACE:
             hideOrShowToolbarButton(true, searchButton, showSeq);
             hideOrShowToolbarButton(true, allAppsButton, showSeq);
+            hideOrShowToolbarButton(true, divider, showSeq);
             hideOrShowToolbarButton(true, configureButton, showSeq);
             mDeleteZone.setHandle(allAppsButton);
             break;
         case ALL_APPS:
             hideOrShowToolbarButton(false, configureButton, hideSeq);
             hideOrShowToolbarButton(false, searchButton, hideSeq);
+            hideOrShowToolbarButton(false, divider, hideSeq);
             hideOrShowToolbarButton(false, allAppsButton, hideSeq);
             break;
         case CUSTOMIZE:
             hideOrShowToolbarButton(false, allAppsButton, hideSeq);
             hideOrShowToolbarButton(false, searchButton, hideSeq);
+            hideOrShowToolbarButton(false, divider, hideSeq);
             hideOrShowToolbarButton(false, configureButton, hideSeq);
             mDeleteZone.setHandle(allAppsButton);
             break;
@@ -2644,7 +2649,7 @@
             scaleAnim.setDuration(duration);
 
             scaleAnim.setInterpolator(new Workspace.ZoomOutInterpolator());
-            scaleAnim.addListener(new LauncherAnimatorListenerAdapter() {
+            scaleAnim.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationStart(Animator animation) {
                     // Prepare the position
@@ -2654,7 +2659,7 @@
                     toView.setAlpha(1.0f);
                 }
                 @Override
-                public void onAnimationEndOrCancel(Animator animation) {
+                public void onAnimationEnd(Animator animation) {
                     // If we don't set the final scale values here, if this animation is cancelled
                     // it will have the wrong scale value and subsequent cameraPan animations will
                     // not fix that
@@ -2727,9 +2732,9 @@
             ValueAnimator alphaAnim = ObjectAnimator.ofPropertyValuesHolder(fromView,
                     PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.0f));
             alphaAnim.setDuration(res.getInteger(R.integer.config_allAppsFadeOutTime));
-            alphaAnim.addListener(new LauncherAnimatorListenerAdapter() {
+            alphaAnim.addListener(new AnimatorListenerAdapter() {
                 @Override
-                public void onAnimationEndOrCancel(Animator animation) {
+                public void onAnimationEnd(Animator animation) {
                     fromView.setVisibility(View.GONE);
                 }
             });
@@ -2789,7 +2794,7 @@
         if (animated) {
             if (mStateAnimation != null) mStateAnimation.cancel();
             mStateAnimation = new AnimatorSet();
-            mStateAnimation.addListener(new LauncherAnimatorListenerAdapter() {
+            mStateAnimation.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationStart(Animator animation) {
                     toView.setVisibility(View.VISIBLE);
@@ -2797,7 +2802,7 @@
                     toView.setAlpha(1.0f);
                 }
                 @Override
-                public void onAnimationEndOrCancel(Animator animation) {
+                public void onAnimationEnd(Animator animation) {
                     fromView.setVisibility(View.GONE);
                 }
             });
diff --git a/src/com/android/launcher2/LauncherAnimatorListenerAdapter.java b/src/com/android/launcher2/LauncherAnimatorListenerAdapter.java
deleted file mode 100644
index 3ab4868..0000000
--- a/src/com/android/launcher2/LauncherAnimatorListenerAdapter.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher2;
-
-import android.animation.Animator;
-
-import java.util.HashSet;
-
-/**
- * This adapter class provides empty implementations of the methods from {@link android.animation.Animator.AnimatorListener}.
- * Any custom listener that cares only about a subset of the methods of this listener can
- * simply subclass this adapter class instead of implementing the interface directly.
- */
-public abstract class LauncherAnimatorListenerAdapter implements Animator.AnimatorListener {
-    HashSet<Animator> cancelled = new HashSet<Animator>();
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public final void onAnimationCancel(Animator animation) {
-        onAnimationEndOrCancel(animation);
-        cancelled.add(animation);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public final void onAnimationEnd(Animator animation) {
-        if (!cancelled.contains(animation)) onAnimationEndOrCancel(animation);
-        cancelled.remove(animation);
-    }
-
-    /**
-     * Like onAnimationEnd, except it's called immediately in the case on onAnimationCancel, and
-     * it's only called once in that case
-     */
-    public void onAnimationEndOrCancel(Animator animation) {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onAnimationRepeat(Animator animation) {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onAnimationStart(Animator animation) {
-    }
-
-}
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index f70480d..28b6ff9 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -16,17 +16,17 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
+import com.android.launcher.R;
+import com.android.launcher2.InstallWidgetReceiver.WidgetMimeTypeHandlerData;
 
 import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
 import android.animation.TimeInterpolator;
 import android.animation.ValueAnimator;
+import android.animation.Animator.AnimatorListener;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.app.AlertDialog;
 import android.app.WallpaperManager;
@@ -44,7 +44,6 @@
 import android.graphics.Bitmap;
 import android.graphics.Camera;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Rect;
@@ -62,12 +61,12 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.animation.DecelerateInterpolator;
-import android.widget.TabHost;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.android.launcher.R;
-import com.android.launcher2.InstallWidgetReceiver.WidgetMimeTypeHandlerData;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
 
 /**
  * The workspace is a wide area with a wallpaper and a finite number of pages.
@@ -267,13 +266,13 @@
             // In this case, we will skip drawing background protection
         }
 
-        mUnshrinkAnimationListener = new LauncherAnimatorListenerAdapter() {
+        mUnshrinkAnimationListener = new AnimatorListenerAdapter() {
             @Override
             public void onAnimationStart(Animator animation) {
                 mIsInUnshrinkAnimation = true;
             }
             @Override
-            public void onAnimationEndOrCancel(Animator animation) {
+            public void onAnimationEnd(Animator animation) {
                 mIsInUnshrinkAnimation = false;
                 if (mShrinkState != ShrinkState.SPRING_LOADED) {
                     mDrawCustomizeTrayBackground = false;
@@ -1520,22 +1519,19 @@
         }
 
         if (mDropAnim != null) {
-            // This should really be end(), but that will not be called synchronously,
-            // so instead we use LauncherAnimatorListenerAdapter.onAnimationEndOrCancel()
-            // and call cancel() here.
-            mDropAnim.cancel();
+            mDropAnim.end();
         }
         mDropAnim = new ValueAnimator();
         mDropAnim.setInterpolator(mQuintEaseOutInterpolator);
 
         // The view is invisible during the animation; we render it manually.
-        mDropAnim.addListener(new LauncherAnimatorListenerAdapter() {
+        mDropAnim.addListener(new AnimatorListenerAdapter() {
             public void onAnimationStart(Animator animation) {
                 // Set this here so that we don't render it until the animation begins
                 mDropView = view;
             }
 
-            public void onAnimationEndOrCancel(Animator animation) {
+            public void onAnimationEnd(Animator animation) {
                 if (mDropView != null) {
                     mDropView.setVisibility(View.VISIBLE);
                     mDropView = null;