Merge "Notify data-set changed when new items are added/removed." into ub-launcher3-burnaby
diff --git a/res/layout/widget_cell.xml b/res/layout/widget_cell.xml
index a5b25aa..f53b74e 100644
--- a/res/layout/widget_cell.xml
+++ b/res/layout/widget_cell.xml
@@ -16,16 +16,16 @@
 <com.android.launcher3.widget.WidgetCell
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:launcher="http://schemas.android.com/apk/res-auto"
-
-    android:layout_width="wrap_content"
+    android:layout_width="@dimen/widget_preview_container_width"
     android:layout_height="wrap_content"
     android:layout_weight="1"
+    android:paddingTop="@dimen/widget_preview_padding_top"
     android:orientation="vertical"
     android:background="@drawable/focusable_view_bg"
     android:focusable="true">
 
     <LinearLayout
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:paddingTop="@dimen/widget_preview_label_vertical_padding"
         android:paddingBottom="@dimen/widget_preview_label_vertical_padding"
@@ -64,6 +64,7 @@
 
             android:textColor="#FFFFFFFF"
             android:textSize="12sp"
+            android:textAlignment="viewStart"
             android:fontFamily="sans-serif-condensed"
             android:shadowRadius="2.0"
             android:shadowColor="#B0000000" />
@@ -73,12 +74,9 @@
     <com.android.launcher3.widget.WidgetImageView
         android:id="@+id/widget_preview"
         style="@style/WidgetImageView"
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:paddingTop="@dimen/widget_preview_padding_top"
-        android:paddingEnd="@dimen/widget_preview_padding_right"
-        android:paddingRight="@dimen/widget_preview_padding_right"
         android:scaleType="matrix" />
 
 </com.android.launcher3.widget.WidgetCell>
diff --git a/res/layout/widgets_view.xml b/res/layout/widgets_view.xml
index 8e7ed16..0800f59 100644
--- a/res/layout/widgets_view.xml
+++ b/res/layout/widgets_view.xml
@@ -25,16 +25,16 @@
     android:paddingBottom="@dimen/widget_container_inset"
     android:descendantFocusability="afterDescendants">
 
-    <!-- Temporary until finalizing on animation.  -->
-    <include
+    <FrameLayout
         android:id="@+id/widgets_reveal_view"
-        layout="@layout/apps_reveal_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_gravity="center" />
+        android:layout_gravity="center"
+        android:visibility="invisible"
+        android:focusable="false" />
 
     <LinearLayout
-        android:id="@+id/content"
+        android:id="@+id/widgets_content"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:clipChildren="false"
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 13a1f40..9ecd07dd 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -25,8 +25,8 @@
 
 <!-- AppsCustomize -->
     <dimen name="widget_preview_label_margin_top">8dp</dimen>
-    <dimen name="widget_preview_label_margin_left">@dimen/widget_preview_padding_left</dimen>
-    <dimen name="widget_preview_label_margin_right">@dimen/widget_preview_padding_right</dimen>
+    <dimen name="widget_preview_label_margin_left">@dimen/widget_preview_label_horizontal_padding</dimen>
+    <dimen name="widget_preview_label_margin_right">@dimen/widget_preview_label_horizontal_padding</dimen>
 
 <!-- Cling -->
     <dimen name="cling_migration_logo_height">400dp</dimen>
diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml
index 229375f..3589e80 100644
--- a/res/values-v17/styles.xml
+++ b/res/values-v17/styles.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <style name="WidgetImageView">
-        <item name="android:paddingStart">@dimen/widget_preview_padding_left</item>
+        <item name="android:paddingStart">@dimen/widget_preview_horizontal_padding</item>
     </style>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 101b755..cad60fb 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -81,15 +81,16 @@
 <!-- Widget tray -->
     <dimen name="widget_container_inset">8dp</dimen>
     <dimen name="widget_preview_size">140dp</dimen>
-    <dimen name="widget_preview_padding_left">16dp</dimen>
-    <dimen name="widget_preview_padding_right">16dp</dimen>
     <dimen name="widget_preview_padding_top">8dp</dimen>
     <dimen name="widget_preview_label_vertical_padding">8dp</dimen>
     <dimen name="widget_preview_label_horizontal_padding">8dp</dimen>
