Move archived column from pdu/sms to threads (3/4)

Add new update logic to change threads' archived column value

Change-Id: I24cb9b163471c1daebb767aff342fe588b8cf249
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index b79e36a..a470bb1 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -215,7 +215,7 @@
     private static boolean sFakeLowStorageTest = false;     // for testing only
 
     static final String DATABASE_NAME = "mmssms.db";
-    static final int DATABASE_VERSION = 59;
+    static final int DATABASE_VERSION = 60;
     private final Context mContext;
     private LowStorageMonitor mLowStorageMonitor;
 
@@ -594,7 +594,6 @@
                    Mms.LOCKED + " INTEGER DEFAULT 0," +
                    Mms.SUB_ID + " INTEGER DEFAULT -1, " +
                    Mms.SEEN + " INTEGER DEFAULT 0," +
-                   Mms.ARCHIVED + " INTEGER DEFAULT 0," +
                    Mms.CREATOR + " TEXT," +
                    Mms.TEXT_ONLY + " INTEGER DEFAULT 0" +
                    ");");
@@ -840,7 +839,6 @@
                    "locked INTEGER DEFAULT 0," +
                    "sub_id INTEGER DEFAULT -1, " +
                    "error_code INTEGER DEFAULT 0," +
-                   "archived INTEGER DEFAULT 0," +
                    "creator TEXT," +
                    "seen INTEGER DEFAULT 0" +
                    ");");
@@ -908,6 +906,7 @@
                    Threads.SNIPPET + " TEXT," +
                    Threads.SNIPPET_CHARSET + " INTEGER DEFAULT 0," +
                    Threads.READ + " INTEGER DEFAULT 1," +
+                   Threads.ARCHIVED + " INTEGER DEFAULT 0," +
                    Threads.TYPE + " INTEGER DEFAULT 0," +
                    Threads.ERROR + " INTEGER DEFAULT 0," +
                    Threads.HAS_ATTACHMENT + " INTEGER DEFAULT 0);");
@@ -1313,6 +1312,22 @@
             } finally {
                 db.endTransaction();
             }
+            // fall through
+        case 59:
+            if (currentVersion <= 59) {
+                return;
+            }
+
+            db.beginTransaction();
+            try {
+                upgradeDatabaseToVersion60(db);
+                db.setTransactionSuccessful();
+            } catch (Throwable ex) {
+                Log.e(TAG, ex.getMessage(), ex);
+                break;
+            } finally {
+                db.endTransaction();
+            }
             return;
         }
 
@@ -1527,15 +1542,16 @@
 
     private void upgradeDatabaseToVersion59(SQLiteDatabase db) {
         db.execSQL("ALTER TABLE " + MmsProvider.TABLE_PDU +" ADD COLUMN "
-                + Mms.ARCHIVED + " INTEGER DEFAULT 0");
-        db.execSQL("ALTER TABLE " + MmsProvider.TABLE_PDU +" ADD COLUMN "
                 + Mms.CREATOR + " TEXT");
         db.execSQL("ALTER TABLE " + SmsProvider.TABLE_SMS +" ADD COLUMN "
-                + Sms.ARCHIVED + " INTEGER DEFAULT 0");
-        db.execSQL("ALTER TABLE " + SmsProvider.TABLE_SMS +" ADD COLUMN "
                 + Sms.CREATOR + " TEXT");
     }
 
+    private void upgradeDatabaseToVersion60(SQLiteDatabase db) {
+        db.execSQL("ALTER TABLE " + MmsSmsProvider.TABLE_THREADS +" ADD COLUMN "
+                + Threads.ARCHIVED + " INTEGER DEFAULT 0");
+    }
+
     @Override
     public synchronized SQLiteDatabase getWritableDatabase() {
         SQLiteDatabase db = super.getWritableDatabase();
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index 8fc7391..1806e01 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -1259,6 +1259,16 @@
                 break;
             }
 
+            case URI_CONVERSATIONS: {
+                final ContentValues finalValues = new ContentValues(1);
+                if (values.containsKey(Threads.ARCHIVED)) {
+                    // Only allow update archived
+                    finalValues.put(Threads.ARCHIVED, values.getAsBoolean(Threads.ARCHIVED));
+                }
+                affectedRows = db.update(TABLE_THREADS, finalValues, selection, selectionArgs);
+                break;
+            }
+
             default:
                 throw new UnsupportedOperationException(
                         NO_DELETES_INSERTS_OR_UPDATES + uri);