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 e2732145a8420d6b3265c2388d65fb256a8c1279..0a04c7138b6566686c2d30f8c20157b99e7caa7a 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 @@ -96,6 +96,12 @@ public interface ContactManager { void setContactActive(Transaction txn, ContactId c, boolean active) throws DbException; + /** + * Sets an alias name for the contact or unsets it if alias is null. + */ + void setContactAlias(Transaction txn, ContactId c, @Nullable String alias) + throws DbException; + /** * Sets an alias name for the contact or unsets it if alias is null. */ 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 71a63c9b57f32dc3ba47c6e90b8c3da8e1b62b03..f7e03c5c4112f0ce2692ab052bcd50258793fae0 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 @@ -163,14 +163,20 @@ class ContactManagerImpl implements ContactManager { } @Override - public void setContactAlias(ContactId c, @Nullable String alias) - throws DbException { + public void setContactAlias(Transaction txn, ContactId c, + @Nullable String alias) throws DbException { if (alias != null) { int aliasLength = toUtf8(alias).length; if (aliasLength == 0 || aliasLength > MAX_AUTHOR_NAME_LENGTH) throw new IllegalArgumentException(); } - db.transaction(false, txn -> db.setContactAlias(txn, c, alias)); + db.setContactAlias(txn, c, alias); + } + + @Override + public void setContactAlias(ContactId c, @Nullable String alias) + throws DbException { + db.transaction(false, txn -> setContactAlias(txn, c, alias)); } @Override 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 1dea4f9df9850cf0b34faed098dfd2cab908abaa..24ecd71c59bc48b21d0f4f1f8bd30ac358ad176d 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 @@ -204,7 +204,8 @@ public class ContactManagerImplTest extends BrambleMockTestCase { @Test(expected = IllegalArgumentException.class) public void testSetContactAliasTooLong() throws Exception { - contactManager.setContactAlias(contactId, + Transaction txn = new Transaction(null, false); + contactManager.setContactAlias(txn, contactId, getRandomString(MAX_AUTHOR_NAME_LENGTH + 1)); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java index 1ecd449cd20be111411616bad7c7d0e12c3b4aea..5b1274fd77f42636a8871128391a96cb4302e02f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java @@ -10,7 +10,6 @@ import org.briarproject.briar.android.threaded.BaseThreadItemViewHolder; import org.briarproject.briar.android.threaded.ThreadItemAdapter.ThreadItemListener; import static org.briarproject.bramble.api.identity.AuthorInfo.Status.OURSELVES; -import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; @UiThread @NotNullByDefault @@ -37,8 +36,7 @@ class JoinMessageItemViewHolder if (item.isInitial()) { textView.setText(R.string.groups_member_created_you); } else { - String name = getContactDisplayName(item.getAuthor(), - item.getAuthorInfo().getAlias()); + String name = item.getAuthorName(); textView.setText(getContext() .getString(R.string.groups_member_joined, name)); } @@ -46,8 +44,7 @@ class JoinMessageItemViewHolder private void bind(JoinMessageItem item) { Context ctx = getContext(); - String name = getContactDisplayName(item.getAuthor(), - item.getAuthorInfo().getAlias()); + String name = item.getAuthorName(); if (item.isInitial()) { textView.setText( diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java index 79cc0ab186a57e210c76993c6a99c685be2cc918..4a9a516409ab29995483c29f09b0a18e9f7f8546 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java @@ -10,6 +10,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; import static org.briarproject.briar.android.threaded.ThreadItemAdapter.UNDEFINED; +import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; @NotThreadSafe @NotNullByDefault @@ -70,6 +71,13 @@ public abstract class ThreadItem implements MessageNode { return authorInfo; } + /** + * Returns the author's name, with an alias if one exists. + */ + public String getAuthorName() { + return getContactDisplayName(author, authorInfo.getAlias()); + } + @Override public void setLevel(int level) { this.level = level; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java index 12cbbb134474c2c16b1e02c1d7adf35828b9c968..27c24083c9dea7e496370285aef55c68a1976df0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java @@ -141,7 +141,7 @@ public class UiUtils { } public static Spanned getSpanned(@Nullable String s) { - // TODO move to HtmlCompat + // TODO move to HtmlCompat #1435 // https://commonsware.com/blog/2018/05/29/at-last-htmlcompat.html return Html.fromHtml(s); } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index defc19c534241f933defe27f7941c534dddc1db9..2879957aa782ea7e53bc023ee9110f9971cdf3f7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -421,19 +421,14 @@ class IntroductionManagerImpl extends ConversationClientImpl if (ss == null) throw new AssertionError(); MessageType type = meta.getMessageType(); if (type == REQUEST) { - messages.add( - parseInvitationRequest(txn, contactGroupId, m, - meta, status, ss.bdfSession, authorInfos)); + messages.add(parseInvitationRequest(txn, contactGroupId, m, + meta, status, ss.bdfSession, authorInfos)); } else if (type == ACCEPT) { - messages.add( - parseInvitationResponse(txn, contactGroupId, m, - meta, status, ss.bdfSession, authorInfos, - true)); + messages.add(parseInvitationResponse(txn, contactGroupId, m, + meta, status, ss.bdfSession, authorInfos, true)); } else if (type == DECLINE) { - messages.add( - parseInvitationResponse(txn, contactGroupId, m, - meta, status, ss.bdfSession, authorInfos, - false)); + messages.add(parseInvitationResponse(txn, contactGroupId, m, + meta, status, ss.bdfSession, authorInfos, false)); } } return messages; 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 e8519e21905c7d5a22bfbb924a8bf790ea9ff456..f0d37a2c36828230b278d53105eb03309b2db4a5 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 @@ -174,6 +174,10 @@ public class TestDataCreatorImpl implements TestDataCreator { ContactId contactId = contactManager .addContact(txn, author, localAuthorId, secretKey, timestamp, true, verified, true); + if (random.nextBoolean()) { + contactManager + .setContactAlias(txn, contactId, getRandomAuthorName()); + } transportPropertyManager.addRemoteProperties(txn, contactId, props); contact = db.getContact(txn, contactId); db.commitTransaction(txn); @@ -202,10 +206,13 @@ public class TestDataCreatorImpl implements TestDataCreator { return authorFactory.createLocalAuthor(name, publicKey, privateKey); } - private LocalAuthor getRandomAuthor() { + private String getRandomAuthorName() { int i = random.nextInt(AUTHOR_NAMES.length); - String authorName = AUTHOR_NAMES[i]; - return getAuthor(authorName); + return AUTHOR_NAMES[i]; + } + + private LocalAuthor getRandomAuthor() { + return getAuthor(getRandomAuthorName()); } private SecretKey getSecretKey() {