From eb1bb920507fe7f27b2ecece5b67749dac7850f3 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Thu, 26 Sep 2013 11:29:01 -0700 Subject: [PATCH] Recover when reading corrupted widget previews Bug: 10785722 --- src/com/android/launcher3/LauncherModel.java | 4 +-- .../launcher3/PackageChangedReceiver.java | 2 +- .../launcher3/WidgetPreviewLoader.java | 27 +++++++++++++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index eead0855e3..1598e2b479 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2477,7 +2477,7 @@ public class LauncherModel extends BroadcastReceiver { for (int i=0; i() { + public Void doInBackground(Void ... args) { + SQLiteDatabase db = cacheDb.getWritableDatabase(); + db.delete(CacheDb.TABLE_NAME, + CacheDb.COLUMN_NAME + " = ? ", // SELECT query + new String[] { objectName }); // args to SELECT query + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + } + private Bitmap readFromDb(String name, Bitmap b) { if (mCachedSelectQuery == null) { mCachedSelectQuery = CacheDb.COLUMN_NAME + " = ? AND " + @@ -377,8 +390,12 @@ public class WidgetPreviewLoader { final BitmapFactory.Options opts = mCachedBitmapFactoryOptions.get(); opts.inBitmap = b; opts.inSampleSize = 1; - Bitmap out = BitmapFactory.decodeByteArray(blob, 0, blob.length, opts); - return out; + try { + return BitmapFactory.decodeByteArray(blob, 0, blob.length, opts); + } catch (IllegalArgumentException e) { + removeItemFromDb(mDb, name); + return null; + } } else { result.close(); return null;