Asset updates

- Change how default widget previews look (5509429)
- Improve antialiasing in portal assets

Change-Id: I9993aec46a9a9ab8a732b4fc150120c935523f02
diff --git a/res/drawable-hdpi/default_widget_preview_holo.9.png b/res/drawable-hdpi/default_widget_preview_holo.9.png
index 6745e49..0b4a634 100644
--- a/res/drawable-hdpi/default_widget_preview_holo.9.png
+++ b/res/drawable-hdpi/default_widget_preview_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/portal_container_holo.9.png b/res/drawable-hdpi/portal_container_holo.9.png
index c497612..557ee5a 100644
--- a/res/drawable-hdpi/portal_container_holo.9.png
+++ b/res/drawable-hdpi/portal_container_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/portal_ring_inner_holo.png b/res/drawable-hdpi/portal_ring_inner_holo.png
index 477e569..e953221 100644
--- a/res/drawable-hdpi/portal_ring_inner_holo.png
+++ b/res/drawable-hdpi/portal_ring_inner_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/portal_ring_inner_nolip_holo.png b/res/drawable-hdpi/portal_ring_inner_nolip_holo.png
new file mode 100644
index 0000000..257fc69
--- /dev/null
+++ b/res/drawable-hdpi/portal_ring_inner_nolip_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/portal_ring_outer_holo.png b/res/drawable-hdpi/portal_ring_outer_holo.png
index 2b635cb..2bf0c0d 100644
--- a/res/drawable-hdpi/portal_ring_outer_holo.png
+++ b/res/drawable-hdpi/portal_ring_outer_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/portal_ring_rest.png b/res/drawable-hdpi/portal_ring_rest.png
index b9ef778..93e3f6b 100644
--- a/res/drawable-hdpi/portal_ring_rest.png
+++ b/res/drawable-hdpi/portal_ring_rest.png
Binary files differ
diff --git a/res/drawable-hdpi/widget_info_bg.9.png b/res/drawable-hdpi/widget_info_bg.9.png
deleted file mode 100644
index df4cea9..0000000
--- a/res/drawable-hdpi/widget_info_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/default_widget_preview_holo.9.png b/res/drawable-mdpi/default_widget_preview_holo.9.png
index f9a9726..0bfdaef 100644
--- a/res/drawable-mdpi/default_widget_preview_holo.9.png
+++ b/res/drawable-mdpi/default_widget_preview_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/portal_container_holo.9.png b/res/drawable-mdpi/portal_container_holo.9.png
index 30b0fa0..9a47517 100644
--- a/res/drawable-mdpi/portal_container_holo.9.png
+++ b/res/drawable-mdpi/portal_container_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/portal_ring_inner_holo.png b/res/drawable-mdpi/portal_ring_inner_holo.png
index eccea20..3d704af 100644
--- a/res/drawable-mdpi/portal_ring_inner_holo.png
+++ b/res/drawable-mdpi/portal_ring_inner_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/portal_ring_inner_nolip_holo.png b/res/drawable-mdpi/portal_ring_inner_nolip_holo.png
new file mode 100644
index 0000000..1dbdbe8
--- /dev/null
+++ b/res/drawable-mdpi/portal_ring_inner_nolip_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/portal_ring_outer_holo.png b/res/drawable-mdpi/portal_ring_outer_holo.png
index c514217..3a7303e 100644
--- a/res/drawable-mdpi/portal_ring_outer_holo.png
+++ b/res/drawable-mdpi/portal_ring_outer_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/portal_ring_rest.png b/res/drawable-mdpi/portal_ring_rest.png
index 3ab8b36..259e48c 100644
--- a/res/drawable-mdpi/portal_ring_rest.png
+++ b/res/drawable-mdpi/portal_ring_rest.png
Binary files differ
diff --git a/res/drawable-mdpi/widget_info_bg.9.png b/res/drawable-mdpi/widget_info_bg.9.png
deleted file mode 100644
index c8c62b5..0000000
--- a/res/drawable-mdpi/widget_info_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/default_widget_preview_holo.9.png b/res/drawable-xhdpi/default_widget_preview_holo.9.png
index 87cc975..42d57d8 100644
--- a/res/drawable-xhdpi/default_widget_preview_holo.9.png
+++ b/res/drawable-xhdpi/default_widget_preview_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/portal_container_holo.9.png b/res/drawable-xhdpi/portal_container_holo.9.png
index 0935a4b..4ae8d22 100644
--- a/res/drawable-xhdpi/portal_container_holo.9.png
+++ b/res/drawable-xhdpi/portal_container_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/portal_ring_inner_holo.png b/res/drawable-xhdpi/portal_ring_inner_holo.png
index bc34314..b9867c0 100644
--- a/res/drawable-xhdpi/portal_ring_inner_holo.png
+++ b/res/drawable-xhdpi/portal_ring_inner_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/portal_ring_inner_nolip_holo.png b/res/drawable-xhdpi/portal_ring_inner_nolip_holo.png
new file mode 100644
index 0000000..e218713
--- /dev/null
+++ b/res/drawable-xhdpi/portal_ring_inner_nolip_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/portal_ring_outer_holo.png b/res/drawable-xhdpi/portal_ring_outer_holo.png
index a7b5b60..286bee0 100644
--- a/res/drawable-xhdpi/portal_ring_outer_holo.png
+++ b/res/drawable-xhdpi/portal_ring_outer_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/portal_ring_rest.png b/res/drawable-xhdpi/portal_ring_rest.png
index ba0a652..ab5c2c4 100644
--- a/res/drawable-xhdpi/portal_ring_rest.png
+++ b/res/drawable-xhdpi/portal_ring_rest.png
Binary files differ
diff --git a/res/drawable-xhdpi/widget_info_bg.9.png b/res/drawable-xhdpi/widget_info_bg.9.png
deleted file mode 100644
index 19eff05..0000000
--- a/res/drawable-xhdpi/widget_info_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/portal_ring_inner_holo.png b/res/drawable-xlarge-hdpi/portal_ring_inner_holo.png
index 659c23b..b3be472 100644
--- a/res/drawable-xlarge-hdpi/portal_ring_inner_holo.png
+++ b/res/drawable-xlarge-hdpi/portal_ring_inner_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/portal_ring_inner_nolip_holo.png b/res/drawable-xlarge-hdpi/portal_ring_inner_nolip_holo.png
new file mode 100644
index 0000000..96b981c
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/portal_ring_inner_nolip_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/portal_ring_outer_holo.png b/res/drawable-xlarge-hdpi/portal_ring_outer_holo.png
index 8ec67df..bc13a26 100644
--- a/res/drawable-xlarge-hdpi/portal_ring_outer_holo.png
+++ b/res/drawable-xlarge-hdpi/portal_ring_outer_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/portal_ring_inner_holo.png b/res/drawable-xlarge-mdpi/portal_ring_inner_holo.png
index 8e3dd57..319c074 100644
--- a/res/drawable-xlarge-mdpi/portal_ring_inner_holo.png
+++ b/res/drawable-xlarge-mdpi/portal_ring_inner_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/portal_ring_inner_nolip_holo.png b/res/drawable-xlarge-mdpi/portal_ring_inner_nolip_holo.png
new file mode 100644
index 0000000..8537714
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/portal_ring_inner_nolip_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/portal_ring_outer_holo.png b/res/drawable-xlarge-mdpi/portal_ring_outer_holo.png
index 94e0677..365dcfc 100644
--- a/res/drawable-xlarge-mdpi/portal_ring_outer_holo.png
+++ b/res/drawable-xlarge-mdpi/portal_ring_outer_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-xhdpi/portal_ring_inner_holo.png b/res/drawable-xlarge-xhdpi/portal_ring_inner_holo.png
index a013e5a..d4ce45f 100644
--- a/res/drawable-xlarge-xhdpi/portal_ring_inner_holo.png
+++ b/res/drawable-xlarge-xhdpi/portal_ring_inner_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-xhdpi/portal_ring_inner_nolip_holo.png b/res/drawable-xlarge-xhdpi/portal_ring_inner_nolip_holo.png
new file mode 100644
index 0000000..9aa13c9
--- /dev/null
+++ b/res/drawable-xlarge-xhdpi/portal_ring_inner_nolip_holo.png
Binary files differ
diff --git a/res/drawable-xlarge-xhdpi/portal_ring_outer_holo.png b/res/drawable-xlarge-xhdpi/portal_ring_outer_holo.png
index 7bdaaf3..0106cd6 100644
--- a/res/drawable-xlarge-xhdpi/portal_ring_outer_holo.png
+++ b/res/drawable-xlarge-xhdpi/portal_ring_outer_holo.png
Binary files differ
diff --git a/res/layout-sw720dp/apps_customize_widget.xml b/res/layout-sw720dp/apps_customize_widget.xml
index 31c3fbe..e707ef7 100644
--- a/res/layout-sw720dp/apps_customize_widget.xml
+++ b/res/layout-sw720dp/apps_customize_widget.xml
@@ -32,8 +32,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginBottom="4dp"
-        android:orientation="vertical"
-        android:background="@drawable/widget_info_bg">
+        android:orientation="vertical">
         <!-- The name of the widget. -->
         <TextView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/widget_name"
