From e05b08f705e517be42da35a12508e54c05b1b5ff Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 23 Feb 2017 18:30:22 -0800 Subject: [PATCH] Using transaction when dropping tables, so that the DB never enters an inconsistant state Bug: 34720697 Change-Id: I55a26d63be6c06622da6ee3395bf1990f1a58a11 --- src/com/android/launcher3/LauncherModel.java | 2 +- .../android/launcher3/LauncherProvider.java | 30 ++++++++----------- .../android/launcher3/LauncherSettings.java | 1 - 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 590c24263e..8c90c2cb15 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -815,7 +815,7 @@ public class LauncherModel extends BroadcastReceiver if (clearDb) { Log.d(TAG, "loadWorkspace: resetting launcher database"); LauncherSettings.Settings.call(contentResolver, - LauncherSettings.Settings.METHOD_DELETE_DB); + LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB); } Log.d(TAG, "loadWorkspace: loading default favorites"); diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index ad9a13eea0..e250b3f29f 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -406,18 +406,13 @@ public class LauncherProvider extends ContentProvider { return result; } case LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB: { - createEmptyDB(); + mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase()); return null; } case LauncherSettings.Settings.METHOD_LOAD_DEFAULT_FAVORITES: { loadDefaultFavoritesIfNecessary(); return null; } - case LauncherSettings.Settings.METHOD_DELETE_DB: { - // Are you sure? (y/n) - mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase()); - return null; - } } return null; } @@ -469,13 +464,6 @@ public class LauncherProvider extends ContentProvider { values.put(LauncherSettings.ChangeLogColumns.MODIFIED, System.currentTimeMillis()); } - /** - * Clears all the data for a fresh start. - */ - synchronized private void createEmptyDB() { - mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase()); - } - private void clearFlagEmptyDbCreated() { Utilities.getPrefs(getContext()).edit().remove(EMPTY_DATABASE_CREATED).commit(); } @@ -518,12 +506,12 @@ public class LauncherProvider extends ContentProvider { // There might be some partially restored DB items, due to buggy restore logic in // previous versions of launcher. - createEmptyDB(); + mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase()); // Populate favorites table with initial favorites if ((mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), loader) <= 0) && usingExternallyProvidedLayout) { // Unable to load external layout. Cleanup and load the internal layout. - createEmptyDB(); + mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase()); mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), getDefaultLayoutParser(widgetHost)); } @@ -825,9 +813,15 @@ public class LauncherProvider extends ContentProvider { * Clears all the data for a fresh start. */ public void createEmptyDB(SQLiteDatabase db) { - db.execSQL("DROP TABLE IF EXISTS " + Favorites.TABLE_NAME); - db.execSQL("DROP TABLE IF EXISTS " + WorkspaceScreens.TABLE_NAME); - onCreate(db); + db.beginTransaction(); + try { + db.execSQL("DROP TABLE IF EXISTS " + Favorites.TABLE_NAME); + db.execSQL("DROP TABLE IF EXISTS " + WorkspaceScreens.TABLE_NAME); + onCreate(db); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } } /** diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index e450785c75..af2c10275f 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -291,7 +291,6 @@ public class LauncherSettings { public static final String METHOD_NEW_SCREEN_ID = "generate_new_screen_id"; public static final String METHOD_CREATE_EMPTY_DB = "create_empty_db"; - public static final String METHOD_DELETE_DB = "delete_db"; public static final String METHOD_LOAD_DEFAULT_FAVORITES = "load_default_favorites";