diff options
author | Adam Cohen <adamcohen@google.com> | 2014-04-02 16:59:08 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2014-04-02 17:04:41 -0700 |
commit | 119285e755f8572632dc845d72320d9eed378f69 (patch) | |
tree | 41acc76b8f6fb20ef237f1a4d523b4c224e0d90a | |
parent | cc95d18d6ddeaf247b1f43659153edb1b3f315d7 (diff) | |
download | android_packages_apps_Trebuchet-119285e755f8572632dc845d72320d9eed378f69.tar.gz android_packages_apps_Trebuchet-119285e755f8572632dc845d72320d9eed378f69.tar.bz2 android_packages_apps_Trebuchet-119285e755f8572632dc845d72320d9eed378f69.zip |
Cleanup orphaned workspace items on db upgrade
-> Any workspace item whose screen id is not present in the
screens table is removed from the database. This is
intended to restore database consistency.
issue 13741729
Change-Id: I9a04b4165f1d85541025fcf48ddf2ad9e39ae94e
-rw-r--r-- | src/com/android/launcher3/LauncherProvider.java | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 2a645255c..fa3a75299 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -74,7 +74,7 @@ public class LauncherProvider extends ContentProvider { private static final String DATABASE_NAME = "launcher.db"; - private static final int DATABASE_VERSION = 17; + private static final int DATABASE_VERSION = 18; static final String OLD_AUTHORITY = "com.android.launcher2.settings"; static final String AUTHORITY = ProviderConfig.AUTHORITY; @@ -492,6 +492,13 @@ public class LauncherProvider extends ContentProvider { ");"); } + private void removeOrphanedItems(SQLiteDatabase db) { + db.execSQL("DELETE FROM " + TABLE_FAVORITES + " WHERE " + + LauncherSettings.Favorites.SCREEN + " NOT IN (SELECT " + + LauncherSettings.WorkspaceScreens._ID + " FROM " + TABLE_WORKSPACE_SCREENS + + ")"); + } + private void setFlagJustLoadedOldDb() { String spKey = LauncherAppState.getSharedPreferencesKey(); SharedPreferences sp = mContext.getSharedPreferences(spKey, Context.MODE_PRIVATE); @@ -792,6 +799,15 @@ public class LauncherProvider extends ContentProvider { version = 17; } + if (version < 18) { + // Due to a data loss bug, some users may have items associated with screen ids + // which no longer exist. Since this can cause other problems, and since the user + // will never see these items anyway, we use database upgrade as an opportunity to + // clean things up. + removeOrphanedItems(db); + version = 18; + } + if (version != DATABASE_VERSION) { Log.w(TAG, "Destroying all old data."); db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAVORITES); |