OSDN Git Service

Trebuchet: Fix some issues with the DB upgrade path
authorcretin45 <cretin45@gmail.com>
Tue, 15 Mar 2016 23:07:53 +0000 (16:07 -0700)
committercretin45 <cretin45@gmail.com>
Tue, 15 Mar 2016 23:09:45 +0000 (16:09 -0700)
Issue-id: CYNGNOS-2249

Change-Id: If124a9ac51c665c869cf5a745390374658b87156

src/com/android/launcher3/LauncherProvider.java

index 022ccac..8047e7c 100644 (file)
@@ -746,7 +746,8 @@ public class LauncherProvider extends ContentProvider {
                     if (!recreateWorkspaceTable(db)) {
                         break;
                     }
-                case 22: {
+                case 22:
+                case 23:
                     if (!addIntegerColumn(db, Favorites.OPTIONS, 0)) {
                         // Old version remains, which means we wipe old data
                         break;
@@ -755,9 +756,6 @@ public class LauncherProvider extends ContentProvider {
                         // Old version remains, which means we wipe old data
                         break;
                     }
-                }
-                case 23:
-                    // No-op
                 case 24:
                     ManagedProfileHeuristic.markExistingUsersForNoFolderCreation(mContext);
                 case 25:
@@ -782,18 +780,11 @@ public class LauncherProvider extends ContentProvider {
                             "com.android.camera.CameraLauncher");
                 }
                 case 28: {
-                    db.beginTransaction();
-                    try {
-                        db.execSQL("ALTER TABLE favorites " +
-                                "ADD COLUMN subType INTEGER DEFAULT 0;");
-                        db.setTransactionSuccessful();
-                        db.endTransaction();
-                        return;
-                    } catch (SQLException ex) {
+                    if (!ensureSubTypeColumn(db)) {
                         // Old version remains, which means we wipe old data
-                        Log.e(TAG, ex.getMessage(), ex);
-                        db.endTransaction();
+                        break;
                     }
+                    return;
                 }
             }
 
@@ -986,6 +977,22 @@ public class LauncherProvider extends ContentProvider {
             return true;
         }
 
+        @Thunk boolean ensureSubTypeColumn(SQLiteDatabase db) {
+            Cursor c = null;
+            try {
+                // Make sure subType exists
+                c = db.rawQuery("SELECT subType FROM favorites;", null);
+            } catch (SQLException ex) {
+                Log.e(TAG, ex.getMessage(), ex);
+                return addIntegerColumn(db, "subType", 0);
+            } finally {
+                if (c != null) {
+                    c.close();
+                }
+            }
+            return true;
+        }
+
         private boolean addProfileColumn(SQLiteDatabase db) {
             UserManagerCompat userManager = UserManagerCompat.getInstance(mContext);
             // Default to the serial number of this user, for older