Merge "Send live wallpaper taps."
diff --git a/res/layout-xlarge/all_apps_paged_view_application.xml b/res/layout-xlarge/all_apps_paged_view_application.xml
index 48b5712..a080bcec 100644
--- a/res/layout-xlarge/all_apps_paged_view_application.xml
+++ b/res/layout-xlarge/all_apps_paged_view_application.xml
@@ -28,4 +28,4 @@
     android:layout_height="match_parent"
     android:gravity="center_horizontal"
 
-    style="@style/WorkspaceIcon.Portrait" />
+    style="@style/WorkspaceIcon.AllApps" />
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3305299..1e2dba2 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -49,6 +49,10 @@
         <item name="android:paddingRight">5dip</item>
     </style>
 
+    <style name="WorkspaceIcon.AllApps">
+        <item name="android:background">@null</item>
+    </style>
+
     <style name="WorkspaceIcon.Portrait">
         <item name="android:drawablePadding">5dip</item>
         <item name="android:paddingTop">4dip</item>
diff --git a/src/com/android/launcher2/CacheableTextView.java b/src/com/android/launcher2/CacheableTextView.java
index eba29ec..50da7cd 100644
--- a/src/com/android/launcher2/CacheableTextView.java
+++ b/src/com/android/launcher2/CacheableTextView.java
@@ -18,9 +18,10 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
 import android.graphics.Paint;
-import android.graphics.Bitmap.Config;
+import android.graphics.Rect;
 import android.text.Layout;
 import android.util.AttributeSet;
 import android.widget.TextView;
@@ -66,7 +67,13 @@
     }
 
     public void buildAndEnableCache() {
-        if (getLayout() == null) {
+        // Defers building the cache until the next draw to allow measuring
+        // and laying out.
+        buildAndEnableCache(false);
+    }
+
+    public void buildAndEnableCache(boolean isImmediate) {
+        if (getLayout() == null || !isImmediate) {
             mWaitingToGenerateCache = true;
             return;
         }
@@ -94,8 +101,20 @@
         int height = (int) (textCacheBottom - mTextCacheTop);
 
         if (width != 0 && height != 0) {
-            mCache = Bitmap.createBitmap(width, height, Config.ARGB_8888);
-            mCacheCanvas.setBitmap(mCache);
+            if (mCache != null) {
+                if (mCache.getWidth() != width || mCache.getHeight() != height) {
+                    mCache.recycle();
+                    mCache = null;
+                }
+            }
+            if (mCache == null) {
+                mCache = Bitmap.createBitmap(width, height, Config.ARGB_8888);
+                mCacheCanvas.setBitmap(mCache);
+            } else {
+                mCacheCanvas.drawColor(0x00000000);
+            }
+
+            mCacheCanvas.save();
             mCacheCanvas.translate(-mTextCacheLeft, -mTextCacheTop);
 
             mIsBuildingCache = true;
@@ -103,6 +122,7 @@
             draw(mCacheCanvas);
             setAlpha(prevAlpha);
             mIsBuildingCache = false;
+            mCacheCanvas.restore();
 
             // A hack-- we set the text to be one space (we don't make it empty just to avoid any
             // potential issues with text measurement, like line height, etc.) so that the text view
@@ -114,10 +134,10 @@
 
     public void draw(Canvas canvas) {
         if (mWaitingToGenerateCache && !mIsBuildingCache) {
-            buildAndEnableCache();
+            buildAndEnableCache(true);
             mWaitingToGenerateCache = false;
         }
-        if (mCache != null) {
+        if (mCache != null && !mIsBuildingCache) {
             canvas.drawBitmap(mCache, mTextCacheLeft - mTextCacheScrollX + mScrollX,
                     mTextCacheTop, mCachePaint);
         }