@@ -54,7 +53,7 @@
 
         <!-- The original dimensions of the widget (can't be the same text as above due to different
              style. -->
-        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+        <TextView
             android:id="@+id/widget_dims"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
diff --git a/res/layout/apps_customize_widget.xml b/res/layout/apps_customize_widget.xml
index 7cc4177..2c11c1d 100644
--- a/res/layout/apps_customize_widget.xml
+++ b/res/layout/apps_customize_widget.xml
@@ -32,8 +32,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="4dp"
-        android:orientation="horizontal"
-        android:background="@drawable/widget_info_bg">
+        android:orientation="horizontal">
         <!-- The name of the widget. -->
         <TextView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/widget_name"
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index f5142bf..dab73a6 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -32,10 +32,13 @@
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.graphics.MaskFilter;
+import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Bitmap.Config;
+import android.graphics.TableMaskFilter;
 import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
 import android.os.Process;
@@ -552,10 +555,20 @@
             createItemInfo.spanX = createItemInfo.spanY = 1;
         }
 
+        // We use a custom alpha clip table for the default widget previews
+        Paint alphaClipPaint = null;
+        if (createItemInfo instanceof PendingAddWidgetInfo) {
+            if (((PendingAddWidgetInfo) createItemInfo).hasDefaultPreview) {
+                MaskFilter alphaClipTable = TableMaskFilter.CreateClipTable(0, 255);
+                alphaClipPaint = new Paint();
+                alphaClipPaint.setMaskFilter(alphaClipTable);
+            }
+        }
+
         // Start the drag
         mLauncher.lockScreenOrientationOnLargeUI();
         mLauncher.getWorkspace().onDragStartedWithItemSpans(createItemInfo.spanX,
-                createItemInfo.spanY, b);
+                createItemInfo.spanY, b, alphaClipPaint);
         mDragController.startDrag(image, b, this, createItemInfo,
                 DragController.DRAG_ACTION_COPY, null);
         b.recycle();
