Add a glow selection to the icons.  I'm not sure if I like it.
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index f7908b6..2199432 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -39,7 +39,6 @@
 import android.database.DataSetObserver;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.BlurMaskFilter;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.drawable.BitmapDrawable;
@@ -386,6 +385,7 @@
         private Allocation mAllocTouchXBorders;
 
         private Bitmap mSelectionBitmap;
+        private Canvas mSelectionCanvas;
 
         Params mParams;
         State mState;
@@ -534,20 +534,9 @@
             mParams.save();
             mState.save();
 
-            mSelectionBitmap = Bitmap.createBitmap(Defines.ICON_WIDTH_PX, Defines.ICON_HEIGHT_PX,
-                    Bitmap.Config.ARGB_8888);
-            Bitmap selectionBitmap = mSelectionBitmap;
-            Paint paint = new Paint();
-            float radius = 12 * getContext().getResources().getDisplayMetrics().density;
-            //paint.setMaskFilter(new BlurMaskFilter(radius, BlurMaskFilter.Blur.OUTER));
-            Canvas canvas = new Canvas(selectionBitmap);
-            canvas.drawColor(0xffff0000);
-
-            mSelectedIcon = Allocation.createFromBitmap(mRS, selectionBitmap,
-                    Element.RGBA_8888, false);
-            mSelectedIcon.uploadToTexture(0);
-
-            mState.selectedIconTexture = mSelectedIcon.getID();
+            mSelectionBitmap = Bitmap.createBitmap(Defines.ICON_TEXTURE_WIDTH_PX,
+                    Defines.ICON_TEXTURE_HEIGHT_PX, Bitmap.Config.ARGB_8888);
+            mSelectionCanvas = new Canvas(mSelectionBitmap);
 
             Log.d(TAG, "initData calling mRollo.setApps");
             setApps(null);
@@ -612,6 +601,9 @@
                 mScript.bindAllocation(mAllocLabelID, Defines.ALLOC_LABEL_IDS);
             }
 
+            if (mAllAppsList != null) {
+                selectIcon(0); // TODO remove
+            }
             mState.save();
         }
 
@@ -676,13 +668,29 @@
          * You need to call save() on mState on your own after calling this.
          */
         void selectIcon(int x, int y, int scrollX, int currentPage) {
-            int iconCount = mAllAppsList.size();
             int index = chooseTappedIcon(x, y, scrollX, currentPage);
+            selectIcon(index);
+        }
+
+        void selectIcon(int index) {
+            Log.d(TAG, "selectIcon index=" + index);
+            int iconCount = mAllAppsList.size();
             if (index < 0 || index >= iconCount) {
                 mState.selectedIconIndex = -1;
                 return;
             } else {
                 mState.selectedIconIndex = index;
+
+                Bitmap selectionBitmap = mSelectionBitmap;
+
+                Utilities.drawSelectedAllAppsBitmap(mSelectionCanvas,
+                        selectionBitmap.getWidth(), selectionBitmap.getHeight(),
+                        mAllAppsList.get(index).iconBitmap);
+
+                mSelectedIcon = Allocation.createFromBitmap(mRS, selectionBitmap,
+                        Element.RGBA_8888, false);
+                mSelectedIcon.uploadToTexture(0);
+                mState.selectedIconTexture = mSelectedIcon.getID();
             }
         }
 
@@ -690,7 +698,7 @@
          * You need to call save() on mState on your own after calling this.
          */
         void clearSelectedIcon() {
-            mState.selectedIconIndex = -1;
+            //mState.selectedIconIndex = -1;
         }
     }
 }
diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java
index 073b179..50757ca 100644
--- a/src/com/android/launcher2/Utilities.java
+++ b/src/com/android/launcher2/Utilities.java
@@ -20,10 +20,12 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.PaintDrawable;
 import android.graphics.Bitmap;
+import android.graphics.BlurMaskFilter;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.PaintFlagsDrawFilter;
 import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Typeface;
