summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherProvider.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2014-04-17 18:20:45 -0700
committerAdam Cohen <adamcohen@google.com>2014-04-22 16:11:40 -0700
commitf9c14de995d31a19123397c10e4f43bd0fe9eb56 (patch)
tree5afa03ff17c4daa566105a5d428f3a36ff5aac8d /src/com/android/launcher3/LauncherProvider.java
parenta8171169ff18efc9e0bf5b865dbd35cee06d3fae (diff)
downloadandroid_packages_apps_Trebuchet-f9c14de995d31a19123397c10e4f43bd0fe9eb56.tar.gz
android_packages_apps_Trebuchet-f9c14de995d31a19123397c10e4f43bd0fe9eb56.tar.bz2
android_packages_apps_Trebuchet-f9c14de995d31a19123397c10e4f43bd0fe9eb56.zip
Second try removing orphaned items from the database
-> Delete items contained directly on the desktop whose screens no longer exist (do not remove items contained in hotseat or folders, except as described below) -> Delete items contained by folder ids which are no longer present (ie. orphaned as their parent folder no long exists) Change-Id: I2f47cc970ce00677cb1c83c0f0a2d13b6f16a33e
Diffstat (limited to 'src/com/android/launcher3/LauncherProvider.java')
-rw-r--r--src/com/android/launcher3/LauncherProvider.java43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 0e559a8fb..21b179918 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 = 18;
+ private static final int DATABASE_VERSION = 19;
static final String OLD_AUTHORITY = "com.android.launcher2.settings";
static final String AUTHORITY = ProviderConfig.AUTHORITY;
@@ -493,10 +493,34 @@ public class LauncherProvider extends ContentProvider {
}
private void removeOrphanedItems(SQLiteDatabase db) {
- db.execSQL("DELETE FROM " + TABLE_FAVORITES + " WHERE " +
+ // Delete items directly on the workspace who's screen id doesn't exist
+ // "DELETE FROM favorites WHERE screen NOT IN (SELECT _id FROM workspaceScreens)
+ // AND container = -100"
+ String removeOrphanedDesktopItems = "DELETE FROM " + TABLE_FAVORITES +
+ " WHERE " +
LauncherSettings.Favorites.SCREEN + " NOT IN (SELECT " +
- LauncherSettings.WorkspaceScreens._ID + " FROM " + TABLE_WORKSPACE_SCREENS +
- ")");
+ LauncherSettings.WorkspaceScreens._ID + " FROM " + TABLE_WORKSPACE_SCREENS + ")" +
+ " AND " +
+ LauncherSettings.Favorites.CONTAINER + " = " +
+ LauncherSettings.Favorites.CONTAINER_DESKTOP;
+ db.execSQL(removeOrphanedDesktopItems);
+
+ // Delete items contained in folders which no longer exist (after above statement)
+ // "DELETE FROM favorites WHERE container <> -100 AND container <> -101 AND container
+ // NOT IN (SELECT _id FROM favorites WHERE itemType = 2)"
+ String removeOrphanedFolderItems = "DELETE FROM " + TABLE_FAVORITES +
+ " WHERE " +
+ LauncherSettings.Favorites.CONTAINER + " <> " +
+ LauncherSettings.Favorites.CONTAINER_DESKTOP +
+ " AND "
+ + LauncherSettings.Favorites.CONTAINER + " <> " +
+ LauncherSettings.Favorites.CONTAINER_HOTSEAT +
+ " AND "
+ + LauncherSettings.Favorites.CONTAINER + " NOT IN (SELECT " +
+ LauncherSettings.Favorites._ID + " FROM " + TABLE_FAVORITES +
+ " WHERE " + LauncherSettings.Favorites.ITEM_TYPE + " = " +
+ LauncherSettings.Favorites.ITEM_TYPE_FOLDER + ")";
+ db.execSQL(removeOrphanedFolderItems);
}
private void setFlagJustLoadedOldDb() {
@@ -800,14 +824,17 @@ public class LauncherProvider extends ContentProvider {
}
if (version < 18) {
+ // No-op
+ version = 18;
+ }
+
+ if (version < 19) {
// 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.
-
- // TODO: this needs to be fixed, currently causes data loss.
- //removeOrphanedItems(db);
- version = 18;
+ removeOrphanedItems(db);
+ version = 19;
}
if (version != DATABASE_VERSION) {