@@ -914,10 +927,9 @@
     }
     private Bitmap getShortcutPreview(ResolveInfo info, int cellWidth, int cellHeight) {
         // Render the background
-        int offset = (int) (mAppIconSize * sWidgetPreviewIconPaddingPercentage);
-        int bitmapSize = mAppIconSize + 2 * offset;
+        int offset = 0;
+        int bitmapSize = mAppIconSize;
         Bitmap preview = Bitmap.createBitmap(bitmapSize, bitmapSize, Config.ARGB_8888);
-        renderDrawableToBitmap(mDefaultWidgetBackground, preview, 0, 0, bitmapSize, bitmapSize);
 
         // Render the icon
         Drawable icon = mIconCache.getFullResIcon(info, mPackageManager);
@@ -964,41 +976,45 @@
             int targetHeight = mWidgetSpacingLayout.estimateCellHeight(cellVSpan);
             int bitmapWidth = targetWidth;
             int bitmapHeight = targetHeight;
-            int offset = (int) (mAppIconSize * sWidgetPreviewIconPaddingPercentage);
+            int minOffset = (int) (mAppIconSize * sWidgetPreviewIconPaddingPercentage);
             float iconScale = 1f;
 
             // Determine the size of the bitmap we want to draw
             if (cellHSpan == cellVSpan) {
                 // For square widgets, we just have a fixed size for 1x1 and larger-than-1x1
                 if (cellHSpan <= 1) {
-                    bitmapWidth = bitmapHeight = mAppIconSize + 2 * offset;
+                    bitmapWidth = bitmapHeight = mAppIconSize + 2 * minOffset;
                 } else {
-                    bitmapWidth = bitmapHeight = mAppIconSize + 4 * offset;
+                    bitmapWidth = bitmapHeight = mAppIconSize + 4 * minOffset;
                 }
             } else {
                 // Otherwise, ensure that we are properly sized within the cellWidth/Height
                 if (targetWidth > targetHeight) {
                     bitmapWidth = Math.min(targetWidth, cellWidth);
                     bitmapHeight = (int) (targetHeight * ((float) bitmapWidth / targetWidth));
-                    iconScale = Math.min((float) bitmapHeight / (mAppIconSize + 2 * offset), 1f);
+                    iconScale = Math.min((float) bitmapHeight / (mAppIconSize + 2 * minOffset), 1f);
                 } else {
                     bitmapHeight = Math.min(targetHeight, cellHeight);
                     bitmapWidth = (int) (targetWidth * ((float) bitmapHeight / targetHeight));
-                    iconScale = Math.min((float) bitmapWidth / (mAppIconSize + 2 * offset), 1f);
+                    iconScale = Math.min((float) bitmapWidth / (mAppIconSize + 2 * minOffset), 1f);
                 }
             }
             preview = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Config.ARGB_8888);
