diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2015-03-02 23:28:05 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-03-02 23:28:06 +0000 |
commit | 8dbf0fff1f424df8db1bbedfe8e5cfd7783a92ea (patch) | |
tree | e7bcc46acc93ee45fd18537d696e111543c290f4 /src | |
parent | f30e99b2dc1d028014def047df3ea7b1bc31a3a1 (diff) | |
parent | d2f3819c34d8ecdfdb42bf973b6db3aac259bd62 (diff) | |
download | android_packages_apps_Trebuchet-8dbf0fff1f424df8db1bbedfe8e5cfd7783a92ea.tar.gz android_packages_apps_Trebuchet-8dbf0fff1f424df8db1bbedfe8e5cfd7783a92ea.tar.bz2 android_packages_apps_Trebuchet-8dbf0fff1f424df8db1bbedfe8e5cfd7783a92ea.zip |
Merge "Setting workspace id as primary key" into ub-launcher3-burnaby
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/LauncherProvider.java | 61 |
1 files changed, 57 insertions, 4 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 5fa5033c6..b61844452 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -57,7 +57,7 @@ public class LauncherProvider extends ContentProvider { private static final String TAG = "Launcher.LauncherProvider"; private static final boolean LOGD = false; - private static final int DATABASE_VERSION = 21; + private static final int DATABASE_VERSION = 22; static final String OLD_AUTHORITY = "com.android.launcher2.settings"; static final String AUTHORITY = ProviderConfig.AUTHORITY; @@ -233,7 +233,7 @@ public class LauncherProvider extends ContentProvider { } } - private void addModifiedTime(ContentValues values) { + private static void addModifiedTime(ContentValues values) { values.put(LauncherSettings.ChangeLogColumns.MODIFIED, System.currentTimeMillis()); } @@ -426,7 +426,7 @@ public class LauncherProvider extends ContentProvider { private void addWorkspacesTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_WORKSPACE_SCREENS + " (" + - LauncherSettings.WorkspaceScreens._ID + " INTEGER," + + LauncherSettings.WorkspaceScreens._ID + " INTEGER PRIMARY KEY," + LauncherSettings.WorkspaceScreens.SCREEN_RANK + " INTEGER," + LauncherSettings.ChangeLogColumns.MODIFIED + " INTEGER NOT NULL DEFAULT 0" + ");"); @@ -563,7 +563,12 @@ public class LauncherProvider extends ContentProvider { if (!updateFolderItemsRank(db, true)) { break; } - case 21: { + case 21: + // Recreate workspace table with screen id a primary key + if (!recreateWorkspaceTable(db)) { + break; + } + case 22: { // DB Upgraded successfully return; } @@ -592,6 +597,54 @@ public class LauncherProvider extends ContentProvider { onCreate(db); } + /** + * Recreates workspace table and migrates data to the new table. + */ + public boolean recreateWorkspaceTable(SQLiteDatabase db) { + db.beginTransaction(); + try { + Cursor c = db.query(TABLE_WORKSPACE_SCREENS, + new String[] {LauncherSettings.WorkspaceScreens._ID}, + null, null, null, null, + LauncherSettings.WorkspaceScreens.SCREEN_RANK); + ArrayList<Long> sortedIDs = new ArrayList<Long>(); + long maxId = 0; + try { + while (c.moveToNext()) { + Long id = c.getLong(0); + if (!sortedIDs.contains(id)) { + sortedIDs.add(id); + maxId = Math.max(maxId, id); + } + } + } finally { + c.close(); + } + + db.execSQL("DROP TABLE IF EXISTS " + TABLE_WORKSPACE_SCREENS); + addWorkspacesTable(db); + + // Add all screen ids back + int total = sortedIDs.size(); + for (int i = 0; i < total; i++) { + ContentValues values = new ContentValues(); + values.put(LauncherSettings.WorkspaceScreens._ID, sortedIDs.get(i)); + values.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i); + addModifiedTime(values); + db.insertOrThrow(TABLE_WORKSPACE_SCREENS, null, values); + } + db.setTransactionSuccessful(); + mMaxScreenId = maxId; + } catch (SQLException ex) { + // Old version remains, which means we wipe old data + Log.e(TAG, ex.getMessage(), ex); + return false; + } finally { + db.endTransaction(); + } + return true; + } + private boolean updateFolderItemsRank(SQLiteDatabase db, boolean addRankColumn) { db.beginTransaction(); try { |