private static void migrateConversation( Context context, MasterSecret masterSecret, Handler handler, long theirThreadId, long ourThreadId) { SmsDatabase ourSmsDatabase = DatabaseFactory.getSmsDatabase(context); Cursor cursor = null; try { Uri uri = Uri.parse("content://sms/conversations/" + theirThreadId); cursor = context.getContentResolver().query(uri, null, null, null, null); SQLiteDatabase transaction = ourSmsDatabase.beginTransaction(); SQLiteStatement statement = ourSmsDatabase.createInsertStatement(transaction); while (cursor != null && cursor.moveToNext()) { getContentValuesForRow(context, masterSecret, cursor, ourThreadId, statement); statement.execute(); Message msg = handler.obtainMessage(SECONDARY_PROGRESS_UPDATE, 10000 / cursor.getCount(), 0); handler.sendMessage(msg); } ourSmsDatabase.endTransaction(transaction); DatabaseFactory.getThreadDatabase(context).update(ourThreadId); DatabaseFactory.getThreadDatabase(context).notifyConversationListeners(ourThreadId); } finally { if (cursor != null) cursor.close(); } }