SMS: Support priority for SMS

Add new "priority" column to SMS db if it does not exist.

Change-Id: I52ce14f6d8e8903f6a2fb2a63f7cb3eb35371b15
CRs-Fixed: 749755, 1016740
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 610418e..3fc2dd3 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -23,6 +23,7 @@
 import android.content.IntentFilter;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.os.storage.StorageManager;
 import android.provider.BaseColumns;
@@ -234,12 +235,14 @@
     private static boolean sTriedAutoIncrement = false;
     private static boolean sFakeLowStorageTest = false;     // for testing only
 
+    private static final String NO_SUCH_COLUMN_EXCEPTION_MESSAGE = "no such column";
+    private static final String NO_SUCH_TABLE_EXCEPTION_MESSAGE = "no such table";
+
     static final String DATABASE_NAME = "mmssms.db";
     static final int DATABASE_VERSION = 64;
     private final Context mContext;
     private LowStorageMonitor mLowStorageMonitor;
 
-
     private MmsSmsDatabaseHelper(Context context) {
         super(context, DATABASE_NAME, null, DATABASE_VERSION);
 
@@ -487,6 +490,20 @@
         createIndices(db);
     }
 
+    @Override
+    public void onOpen(SQLiteDatabase db) {
+        try {
+            // Try to access the table and create it if "no such table"
+            db.query(SmsProvider.TABLE_SMS, null, null, null, null, null, null);
+            checkAndUpdateSmsTable(db);
+        } catch (SQLiteException e) {
+            Log.e(TAG, "onOpen: ex. ", e);
+            if (e.getMessage().startsWith(NO_SUCH_TABLE_EXCEPTION_MESSAGE)) {
+                createSmsTables(db);
+            }
+        }
+    }
+
     // When upgrading the database we need to populate the words
     // table with the rows out of sms and part.
     private void populateWordsTable(SQLiteDatabase db) {
@@ -885,7 +902,8 @@
                    "sub_id INTEGER DEFAULT " + SubscriptionManager.INVALID_SUBSCRIPTION_ID + ", " +
                    "error_code INTEGER DEFAULT 0," +
                    "creator TEXT," +
-                   "seen INTEGER DEFAULT 0" +
+                   "seen INTEGER DEFAULT 0," +
+                   "priority INTEGER DEFAULT -1" +
                    ");");
 
         /**
@@ -1729,6 +1747,18 @@
     private void upgradeDatabaseToVersion64(SQLiteDatabase db) {
         db.execSQL("ALTER TABLE " + SmsProvider.TABLE_RAW +" ADD COLUMN message_body TEXT");
     }
+    private void checkAndUpdateSmsTable(SQLiteDatabase db) {
+        try {
+            db.query(SmsProvider.TABLE_SMS, new String[] {"priority"}, null, null, null, null,
+                    null);
+        } catch (SQLiteException e) {
+            Log.e(TAG, "checkAndUpgradeSmsTable: ex. ", e);
+            if (e.getMessage().startsWith(NO_SUCH_COLUMN_EXCEPTION_MESSAGE)) {
+                db.execSQL("ALTER TABLE " + SmsProvider.TABLE_SMS + " ADD COLUMN "
+                        + "priority INTEGER DEFAULT -1");
+            }
+        }
+    }
 
     @Override
     public synchronized SQLiteDatabase getWritableDatabase() {