private DisplayRecord.Body getPlaintextBody(Cursor cursor) {
      try {
        long type = cursor.getLong(cursor.getColumnIndexOrThrow(ThreadDatabase.SNIPPET_TYPE));
        String body = cursor.getString(cursor.getColumnIndexOrThrow(SNIPPET));

        if (!TextUtils.isEmpty(body)
            && masterCipher != null
            && MmsSmsColumns.Types.isSymmetricEncryption(type)) {
          return new DisplayRecord.Body(masterCipher.decryptBody(body), true);
        } else if (!TextUtils.isEmpty(body)
            && masterCipher == null
            && MmsSmsColumns.Types.isSymmetricEncryption(type)) {
          return new DisplayRecord.Body(body, false);
        } else {
          return new DisplayRecord.Body(body, true);
        }
      } catch (InvalidMessageException e) {
        Log.w("ThreadDatabase", e);
        return new DisplayRecord.Body(
            context.getString(R.string.ThreadDatabase_error_decrypting_message), true);
      }
    }
  private static void exportPlaintext(Context context, MasterSecret masterSecret)
      throws IOException {
    int count = DatabaseFactory.getSmsDatabase(context).getMessageCount();
    XmlBackup.Writer writer = new XmlBackup.Writer(getPlaintextExportDirectoryPath(), count);

    SmsMessageRecord record;
    EncryptingSmsDatabase.Reader reader = null;
    int skip = 0;
    int ROW_LIMIT = 500;

    do {
      if (reader != null) reader.close();

      reader =
          DatabaseFactory.getEncryptingSmsDatabase(context)
              .getMessages(masterSecret, skip, ROW_LIMIT);

      while ((record = reader.getNext()) != null) {
        XmlBackup.XmlBackupItem item =
            new XmlBackup.XmlBackupItem(
                0,
                record.getIndividualRecipient().getNumber(),
                record.getDateReceived(),
                MmsSmsColumns.Types.translateToSystemBaseType(record.getType()),
                null,
                record.getDisplayBody().toString(),
                null,
                1,
                record.getDeliveryStatus());

        writer.writeItem(item);
      }

      skip += ROW_LIMIT;
    } while (reader.getCount() > 0);

    writer.close();
  }