From 397afbfec0bff7ddfb51194d6ef4f96c616ef687 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 16 Oct 2019 11:15:14 -0300 Subject: [PATCH] Address review comments for detecting duplicate (pending) contacts --- .../briarproject/bramble/api/contact/ContactManager.java | 1 + .../briarproject/bramble/contact/ContactManagerImpl.java | 1 + .../java/org/briarproject/bramble/db/JdbcDatabase.java | 8 ++++++-- .../android/contact/add/remote/NicknameFragment.java | 8 +++++--- 4 files changed, 13 insertions(+), 5 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 f9a147d8d..af305978a 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 @@ -144,6 +144,7 @@ public interface ContactManager { /** * Returns the state of the given {@link PendingContact}. */ + @Nullable PendingContactState getPendingContactState(PendingContactId p); /** 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 21b824766..e64ff66da 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 @@ -173,6 +173,7 @@ class ContactManagerImpl implements ContactManager, EventListener { } @Override + @Nullable public PendingContactState getPendingContactState(PendingContactId p) { return states.get(p); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 2ad9f55d1..c56b48e8d 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -1480,7 +1480,11 @@ abstract class JdbcDatabase implements Database { ps.setBytes(1, handshakePublicKey.getEncoded()); ps.setBytes(2, localAuthorId.getBytes()); rs = ps.executeQuery(); - if (!rs.next()) return null; + if (!rs.next()) { + rs.close(); + ps.close(); + return null; + } ContactId contactId = new ContactId(rs.getInt(1)); AuthorId authorId = new AuthorId(rs.getBytes(2)); int formatVersion = rs.getInt(3); @@ -1488,7 +1492,7 @@ abstract class JdbcDatabase implements Database { String alias = rs.getString(5); PublicKey publicKey = new SignaturePublicKey(rs.getBytes(6)); boolean verified = rs.getBoolean(7); - if (rs.next()) throw new DbException(); + if (rs.next()) throw new DbStateException(); rs.close(); ps.close(); Author author = diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java index 0e561718d..7ab4c1632 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java @@ -120,8 +120,10 @@ public class NicknameFragment extends BaseFragment { viewModel.getAddContactResult().observe(this, result -> { if (result == null) return; - if (result.hasError()) handleException(name, result.getException()); - else showPendingContactListActivity(); + if (result.hasError()) + handleException(name, requireNonNull(result.getException())); + else + showPendingContactListActivity(); }); viewModel.addContact(name); } @@ -133,7 +135,7 @@ public class NicknameFragment extends BaseFragment { finish(); } - private void handleException(String name, @Nullable Exception e) { + private void handleException(String name, Exception e) { if (e instanceof ContactExistsException) { ContactExistsException ce = (ContactExistsException) e; handleExistingContact(name, ce.getRemoteAuthor());