diff options
author | Michael Jurka <mikejurka@google.com> | 2013-09-26 11:29:01 -0700 |
---|---|---|
committer | Michael Jurka <mikejurka@google.com> | 2013-09-26 11:29:06 -0700 |
commit | eb1bb920507fe7f27b2ecece5b67749dac7850f3 (patch) | |
tree | 82b43a840f102ac74abe77684d683f7eea78b7d0 /src/com/android/launcher3/WidgetPreviewLoader.java | |
parent | 1b495f5298d4648adab0b24dca7a3bc5267bf710 (diff) | |
download | android_packages_apps_Trebuchet-eb1bb920507fe7f27b2ecece5b67749dac7850f3.tar.gz android_packages_apps_Trebuchet-eb1bb920507fe7f27b2ecece5b67749dac7850f3.tar.bz2 android_packages_apps_Trebuchet-eb1bb920507fe7f27b2ecece5b67749dac7850f3.zip |
Recover when reading corrupted widget previews
Bug: 10785722
Diffstat (limited to 'src/com/android/launcher3/WidgetPreviewLoader.java')
-rw-r--r-- | src/com/android/launcher3/WidgetPreviewLoader.java | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 11c12f875..1910ab74a 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -159,11 +159,12 @@ public class WidgetPreviewLoader { } public Bitmap getPreview(final Object o) { - String name = getObjectName(o); + final String name = getObjectName(o); + final String packageName = getObjectPackage(o); // check if the package is valid boolean packageValid = true; synchronized(sInvalidPackages) { - packageValid = !sInvalidPackages.contains(getObjectPackage(o)); + packageValid = !sInvalidPackages.contains(packageName); } if (!packageValid) { return null; @@ -334,7 +335,7 @@ public class WidgetPreviewLoader { db.insert(CacheDb.TABLE_NAME, null, values); } - public static void removeFromDb(final CacheDb cacheDb, final String packageName) { + public static void removePackageFromDb(final CacheDb cacheDb, final String packageName) { synchronized(sInvalidPackages) { sInvalidPackages.add(packageName); } @@ -356,6 +357,18 @@ public class WidgetPreviewLoader { }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } + public static void removeItemFromDb(final CacheDb cacheDb, final String objectName) { + new AsyncTask<Void, Void, Void>() { + 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; |