summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/WidgetPreviewLoader.java
diff options
context:
space:
mode:
authorMichael Jurka <mikejurka@google.com>2013-09-26 11:29:01 -0700
committerMichael Jurka <mikejurka@google.com>2013-09-26 11:29:06 -0700
commiteb1bb920507fe7f27b2ecece5b67749dac7850f3 (patch)
tree82b43a840f102ac74abe77684d683f7eea78b7d0 /src/com/android/launcher3/WidgetPreviewLoader.java
parent1b495f5298d4648adab0b24dca7a3bc5267bf710 (diff)
downloadandroid_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.java27
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;