Merge "Recover when widget preview database is deleted" into jb-ub-now-kermit
This commit is contained in:
committed by
Android (Google) Code Review
commit
574120cdca
@@ -84,7 +84,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
|
||||
mIsScreenLarge = isScreenLarge(sContext.getResources());
|
||||
mScreenDensity = sContext.getResources().getDisplayMetrics().density;
|
||||
|
||||
mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext);
|
||||
recreateWidgetPreviewDb();
|
||||
mIconCache = new IconCache(sContext);
|
||||
|
||||
mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class));
|
||||
@@ -115,6 +115,13 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
|
||||
resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true,
|
||||
mFavoritesObserver);
|
||||
}
|
||||
|
||||
public void recreateWidgetPreviewDb() {
|
||||
if (mWidgetPreviewCacheDb != null) {
|
||||
mWidgetPreviewCacheDb.close();
|
||||
}
|
||||
mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call from Application.onTerminate(), which is not guaranteed to ever be called.
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteDiskIOException;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Bitmap.Config;
|
||||
@@ -164,6 +165,12 @@ public class WidgetPreviewLoader {
|
||||
editor.commit();
|
||||
}
|
||||
}
|
||||
|
||||
public void recreateDb() {
|
||||
LauncherAppState app = LauncherAppState.getInstance();
|
||||
app.recreateWidgetPreviewDb();
|
||||
mDb = app.getWidgetPreviewCacheDb();
|
||||
}
|
||||
|
||||
public void setPreviewSize(int previewWidth, int previewHeight,
|
||||
PagedViewCellLayout widgetSpacingLayout) {
|
||||
@@ -347,13 +354,20 @@ public class WidgetPreviewLoader {
|
||||
preview.compress(Bitmap.CompressFormat.PNG, 100, stream);
|
||||
values.put(CacheDb.COLUMN_PREVIEW_BITMAP, stream.toByteArray());
|
||||
values.put(CacheDb.COLUMN_SIZE, mSize);
|
||||
db.insert(CacheDb.TABLE_NAME, null, values);
|
||||
try {
|
||||
db.insert(CacheDb.TABLE_NAME, null, values);
|
||||
} catch (SQLiteDiskIOException e) {
|
||||
recreateDb();
|
||||
}
|
||||
}
|
||||
|
||||
private void clearDb() {
|
||||
SQLiteDatabase db = mDb.getWritableDatabase();
|
||||
// Delete everything
|
||||
db.delete(CacheDb.TABLE_NAME, null, null);
|
||||
try {
|
||||
db.delete(CacheDb.TABLE_NAME, null, null);
|
||||
} catch (SQLiteDiskIOException e) {
|
||||
}
|
||||
}
|
||||
|
||||
public static void removePackageFromDb(final CacheDb cacheDb, final String packageName) {
|
||||
@@ -363,13 +377,17 @@ public class WidgetPreviewLoader {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
public Void doInBackground(Void ... args) {
|
||||
SQLiteDatabase db = cacheDb.getWritableDatabase();
|
||||
db.delete(CacheDb.TABLE_NAME,
|
||||
CacheDb.COLUMN_NAME + " LIKE ? OR " +
|
||||
CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query
|
||||
new String[] {
|
||||
WIDGET_PREFIX + packageName + "/%",
|
||||
SHORTCUT_PREFIX + packageName + "/%"} // args to SELECT query
|
||||
);
|
||||
try {
|
||||
db.delete(CacheDb.TABLE_NAME,
|
||||
CacheDb.COLUMN_NAME + " LIKE ? OR " +
|
||||
CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query
|
||||
new String[] {
|
||||
WIDGET_PREFIX + packageName + "/%",
|
||||
SHORTCUT_PREFIX + packageName + "/%"
|
||||
} // args to SELECT query
|
||||
);
|
||||
} catch (SQLiteDiskIOException e) {
|
||||
}
|
||||
synchronized(sInvalidPackages) {
|
||||
sInvalidPackages.remove(packageName);
|
||||
}
|
||||
@@ -382,9 +400,12 @@ public class WidgetPreviewLoader {
|
||||
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
|
||||
try {
|
||||
db.delete(CacheDb.TABLE_NAME,
|
||||
CacheDb.COLUMN_NAME + " = ? ", // SELECT query
|
||||
new String[] { objectName }); // args to SELECT query
|
||||
} catch (SQLiteDiskIOException e) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
||||
@@ -396,14 +417,20 @@ public class WidgetPreviewLoader {
|
||||
CacheDb.COLUMN_SIZE + " = ?";
|
||||
}
|
||||
SQLiteDatabase db = mDb.getReadableDatabase();
|
||||
Cursor result = db.query(CacheDb.TABLE_NAME,
|
||||
new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return
|
||||
mCachedSelectQuery, // select query
|
||||
new String[] { name, mSize }, // args to select query
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
Cursor result;
|
||||
try {
|
||||
result = db.query(CacheDb.TABLE_NAME,
|
||||
new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return
|
||||
mCachedSelectQuery, // select query
|
||||
new String[] { name, mSize }, // args to select query
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
} catch (SQLiteDiskIOException e) {
|
||||
recreateDb();
|
||||
return null;
|
||||
}
|
||||
if (result.getCount() > 0) {
|
||||
result.moveToFirst();
|
||||
byte[] blob = result.getBlob(0);
|
||||
|
||||
Reference in New Issue
Block a user