@@ -39,12 +41,17 @@
  * Various utilities shared amongst the Launcher's classes.
  */
 final class Utilities {
+    private static final String TAG = "Launcher.Utilities";
+
     private static int sIconWidth = -1;
     private static int sIconHeight = -1;
     private static int sIconTextureWidth = -1;
     private static int sIconTextureHeight = -1;
 
     private static final Paint sPaint = new Paint();
+    private static final Paint sBlurPaint = new Paint();
+    private static final Paint sGlowColorPaint = new Paint();
+    private static final Paint sEmptyPaint = new Paint();
     private static final Rect sBounds = new Rect();
     private static final Rect sOldBounds = new Rect();
     private static Canvas sCanvas = new Canvas();
@@ -236,6 +243,32 @@
         }
     }
 
+    static void drawSelectedAllAppsBitmap(Canvas dest, int destWidth, int destHeight, Bitmap src) {
+        synchronized (sCanvas) { // we share the statics :-(
+            if (sIconWidth == -1) {
+                // We can't have gotten to here without src being initialized, which
+                // comes from this file already.  So just assert.
+                //initStatics(context);
+                throw new RuntimeException("Assertion failed: Utilities not initialized");
+            }
+
+            dest.drawColor(0, PorterDuff.Mode.CLEAR);
+
+            final float scale = 1.55f;
+            Bitmap scaled = Bitmap.createScaledBitmap(src, (int)(src.getWidth()*scale),
+                    (int)(src.getHeight()*scale), true);
+
+            int[] xy = new int[2];
+            Bitmap mask = scaled.extractAlpha(sBlurPaint, xy);
+
+            dest.drawBitmap(mask, (destWidth - mask.getWidth()) / 2,
+                    (destHeight - mask.getHeight()) / 2, sGlowColorPaint);
+            dest.drawBitmap(src, (destWidth - src.getWidth()) / 2,
+                    (destHeight - src.getHeight()) / 2, sEmptyPaint);
+
+            mask.recycle();
+        }
+    }
 
     /**
      * Returns a Bitmap representing the thumbnail of the specified Bitmap.
@@ -289,8 +322,14 @@
 
     private static void initStatics(Context context) {
         final Resources resources = context.getResources();
+        final DisplayMetrics metrics = resources.getDisplayMetrics();
+        final float density = metrics.density;
+
         sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);
         sIconTextureWidth = sIconTextureHeight = roundToPow2(sIconWidth);
+
+        sBlurPaint.setMaskFilter(new BlurMaskFilter(7 * density, BlurMaskFilter.Blur.NORMAL));
+        sGlowColorPaint.setColor(0xffff9000);
     }
 
     static class BubbleText {
@@ -333,7 +372,7 @@
             rectPaint.setColor(0xff000000);
             rectPaint.setAntiAlias(true);
 
-            Log.d(Launcher.LOG_TAG, "scale=" + scale + " textSize=" + (13*scale));
+            Log.d(TAG, "scale=" + scale + " textSize=" + (13*scale));
 
             TextPaint textPaint = mTextPaint = new TextPaint();
             textPaint.setTypeface(Typeface.DEFAULT);
@@ -352,7 +391,7 @@
             mBitmapWidth = roundToPow2((int)(mBubbleRect.width() + 0.5f));
             mBitmapHeight = roundToPow2((int)((MAX_LINES * mLineHeight) + leading + 0.5f));
 
-            Log.d(Launcher.LOG_TAG, "mBitmapWidth=" + mBitmapWidth + " mBitmapHeight="
+            Log.d(TAG, "mBitmapWidth=" + mBitmapWidth + " mBitmapHeight="
                     + mBitmapHeight + " w=" + ((int)(mBubbleRect.width() + 0.5f))
                     + " h=" + ((int)((MAX_LINES * mLineHeight) + leading + 0.5f)));
         }