diff --git a/src/com/android/providers/telephony/MmsProvider.java b/src/com/android/providers/telephony/MmsProvider.java
index 2c59f75..2c7222a 100644
--- a/src/com/android/providers/telephony/MmsProvider.java
+++ b/src/com/android/providers/telephony/MmsProvider.java
@@ -65,7 +65,7 @@
     static final String VIEW_PDU_RESTRICTED = "pdu_restricted";
 
     // The name of parts directory. The full dir is "app_parts".
-    private static final String PARTS_DIR_NAME = "parts";
+    static final String PARTS_DIR_NAME = "parts";
 
     @Override
     public boolean onCreate() {
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 983f68a..27ce3c3 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 = 61;
+    static final int DATABASE_VERSION = 62;
     private final Context mContext;
     private LowStorageMonitor mLowStorageMonitor;
 
@@ -1397,7 +1397,23 @@
             } finally {
                 db.endTransaction();
             }
-            return;
+            // fall through
+        case 61:
+          if (currentVersion <= 61) {
+              return;
+          }
+
+          db.beginTransaction();
+          try {
+              upgradeDatabaseToVersion62(db);
+              db.setTransactionSuccessful();
+          } catch (Throwable ex) {
+              Log.e(TAG, ex.getMessage(), ex);
+              break;
+          } finally {
+              db.endTransaction();
+          }
+          return;
         }
 
         Log.e(TAG, "Destroying all old data.");
@@ -1641,6 +1657,36 @@
 
     }
 
+    private void upgradeDatabaseToVersion62(SQLiteDatabase db) {
+        // When a non-FBE device is upgraded to N, all MMS attachment files are moved from
+        // /data/data to /data/user_de. We need to update the paths stored in the parts table to
+        // reflect this change.
+        String newPartsDirPath;
+        try {
+            newPartsDirPath = mContext.getDir(MmsProvider.PARTS_DIR_NAME, 0).getCanonicalPath();
+        }
+        catch (IOException e){
+            Log.e(TAG, "openFile: check file path failed " + e, e);
+            return;
+        }
+
+        // The old path of the part files will be something like this:
+        //   /data/data/0/com.android.providers.telephony/app_parts
+        // The new path of the part files will be something like this:
+        //   /data/user_de/0/com.android.providers.telephony/app_parts
+        int partsDirIndex = newPartsDirPath.lastIndexOf(
+            File.separator, newPartsDirPath.lastIndexOf(MmsProvider.PARTS_DIR_NAME));
+        String partsDirName = newPartsDirPath.substring(partsDirIndex) + File.separator;
+        // The query to update the part path will be:
+        //   UPDATE part SET _data = '/data/user_de/0/com.android.providers.telephony' ||
+        //                           SUBSTR(_data, INSTR(_data, '/app_parts/'))
+        //   WHERE INSTR(_data, '/app_parts/') > 0
+        db.execSQL("UPDATE " + MmsProvider.TABLE_PART +
+            " SET " + Part._DATA + " = '" + newPartsDirPath.substring(0, partsDirIndex) + "' ||" +
+            " SUBSTR(" + Part._DATA + ", INSTR(" + Part._DATA + ", '" + partsDirName + "'))" +
+            " WHERE INSTR(" + Part._DATA + ", '" + partsDirName + "') > 0");
+    }
+
     @Override
     public synchronized SQLiteDatabase getWritableDatabase() {
         SQLiteDatabase db = super.getWritableDatabase();
