summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/WidgetPreviewLoader.java
diff options
context:
space:
mode:
authorAdrian Roos <roosa@google.com>2014-03-19 15:58:14 +0100
committerAdrian Roos <roosa@google.com>2014-03-19 16:29:30 +0100
commitfa4c799a9bc6b2eb55ce21609591d49f5c5ea9ba (patch)
treee34016ea2c27c3928a4128162b90ad94b1248d31 /src/com/android/launcher3/WidgetPreviewLoader.java
parent5d2704fbb0a7bb4763d4e2ee031e16a8913ba003 (diff)
downloadandroid_packages_apps_Trebuchet-fa4c799a9bc6b2eb55ce21609591d49f5c5ea9ba.tar.gz
android_packages_apps_Trebuchet-fa4c799a9bc6b2eb55ce21609591d49f5c5ea9ba.tar.bz2
android_packages_apps_Trebuchet-fa4c799a9bc6b2eb55ce21609591d49f5c5ea9ba.zip
Fix concurrent drawable usage resulting in native crash
One of widget preview drawables was drawn concurrently from a thread pool, causing a native Skia crash. Bug: 12525890 Change-Id: I2dea7b86ba8b32237f40feff225657dcb2b0061b
Diffstat (limited to 'src/com/android/launcher3/WidgetPreviewLoader.java')
-rw-r--r--src/com/android/launcher3/WidgetPreviewLoader.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index 1a67987b4..36152f807 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -15,6 +15,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
+import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
@@ -121,6 +122,7 @@ public class WidgetPreviewLoader {
private RectCache mCachedAppWidgetPreviewSrcRect = new RectCache();
private RectCache mCachedAppWidgetPreviewDestRect = new RectCache();
private PaintCache mCachedAppWidgetPreviewPaint = new PaintCache();
+ private PaintCache mDefaultAppWidgetPreviewPaint = new PaintCache();
private String mCachedSelectQuery;
private BitmapFactoryOptionsCache mCachedBitmapFactoryOptions = new BitmapFactoryOptionsCache();
@@ -521,9 +523,16 @@ public class WidgetPreviewLoader {
defaultPreview = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
final Canvas c = mCachedAppWidgetPreviewCanvas.get();
c.setBitmap(defaultPreview);
- previewDrawable.setBounds(0, 0, previewWidth, previewHeight);
- previewDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
- previewDrawable.draw(c);
+ Paint p = mDefaultAppWidgetPreviewPaint.get();
+ if (p == null) {
+ p = new Paint();
+ p.setShader(new BitmapShader(previewDrawable.getBitmap(),
+ Shader.TileMode.REPEAT, Shader.TileMode.REPEAT));
+ mDefaultAppWidgetPreviewPaint.set(p);
+ }
+ final Rect dest = mCachedAppWidgetPreviewDestRect.get();
+ dest.set(0, 0, previewWidth, previewHeight);
+ c.drawRect(dest, p);
c.setBitmap(null);
// Draw the icon in the top left corner