use batch transactions when writing roster

Dheeraj CVR created

Fixes https://github.com/siacs/Conversations/issues/1648

Change summary

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 3 
1 file changed, 3 insertions(+)

Detailed changes

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -577,6 +577,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 	public void writeRoster(final Roster roster) {
 		final Account account = roster.getAccount();
 		final SQLiteDatabase db = this.getWritableDatabase();
+		db.beginTransaction();
 		for (Contact contact : roster.getContacts()) {
 			if (contact.getOption(Contact.Options.IN_ROSTER)) {
 				db.insert(Contact.TABLENAME, null, contact.getContentValues());
@@ -586,6 +587,8 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 				db.delete(Contact.TABLENAME, where, whereArgs);
 			}
 		}
+		db.setTransactionSuccessful();
+		db.endTransaction();
 		account.setRosterVersion(roster.getVersion());
 		updateAccount(account);
 	}