mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-03 09:26:51 +00:00
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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user