[android] rough sketch of UI for adding contacts remotely

This commit is contained in:
Torsten Grote
2018-09-24 18:33:15 -03:00
parent df5ac59fc9
commit 58ffc6e761
37 changed files with 1818 additions and 40 deletions

View File

@@ -5,11 +5,14 @@ import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.contact.ContactManager;
import org.briarproject.bramble.api.contact.PendingContact;
import org.briarproject.bramble.api.contact.PendingContactId;
import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.db.DatabaseComponent;
import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.db.NoSuchContactException;
import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.identity.Author;
import org.briarproject.bramble.api.identity.AuthorId;
import org.briarproject.bramble.api.identity.AuthorInfo;
@@ -18,17 +21,18 @@ import org.briarproject.bramble.api.identity.LocalAuthor;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.transport.KeyManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.regex.Pattern;
import java.util.concurrent.Executor;
import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import static java.util.Collections.emptyList;
import static java.lang.System.currentTimeMillis;
import static org.briarproject.bramble.api.contact.PendingContactState.WAITING_FOR_CONNECTION;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
@@ -42,11 +46,12 @@ import static org.briarproject.bramble.util.StringUtils.toUtf8;
@NotNullByDefault
class ContactManagerImpl implements ContactManager {
private static final int LINK_LENGTH = 64;
private static final String REMOTE_CONTACT_LINK =
"briar://" + getRandomBase32String(LINK_LENGTH);
private static final Pattern LINK_REGEX =
Pattern.compile("(briar://)?([a-z2-7]{" + LINK_LENGTH + "})");
// TODO remove
private final List<PendingContact> pendingContacts = new ArrayList<>();
@DatabaseExecutor
private final Executor dbExecutor;
private final DatabaseComponent db;
private final KeyManager keyManager;
@@ -54,9 +59,11 @@ class ContactManagerImpl implements ContactManager {
private final List<ContactHook> hooks;
@Inject
ContactManagerImpl(DatabaseComponent db, KeyManager keyManager,
ContactManagerImpl(DatabaseComponent db,
@DatabaseExecutor Executor dbExecutor, KeyManager keyManager,
IdentityManager identityManager) {
this.db = db;
this.dbExecutor = dbExecutor;
this.keyManager = keyManager;
this.identityManager = identityManager;
hooks = new CopyOnWriteArrayList<>();
@@ -99,9 +106,14 @@ class ContactManagerImpl implements ContactManager {
@Override
public String getRemoteContactLink() {
// TODO replace with real implementation
try {
Thread.sleep(1500);
} catch (InterruptedException ignored) {
}
return REMOTE_CONTACT_LINK;
}
// TODO remove
@SuppressWarnings("SameParameterValue")
private static String getRandomBase32String(int length) {
Random random = new Random();
@@ -120,22 +132,37 @@ class ContactManagerImpl implements ContactManager {
}
@Override
public PendingContact addRemoteContactRequest(String link, String alias) {
public void addRemoteContactRequest(String link, String alias) {
// TODO replace with real implementation
PendingContactId id = new PendingContactId(link.getBytes());
return new PendingContact(id, new byte[MAX_PUBLIC_KEY_LENGTH], alias,
WAITING_FOR_CONNECTION, System.currentTimeMillis());
dbExecutor.execute(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {
}
PendingContactId id = new PendingContactId(link.getBytes());
PendingContact pendingContact =
new PendingContact(id, new byte[MAX_PUBLIC_KEY_LENGTH],
alias, WAITING_FOR_CONNECTION, currentTimeMillis());
pendingContacts.add(pendingContact);
Event e = new PendingContactStateChangedEvent(id,
WAITING_FOR_CONNECTION);
try {
db.transaction(true, txn -> txn.attach(e));
} catch (DbException ignored) {
}
});
}
@Override
public Collection<PendingContact> getPendingContacts() {
// TODO replace with real implementation
return emptyList();
return pendingContacts;
}
@Override
public void removePendingContact(PendingContact pendingContact) {
// TODO replace with real implementation
pendingContacts.remove(pendingContact);
}
@Override

View File

@@ -16,12 +16,14 @@ import org.briarproject.bramble.api.identity.LocalAuthor;
import org.briarproject.bramble.api.transport.KeyManager;
import org.briarproject.bramble.test.BrambleMockTestCase;
import org.briarproject.bramble.test.DbExpectations;
import org.briarproject.bramble.test.ImmediateExecutor;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Test;
import java.util.Collection;
import java.util.Random;
import java.util.concurrent.Executor;
import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
@@ -56,8 +58,9 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
private final ContactId contactId = contact.getId();
public ContactManagerImplTest() {
contactManager =
new ContactManagerImpl(db, keyManager, identityManager);
Executor dbExecutor = new ImmediateExecutor();
contactManager = new ContactManagerImpl(db, dbExecutor, keyManager,
identityManager);
}
@Test