Merge "Cold sim issue fix in telephony Provider" into nyc-dev
diff --git a/src/com/android/providers/telephony/MmsProvider.java b/src/com/android/providers/telephony/MmsProvider.java
index 2c7222a..5acfe13 100644
--- a/src/com/android/providers/telephony/MmsProvider.java
+++ b/src/com/android/providers/telephony/MmsProvider.java
@@ -71,6 +71,7 @@
     public boolean onCreate() {
         setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
         mOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
+        TelephonyBackupAgent.DeferredSmsMmsRestoreService.startIfFilesExist(getContext());
         return true;
     }
 
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 6ff0bff..610418e 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -235,7 +235,7 @@
     private static boolean sFakeLowStorageTest = false;     // for testing only
 
     static final String DATABASE_NAME = "mmssms.db";
-    static final int DATABASE_VERSION = 63;
+    static final int DATABASE_VERSION = 64;
     private final Context mContext;
     private LowStorageMonitor mLowStorageMonitor;
 
@@ -902,7 +902,8 @@
                    "address TEXT," +
                    "sub_id INTEGER DEFAULT " + SubscriptionManager.INVALID_SUBSCRIPTION_ID + ", " +
                    "pdu TEXT," + // the raw PDU for this part
-                   "deleted INTEGER DEFAULT 0);"); // bool to indicate if row is deleted
+                   "deleted INTEGER DEFAULT 0," + // bool to indicate if row is deleted
+                   "message_body TEXT);"); // message body
 
         db.execSQL("CREATE TABLE attachments (" +
                    "sms_id INTEGER," +
@@ -1430,6 +1431,22 @@
             } finally {
                 db.endTransaction();
             }
+            // fall through
+        case 63:
+            if (currentVersion <= 63) {
+                return;
+            }
+
+            db.beginTransaction();
+            try {
+                upgradeDatabaseToVersion64(db);
+                db.setTransactionSuccessful();
+            } catch (Throwable ex) {
+                Log.e(TAG, ex.getMessage(), ex);
+                break;
+            } finally {
+                db.endTransaction();
+            }
 
             return;
         }
@@ -1709,6 +1726,10 @@
         db.execSQL("ALTER TABLE " + SmsProvider.TABLE_RAW +" ADD COLUMN deleted INTEGER DEFAULT 0");
     }
 
+    private void upgradeDatabaseToVersion64(SQLiteDatabase db) {
+        db.execSQL("ALTER TABLE " + SmsProvider.TABLE_RAW +" ADD COLUMN message_body TEXT");
+    }
+
     @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 b2fa117..d5e0ef9 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -312,6 +312,7 @@
         mUseStrictPhoneNumberComparation =
             getContext().getResources().getBoolean(
                     com.android.internal.R.bool.config_use_strict_phone_number_comparation);
+        TelephonyBackupAgent.DeferredSmsMmsRestoreService.startIfFilesExist(getContext());
         return true;
     }
 
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index 61d0be9..f50f804 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -92,6 +92,7 @@
         setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
         mDeOpenHelper = MmsSmsDatabaseHelper.getInstanceForDe(getContext());
         mCeOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
+        TelephonyBackupAgent.DeferredSmsMmsRestoreService.startIfFilesExist(getContext());
         return true;
     }
 
@@ -209,7 +210,7 @@
 
             case SMS_RAW_MESSAGE:
                 // before querying purge old entries with deleted = 1
-                // purgeDeletedMessagesInRawTable(db);
+                purgeDeletedMessagesInRawTable(db);
                 qb.setTables("raw");
                 break;
 
@@ -687,14 +688,14 @@
                 break;
 
             case SMS_RAW_MESSAGE:
-            /*    ContentValues cv = new ContentValues();
+                ContentValues cv = new ContentValues();
                 cv.put("deleted", 1);
                 count = db.update(TABLE_RAW, cv, where, whereArgs);
                 if (Log.isLoggable(TAG, Log.VERBOSE)) {
                     Log.d(TAG, "delete: num rows marked deleted in raw table: " + count);
                 }
                 notifyIfNotDefault = false;
-                break;*/
+                break;
 
             case SMS_RAW_MESSAGE_PERMANENT_DELETE:
                 count = db.delete(TABLE_RAW, where, whereArgs);
diff --git a/src/com/android/providers/telephony/TelephonyBackupAgent.java b/src/com/android/providers/telephony/TelephonyBackupAgent.java
index 61796a2..5f4acaa 100644
--- a/src/com/android/providers/telephony/TelephonyBackupAgent.java
+++ b/src/com/android/providers/telephony/TelephonyBackupAgent.java
@@ -476,15 +476,9 @@
         protected void onHandleIntent(Intent intent) {
             try {
                 mWakeLock.acquire();
-                File[] files = getFilesDir().listFiles(new FileFilter() {
-                    @Override
-                    public boolean accept(File file) {
-                        return file.getName().endsWith(SMS_BACKUP_FILE_SUFFIX) ||
-                                file.getName().endsWith(MMS_BACKUP_FILE_SUFFIX);
-                    }
-                });
+                File[] files = getFilesToRestore(this);
 
-                if (files == null) {
+                if (files == null || files.length == 0) {
                     return;
                 }
                 Arrays.sort(files, mFileComparator);
@@ -525,15 +519,29 @@
             super.onDestroy();
         }
 
-        public static Intent getIntent(Context context) {
-            return new Intent(context, DeferredSmsMmsRestoreService.class);
+        static void startIfFilesExist(Context context) {
+            File[] files = getFilesToRestore(context);
+            if (files == null || files.length == 0) {
+                return;
+            }
+            context.startService(new Intent(context, DeferredSmsMmsRestoreService.class));
+        }
+
+        private static File[] getFilesToRestore(Context context) {
+            return context.getFilesDir().listFiles(new FileFilter() {
+                @Override
+                public boolean accept(File file) {
+                    return file.getName().endsWith(SMS_BACKUP_FILE_SUFFIX) ||
+                            file.getName().endsWith(MMS_BACKUP_FILE_SUFFIX);
+                }
+            });
         }
     }
 
     @Override
     public void onRestoreFinished() {
         super.onRestoreFinished();
-        startService(DeferredSmsMmsRestoreService.getIntent(this));
+        DeferredSmsMmsRestoreService.startIfFilesExist(this);
     }
 
     private void doRestoreFile(String fileName, FileDescriptor fd) throws IOException {
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 2278aa3..97e9b69 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -1096,11 +1096,12 @@
             addBoolAttribute(parser, "modem_cognitive", map, MODEM_COGNITIVE);
             addBoolAttribute(parser, "user_visible", map, USER_VISIBLE);
 
+            int bearerBitmask = 0;
             String bearerList = parser.getAttributeValue(null, "bearer_bitmask");
             if (bearerList != null) {
-                int bearerBitmask = ServiceState.getBitmaskFromString(bearerList);
-                map.put(BEARER_BITMASK, bearerBitmask);
+                bearerBitmask = ServiceState.getBitmaskFromString(bearerList);
             }
+            map.put(BEARER_BITMASK, bearerBitmask);
 
             String mvno_type = parser.getAttributeValue(null, "mvno_type");
             if (mvno_type != null) {