+    <dimen name="widget_preview_horizontal_padding">8dp</dimen>
 
     <dimen name="widget_section_height">52dp</dimen>
     <dimen name="widget_section_icon_padding">8dp</dimen>
 
+    <!-- Equation: widget_preview_size + 2 * widget_preview_padding_horizontal -->
+    <dimen name="widget_preview_container_width">156dp</dimen>
     <dimen name="widget_cell_height">160dp</dimen>
 
     <!-- Padding applied to shortcut previews -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 94efebc..16d4cbe 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -92,7 +92,7 @@
 
     <!-- Overridden in device overlays -->
     <style name="WidgetImageView">
-        <item name="android:paddingLeft">@dimen/widget_preview_padding_left</item>
+        <item name="android:paddingLeft">@dimen/widget_preview_horizontal_padding</item>
     </style>
 
 </resources>
diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java
index 78272a8..8ba5c60 100644
--- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java
+++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java
@@ -182,8 +182,14 @@
      */
     public void startAnimationToWidgets(final boolean animated) {
         final WidgetsContainerView toView = mLauncher.getWidgetsView();
+        final Resources res = mLauncher.getResources();
         PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
             @Override
+            public void onRevealViewVisible(View revealView, View contentView,
+                    View allAppsButtonView) {
+                revealView.setBackground(res.getDrawable(R.drawable.quantum_panel_dark));
+            }
+            @Override
             public float getMaterialRevealViewFinalAlpha(View revealView) {
                 return 0.3f;
             }
@@ -192,8 +198,9 @@
                 return revealView.getMeasuredHeight() / 2;
             }
         };
-        startAnimationToOverlay(Workspace.State.OVERVIEW_HIDDEN, toView, toView.getContentView(),
-                toView.getRevealView(), animated, true /* hideSearchBar */, cb);
+        startAnimationToOverlay(Workspace.State.OVERVIEW_HIDDEN, toView,
+                toView.getContentView(), toView.getRevealView(), animated, true /* hideSearchBar */,
+                cb);
     }
 
     /**
@@ -386,7 +393,6 @@
                     mStateAnimation.start();
                 }
             };
-
             toView.bringToFront();
             toView.setVisibility(View.VISIBLE);
             toView.post(startAnimRunnable);
@@ -481,9 +487,15 @@
     private void startAnimationToWorkspaceFromWidgets(final Launcher.State fromState,
               final Workspace.State toWorkspaceState, final boolean animated,
               final Runnable onCompleteRunnable) {
-        WidgetsContainerView widgetsView = mLauncher.getWidgetsView();
+        final WidgetsContainerView widgetsView = mLauncher.getWidgetsView();
+        final Resources res = mLauncher.getResources();
         PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
             @Override
+            public void onRevealViewVisible(View revealView, View contentView,
+                                            View allAppsButtonView) {
+                revealView.setBackground(res.getDrawable(R.drawable.quantum_panel_dark));
+            }
+            @Override
             public float getMaterialRevealViewFinalYDrift(View revealView) {
                 return revealView.getMeasuredHeight() / 2;
             }
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index d10c304..1ae75c3 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -50,10 +50,7 @@
     private static final String TAG = "WidgetCell";
     private static final boolean DEBUG = false;
 
-    // Temporary preset width and height of the image to keep them aligned.
-    //private static final int PRESET_PREVIEW_HEIGHT = 480;
-    //private static final int PRESET_PREVIEW_WIDTH = 480;
-
+    private static final int FADE_IN_DURATION_MS = 70;
     private int mPresetPreviewSize;
 
     private static WidgetCell sShortpressTarget = null;
@@ -210,7 +207,8 @@
                         mOriginalImagePadding.right,
                         mOriginalImagePadding.bottom);
             }
-            image.setAlpha(1f);
+            image.setAlpha(0f);
+            image.animate().alpha(1.0f).setDuration(FADE_IN_DURATION_MS);
             image.mAllowRequestLayout = true;
             image.requestLayout();
         }
diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java
index 5aa80a9..292a5de 100644
--- a/src/com/android/launcher3/widget/WidgetsContainerView.java
+++ b/src/com/android/launcher3/widget/WidgetsContainerView.java
@@ -126,7 +126,7 @@
     //
 
     public View getContentView() {
-        return findViewById(R.id.widgets_list_view);
+        return findViewById(R.id.widgets_content);
     }
 
     public View getRevealView() {