summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorMichael Jurka <mikejurka@google.com>2013-09-26 19:40:54 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-09-26 19:40:54 +0000
commitf373de17c0192558213f6621d13121dfba5c411b (patch)
tree00b0036d929d454cd28dfd707deaaa924355a3be /src/com
parent98928dbed8796458b71b6a89bc48b62d8faf1c7b (diff)
parenteb1bb920507fe7f27b2ecece5b67749dac7850f3 (diff)
downloadandroid_packages_apps_Trebuchet-f373de17c0192558213f6621d13121dfba5c411b.tar.gz
android_packages_apps_Trebuchet-f373de17c0192558213f6621d13121dfba5c411b.tar.bz2
android_packages_apps_Trebuchet-f373de17c0192558213f6621d13121dfba5c411b.zip
Merge "Recover when reading corrupted widget previews" into jb-ub-now-indigo-rose
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/launcher3/LauncherModel.java4
-rw-r--r--src/com/android/launcher3/PackageChangedReceiver.java2
-rw-r--r--src/com/android/launcher3/WidgetPreviewLoader.java27
3 files changed, 25 insertions, 8 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index eead0855e..1598e2b47 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<N; i++) {
if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.updatePackage " + packages[i]);
mBgAllAppsList.updatePackage(context, packages[i]);
- WidgetPreviewLoader.removeFromDb(
+ WidgetPreviewLoader.removePackageFromDb(
mApp.getWidgetPreviewCacheDb(), packages[i]);
}
break;
@@ -2486,7 +2486,7 @@ public class LauncherModel extends BroadcastReceiver {
for (int i=0; i<N; i++) {
if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.removePackage " + packages[i]);
mBgAllAppsList.removePackage(packages[i]);
- WidgetPreviewLoader.removeFromDb(
+ WidgetPreviewLoader.removePackageFromDb(
mApp.getWidgetPreviewCacheDb(), packages[i]);
}
break;
diff --git a/src/com/android/launcher3/PackageChangedReceiver.java b/src/com/android/launcher3/PackageChangedReceiver.java
index 75a1e095c..e59f6d81d 100644
--- a/src/com/android/launcher3/PackageChangedReceiver.java
+++ b/src/com/android/launcher3/PackageChangedReceiver.java
@@ -16,6 +16,6 @@ public class PackageChangedReceiver extends BroadcastReceiver {
// in rare cases the receiver races with the application to set up LauncherAppState
LauncherAppState.setApplicationContext(context.getApplicationContext());
LauncherAppState app = LauncherAppState.getInstance();
- WidgetPreviewLoader.removeFromDb(app.getWidgetPreviewCacheDb(), packageName);
+ WidgetPreviewLoader.removePackageFromDb(app.getWidgetPreviewCacheDb(), packageName);
}
}
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;