From 559d5516c42e676bf0f8dd73bcb757ee53798519 Mon Sep 17 00:00:00 2001 From: goapunk <goapunk@riseup.net> Date: Tue, 26 Jun 2018 15:15:58 +0200 Subject: [PATCH] special purpose contacts --- .../bramble/api/contact/Contact.java | 2 + .../bramble/api/contact/ContactFactory.java | 20 ++++++++ .../bramble/api/contact/ContactManager.java | 11 +++-- .../bramble/api/contact/ContactTypes.java | 6 +++ .../bramble/api/contact/RepeaterContact.java | 17 +++++++ .../bramble/api/db/DatabaseComponent.java | 2 +- .../contact/ContactExchangeTaskImpl.java | 3 +- .../bramble/contact/ContactManagerImpl.java | 31 +++++++++--- .../org/briarproject/bramble/db/Database.java | 2 +- .../bramble/db/DatabaseComponentImpl.java | 5 +- .../briarproject/bramble/db/JdbcDatabase.java | 28 ++++++----- .../contact/ContactManagerImplTest.java | 5 +- .../bramble/db/DatabaseComponentImplTest.java | 15 +++--- .../bramble/db/DatabasePerformanceTest.java | 3 +- .../bramble/db/JdbcDatabaseTest.java | 49 ++++++++++--------- .../android/contact/ContactListFragment.java | 2 +- .../ContactSelectorControllerImpl.java | 2 +- .../IntroduceeProtocolEngine.java | 4 +- .../briar/test/TestDataCreatorImpl.java | 3 +- .../IntroductionIntegrationTest.java | 5 +- .../SimplexMessagingIntegrationTest.java | 3 +- .../briar/test/BriarIntegrationTest.java | 13 ++--- 22 files changed, 157 insertions(+), 74 deletions(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactTypes.java create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/contact/RepeaterContact.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/Contact.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/Contact.java index 1d921e801..883e9a347 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/Contact.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/Contact.java @@ -44,6 +44,8 @@ public class Contact { return active; } + public boolean isHidden() { return false;} + @Override public int hashCode() { return id.hashCode(); diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java new file mode 100644 index 000000000..b6ea7cdcf --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java @@ -0,0 +1,20 @@ +package org.briarproject.bramble.api.contact; + +import org.briarproject.bramble.api.identity.Author; +import org.briarproject.bramble.api.identity.AuthorId; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; +import static org.briarproject.bramble.api.contact.ContactTypes.REPEATER; + +@NotNullByDefault +public class ContactFactory { + + public static Contact createContact(ContactId c, Author author, AuthorId localAuthorId, boolean verified, boolean active, int type) { + switch (type){ + case REGULAR: return new Contact(c, author, localAuthorId, verified, active); + case REPEATER: return new RepeaterContact(c, author, localAuthorId,verified,active); + default: throw new IllegalArgumentException("Unknown contact type"); + } + } +} 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 1f9daf48a..cadedebf4 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 @@ -29,14 +29,14 @@ public interface ContactManager { */ ContactId addContact(Transaction txn, Author remote, AuthorId local, SecretKey master, long timestamp, boolean alice, boolean verified, - boolean active) throws DbException; + boolean active, int type) throws DbException; /** * Stores a contact associated with the given local and remote pseudonyms * and returns an ID for the contact. */ ContactId addContact(Transaction txn, Author remote, AuthorId local, - boolean verified, boolean active) throws DbException; + boolean verified, boolean active, int type) throws DbException; /** * Stores a contact associated with the given local and remote pseudonyms, @@ -46,7 +46,7 @@ public interface ContactManager { * @param alice true if the local party is Alice */ ContactId addContact(Author remote, AuthorId local, SecretKey master, - long timestamp, boolean alice, boolean verified, boolean active) + long timestamp, boolean alice, boolean verified, boolean active, int type) throws DbException; /** @@ -77,6 +77,11 @@ public interface ContactManager { */ Collection<Contact> getActiveContacts() throws DbException; + /** + * Returns all contacts which are visible to the user. + */ + Collection<Contact> getVisibleContacts() throws DbException; + /** * Removes a contact and all associated state. */ diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactTypes.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactTypes.java new file mode 100644 index 000000000..89af2d9ab --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactTypes.java @@ -0,0 +1,6 @@ +package org.briarproject.bramble.api.contact; + +public interface ContactTypes{ + int REGULAR = 0; + int REPEATER =1; +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/RepeaterContact.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/RepeaterContact.java new file mode 100644 index 000000000..c9bf0c39a --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/RepeaterContact.java @@ -0,0 +1,17 @@ +package org.briarproject.bramble.api.contact; + +import org.briarproject.bramble.api.identity.Author; +import org.briarproject.bramble.api.identity.AuthorId; + +public class RepeaterContact extends Contact { + + public RepeaterContact(ContactId id, + Author author, + AuthorId localAuthorId, + boolean verified, boolean active) { + super(id, author, localAuthorId, verified, active); + } + + @Override + public boolean isHidden() { return true;} +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java index 914b88a2e..788e34336 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java @@ -79,7 +79,7 @@ public interface DatabaseComponent { * and returns an ID for the contact. */ ContactId addContact(Transaction txn, Author remote, AuthorId local, - boolean verified, boolean active) throws DbException; + boolean verified, boolean active, int type) throws DbException; /** * Stores a group. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java index 69a543058..946794715 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java @@ -44,6 +44,7 @@ import java.util.logging.Logger; import javax.inject.Inject; import static java.util.logging.Level.WARNING; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.contact.RecordTypes.CONTACT_INFO; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH; import static org.briarproject.bramble.util.LogUtils.logException; @@ -292,7 +293,7 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { try { contactId = contactManager.addContact(txn, remoteAuthor, localAuthor.getId(), masterSecret, timestamp, alice, - true, true); + true, true, REGULAR); transportPropertyManager.addRemoteProperties(txn, contactId, remoteProperties); db.commitTransaction(txn); 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 02c94fc75..c4911963d 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 @@ -44,8 +44,8 @@ class ContactManagerImpl implements ContactManager { @Override public ContactId addContact(Transaction txn, Author remote, AuthorId local, SecretKey master, long timestamp, boolean alice, boolean verified, - boolean active) throws DbException { - ContactId c = db.addContact(txn, remote, local, verified, active); + boolean active, int type) throws DbException { + ContactId c = db.addContact(txn, remote, local, verified, active, type); keyManager.addContact(txn, c, master, timestamp, alice, active); Contact contact = db.getContact(txn, c); for (ContactHook hook : hooks) hook.addingContact(txn, contact); @@ -54,8 +54,8 @@ class ContactManagerImpl implements ContactManager { @Override public ContactId addContact(Transaction txn, Author remote, AuthorId local, - boolean verified, boolean active) throws DbException { - ContactId c = db.addContact(txn, remote, local, verified, active); + boolean verified, boolean active, int type) throws DbException { + ContactId c = db.addContact(txn, remote, local, verified, active, type); Contact contact = db.getContact(txn, c); for (ContactHook hook : hooks) hook.addingContact(txn, contact); return c; @@ -63,13 +63,14 @@ class ContactManagerImpl implements ContactManager { @Override public ContactId addContact(Author remote, AuthorId local, SecretKey master, - long timestamp, boolean alice, boolean verified, boolean active) + long timestamp, boolean alice, boolean verified, boolean active, + int type) throws DbException { ContactId c; Transaction txn = db.startTransaction(false); try { c = addContact(txn, remote, local, master, timestamp, alice, - verified, active); + verified, active, type); db.commitTransaction(txn); } finally { db.endTransaction(txn); @@ -116,8 +117,7 @@ class ContactManagerImpl implements ContactManager { throw new NoSuchContactException(); } - @Override - public Collection<Contact> getActiveContacts() throws DbException { + private Collection<Contact> getContacts() throws DbException { Collection<Contact> contacts; Transaction txn = db.startTransaction(true); try { @@ -126,11 +126,26 @@ class ContactManagerImpl implements ContactManager { } finally { db.endTransaction(txn); } + return contacts; + } + + @Override + public Collection<Contact> getActiveContacts() throws DbException { + Collection<Contact> contacts = getContacts(); List<Contact> active = new ArrayList<>(contacts.size()); for (Contact c : contacts) if (c.isActive()) active.add(c); return active; } + @Override + public Collection<Contact> getVisibleContacts() throws DbException { + Collection<Contact> contacts = getContacts(); + List<Contact> visible = new ArrayList<>(contacts.size()); + for (Contact c : contacts) + if (c.isActive() && !c.isHidden()) visible.add(c); + return visible; + } + @Override public void removeContact(ContactId c) throws DbException { Transaction txn = db.startTransaction(false); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java index 66e5cfcf6..d06e7f1e0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java @@ -78,7 +78,7 @@ interface Database<T> { * and returns an ID for the contact. */ ContactId addContact(T txn, Author remote, AuthorId local, boolean verified, - boolean active) throws DbException; + boolean active, int ype) throws DbException; /** * Stores a group. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index f2e4de1c6..1a501c029 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -2,6 +2,7 @@ package org.briarproject.bramble.db; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.contact.ContactTypes; import org.briarproject.bramble.api.contact.event.ContactAddedEvent; import org.briarproject.bramble.api.contact.event.ContactRemovedEvent; import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent; @@ -172,7 +173,7 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { @Override public ContactId addContact(Transaction transaction, Author remote, - AuthorId local, boolean verified, boolean active) + AuthorId local, boolean verified, boolean active, int type) throws DbException { if (transaction.isReadOnly()) throw new IllegalArgumentException(); T txn = unbox(transaction); @@ -182,7 +183,7 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { throw new ContactExistsException(); if (db.containsContact(txn, remote.getId(), local)) throw new ContactExistsException(); - ContactId c = db.addContact(txn, remote, local, verified, active); + ContactId c = db.addContact(txn, remote, local, verified, active, type); transaction.attach(new ContactAddedEvent(c, active)); if (active) transaction.attach(new ContactStatusChangedEvent(c, true)); return c; 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 baa67a29a..db7fa0b39 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 @@ -1,6 +1,7 @@ package org.briarproject.bramble.db; import org.briarproject.bramble.api.contact.Contact; +import org.briarproject.bramble.api.contact.ContactFactory; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.db.DataTooNewException; @@ -110,6 +111,7 @@ abstract class JdbcDatabase implements Database<Connection> { + " localAuthorId _HASH NOT NULL," + " verified BOOLEAN NOT NULL," + " active BOOLEAN NOT NULL," + + " type INT NOT NULL," + " PRIMARY KEY (contactId)," + " FOREIGN KEY (localAuthorId)" + " REFERENCES localAuthors (authorId)" @@ -571,7 +573,7 @@ abstract class JdbcDatabase implements Database<Connection> { @Override public ContactId addContact(Connection txn, Author remote, AuthorId local, - boolean verified, boolean active) throws DbException { + boolean verified, boolean active, int type) throws DbException { PreparedStatement ps = null; ResultSet rs = null; try { @@ -579,8 +581,8 @@ abstract class JdbcDatabase implements Database<Connection> { String sql = "INSERT INTO contacts" + " (authorId, formatVersion, name, publicKey," + " localAuthorId," - + " verified, active)" - + " VALUES (?, ?, ?, ?, ?, ?, ?)"; + + " verified, active, type)" + + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; ps = txn.prepareStatement(sql); ps.setBytes(1, remote.getId().getBytes()); ps.setInt(2, remote.getFormatVersion()); @@ -589,6 +591,7 @@ abstract class JdbcDatabase implements Database<Connection> { ps.setBytes(5, local.getBytes()); ps.setBoolean(6, verified); ps.setBoolean(7, active); + ps.setInt(8, type); int affected = ps.executeUpdate(); if (affected != 1) throw new DbStateException(); ps.close(); @@ -1194,7 +1197,7 @@ abstract class JdbcDatabase implements Database<Connection> { ResultSet rs = null; try { String sql = "SELECT authorId, formatVersion, name, publicKey," - + " localAuthorId, verified, active" + + " localAuthorId, verified, active, type" + " FROM contacts" + " WHERE contactId = ?"; ps = txn.prepareStatement(sql); @@ -1208,11 +1211,12 @@ abstract class JdbcDatabase implements Database<Connection> { AuthorId localAuthorId = new AuthorId(rs.getBytes(5)); boolean verified = rs.getBoolean(6); boolean active = rs.getBoolean(7); + int type = rs.getInt(8); rs.close(); ps.close(); Author author = new Author(authorId, formatVersion, name, publicKey); - return new Contact(c, author, localAuthorId, verified, active); + return ContactFactory.createContact(c, author, localAuthorId, verified, active, type); } catch (SQLException e) { tryToClose(rs); tryToClose(ps); @@ -1227,7 +1231,7 @@ abstract class JdbcDatabase implements Database<Connection> { ResultSet rs = null; try { String sql = "SELECT contactId, authorId, formatVersion, name," - + " publicKey, localAuthorId, verified, active" + + " publicKey, localAuthorId, verified, active, type" + " FROM contacts"; ps = txn.prepareStatement(sql); rs = ps.executeQuery(); @@ -1243,8 +1247,9 @@ abstract class JdbcDatabase implements Database<Connection> { AuthorId localAuthorId = new AuthorId(rs.getBytes(6)); boolean verified = rs.getBoolean(7); boolean active = rs.getBoolean(8); - contacts.add(new Contact(contactId, author, localAuthorId, - verified, active)); + int type = rs.getInt(9); + contacts.add(ContactFactory.createContact(contactId, author, localAuthorId, + verified, active, type)); } rs.close(); ps.close(); @@ -1286,7 +1291,7 @@ abstract class JdbcDatabase implements Database<Connection> { ResultSet rs = null; try { String sql = "SELECT contactId, formatVersion, name, publicKey," - + " localAuthorId, verified, active" + + " localAuthorId, verified, active, type" + " FROM contacts" + " WHERE authorId = ?"; ps = txn.prepareStatement(sql); @@ -1301,10 +1306,11 @@ abstract class JdbcDatabase implements Database<Connection> { AuthorId localAuthorId = new AuthorId(rs.getBytes(5)); boolean verified = rs.getBoolean(6); boolean active = rs.getBoolean(7); + int type = rs.getInt(8); Author author = new Author(remote, formatVersion, name, publicKey); - contacts.add(new Contact(c, author, localAuthorId, verified, - active)); + contacts.add(ContactFactory.createContact(c, author, localAuthorId, verified, + active, type)); } rs.close(); ps.close(); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java index a90d685b1..e25d6b7b1 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Random; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.test.TestUtils.getAuthor; import static org.briarproject.bramble.test.TestUtils.getRandomId; import static org.briarproject.bramble.test.TestUtils.getSecretKey; @@ -53,7 +54,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase { context.checking(new Expectations() {{ oneOf(db).startTransaction(false); will(returnValue(txn)); - oneOf(db).addContact(txn, remote, local, verified, active); + oneOf(db).addContact(txn, remote, local, verified, active, REGULAR); will(returnValue(contactId)); oneOf(keyManager).addContact(txn, contactId, master, timestamp, alice, active); @@ -64,7 +65,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase { }}); assertEquals(contactId, contactManager.addContact(remote, local, - master, timestamp, alice, verified, active)); + master, timestamp, alice, verified, active, REGULAR)); } @Test diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java index e16e03da0..ad2d66992 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java @@ -61,6 +61,7 @@ import java.util.concurrent.atomic.AtomicReference; import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE; import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE; @@ -162,7 +163,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { localAuthor.getId()); will(returnValue(false)); oneOf(database).addContact(txn, author, localAuthor.getId(), - true, true); + true, true, REGULAR); will(returnValue(contactId)); oneOf(eventBus).broadcast(with(any(ContactAddedEvent.class))); oneOf(eventBus).broadcast(with(any( @@ -213,7 +214,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { try { db.addLocalAuthor(transaction, localAuthor); assertEquals(contactId, db.addContact(transaction, author, - localAuthor.getId(), true, true)); + localAuthor.getId(), true, true, REGULAR)); assertEquals(singletonList(contact), db.getContacts(transaction)); db.addGroup(transaction, group); // First time - listeners called @@ -479,7 +480,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { Transaction transaction = db.startTransaction(false); try { - db.addContact(transaction, author, localAuthor.getId(), true, true); + db.addContact(transaction, author, localAuthor.getId(), true, true, REGULAR); fail(); } catch (NoSuchLocalAuthorException expected) { // Expected @@ -755,7 +756,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { localAuthor.getId()); will(returnValue(false)); oneOf(database).addContact(txn, author, localAuthor.getId(), - true, true); + true, true, REGULAR); will(returnValue(contactId)); oneOf(eventBus).broadcast(with(any(ContactAddedEvent.class))); oneOf(eventBus).broadcast(with(any( @@ -776,7 +777,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { try { db.addLocalAuthor(transaction, localAuthor); assertEquals(contactId, db.addContact(transaction, author, - localAuthor.getId(), true, true)); + localAuthor.getId(), true, true, REGULAR)); db.commitTransaction(transaction); } finally { db.endTransaction(transaction); @@ -1556,7 +1557,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { Transaction transaction = db.startTransaction(false); try { - db.addContact(transaction, author, localAuthor.getId(), true, true); + db.addContact(transaction, author, localAuthor.getId(), true, true, REGULAR); fail(); } catch (ContactExistsException expected) { // Expected @@ -1586,7 +1587,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { Transaction transaction = db.startTransaction(false); try { - db.addContact(transaction, author, localAuthor.getId(), true, true); + db.addContact(transaction, author, localAuthor.getId(), true, true, REGULAR); fail(); } catch (ContactExistsException expected) { // Expected diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java index e46a75b68..f4679bc61 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java @@ -32,6 +32,7 @@ import java.util.Random; import java.util.logging.Logger; import static java.util.logging.Level.OFF; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS; import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED; import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory; @@ -546,7 +547,7 @@ public abstract class DatabasePerformanceTest extends BrambleTestCase { db.addLocalAuthor(txn, localAuthor); for (int i = 0; i < CONTACTS; i++) { ContactId c = db.addContact(txn, getAuthor(), localAuthor.getId(), - random.nextBoolean(), true); + random.nextBoolean(), true, REGULAR); contacts.add(db.getContact(txn, c)); contactGroups.put(c, new ArrayList<>()); for (int j = 0; j < GROUPS_PER_CONTACT; j++) { diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index 2655e9ef7..0c02b57a7 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -48,6 +48,7 @@ import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; import static java.util.concurrent.TimeUnit.SECONDS; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.db.Metadata.REMOVE; import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE; import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; @@ -130,7 +131,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { assertFalse(db.containsContact(txn, contactId)); db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); assertTrue(db.containsContact(txn, contactId)); assertFalse(db.containsGroup(txn, groupId)); db.addGroup(txn, group); @@ -193,7 +194,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and a shared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, DELIVERED, true, null); @@ -224,7 +225,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and a shared but unvalidated message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, UNKNOWN, true, null); @@ -269,7 +270,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, an invisible group and a shared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addMessage(txn, message, DELIVERED, true, null); @@ -320,7 +321,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and an unshared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, DELIVERED, false, null); @@ -351,7 +352,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and a shared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, DELIVERED, true, null); @@ -377,7 +378,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact and a visible group db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, false); @@ -418,7 +419,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and a shared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, DELIVERED, true, null); @@ -575,7 +576,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact and a shared group db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); @@ -595,7 +596,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); // The group is not in the database assertFalse(db.containsVisibleMessage(txn, contactId, messageId)); @@ -613,7 +614,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, an invisible group and a message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addMessage(txn, message, DELIVERED, true, null); @@ -632,7 +633,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact and a group db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); // The group should not be visible to the contact @@ -684,7 +685,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add the contact, the transport and the transport keys db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, active)); + true, active, REGULAR)); db.addTransport(txn, transportId, 123); assertEquals(keySetId, db.addTransportKeys(txn, contactId, keys)); assertEquals(keySetId1, db.addTransportKeys(txn, contactId, keys1)); @@ -776,7 +777,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add the contact, transport and transport keys db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addTransport(txn, transportId, 123); assertEquals(keySetId, db.addTransportKeys(txn, contactId, keys)); @@ -819,7 +820,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add the contact, transport and transport keys db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, active)); + true, active, REGULAR)); db.addTransport(txn, transportId, 123); assertEquals(keySetId, db.addTransportKeys(txn, contactId, keys)); @@ -860,7 +861,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact associated with the local author assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); // Ensure contact is returned from database by Author ID Collection<Contact> contacts = @@ -890,7 +891,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact associated with the local author assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); contacts = db.getContacts(txn, localAuthor.getId()); assertEquals(singletonList(contactId), contacts); @@ -912,7 +913,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact - initially there should be no offered messages db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); assertEquals(0, db.countOfferedMessages(txn, contactId)); // Add some offered messages and count them @@ -1504,7 +1505,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and a shared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, DELIVERED, true, null); @@ -1615,9 +1616,9 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add the same contact for each local author ContactId contactId = - db.addContact(txn, author, localAuthor.getId(), true, true); + db.addContact(txn, author, localAuthor.getId(), true, true, REGULAR); ContactId contactId1 = - db.addContact(txn, author, localAuthor1.getId(), true, true); + db.addContact(txn, author, localAuthor1.getId(), true, true, REGULAR); // The contacts should be distinct assertNotEquals(contactId, contactId1); @@ -1637,7 +1638,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a shared group and a shared message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addGroupVisibility(txn, contactId, groupId, true); db.addMessage(txn, message, DELIVERED, true, null); @@ -1682,7 +1683,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); // The contact should be active Contact contact = db.getContact(txn, contactId); @@ -1737,7 +1738,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Add a contact, a group and a message db.addLocalAuthor(txn, localAuthor); assertEquals(contactId, db.addContact(txn, author, localAuthor.getId(), - true, true)); + true, true, REGULAR)); db.addGroup(txn, group); db.addMessage(txn, message, UNKNOWN, false, null); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index 2dc00d67f..04fa53f9f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -198,7 +198,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { try { long start = now(); List<ContactListItem> contacts = new ArrayList<>(); - for (Contact c : contactManager.getActiveContacts()) { + for (Contact c : contactManager.getVisibleContacts()) { try { ContactId id = c.getId(); GroupCount count = diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java index 9f6380d0f..2c33ee63d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java @@ -44,7 +44,7 @@ public abstract class ContactSelectorControllerImpl runOnDbThread(() -> { try { Collection<SelectableContactItem> contacts = new ArrayList<>(); - for (Contact c : contactManager.getActiveContacts()) { + for (Contact c : contactManager.getVisibleContacts()) { // was this contact already selected? boolean selected = selection.contains(c.getId()); // can this contact be selected? diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java index 651bd8a97..a52797b3c 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java @@ -5,6 +5,7 @@ import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.client.ContactGroupFactory; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactManager; +import org.briarproject.bramble.api.contact.ContactTypes; import org.briarproject.bramble.api.crypto.KeyPair; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.data.BdfDictionary; @@ -40,6 +41,7 @@ import javax.annotation.concurrent.Immutable; import javax.inject.Inject; import static java.util.logging.Level.WARNING; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.briar.api.introduction.Role.INTRODUCEE; import static org.briarproject.briar.introduction.IntroduceeState.AWAIT_AUTH; @@ -444,7 +446,7 @@ class IntroduceeProtocolEngine try { contactManager .addContact(txn, s.getRemote().author, localAuthor.getId(), - false, true); + false, true, REGULAR); // Only add transport properties and keys when the contact was added // This will be changed once we have a way to reset state for peers diff --git a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java index 811f3a351..c5f574b12 100644 --- a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java @@ -53,6 +53,7 @@ import javax.inject.Inject; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.plugin.BluetoothConstants.UUID_BYTES; import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; import static org.briarproject.bramble.util.StringUtils.getRandomString; @@ -171,7 +172,7 @@ public class TestDataCreatorImpl implements TestDataCreator { try { ContactId contactId = contactManager .addContact(txn, author, localAuthor.getId(), secretKey, - timestamp, true, verified, true); + timestamp, true, verified, true, REGULAR); transportPropertyManager.addRemoteProperties(txn, contactId, props); contact = db.getContact(txn, contactId); db.commitTransaction(txn); diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index b3161af64..e508d1d3c 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -41,6 +41,7 @@ import java.util.Collection; import java.util.Map; import java.util.concurrent.TimeoutException; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH; import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID; import static org.briarproject.bramble.test.TestUtils.getRandomBytes; @@ -931,11 +932,11 @@ public class IntroductionIntegrationTest contactManager1.removeContact(contactId0From1); contactId1From0 = contactManager0 .addContact(author1, author0.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contact1From0 = contactManager0.getContact(contactId1From0); contactId0From1 = contactManager1 .addContact(author0, author1.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contact0From1 = contactManager1.getContact(contactId0From1); // Sync initial client versioning updates and transport properties diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java index 1007afe5e..692a182b5 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java @@ -41,6 +41,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH; import static org.briarproject.bramble.test.TestPluginConfigModule.MAX_LATENCY; import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID; @@ -108,7 +109,7 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { // Add the other user as a contact ContactManager contactManager = device.getContactManager(); return contactManager.addContact(remote, local.getId(), master, - timestamp, alice, true, true); + timestamp, alice, true, true, REGULAR); } private void sendMessage(SimplexMessagingIntegrationTestComponent device, diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java index 481a57486..1fb5f730a 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java @@ -62,6 +62,7 @@ import javax.annotation.Nullable; import javax.inject.Inject; import static junit.framework.Assert.assertNotNull; +import static org.briarproject.bramble.api.contact.ContactTypes.REGULAR; import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED; import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID; import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING; @@ -239,19 +240,19 @@ public abstract class BriarIntegrationTest<C extends BriarIntegrationTestCompone protected void addDefaultContacts() throws Exception { contactId1From0 = contactManager0 .addContact(author1, author0.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contact1From0 = contactManager0.getContact(contactId1From0); contactId0From1 = contactManager1 .addContact(author0, author1.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contact0From1 = contactManager1.getContact(contactId0From1); contactId2From0 = contactManager0 .addContact(author2, author0.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contact2From0 = contactManager0.getContact(contactId2From0); contactId0From2 = contactManager2 .addContact(author0, author2.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contact0From2 = contactManager2.getContact(contactId0From2); // Sync initial client versioning updates @@ -266,10 +267,10 @@ public abstract class BriarIntegrationTest<C extends BriarIntegrationTestCompone protected void addContacts1And2() throws Exception { contactId2From1 = contactManager1 .addContact(author2, author1.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); contactId1From2 = contactManager2 .addContact(author1, author2.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + clock.currentTimeMillis(), true, true, true, REGULAR); // Sync initial client versioning updates sync1To2(1, true); -- GitLab