-            renderDrawableToBitmap(mDefaultWidgetBackground, preview, 0, 0, bitmapWidth,
-                    bitmapWidth);
+            if (cellHSpan != 1 || cellVSpan != 1) {
+                renderDrawableToBitmap(mDefaultWidgetBackground, preview, 0, 0, bitmapWidth,
+                        bitmapHeight);
+            }
 
             // Draw the icon in the top left corner
             try {
                 Drawable icon = null;
+                int hoffset = (int) (bitmapWidth / 2 - mAppIconSize * iconScale / 2);
+                int yoffset = (int) (bitmapHeight / 2 - mAppIconSize * iconScale / 2);
                 if (info.icon > 0) icon = mPackageManager.getDrawable(packageName, info.icon, null);
                 if (icon == null) icon = resources.getDrawable(R.drawable.ic_launcher_application);
 
-                renderDrawableToBitmap(icon, preview, (int) (offset * iconScale),
-                        (int) (offset * iconScale), (int) (mAppIconSize * iconScale),
+                renderDrawableToBitmap(icon, preview, hoffset, yoffset,
+                        (int) (mAppIconSize * iconScale),
                         (int) (mAppIconSize * iconScale));
             } catch (Resources.NotFoundException e) {}
         }
diff --git a/src/com/android/launcher2/HolographicOutlineHelper.java b/src/com/android/launcher2/HolographicOutlineHelper.java
index 748d89e..1faaeef 100644
--- a/src/com/android/launcher2/HolographicOutlineHelper.java
+++ b/src/com/android/launcher2/HolographicOutlineHelper.java
@@ -122,10 +122,18 @@
      */
     void applyExpensiveOutlineWithBlur(Bitmap srcDst, Canvas srcDstCanvas, int color,
             int outlineColor, int thickness) {
+        applyExpensiveOutlineWithBlur(srcDst, srcDstCanvas, color, outlineColor, mAlphaClipPaint,
+                thickness);
+    }
+    void applyExpensiveOutlineWithBlur(Bitmap srcDst, Canvas srcDstCanvas, int color,
+            int outlineColor, Paint alphaClipPaint, int thickness) {
 
         // We start by removing most of the alpha channel so as to ignore shadows, and
         // other types of partial transparency when defining the shape of the object
-        Bitmap glowShape = srcDst.extractAlpha(mAlphaClipPaint, mTempOffset);
+        if (alphaClipPaint == null) {
+            alphaClipPaint = mAlphaClipPaint;
+        }
+        Bitmap glowShape = srcDst.extractAlpha(alphaClipPaint, mTempOffset);
 
         // calculate the outer blur first
         BlurMaskFilter outerBlurMaskFilter;
@@ -217,6 +225,12 @@
     }
 
     void applyMediumExpensiveOutlineWithBlur(Bitmap srcDst, Canvas srcDstCanvas, int color,
+            int outlineColor, Paint alphaClipPaint) {
+        applyExpensiveOutlineWithBlur(srcDst, srcDstCanvas, color, outlineColor, alphaClipPaint,
+                MEDIUM);
+    }
+
+    void applyMediumExpensiveOutlineWithBlur(Bitmap srcDst, Canvas srcDstCanvas, int color,
             int outlineColor) {
         applyExpensiveOutlineWithBlur(srcDst, srcDstCanvas, color, outlineColor, MEDIUM);
     }
