From 2c014b4e4650ae33ecf92f59d4b0aa2fab431462 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 1 May 2019 10:15:07 -0300 Subject: [PATCH] Only remove PendingContact from UI when removed from DB --- .../briarproject/bramble/api/contact/ContactManager.java | 4 +++- .../briarproject/bramble/contact/ContactManagerImpl.java | 8 +++++++- .../contact/add/remote/PendingContactListActivity.java | 4 ++-- .../contact/add/remote/PendingContactListViewModel.java | 6 ++++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java index fad20a7ff..eca1e0720 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java @@ -79,8 +79,10 @@ public interface ContactManager { /** * Removes a {@link PendingContact} that is in state * {@link PendingContactState FAILED}. + * @param commitAction an action to run on the main thread after removing. */ - void removePendingContact(PendingContact pendingContact) throws DbException; + void removePendingContact(PendingContact pendingContact, + Runnable commitAction) throws DbException; /** * Returns the contact with the given ID. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java index db4f5d029..dd0247160 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java @@ -222,9 +222,15 @@ class ContactManagerImpl implements ContactManager { } @Override - public void removePendingContact(PendingContact pendingContact) { + public void removePendingContact(PendingContact pendingContact, + Runnable commitAction) throws DbException { // TODO replace with real implementation pendingContacts.remove(pendingContact); + try { + Thread.sleep(250); + } catch (InterruptedException ignored) { + } + db.transaction(true, txn -> txn.attach(commitAction)); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java index a99f3717b..3e329e2e1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java @@ -86,8 +86,8 @@ public class PendingContactListActivity extends BriarActivity @Override public void onFailedPendingContactRemoved(PendingContact pendingContact) { - adapter.remove(pendingContact); - viewModel.removePendingContact(pendingContact); + viewModel.removePendingContact(pendingContact, + () -> adapter.remove(pendingContact)); } private void onPendingContactsChanged(Collection contacts) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListViewModel.java index 1b95d30be..65efb2263 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListViewModel.java @@ -81,10 +81,12 @@ public class PendingContactListViewModel extends AndroidViewModel return pendingContacts; } - void removePendingContact(PendingContact pendingContact) { + void removePendingContact(PendingContact pendingContact, + Runnable commitAction) { dbExecutor.execute(() -> { try { - contactManager.removePendingContact(pendingContact); + contactManager + .removePendingContact(pendingContact, commitAction); } catch (DbException e) { logException(LOG, WARNING, e); }