summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherProvider.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2014-04-02 16:59:08 -0700
committerAdam Cohen <adamcohen@google.com>2014-04-02 17:04:41 -0700
commit119285e755f8572632dc845d72320d9eed378f69 (patch)
tree41acc76b8f6fb20ef237f1a4d523b4c224e0d90a /src/com/android/launcher3/LauncherProvider.java
parentcc95d18d6ddeaf247b1f43659153edb1b3f315d7 (diff)
downloadandroid_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
Diffstat (limited to 'src/com/android/launcher3/LauncherProvider.java')
-rw-r--r--src/com/android/launcher3/LauncherProvider.java18
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);