diff --git a/src/com/android/launcher2/PendingAddItemInfo.java b/src/com/android/launcher2/PendingAddItemInfo.java
index 7b564e0..e243cc0 100644
--- a/src/com/android/launcher2/PendingAddItemInfo.java
+++ b/src/com/android/launcher2/PendingAddItemInfo.java
@@ -33,6 +33,7 @@
 class PendingAddWidgetInfo extends PendingAddItemInfo {
     int minWidth;
     int minHeight;
+    boolean hasDefaultPreview;
 
     // Any configuration data that we want to pass to a configuration activity when
     // starting up a widget
@@ -44,6 +45,7 @@
         componentName = i.provider;
         minWidth = i.minWidth;
         minHeight = i.minHeight;
+        hasDefaultPreview = i.previewImage <= 0;
         if (dataMimeType != null && data != null) {
             mimeType = dataMimeType;
             configurationData = data;
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index bf89078..0c297dd 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1464,6 +1464,10 @@
     }
 
     public void onDragStartedWithItemSpans(int spanX, int spanY, Bitmap b) {
+        onDragStartedWithItemSpans(spanX, spanY, b, null);
+    }
+
+    public void onDragStartedWithItemSpans(int spanX, int spanY, Bitmap b, Paint alphaClipPaint) {
         final Canvas canvas = new Canvas();
 
         // We need to add extra padding to the bitmap to make room for the glow effect
@@ -1474,7 +1478,7 @@
         int[] size = cl.cellSpansToSize(spanX, spanY);
 
         // The outline is used to visualize where the item will land if dropped
-        mDragOutline = createDragOutline(b, canvas, bitmapPadding, size[0], size[1]);
+        mDragOutline = createDragOutline(b, canvas, bitmapPadding, size[0], size[1], alphaClipPaint);
     }
 
     // we call this method whenever a drag and drop in Launcher finishes, even if Workspace was
@@ -1817,6 +1821,10 @@
      * Responsibility for the bitmap is transferred to the caller.
      */
     private Bitmap createDragOutline(Bitmap orig, Canvas canvas, int padding, int w, int h) {
+        return createDragOutline(orig, canvas, padding, w, h, null);
+    }
+    private Bitmap createDragOutline(Bitmap orig, Canvas canvas, int padding, int w, int h,
+            Paint alphaClipPaint) {
         final int outlineColor = getResources().getColor(android.R.color.holo_blue_light);
         final Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
         canvas.setBitmap(b);
@@ -1834,7 +1842,8 @@
         Paint p = new Paint();
         p.setFilterBitmap(true);
         canvas.drawBitmap(orig, src, dst, p);
-        mOutlineHelper.applyMediumExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor);
+        mOutlineHelper.applyMediumExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor,
+                alphaClipPaint);
         canvas.setBitmap(null);
 
         return b;